diff -Nrcpad gcc-12.4.0/INSTALL/binaries.html gcc-12.5.0-RC-20250704/INSTALL/binaries.html *** gcc-12.4.0/INSTALL/binaries.html Thu Jun 20 08:10:31 2024 --- gcc-12.5.0-RC-20250704/INSTALL/binaries.html Fri Jul 4 07:24:50 2025 *************** *** 1,8 **** - - - + + + Installing GCC: Binaries *************** You have freedom to copy and modify this *** 29,52 **** - - --- 29,58 ---- *************** ul.no-bullet {list-style: none} *** 79,86 **** ! !

We are often asked about pre-compiled versions of GCC. While we cannot provide these for all platforms, below you’ll find links to binaries for --- 85,92 ---- ! !

We are often asked about pre-compiled versions of GCC. While we cannot provide these for all platforms, below you’ll find links to binaries for diff -Nrcpad gcc-12.4.0/INSTALL/build.html gcc-12.5.0-RC-20250704/INSTALL/build.html *** gcc-12.4.0/INSTALL/build.html Thu Jun 20 08:10:31 2024 --- gcc-12.5.0-RC-20250704/INSTALL/build.html Fri Jul 4 07:24:49 2025 *************** *** 1,8 **** - - - + + + Installing GCC: Building *************** You have freedom to copy and modify this *** 29,52 **** - - --- 29,58 ---- *************** ul.no-bullet {list-style: none} *** 76,82 **** !

Now that GCC is configured, you are ready to build the compiler and runtime libraries. --- 82,88 ---- !

Now that GCC is configured, you are ready to build the compiler and runtime libraries. *************** documentation, you need version 4.7 or l *** 123,129 **** want Info documentation to be regenerated. Releases contain Info documentation pre-built for the unmodified documentation in the release.

!

Building a native compiler

For a native build, the default configuration is to perform --- 129,135 ---- want Info documentation to be regenerated. Releases contain Info documentation pre-built for the unmodified documentation in the release.

!

Building a native compiler

For a native build, the default configuration is to perform *************** following example. This will save rough *** 166,173 **** the bootstrap and the final installation. (Libraries will still contain debugging information.)

!
!
make BOOT_CFLAGS='-O' bootstrap
  

You can place non-default optimization flags into BOOT_CFLAGS; they --- 172,179 ---- the bootstrap and the final installation. (Libraries will still contain debugging information.)

!
!
make BOOT_CFLAGS='-O' bootstrap
  

You can place non-default optimization flags into BOOT_CFLAGS; they *************** configure option --with-build-conf *** 218,235 **** examples of supported build configurations are:

!
bootstrap-O1

Removes any -O-started option from BOOT_CFLAGS, and adds -O1 to it. ‘BUILD_CONFIG=bootstrap-O1’ is equivalent to ‘BOOT_CFLAGS='-g -O1'’.

!
bootstrap-O3
!
bootstrap-Og

Analogous to bootstrap-O1.

!
bootstrap-lto

Enables Link-Time Optimization for host tools during bootstrapping. ‘BUILD_CONFIG=bootstrap-lto’ is equivalent to adding -flto to ‘BOOT_CFLAGS’. This option assumes that the host --- 224,241 ---- examples of supported build configurations are:

!
bootstrap-O1

Removes any -O-started option from BOOT_CFLAGS, and adds -O1 to it. ‘BUILD_CONFIG=bootstrap-O1’ is equivalent to ‘BOOT_CFLAGS='-g -O1'’.

!
bootstrap-O3
!
bootstrap-Og

Analogous to bootstrap-O1.

!
bootstrap-lto

Enables Link-Time Optimization for host tools during bootstrapping. ‘BUILD_CONFIG=bootstrap-lto’ is equivalent to adding -flto to ‘BOOT_CFLAGS’. This option assumes that the host *************** supports the linker plugin (e.g. GNU ld *** 237,243 **** version 2.21 or later).

!
bootstrap-lto-noplugin

This option is similar to bootstrap-lto, but is intended for hosts that do not support the linker plugin. Without the linker plugin static libraries are not compiled with link-time optimizations. Since --- 243,249 ---- version 2.21 or later).

!
bootstrap-lto-noplugin

This option is similar to bootstrap-lto, but is intended for hosts that do not support the linker plugin. Without the linker plugin static libraries are not compiled with link-time optimizations. Since *************** the GCC middle end and back end are in < *** 245,258 **** that only the front end is actually LTO optimized.

!
bootstrap-lto-lean

This option is similar to bootstrap-lto, but is intended for faster build by only using LTO in the final bootstrap stage. With ‘make profiledbootstrap’ the LTO frontend is trained only on generator files.

!
bootstrap-debug

Verifies that the compiler generates the same executable code, whether or not it is asked to emit debug information. To this end, this option builds stage2 host programs without debug information, and uses --- 251,264 ---- that only the front end is actually LTO optimized.

!
bootstrap-lto-lean

This option is similar to bootstrap-lto, but is intended for faster build by only using LTO in the final bootstrap stage. With ‘make profiledbootstrap’ the LTO frontend is trained only on generator files.

!
bootstrap-debug

Verifies that the compiler generates the same executable code, whether or not it is asked to emit debug information. To this end, this option builds stage2 host programs without debug information, and uses *************** info into identical object files. In ad *** 265,271 **** coverage, this option makes default bootstraps faster and leaner.

!
bootstrap-debug-big

Rather than comparing stripped object files, as in bootstrap-debug, this option saves internal compiler dumps during stage2 and stage3 and compares them as well, which helps catch --- 271,277 ---- coverage, this option makes default bootstraps faster and leaner.

!
bootstrap-debug-big

Rather than comparing stripped object files, as in bootstrap-debug, this option saves internal compiler dumps during stage2 and stage3 and compares them as well, which helps catch *************** additional potential problems, but at a *** 273,279 **** space. It can be specified in addition to ‘bootstrap-debug’.

!
bootstrap-debug-lean

This option saves disk space compared with bootstrap-debug-big, but at the expense of some recompilation. Instead of saving the dumps of stage2 and stage3 until the final compare, it uses --- 279,285 ---- space. It can be specified in addition to ‘bootstrap-debug’.

!
bootstrap-debug-lean

This option saves disk space compared with bootstrap-debug-big, but at the expense of some recompilation. Instead of saving the dumps of stage2 and stage3 until the final compare, it uses *************** during stage3, repeating the compilation *** 282,288 **** stage2, whose dumps were not saved.

!
bootstrap-debug-lib

This option tests executable code invariance over debug information generation on target libraries, just like bootstrap-debug-lean tests it on host programs. It builds stage3 libraries with --- 288,294 ---- stage2, whose dumps were not saved.

!
bootstrap-debug-lib

This option tests executable code invariance over debug information generation on target libraries, just like bootstrap-debug-lean tests it on host programs. It builds stage3 libraries with *************** in stage2 are used in stage3 host progra *** 296,302 **** compile stage2 libraries with different options for comparison purposes.

!
bootstrap-debug-ckovw

Arranges for error messages to be issued if the compiler built on any stage is run without the option -fcompare-debug. This is useful to verify the full -fcompare-debug testing coverage. It --- 302,308 ---- compile stage2 libraries with different options for comparison purposes.

!
bootstrap-debug-ckovw

Arranges for error messages to be issued if the compiler built on any stage is run without the option -fcompare-debug. This is useful to verify the full -fcompare-debug testing coverage. It *************** must be used along with bootstrap- *** 304,310 **** bootstrap-debug-lib.

!
bootstrap-cet

This option enables Intel CET for host tools during bootstrapping. ‘BUILD_CONFIG=bootstrap-cet’ is equivalent to adding -fcf-protection to ‘BOOT_CFLAGS’. This option --- 310,316 ---- bootstrap-debug-lib.

!
bootstrap-cet

This option enables Intel CET for host tools during bootstrapping. ‘BUILD_CONFIG=bootstrap-cet’ is equivalent to adding -fcf-protection to ‘BOOT_CFLAGS’. This option *************** assumes that the host supports Intel CET *** 312,329 **** 2.30 or later).

!
bootstrap-time

Arranges for the run time of each program started by the GCC driver, built in any stage, to be logged to time.log, in the top level of the build tree.

!
bootstrap-asan

Compiles GCC itself using Address Sanitization in order to catch invalid memory accesses within the GCC code.

!
bootstrap-hwasan

Compiles GCC itself using HWAddress Sanitization in order to catch invalid memory accesses within the GCC code. This option is only available on AArch64 systems that are running Linux kernel version 5.4 or later. --- 318,335 ---- 2.30 or later).

!
bootstrap-time

Arranges for the run time of each program started by the GCC driver, built in any stage, to be logged to time.log, in the top level of the build tree.

!
bootstrap-asan

Compiles GCC itself using Address Sanitization in order to catch invalid memory accesses within the GCC code.

!
bootstrap-hwasan

Compiles GCC itself using HWAddress Sanitization in order to catch invalid memory accesses within the GCC code. This option is only available on AArch64 systems that are running Linux kernel version 5.4 or later. *************** systems that are running Linux kernel ve *** 331,338 ****

!
!

Building a cross compiler

When building a cross compiler, it is not generally possible to do a --- 337,343 ---- !

Building a cross compiler

When building a cross compiler, it is not generally possible to do a *************** configuring GCC. Put them in the direct *** 370,389 **** you should put in this directory:

!
as

This should be the cross-assembler.

!
ld

This should be the cross-linker.

!
ar

This should be the cross-archiver: a program which can manipulate archive files (linker libraries) in the target machine’s format.

!
ranlib

This should be a program to construct a symbol table in an archive file.

--- 375,394 ---- you should put in this directory:

!
as

This should be the cross-assembler.

!
ld

This should be the cross-linker.

!
ar

This should be the cross-archiver: a program which can manipulate archive files (linker libraries) in the target machine’s format.

!
ranlib

This should be a program to construct a symbol table in an archive file.

*************** alternatives for crt0.o, fo *** 410,417 **** compilation options. Check your target’s definition of STARTFILE_SPEC to find out what start files it uses.

!
!

Building in parallel

GNU Make 3.80 and above, which is necessary to build GCC, support --- 415,421 ---- compilation options. Check your target’s definition of STARTFILE_SPEC to find out what start files it uses.

!

Building in parallel

GNU Make 3.80 and above, which is necessary to build GCC, support *************** your machine will result in fewer and sh *** 422,441 **** improving overall throughput; this is especially true for slow drives and network filesystems.

!
!

Building the Ada compiler

GNAT prerequisites.

!
!

Building the D compiler

GDC prerequisites.

!
!

Building with profile feedback

It is possible to use profile feedback to optimize the compiler itself. This --- 426,442 ---- improving overall throughput; this is especially true for slow drives and network filesystems.

!

Building the Ada compiler

GNAT prerequisites.

!

Building the D compiler

GDC prerequisites.

!

Building with profile feedback

It is possible to use profile feedback to optimize the compiler itself. This *************** the code quality may be much worse. *** 475,481 **** !


--- 476,482 ---- !
diff -Nrcpad gcc-12.4.0/INSTALL/configure.html gcc-12.5.0-RC-20250704/INSTALL/configure.html *** gcc-12.4.0/INSTALL/configure.html Thu Jun 20 08:10:30 2024 --- gcc-12.5.0-RC-20250704/INSTALL/configure.html Fri Jul 4 07:24:49 2025 *************** *** 1,8 **** - - - + + + Installing GCC: Configuration *************** You have freedom to copy and modify this *** 29,52 **** - - --- 29,58 ---- *************** ul.no-bullet {list-style: none} *** 75,82 **** ! !

Like most GNU software, GCC must be configured before it can be built. This document describes the recommended configuration procedure --- 81,88 ---- ! !

Like most GNU software, GCC must be configured before it can be built. This document describes the recommended configuration procedure *************** scripts may fail. *** 122,141 ****

To configure GCC:

!
!
% mkdir objdir
  % cd objdir
  % srcdir/configure [options] [target]
  
!

Distributor options

If you will be distributing binary versions of GCC, with modifications to the source code, you should use the options described in this section to make clear that your version contains modifications.

!
--with-pkgversion=version

Specify a string that identifies your package. You may wish to include a build number or build date. This version string will be included in the output of gcc --version. This suffix does --- 128,148 ----

To configure GCC:

!
!
% mkdir objdir
  % cd objdir
  % srcdir/configure [options] [target]
  
! !

Distributor options

If you will be distributing binary versions of GCC, with modifications to the source code, you should use the options described in this section to make clear that your version contains modifications.

!
--with-pkgversion=version

Specify a string that identifies your package. You may wish to include a build number or build date. This version string will be included in the output of gcc --version. This suffix does *************** not replace the default version string, *** 144,150 ****

The default value is ‘GCC’.

!
--with-bugurl=url

Specify the URL that users should visit if they wish to report a bug. You are of course welcome to forward bugs reported to you to the FSF, if you determine that they are not bugs in your modifications. --- 151,157 ----

The default value is ‘GCC’.

!
--with-bugurl=url

Specify the URL that users should visit if they wish to report a bug. You are of course welcome to forward bugs reported to you to the FSF, if you determine that they are not bugs in your modifications. *************** if you determine that they are not bugs *** 152,165 ****

The default value refers to the FSF’s GCC bug tracker.

!
--with-documentation-root-url=url

Specify the URL root that contains GCC option documentation. The url should end with a / character.

The default value is https://gcc.gnu.org/onlinedocs/.

!
--with-changes-root-url=url

Specify the URL root that contains information about changes in GCC releases like gcc-version/changes.html. The url should end with a / character. --- 159,172 ----

The default value refers to the FSF’s GCC bug tracker.

!
--with-documentation-root-url=url

Specify the URL root that contains GCC option documentation. The url should end with a / character.

The default value is https://gcc.gnu.org/onlinedocs/.

!
--with-changes-root-url=url

Specify the URL root that contains information about changes in GCC releases like gcc-version/changes.html. The url should end with a / character. *************** The url should end with a

!

Host, Build and Target specification

Specify the host, build and target machine configurations. You do this when you run the configure script. --- 176,183 ----

! !

Host, Build and Target specification

Specify the host, build and target machine configurations. You do this when you run the configure script. *************** the same as the host machine. *** 193,200 ****

Here is an example:

!
!
./configure --host=x86_64-pc-linux-gnu
  

A configuration name may be canonical or it may be more or less --- 201,208 ----

Here is an example:

!
!
./configure --host=x86_64-pc-linux-gnu
  

A configuration name may be canonical or it may be more or less *************** rtems, solarisversion, symbia *** 231,237 **** vxworks, vxworksae, vxworksmils

!

Options specification

Use options to override several configure time options for GCC. A list of supported options follows; ‘configure --- 239,246 ---- vxworks, vxworksae, vxworksmils

! !

Options specification

Use options to override several configure time options for GCC. A list of supported options follows; ‘configure *************** work and should not normally be used. *** 243,249 **** corresponding --without option.

!
--prefix=dirname

Specify the toplevel installation directory. This is the recommended way to install the tools into a directory other than the default. The toplevel installation directory defaults to --- 252,258 ---- corresponding --without option.

!
--prefix=dirname

Specify the toplevel installation directory. This is the recommended way to install the tools into a directory other than the default. The toplevel installation directory defaults to *************** beneath a user’s home directory tr *** 258,320 ****

The following standard autoconf options are supported. Normally you should not need to use these options.

!
--exec-prefix=dirname

Specify the toplevel installation directory for architecture-dependent files. The default is prefix.

!
--bindir=dirname

Specify the installation directory for the executables called by users (such as gcc and g++). The default is exec-prefix/bin.

!
--libdir=dirname

Specify the installation directory for object code libraries and internal data files of GCC. The default is exec-prefix/lib.

!
--libexecdir=dirname

Specify the installation directory for internal executables of GCC. The default is exec-prefix/libexec.

!
--with-slibdir=dirname

Specify the installation directory for the shared libgcc library. The default is libdir.

!
--datarootdir=dirname

Specify the root of the directory tree for read-only architecture-independent data files referenced by GCC. The default is prefix/share.

!
--infodir=dirname

Specify the installation directory for documentation in info format. The default is datarootdir/info.

!
--datadir=dirname

Specify the installation directory for some architecture-independent data files referenced by GCC. The default is datarootdir.

!
--docdir=dirname

Specify the installation directory for documentation files (other than Info) for GCC. The default is datarootdir/doc.

!
--htmldir=dirname

Specify the installation directory for HTML documentation files. The default is docdir.

!
--pdfdir=dirname

Specify the installation directory for PDF documentation files. The default is docdir.

!
--mandir=dirname

Specify the installation directory for manual pages. The default is datarootdir/man. (Note that the manual pages are only extracts from the full GCC manuals, which are provided in Texinfo format. The manpages --- 267,329 ----

The following standard autoconf options are supported. Normally you should not need to use these options.

!
--exec-prefix=dirname

Specify the toplevel installation directory for architecture-dependent files. The default is prefix.

!
--bindir=dirname

Specify the installation directory for the executables called by users (such as gcc and g++). The default is exec-prefix/bin.

!
--libdir=dirname

Specify the installation directory for object code libraries and internal data files of GCC. The default is exec-prefix/lib.

!
--libexecdir=dirname

Specify the installation directory for internal executables of GCC. The default is exec-prefix/libexec.

!
--with-slibdir=dirname

Specify the installation directory for the shared libgcc library. The default is libdir.

!
--datarootdir=dirname

Specify the root of the directory tree for read-only architecture-independent data files referenced by GCC. The default is prefix/share.

!
--infodir=dirname

Specify the installation directory for documentation in info format. The default is datarootdir/info.

!
--datadir=dirname

Specify the installation directory for some architecture-independent data files referenced by GCC. The default is datarootdir.

!
--docdir=dirname

Specify the installation directory for documentation files (other than Info) for GCC. The default is datarootdir/doc.

!
--htmldir=dirname

Specify the installation directory for HTML documentation files. The default is docdir.

!
--pdfdir=dirname

Specify the installation directory for PDF documentation files. The default is docdir.

!
--mandir=dirname

Specify the installation directory for manual pages. The default is datarootdir/man. (Note that the manual pages are only extracts from the full GCC manuals, which are provided in Texinfo format. The manpages *************** are derived by an automatic conversion p *** 322,335 **** manual.)

!
--with-gxx-include-dir=dirname

Specify the installation directory for G++ header files. The default depends on other configuration options, and differs between cross and native configurations.

!
--with-specs=specs

Specify additional command line driver SPECS. This can be useful if you need to turn on a non-standard feature by default without modifying the compiler’s source code, for instance --- 331,344 ---- manual.)

!
--with-gxx-include-dir=dirname

Specify the installation directory for G++ header files. The default depends on other configuration options, and differs between cross and native configurations.

!
--with-specs=specs

Specify additional command line driver SPECS. This can be useful if you need to turn on a non-standard feature by default without modifying the compiler’s source code, for instance *************** See “Spec Files” in the main *** 340,346 ****

!
--program-prefix=prefix

GCC supports some transformations of the names of its programs when installing them. This option prepends prefix to the names of programs to install in bindir (see above). For example, specifying --- 349,355 ----

!
--program-prefix=prefix

GCC supports some transformations of the names of its programs when installing them. This option prepends prefix to the names of programs to install in bindir (see above). For example, specifying *************** programs to install in bindir *** 348,361 **** being installed as /usr/local/bin/foo-gcc.

!
--program-suffix=suffix

Appends suffix to the names of programs to install in bindir (see above). For example, specifying --program-suffix=-3.1 would result in ‘gcc’ being installed as /usr/local/bin/gcc-3.1.

!
--program-transform-name=pattern

Applies the ‘sed’ script pattern to be applied to the names of programs to install in bindir (see above). pattern has to consist of one or more basic ‘sed’ editing commands, separated by --- 357,370 ---- being installed as /usr/local/bin/foo-gcc.

!
--program-suffix=suffix

Appends suffix to the names of programs to install in bindir (see above). For example, specifying --program-suffix=-3.1 would result in ‘gcc’ being installed as /usr/local/bin/gcc-3.1.

!
--program-transform-name=pattern

Applies the ‘sed’ script pattern to be applied to the names of programs to install in bindir (see above). pattern has to consist of one or more basic ‘sed’ editing commands, separated by *************** resulting binary would be installed as *** 388,394 **** transformed yet, which will be fixed in some time.

!
--with-local-prefix=dirname

Specify the installation directory for local include files. The default is /usr/local. Specify this option if you want the compiler to --- 397,403 ---- transformed yet, which will be fixed in some time.

!
--with-local-prefix=dirname

Specify the installation directory for local include files. The default is /usr/local. Specify this option if you want the compiler to *************** install part of GCC. Perhaps they make *** 461,472 **** installing GCC creates the directory.

!
--with-gcc-major-version-only

Specifies that GCC should use only the major number rather than major.minor.patchlevel in filesystem paths.

!
--with-native-system-header-dir=dirname

Specifies that dirname is the directory that contains native system header files, rather than /usr/include. This option is most useful if you are creating a compiler that should be isolated from the system --- 470,481 ---- installing GCC creates the directory.

!
--with-gcc-major-version-only

Specifies that GCC should use only the major number rather than major.minor.patchlevel in filesystem paths.

!
--with-native-system-header-dir=dirname

Specifies that dirname is the directory that contains native system header files, rather than /usr/include. This option is most useful if you are creating a compiler that should be isolated from the system *************** as much as possible. It is most commonl *** 475,481 **** dirname inside the system root specified by that option.

!
--enable-shared[=package[,…]]

Build shared versions of libraries, if shared libraries are supported on the target platform. Unlike GCC 2.95.x and earlier, shared libraries are enabled by default on all platforms that support shared libraries. --- 484,490 ---- dirname inside the system root specified by that option.

!
--enable-shared[=package[,…]]

Build shared versions of libraries, if shared libraries are supported on the target platform. Unlike GCC 2.95.x and earlier, shared libraries are enabled by default on all platforms that support shared libraries. *************** argument, only --enable-shared

!
--enable-host-shared

Specify that the host code should be built into position-independent machine code (with -fPIC), allowing it to be used within shared libraries, but yielding a slightly slower compiler. --- 505,511 ---- code.

!
--enable-host-shared

Specify that the host code should be built into position-independent machine code (with -fPIC), allowing it to be used within shared libraries, but yielding a slightly slower compiler. *************** but yielding a slightly slower compiler. *** 507,513 **** libraries.

!
--with-gnu-as

Specify that the compiler should assume that the assembler it finds is the GNU assembler. However, this does not modify the rules to find an assembler and will result in confusion if the --- 516,522 ---- libraries.

!
--with-gnu-as

Specify that the compiler should assume that the assembler it finds is the GNU assembler. However, this does not modify the rules to find an assembler and will result in confusion if the *************** whether you use the GNU assembler. On a *** 530,536 ****

!
--with-as=pathname

Specify that the compiler should use the assembler pointed to by pathname, rather than the one found by the standard rules to find an assembler, which are: --- 539,545 ----

!
--with-as=pathname

Specify that the compiler should use the assembler pointed to by pathname, rather than the one found by the standard rules to find an assembler, which are: *************** assemblers installed and want to choose *** 563,591 **** above rules.

!
--with-gnu-ld

Same as --with-gnu-as but for the linker.

!
--with-ld=pathname

Same as --with-as but for the linker.

!
--with-dsymutil=pathname

Same as --with-as but for the debug linker (only used on Darwin platforms so far).

!
--with-tls=dialect

Specify the default TLS dialect, for systems were there is a choice. For ARM targets, possible values for dialect are gnu or gnu2, which select between the original GNU dialect and the GNU TLS descriptor-based dialect.

!
--enable-multiarch

Specify whether to enable or disable multiarch support. The default is to check for glibc start files in a multiarch location, and enable it if the files are found. The auto detection is enabled for native builds, --- 572,600 ---- above rules.

!
--with-gnu-ld

Same as --with-gnu-as but for the linker.

!
--with-ld=pathname

Same as --with-as but for the linker.

!
--with-dsymutil=pathname

Same as --with-as but for the debug linker (only used on Darwin platforms so far).

!
--with-tls=dialect

Specify the default TLS dialect, for systems were there is a choice. For ARM targets, possible values for dialect are gnu or gnu2, which select between the original GNU dialect and the GNU TLS descriptor-based dialect.

!
--enable-multiarch

Specify whether to enable or disable multiarch support. The default is to check for glibc start files in a multiarch location, and enable it if the files are found. The auto detection is enabled for native builds, *************** More documentation about multiarch can b *** 595,607 **** https://wiki.debian.org/Multiarch.

!
--enable-sjlj-exceptions

Force use of the setjmp/longjmp-based scheme for exceptions. ‘configure’ ordinarily picks the correct value based on the platform. Only use this option if you are sure you need a different setting.

!
--enable-vtable-verify

Specify whether to enable or disable the vtable verification feature. Enabling this feature causes libstdc++ to be built with its virtual calls in verifiable mode. This means that, when linked with libvtv, every --- 604,616 ---- https://wiki.debian.org/Multiarch.

!
--enable-sjlj-exceptions

Force use of the setjmp/longjmp-based scheme for exceptions. ‘configure’ ordinarily picks the correct value based on the platform. Only use this option if you are sure you need a different setting.

!
--enable-vtable-verify

Specify whether to enable or disable the vtable verification feature. Enabling this feature causes libstdc++ to be built with its virtual calls in verifiable mode. This means that, when linked with libvtv, every *************** still be built (see --disable-libv *** 614,625 **** --disable-vtable-verify is the default.

!
--disable-gcov

Specify that the run-time library used for coverage analysis and associated host tools should not be built.

!
--disable-multilib

Specify that multiple target libraries to support different target variants, calling conventions, etc. should not be built. The default is to build a --- 623,634 ---- --disable-vtable-verify is the default.

!
--disable-gcov

Specify that the run-time library used for coverage analysis and associated host tools should not be built.

!
--disable-multilib

Specify that multiple target libraries to support different target variants, calling conventions, etc. should not be built. The default is to build a *************** predefined set of them. *** 628,650 ****

Some targets provide finer-grained control over which multilibs are built (e.g., --disable-softfloat):

!
arm-*-*

fpu, 26bit, underscore, interwork, biendian, nofmult.

!
m68*-*-*

softfloat, m68881, m68000, m68020.

!
mips*-*-*

single-float, biendian, softfloat.

!
msp430-*-*

no-exceptions

!
powerpc*-*-*, rs6000*-*-*

aix64, pthread, softfloat, powercpu, powerpccpu, powerpcos, biendian, sysv, aix.

--- 637,659 ----

Some targets provide finer-grained control over which multilibs are built (e.g., --disable-softfloat):

!
arm-*-*

fpu, 26bit, underscore, interwork, biendian, nofmult.

!
m68*-*-*

softfloat, m68881, m68000, m68020.

!
mips*-*-*

single-float, biendian, softfloat.

!
msp430-*-*

no-exceptions

!
powerpc*-*-*, rs6000*-*-*

aix64, pthread, softfloat, powercpu, powerpccpu, powerpcos, biendian, sysv, aix.

*************** sysv, aix. *** 652,659 ****
!
--with-multilib-list=list
!
--without-multilib-list

Specify what multilibs to build. list is a comma separated list of values, possibly consisting of a single value. Currently only implemented for aarch64*-*-*, arm*-*-*, loongarch64-*-*, riscv*-*-*, sh*-*-* and --- 661,668 ----

!
--with-multilib-list=list
!
--without-multilib-list

Specify what multilibs to build. list is a comma separated list of values, possibly consisting of a single value. Currently only implemented for aarch64*-*-*, arm*-*-*, loongarch64-*-*, riscv*-*-*, sh*-*-* and *************** x86-64-*-linux*. The accepted values an *** 661,667 **** below.

!
aarch64*-*-*

list is a comma separated list of ilp32, and lp64 to enable ILP32 and LP64 run-time libraries, respectively. If list is empty, then there will be no multilibs and only the --- 670,676 ---- below.

!
aarch64*-*-*

list is a comma separated list of ilp32, and lp64 to enable ILP32 and LP64 run-time libraries, respectively. If list is empty, then there will be no multilibs and only the *************** default set of libraries is selected bas *** 671,677 **** --target.

!
arm*-*-*

list is a comma separated list of aprofile and rmprofile to build multilibs for A or R and M architecture profiles respectively. Note that, due to some limitation of the current --- 680,686 ---- --target.

!
arm*-*-*

list is a comma separated list of aprofile and rmprofile to build multilibs for A or R and M architecture profiles respectively. Note that, due to some limitation of the current *************** profile. The union of these options is *** 733,739 ****

!
loongarch*-*-*

list is a comma-separated list of the following ABI identifiers: lp64d[/base] lp64f[/base] lp64d[/base], where the /base suffix may be omitted, to enable their respective run-time --- 742,748 ----

!
loongarch*-*-*

list is a comma-separated list of the following ABI identifiers: lp64d[/base] lp64f[/base] lp64d[/base], where the /base suffix may be omitted, to enable their respective run-time *************** or if --with-multilib-list *** 742,748 **** as specified by --with-abi or implied by --target is selected.

!
riscv*-*-*

list is a single ABI name. The target architecture must be either rv32gc or rv64gc. This will build a single multilib for the specified architecture and ABI pair. If --with-multilib-list is not --- 751,757 ---- as specified by --with-abi or implied by --target is selected.

!
riscv*-*-*

list is a single ABI name. The target architecture must be either rv32gc or rv64gc. This will build a single multilib for the specified architecture and ABI pair. If --with-multilib-list is not *************** given, then a default set of multilibs i *** 750,756 **** --target. This is usually a large set of multilibs.

!
sh*-*-*

list is a comma separated list of CPU names. These must be of the form sh* or m* (in which case they match the compiler option for that processor). The list should not contain any endian options - --- 759,765 ---- --target. This is usually a large set of multilibs.

!
sh*-*-*

list is a comma separated list of CPU names. These must be of the form sh* or m* (in which case they match the compiler option for that processor). The list should not contain any endian options - *************** specialized subset. *** 771,789 ****

Example 1: to configure a compiler for SH4A only, but supporting both endians, with little endian being the default: !

!
--with-cpu=sh4a --with-endian=little,big --with-multilib-list=
  

Example 2: to configure a compiler for both SH4A and SH4AL-DSP, but with only little endian SH4AL: !

!
--with-cpu=sh4a --with-endian=little,big \
  --with-multilib-list=sh4al,!mb/m4al
  
!
x86-64-*-linux*

list is a comma separated list of m32, m64 and mx32 to enable 32-bit, 64-bit and x32 run-time libraries, respectively. If list is empty, then there will be no multilibs --- 780,798 ----

Example 1: to configure a compiler for SH4A only, but supporting both endians, with little endian being the default: !

!
--with-cpu=sh4a --with-endian=little,big --with-multilib-list=
  

Example 2: to configure a compiler for both SH4A and SH4AL-DSP, but with only little endian SH4AL: !

!
--with-cpu=sh4a --with-endian=little,big \
  --with-multilib-list=sh4al,!mb/m4al
  
!
x86-64-*-linux*

list is a comma separated list of m32, m64 and mx32 to enable 32-bit, 64-bit and x32 run-time libraries, respectively. If list is empty, then there will be no multilibs *************** and only the default run-time library wi *** 795,801 ****

!
--with-multilib-generator=config

Specify what multilibs to build. config is a semicolon separated list of values, possibly consisting of a single value. Currently only implemented for riscv*-*-elf*. The accepted values and meanings are given below. --- 804,810 ----

!
--with-multilib-generator=config

Specify what multilibs to build. config is a semicolon separated list of values, possibly consisting of a single value. Currently only implemented for riscv*-*-elf*. The accepted values and meanings are given below. *************** for riscv*-*-elf*. The accepted values *** 805,829 **** reuse rule with architecture string and reuse rule with sub-extension.

Example 1: Add multi-lib suppport for rv32i with ilp32. !

!
rv32i-ilp32--
  

Example 2: Add multi-lib suppport for rv32i with ilp32 and rv32imafd with ilp32. !

!
rv32i-ilp32--;rv32imafd-ilp32--
  

Example 3: Add multi-lib suppport for rv32i with ilp32; rv32im with ilp32 and rv32ic with ilp32 will reuse this multi-lib set. !

!
rv32i-ilp32-rv32im-c
  

Example 4: Add multi-lib suppport for rv64ima with lp64; rv64imaf with lp64, rv64imac with lp64 and rv64imafc with lp64 will reuse this multi-lib set. !

!
rv64ima-lp64--f,c,fc
  

--with-multilib-generator have an optional configuration argument --- 814,838 ---- reuse rule with architecture string and reuse rule with sub-extension.

Example 1: Add multi-lib suppport for rv32i with ilp32. !

!
rv32i-ilp32--
  

Example 2: Add multi-lib suppport for rv32i with ilp32 and rv32imafd with ilp32. !

!
rv32i-ilp32--;rv32imafd-ilp32--
  

Example 3: Add multi-lib suppport for rv32i with ilp32; rv32im with ilp32 and rv32ic with ilp32 will reuse this multi-lib set. !

!
rv32i-ilp32-rv32im-c
  

Example 4: Add multi-lib suppport for rv64ima with lp64; rv64imaf with lp64, rv64imac with lp64 and rv64imafc with lp64 will reuse this multi-lib set. !

!
rv64ima-lp64--f,c,fc
  

--with-multilib-generator have an optional configuration argument *************** currently we support medlow and medany. *** 833,871 ****

Example 5: Add multi-lib suppport for rv64ima with lp64; rv64ima with lp64 and medlow code model !

!
rv64ima-lp64--;--cmodel=medlow
  

Example 6: Add multi-lib suppport for rv64ima with lp64; rv64ima with lp64 and medlow code model; rv64ima with lp64 and medany code model !

!
rv64ima-lp64--;--cmodel=medlow,medany
  
!
--with-endian=endians

Specify what endians to use. Currently only implemented for sh*-*-*.

endians may be one of the following:

!
big

Use big endian exclusively.

!
little

Use little endian exclusively.

!
big,little

Use big endian by default. Provide a multilib for little endian.

!
little,big

Use little endian by default. Provide a multilib for big endian.

!
--enable-threads

Specify that the target supports threads. This affects the Objective-C compiler and runtime library, and exception handling for other languages like C++. --- 842,880 ----

Example 5: Add multi-lib suppport for rv64ima with lp64; rv64ima with lp64 and medlow code model !

!
rv64ima-lp64--;--cmodel=medlow
  

Example 6: Add multi-lib suppport for rv64ima with lp64; rv64ima with lp64 and medlow code model; rv64ima with lp64 and medany code model !

!
rv64ima-lp64--;--cmodel=medlow,medany
  
!
--with-endian=endians

Specify what endians to use. Currently only implemented for sh*-*-*.

endians may be one of the following:

!
big

Use big endian exclusively.

!
little

Use little endian exclusively.

!
big,little

Use big endian by default. Provide a multilib for little endian.

!
little,big

Use little endian by default. Provide a multilib for big endian.

!
--enable-threads

Specify that the target supports threads. This affects the Objective-C compiler and runtime library, and exception handling for other languages like C++. *************** available for the system. In this case, *** 878,932 **** alias for --enable-threads=single.

!
--disable-threads

Specify that threading support should be disabled for the system. This is an alias for --enable-threads=single.

!
--enable-threads=lib

Specify that lib is the thread support library. This affects the Objective-C compiler and runtime library, and exception handling for other languages like C++. The possibilities for lib are:

!
aix

AIX thread support.

!
dce

DCE thread support.

!
lynx

LynxOS thread support.

!
mipssde

MIPS SDE thread support.

!
no

This is an alias for ‘single’.

!
posix

Generic POSIX/Unix98 thread support.

!
rtems

RTEMS thread support.

!
single

Disable thread support, should work for all platforms.

!
tpf

TPF thread support.

!
vxworks

VxWorks thread support.

!
win32

Microsoft Win32 API thread support.

!
--enable-tls

Specify that the target supports TLS (Thread Local Storage). Usually configure can correctly determine if TLS is supported. In cases where it guesses incorrectly, TLS can be explicitly enabled or disabled with --- 887,941 ---- alias for --enable-threads=single.

!
--disable-threads

Specify that threading support should be disabled for the system. This is an alias for --enable-threads=single.

!
--enable-threads=lib

Specify that lib is the thread support library. This affects the Objective-C compiler and runtime library, and exception handling for other languages like C++. The possibilities for lib are:

!
aix

AIX thread support.

!
dce

DCE thread support.

!
lynx

LynxOS thread support.

!
mipssde

MIPS SDE thread support.

!
no

This is an alias for ‘single’.

!
posix

Generic POSIX/Unix98 thread support.

!
rtems

RTEMS thread support.

!
single

Disable thread support, should work for all platforms.

!
tpf

TPF thread support.

!
vxworks

VxWorks thread support.

!
win32

Microsoft Win32 API thread support.

!
--enable-tls

Specify that the target supports TLS (Thread Local Storage). Usually configure can correctly determine if TLS is supported. In cases where it guesses incorrectly, TLS can be explicitly enabled or disabled with *************** the assembler supports TLS but the C lib *** 935,954 **** assumptions made by the configure test are incorrect.

!
--disable-tls

Specify that the target does not support TLS. This is an alias for --enable-tls=no.

!
--disable-tm-clone-registry

Disable TM clone registry in libgcc. It is enabled in libgcc by default. This option helps to reduce code size for embedded targets which do not use transactional memory.

!
--with-cpu=cpu
!
--with-cpu-32=cpu
!
--with-cpu-64=cpu

Specify which cpu variant the compiler should generate code for by default. cpu will be used as the default value of the -mcpu= switch. This option is only supported on some targets, including ARC, ARM, i386, M68k, --- 944,963 ---- assumptions made by the configure test are incorrect.

!
--disable-tls

Specify that the target does not support TLS. This is an alias for --enable-tls=no.

!
--disable-tm-clone-registry

Disable TM clone registry in libgcc. It is enabled in libgcc by default. This option helps to reduce code size for embedded targets which do not use transactional memory.

!
--with-cpu=cpu
!
--with-cpu-32=cpu
!
--with-cpu-64=cpu

Specify which cpu variant the compiler should generate code for by default. cpu will be used as the default value of the -mcpu= switch. This option is only supported on some targets, including ARC, ARM, i386, M68k, *************** PowerPC, and SPARC. It is mandatory for *** 958,973 **** x86-64, PowerPC, and SPARC.

!
--with-schedule=cpu
!
--with-arch=cpu
!
--with-arch-32=cpu
!
--with-arch-64=cpu
!
--with-tune=cpu
!
--with-tune-32=cpu
!
--with-tune-64=cpu
!
--with-abi=abi
!
--with-fpu=type
!
--with-float=type

These configure options provide default values for the -mschedule=, -march=, -mtune=, -mabi=, and -mfpu= options and for -mhard-float or -msoft-float. As with --- 967,982 ---- x86-64, PowerPC, and SPARC.

!
--with-schedule=cpu
!
--with-arch=cpu
!
--with-arch-32=cpu
!
--with-arch-64=cpu
!
--with-tune=cpu
!
--with-tune-32=cpu
!
--with-tune-64=cpu
!
--with-abi=abi
!
--with-fpu=type
!
--with-float=type

These configure options provide default values for the -mschedule=, -march=, -mtune=, -mabi=, and -mfpu= options and for -mhard-float or -msoft-float. As with *************** options and for -mhard-float

!
--with-mode=mode

Specify if the compiler should default to -marm or -mthumb. This option is only supported on ARM targets.

!
--with-stack-offset=num

This option sets the default for the -mstack-offset=num option, and will thus generally also control the setting of this option for libraries. This option is only supported on Epiphany targets.

!
--with-fpmath=isa

This options sets -mfpmath=sse by default and specifies the default ISA for floating-point arithmetics. You can select either ‘sse’ which enables -msse2 or ‘avx’ which enables -mavx by default. This option is only supported on i386 and x86-64 targets.

!
--with-fp-32=mode

On MIPS targets, set the default value for the -mfp option when using the o32 ABI. The possibilities for mode are:

!
32

Use the o32 FP32 ABI extension, as with the -mfp32 command-line option.

!
xx

Use the o32 FPXX ABI extension, as with the -mfpxx command-line option.

!
64

Use the o32 FP64 ABI extension, as with the -mfp64 command-line option.

--- 984,1020 ---- of the arguments depend on the target.

!
--with-mode=mode

Specify if the compiler should default to -marm or -mthumb. This option is only supported on ARM targets.

!
--with-stack-offset=num

This option sets the default for the -mstack-offset=num option, and will thus generally also control the setting of this option for libraries. This option is only supported on Epiphany targets.

!
--with-fpmath=isa

This options sets -mfpmath=sse by default and specifies the default ISA for floating-point arithmetics. You can select either ‘sse’ which enables -msse2 or ‘avx’ which enables -mavx by default. This option is only supported on i386 and x86-64 targets.

!
--with-fp-32=mode

On MIPS targets, set the default value for the -mfp option when using the o32 ABI. The possibilities for mode are:

!
32

Use the o32 FP32 ABI extension, as with the -mfp32 command-line option.

!
xx

Use the o32 FPXX ABI extension, as with the -mfpxx command-line option.

!
64

Use the o32 FP64 ABI extension, as with the -mfp64 command-line option.

*************** option. *** 1014,1040 **** FP32 ABI extension.

!
--with-odd-spreg-32

On MIPS targets, set the -modd-spreg option by default when using the o32 ABI.

!
--without-odd-spreg-32

On MIPS targets, set the -mno-odd-spreg option by default when using the o32 ABI. This is normally used in conjunction with --with-fp-32=64 in order to target the o32 FP64A ABI extension.

!
--with-nan=encoding

On MIPS targets, set the default encoding convention to use for the special not-a-number (NaN) IEEE 754 floating-point data. The possibilities for encoding are:

!
legacy

Use the legacy encoding, as with the -mnan=legacy command-line option.

!
2008

Use the 754-2008 encoding, as with the -mnan=2008 command-line option.

--- 1023,1049 ---- FP32 ABI extension.

!
--with-odd-spreg-32

On MIPS targets, set the -modd-spreg option by default when using the o32 ABI.

!
--without-odd-spreg-32

On MIPS targets, set the -mno-odd-spreg option by default when using the o32 ABI. This is normally used in conjunction with --with-fp-32=64 in order to target the o32 FP64A ABI extension.

!
--with-nan=encoding

On MIPS targets, set the default encoding convention to use for the special not-a-number (NaN) IEEE 754 floating-point data. The possibilities for encoding are:

!
legacy

Use the legacy encoding, as with the -mnan=legacy command-line option.

!
2008

Use the 754-2008 encoding, as with the -mnan=2008 command-line option.

*************** the legacy encoding, as when neither of *** 1046,1095 **** -mnan=legacy command-line options has been used.

!
--with-divide=type

Specify how the compiler should generate code for checking for division by zero. This option is only supported on the MIPS target. The possibilities for type are:

!
traps

Division by zero checks use conditional traps (this is the default on systems that support conditional traps).

!
breaks

Division by zero checks use the break instruction.

!
--with-llsc

On MIPS targets, make -mllsc the default when no -mno-llsc option is passed. This is the default for Linux-based targets, as the kernel will emulate them if the ISA does not provide them.

!
--without-llsc

On MIPS targets, make -mno-llsc the default when no -mllsc option is passed.

!
--with-synci

On MIPS targets, make -msynci the default when no -mno-synci option is passed.

!
--without-synci

On MIPS targets, make -mno-synci the default when no -msynci option is passed. This is the default.

!
--with-lxc1-sxc1

On MIPS targets, make -mlxc1-sxc1 the default when no -mno-lxc1-sxc1 option is passed. This is the default.

!
--without-lxc1-sxc1

On MIPS targets, make -mno-lxc1-sxc1 the default when no -mlxc1-sxc1 option is passed. The indexed load/store instructions are not directly a problem but can lead to unexpected --- 1055,1104 ---- -mnan=legacy command-line options has been used.

!
--with-divide=type

Specify how the compiler should generate code for checking for division by zero. This option is only supported on the MIPS target. The possibilities for type are:

!
traps

Division by zero checks use conditional traps (this is the default on systems that support conditional traps).

!
breaks

Division by zero checks use the break instruction.

!
--with-llsc

On MIPS targets, make -mllsc the default when no -mno-llsc option is passed. This is the default for Linux-based targets, as the kernel will emulate them if the ISA does not provide them.

!
--without-llsc

On MIPS targets, make -mno-llsc the default when no -mllsc option is passed.

!
--with-synci

On MIPS targets, make -msynci the default when no -mno-synci option is passed.

!
--without-synci

On MIPS targets, make -mno-synci the default when no -msynci option is passed. This is the default.

!
--with-lxc1-sxc1

On MIPS targets, make -mlxc1-sxc1 the default when no -mno-lxc1-sxc1 option is passed. This is the default.

!
--without-lxc1-sxc1

On MIPS targets, make -mno-lxc1-sxc1 the default when no -mlxc1-sxc1 option is passed. The indexed load/store instructions are not directly a problem but can lead to unexpected *************** pure 32-bit environment and can hold tru *** 1105,1116 **** the address space is accurately set to be 32-bit for o32 and n32.

!
--with-madd4

On MIPS targets, make -mmadd4 the default when no -mno-madd4 option is passed. This is the default.

!
--without-madd4

On MIPS targets, make -mno-madd4 the default when no -mmadd4 option is passed. The madd4 instruction family can be problematic when targeting a combination of cores that --- 1114,1125 ---- the address space is accurately set to be 32-bit for o32 and n32.

!
--with-madd4

On MIPS targets, make -mmadd4 the default when no -mno-madd4 option is passed. This is the default.

!
--without-madd4

On MIPS targets, make -mno-madd4 the default when no -mmadd4 option is passed. The madd4 instruction family can be problematic when targeting a combination of cores that *************** only way to ensure compatible code is ge *** 1121,1158 **** a performance penalty.

!
--with-mips-plt

On MIPS targets, make use of copy relocations and PLTs. These features are extensions to the traditional SVR4-based MIPS ABIs and require support from GNU binutils and the runtime C library.

!
--with-stack-clash-protection-guard-size=size

On certain targets this option sets the default stack clash protection guard size as a power of two in bytes. On AArch64 size is required to be either 12 (4KB) or 16 (64KB).

!
--with-isa-spec=ISA-spec-string

On RISC-V targets specify the default version of the RISC-V Unprivileged (formerly User-Level) ISA specification to produce code conforming to. The possibilities for ISA-spec-string are:

!
2.2

Produce code conforming to version 2.2.

!
20190608

Produce code conforming to version 20190608.

!
20191213

Produce code conforming to version 20191213.

In the absence of this configuration option the default version is 20191213.

!
--enable-__cxa_atexit

Define if you want to use __cxa_atexit, rather than atexit, to register C++ destructors for local statics and global objects. This is essential for fully standards-compliant handling of --- 1130,1167 ---- a performance penalty.

!
--with-mips-plt

On MIPS targets, make use of copy relocations and PLTs. These features are extensions to the traditional SVR4-based MIPS ABIs and require support from GNU binutils and the runtime C library.

!
--with-stack-clash-protection-guard-size=size

On certain targets this option sets the default stack clash protection guard size as a power of two in bytes. On AArch64 size is required to be either 12 (4KB) or 16 (64KB).

!
--with-isa-spec=ISA-spec-string

On RISC-V targets specify the default version of the RISC-V Unprivileged (formerly User-Level) ISA specification to produce code conforming to. The possibilities for ISA-spec-string are:

!
2.2

Produce code conforming to version 2.2.

!
20190608

Produce code conforming to version 20190608.

!
20191213

Produce code conforming to version 20191213.

In the absence of this configuration option the default version is 20191213.

!
--enable-__cxa_atexit

Define if you want to use __cxa_atexit, rather than atexit, to register C++ destructors for local statics and global objects. This is essential for fully standards-compliant handling of *************** only available on systems with GNU libc. *** 1161,1188 **** -fuse-cxa-atexit to be passed by default.

!
--enable-gnu-indirect-function

Define if you want to enable the ifunc attribute. This option is currently only available on systems with GNU libc on certain targets.

!
--enable-target-optspace

Specify that target libraries should be optimized for code space instead of code speed. This is the default for the m32r platform.

!
--with-cpp-install-dir=dirname

Specify that the user visible cpp program should be installed in prefix/dirname/cpp, in addition to bindir.

!
--enable-comdat

Enable COMDAT group support. This is primarily used to override the automatically detected value.

!
--enable-initfini-array

Force the use of sections .init_array and .fini_array (instead of .init and .fini) for constructors and destructors. Option --disable-initfini-array has the --- 1170,1197 ---- -fuse-cxa-atexit to be passed by default.

!
--enable-gnu-indirect-function

Define if you want to enable the ifunc attribute. This option is currently only available on systems with GNU libc on certain targets.

!
--enable-target-optspace

Specify that target libraries should be optimized for code space instead of code speed. This is the default for the m32r platform.

!
--with-cpp-install-dir=dirname

Specify that the user visible cpp program should be installed in prefix/dirname/cpp, in addition to bindir.

!
--enable-comdat

Enable COMDAT group support. This is primarily used to override the automatically detected value.

!
--enable-initfini-array

Force the use of sections .init_array and .fini_array (instead of .init and .fini) for constructors and destructors. Option --disable-initfini-array has the *************** will try to guess whether the .ini *** 1191,1203 **** .fini_array sections are supported and, if they are, use them.

!
--enable-link-mutex

When building GCC, use a mutex to avoid linking the compilers for multiple languages at the same time, to avoid thrashing on build systems with limited free memory. The default is not to use such a mutex.

!
--enable-link-serialization

When building GCC, use make dependencies to serialize linking the compilers for multiple languages, to avoid thrashing on build systems with limited free memory. The default is not to add such --- 1200,1212 ---- .fini_array sections are supported and, if they are, use them.

!
--enable-link-mutex

When building GCC, use a mutex to avoid linking the compilers for multiple languages at the same time, to avoid thrashing on build systems with limited free memory. The default is not to use such a mutex.

!
--enable-link-serialization

When building GCC, use make dependencies to serialize linking the compilers for multiple languages, to avoid thrashing on build systems with limited free memory. The default is not to add such *************** compilers concurrently. If the argument *** 1206,1212 **** that number of concurrent link processes for the large binaries.

!
--enable-maintainer-mode

The build rules that regenerate the Autoconf and Automake output files as well as the GCC master message catalog gcc.pot are normally disabled. This is because it can only be rebuilt if the complete source --- 1215,1221 ---- that number of concurrent link processes for the large binaries.

!
--enable-maintainer-mode

The build rules that regenerate the Autoconf and Automake output files as well as the GCC master message catalog gcc.pot are normally disabled. This is because it can only be rebuilt if the complete source *************** this. Note that you need a recent versi *** 1216,1229 **** to do so.

!
--disable-bootstrap

For a native build, the default configuration is to perform a 3-stage bootstrap of the compiler when ‘make’ is invoked, testing that GCC can compile itself correctly. If you want to disable this process, you can configure with --disable-bootstrap.

!
--enable-bootstrap

In special cases, you may want to perform a 3-stage build even if the target and host triplets are different. This is possible when the host can run code compiled for --- 1225,1238 ---- to do so.

!
--disable-bootstrap

For a native build, the default configuration is to perform a 3-stage bootstrap of the compiler when ‘make’ is invoked, testing that GCC can compile itself correctly. If you want to disable this process, you can configure with --disable-bootstrap.

!
--enable-bootstrap

In special cases, you may want to perform a 3-stage build even if the target and host triplets are different. This is possible when the host can run code compiled for *************** Starting from GCC 4.2, to do this you ha *** 1232,1238 **** with --enable-bootstrap.

!
--enable-generated-files-in-srcdir

Neither the .c and .h files that are generated from Bison and flex nor the info manuals and man pages that are built from the .texi files are present in the repository development tree. When building GCC from that development tree, --- 1241,1247 ---- with --enable-bootstrap.

!
--enable-generated-files-in-srcdir

Neither the .c and .h files that are generated from Bison and flex nor the info manuals and man pages that are built from the .texi files are present in the repository development tree. When building GCC from that development tree, *************** is not a requirement that the users of s *** 1247,1253 **** or makeinfo.

!
--enable-version-specific-runtime-libs

Specify that runtime libraries should be installed in the compiler specific subdirectory (libdir/gcc) rather than the usual places. In --- 1256,1262 ---- or makeinfo.

!
--enable-version-specific-runtime-libs

Specify that runtime libraries should be installed in the compiler specific subdirectory (libdir/gcc) rather than the usual places. In *************** parallel. The default is ‘y *** 1259,1265 **** the remaining libraries.

!
--with-aix-soname=‘aix’, ‘svr4’ or ‘both

Traditional AIX shared library versioning (versioned Shared Object files as members of unversioned Archive Library files named ‘lib.a’) causes numerous headaches for package managers. However, --- 1268,1274 ---- the remaining libraries.

!
--with-aix-soname=‘aix’, ‘svr4’ or ‘both

Traditional AIX shared library versioning (versioned Shared Object files as members of unversioned Archive Library files named ‘lib.a’) causes numerous headaches for package managers. However, *************** where this is called the "SONAME&qu *** 1270,1283 **** linker does search for ‘libNAME.so’ before ‘libNAME.a’ library filenames with the ‘-lNAME’ linker flag.

!

For detailed information please refer to the AIX ld Command reference.

As long as shared library creation is enabled, upon:

!
--with-aix-soname=aix
!
--with-aix-soname=both

A (traditional AIX) Shared Archive Library file is created:

  • using the ‘libNAME.a’ filename scheme --- 1279,1292 ---- linker does search for ‘libNAME.so’ before ‘libNAME.a’ library filenames with the ‘-lNAME’ linker flag.

    !

    For detailed information please refer to the AIX ld Command reference.

    As long as shared library creation is enabled, upon:

    !
    --with-aix-soname=aix
    !
    --with-aix-soname=both

    A (traditional AIX) Shared Archive Library file is created:

    • using the ‘libNAME.a’ filename scheme *************** Command reference. *** 1294,1301 ****
!
--with-aix-soname=both
!
--with-aix-soname=svr4

A (second) Shared Archive Library file is created:

  • using the ‘libNAME.so.V’ filename scheme --- 1303,1310 ----
!
--with-aix-soname=both
!
--with-aix-soname=svr4

A (second) Shared Archive Library file is created:

  • using the ‘libNAME.so.V’ filename scheme *************** Command reference. *** 1333,1339 ****

    As long as static library creation is enabled, upon:

    !
    --with-aix-soname=svr4

    A Static Archive Library is created:

    • using the ‘libNAME.a’ filename scheme --- 1342,1348 ----

      As long as static library creation is enabled, upon:

      !
      --with-aix-soname=svr4

      A Static Archive Library is created:

      • using the ‘libNAME.a’ filename scheme *************** this option is still experimental and no *** 1365,1377 ****

        Default is the traditional behavior --with-aix-soname=‘aix.

      !
      --enable-languages=lang1,lang2,…

      Specify that only a particular subset of compilers and their runtime libraries should be built. For a list of valid values for langN you can issue the following command in the gcc directory of your GCC source tree:
      !

      !
      grep ^language= */config-lang.in
        

      Currently, you can use any of the following: all, default, ada, c, c++, d, --- 1374,1386 ----

      Default is the traditional behavior --with-aix-soname=‘aix.

      !
      --enable-languages=lang1,lang2,…

      Specify that only a particular subset of compilers and their runtime libraries should be built. For a list of valid values for langN you can issue the following command in the gcc directory of your GCC source tree:
      !

      !
      grep ^language= */config-lang.in
        

      Currently, you can use any of the following: all, default, ada, c, c++, d, *************** exception is jit language, *** 1387,1393 **** --enable-host-shared to be included with all.

      !
      --enable-stage1-languages=lang1,lang2,…

      Specify that a particular subset of compilers and their runtime libraries should be built with the system C compiler during stage 1 of the bootstrap process, rather than only in later stages with the --- 1396,1402 ---- --enable-host-shared to be included with all.

      !
      --enable-stage1-languages=lang1,lang2,…

      Specify that a particular subset of compilers and their runtime libraries should be built with the system C compiler during stage 1 of the bootstrap process, rather than only in later stages with the *************** stage1-bubble all-target, or run *** 1403,1454 **** for the specified languages using make stage1-start check-gcc.

      !
      --disable-libada

      Specify that the run-time libraries and tools used by GNAT should not be built. This can be useful for debugging, or for compatibility with previous Ada build procedures, when it was required to explicitly do a ‘make -C gcc gnatlib_and_tools’.

      !
      --disable-libsanitizer

      Specify that the run-time libraries for the various sanitizers should not be built.

      !
      --disable-libssp

      Specify that the run-time libraries for stack smashing protection should not be built or linked against. On many targets library support is provided by the C library instead.

      !
      --disable-libquadmath

      Specify that the GCC quad-precision math library should not be built. On some systems, the library is required to be linkable when building the Fortran front end, unless --disable-libquadmath-support is used.

      !
      --disable-libquadmath-support

      Specify that the Fortran front end and libgfortran do not add support for libquadmath on systems supporting it.

      !
      --disable-libgomp

      Specify that the GNU Offloading and Multi Processing Runtime Library should not be built.

      !
      --disable-libvtv

      Specify that the run-time libraries used by vtable verification should not be built.

      !
      --with-dwarf2

      Specify that the compiler should use DWARF 2 debugging information as the default.

      !
      --with-advance-toolchain=at

      On 64-bit PowerPC Linux systems, configure the compiler to use the header files, library files, and the dynamic linker from the Advance Toolchain release at instead of the default versions that are --- 1412,1463 ---- for the specified languages using make stage1-start check-gcc.

      !
      --disable-libada

      Specify that the run-time libraries and tools used by GNAT should not be built. This can be useful for debugging, or for compatibility with previous Ada build procedures, when it was required to explicitly do a ‘make -C gcc gnatlib_and_tools’.

      !
      --disable-libsanitizer

      Specify that the run-time libraries for the various sanitizers should not be built.

      !
      --disable-libssp

      Specify that the run-time libraries for stack smashing protection should not be built or linked against. On many targets library support is provided by the C library instead.

      !
      --disable-libquadmath

      Specify that the GCC quad-precision math library should not be built. On some systems, the library is required to be linkable when building the Fortran front end, unless --disable-libquadmath-support is used.

      !
      --disable-libquadmath-support

      Specify that the Fortran front end and libgfortran do not add support for libquadmath on systems supporting it.

      !
      --disable-libgomp

      Specify that the GNU Offloading and Multi Processing Runtime Library should not be built.

      !
      --disable-libvtv

      Specify that the run-time libraries used by vtable verification should not be built.

      !
      --with-dwarf2

      Specify that the compiler should use DWARF 2 debugging information as the default.

      !
      --with-advance-toolchain=at

      On 64-bit PowerPC Linux systems, configure the compiler to use the header files, library files, and the dynamic linker from the Advance Toolchain release at instead of the default versions that are *************** intended for the developers of GCC, and *** 1457,1464 **** use.

      !
      --enable-targets=all
      !
      --enable-targets=target_list

      Some GCC targets, e.g. powerpc64-linux, build bi-arch compilers. These are compilers that are able to generate either 64-bit or 32-bit code. Typically, the corresponding 32-bit target, e.g. --- 1466,1473 ---- use.

      !
      --enable-targets=all
      !
      --enable-targets=target_list

      Some GCC targets, e.g. powerpc64-linux, build bi-arch compilers. These are compilers that are able to generate either 64-bit or 32-bit code. Typically, the corresponding 32-bit target, e.g. *************** Currently, this option only affects spar *** 1472,1496 **** mips-linux and s390-linux.

      !
      --enable-default-pie

      Turn on -fPIE and -pie by default.

      !
      --enable-secureplt

      This option enables -msecure-plt by default for powerpc-linux. See “RS/6000 and PowerPC Options” in the main manual

      !
      --enable-default-ssp

      Turn on -fstack-protector-strong by default.

      !
      --enable-cld

      This option enables -mcld by default for 32-bit x86 targets. See “i386 and x86-64 Options” in the main manual

      !
      --enable-large-address-aware

      The --enable-large-address-aware option arranges for MinGW executables to be linked using the --large-address-aware option, that enables the use of more than 2GB of memory. If GCC is --- 1481,1505 ---- mips-linux and s390-linux.

      !
      --enable-default-pie

      Turn on -fPIE and -pie by default.

      !
      --enable-secureplt

      This option enables -msecure-plt by default for powerpc-linux. See “RS/6000 and PowerPC Options” in the main manual

      !
      --enable-default-ssp

      Turn on -fstack-protector-strong by default.

      !
      --enable-cld

      This option enables -mcld by default for 32-bit x86 targets. See “i386 and x86-64 Options” in the main manual

      !
      --enable-large-address-aware

      The --enable-large-address-aware option arranges for MinGW executables to be linked using the --large-address-aware option, that enables the use of more than 2GB of memory. If GCC is *************** configured with this option, its effects *** 1499,1512 **** compiler driver.

      !
      --enable-win32-registry
      !
      --enable-win32-registry=key
      !
      --disable-win32-registry

      The --enable-win32-registry option enables Microsoft Windows-hosted GCC to look up installations paths in the registry using the following key:

      !
      !
      HKEY_LOCAL_MACHINE\SOFTWARE\Free Software Foundation\key
        

      key defaults to GCC version number, and can be overridden by the --- 1508,1521 ---- compiler driver.

      !
      --enable-win32-registry
      !
      --enable-win32-registry=key
      !
      --disable-win32-registry

      The --enable-win32-registry option enables Microsoft Windows-hosted GCC to look up installations paths in the registry using the following key:

      !
      !
      HKEY_LOCAL_MACHINE\SOFTWARE\Free Software Foundation\key
        

      key defaults to GCC version number, and can be overridden by the *************** by default, and can be disabled by

      !
      --nfp

      Specify that the machine does not have a floating point unit. This option only applies to ‘m68k-sun-sunosn’. On any other system, --nfp has no effect.

      !
      --enable-werror
      !
      --disable-werror
      !
      --enable-werror=yes
      !
      --enable-werror=no

      When you specify this option, it controls whether certain files in the compiler are built with -Werror in bootstrap stage2 and later. If you don’t specify it, -Werror is turned on for the main --- 1527,1542 ---- option. This option has no effect on the other hosts.

      !
      --nfp

      Specify that the machine does not have a floating point unit. This option only applies to ‘m68k-sun-sunosn’. On any other system, --nfp has no effect.

      !
      --enable-werror
      !
      --disable-werror
      !
      --enable-werror=yes
      !
      --enable-werror=no

      When you specify this option, it controls whether certain files in the compiler are built with -Werror in bootstrap stage2 and later. If you don’t specify it, -Werror is turned on for the main *************** final releases. The specific files whic *** 1536,1544 **** controlled by the Makefiles.

      !
      --enable-checking
      !
      --disable-checking
      !
      --enable-checking=list

      This option controls performing internal consistency checks in the compiler. It does not change the generated code, but adds error checking of the requested complexity. This slows down the compiler and may only work --- 1545,1553 ---- controlled by the Makefiles.

      !
      --enable-checking
      !
      --disable-checking
      !
      --enable-checking=list

      This option controls performing internal consistency checks in the compiler. It does not change the generated code, but adds error checking of the requested complexity. This slows down the compiler and may only work *************** expensive and the ‘df *** 1576,1584 **** expensive.

      !
      --disable-stage1-checking
      !
      --enable-stage1-checking
      !
      --enable-stage1-checking=list

      This option affects only bootstrap build. If no --enable-checking option is specified the stage1 compiler is built with ‘yes’ checking enabled, otherwise the stage1 checking flags are the same as specified by --- 1585,1593 ---- expensive.

      !
      --disable-stage1-checking
      !
      --enable-stage1-checking
      !
      --enable-stage1-checking=list

      This option affects only bootstrap build. If no --enable-checking option is specified the stage1 compiler is built with ‘yes’ checking enabled, otherwise the stage1 checking flags are the same as specified by *************** with checking for stage1 enabled, you ca *** 1590,1597 **** to disable checking for the stage1 compiler.

      !
      --enable-coverage
      !
      --enable-coverage=level

      With this option, the compiler is built to collect self coverage information, every time it is run. This is for internal development purposes, and only works when the compiler is being built with gcc. The --- 1599,1606 ---- to disable checking for the stage1 compiler.

      !
      --enable-coverage
      !
      --enable-coverage=level

      With this option, the compiler is built to collect self coverage information, every time it is run. This is for internal development purposes, and only works when the compiler is being built with gcc. The *************** enable optimization. When coverage is e *** 1602,1632 **** without optimization.

      !
      --enable-gather-detailed-mem-stats

      When this option is specified more detailed information on memory allocation is gathered. This information is printed when using -fmem-report.

      !
      --enable-valgrind-annotations

      Mark selected memory related operations in the compiler when run under valgrind to suppress false positives.

      !
      --enable-nls
      !
      --disable-nls

      The --enable-nls option enables Native Language Support (NLS), which lets GCC output diagnostics in languages other than American English. Native Language Support is enabled by default if not doing a canadian cross build. The --disable-nls option disables NLS.

      !
      --with-included-gettext

      If NLS is enabled, the --with-included-gettext option causes the build procedure to prefer its copy of GNU gettext.

      !
      --with-catgets

      If NLS is enabled, and if the host lacks gettext but has the inferior catgets interface, the GCC build procedure normally ignores catgets and instead uses GCC’s copy of the GNU --- 1611,1641 ---- without optimization.

      !
      --enable-gather-detailed-mem-stats

      When this option is specified more detailed information on memory allocation is gathered. This information is printed when using -fmem-report.

      !
      --enable-valgrind-annotations

      Mark selected memory related operations in the compiler when run under valgrind to suppress false positives.

      !
      --enable-nls
      !
      --disable-nls

      The --enable-nls option enables Native Language Support (NLS), which lets GCC output diagnostics in languages other than American English. Native Language Support is enabled by default if not doing a canadian cross build. The --disable-nls option disables NLS.

      !
      --with-included-gettext

      If NLS is enabled, the --with-included-gettext option causes the build procedure to prefer its copy of GNU gettext.

      !
      --with-catgets

      If NLS is enabled, and if the host lacks gettext but has the inferior catgets interface, the GCC build procedure normally ignores catgets and instead uses GCC’s copy of the GNU *************** ignores catgets and instead *** 1634,1645 **** build procedure to use the host’s catgets in this situation.

      !
      --with-libiconv-prefix=dir

      Search for libiconv header files in dir/include and libiconv library files in dir/lib.

      !
      --enable-obsolete

      Enable configuration for an obsoleted system. If you attempt to configure GCC for a system (build, host, or target) which has been obsoleted, and you do not specify this flag, configure will halt with an --- 1643,1654 ---- build procedure to use the host’s catgets in this situation.

      !
      --with-libiconv-prefix=dir

      Search for libiconv header files in dir/include and libiconv library files in dir/lib.

      !
      --enable-obsolete

      Enable configuration for an obsoleted system. If you attempt to configure GCC for a system (build, host, or target) which has been obsoleted, and you do not specify this flag, configure will halt with an *************** is removed entirely in the next major re *** 1650,1661 **** forward to maintain the port.

      !
      --enable-decimal-float
      !
      --enable-decimal-float=yes
      !
      --enable-decimal-float=no
      !
      --enable-decimal-float=bid
      !
      --enable-decimal-float=dpd
      !
      --disable-decimal-float

      Enable (or disable) support for the C decimal floating point extension that is in the IEEE 754-2008 standard. This is enabled by default only on PowerPC, i386, and x86_64 GNU/Linux systems. Other systems may also --- 1659,1670 ---- forward to maintain the port.

      !
      --enable-decimal-float
      !
      --enable-decimal-float=yes
      !
      --enable-decimal-float=no
      !
      --enable-decimal-float=bid
      !
      --enable-decimal-float=dpd
      !
      --disable-decimal-float

      Enable (or disable) support for the C decimal floating point extension that is in the IEEE 754-2008 standard. This is enabled by default only on PowerPC, i386, and x86_64 GNU/Linux systems. Other systems may also *************** format is default on i386 and x86_64 sys *** 1666,1680 **** (densely packed decimal) format is default on PowerPC systems.

      !
      --enable-fixed-point
      !
      --disable-fixed-point

      Enable (or disable) support for C fixed-point arithmetic. This option is enabled by default for some targets (such as MIPS) which have hardware-support for fixed-point operations. On other targets, you may enable this option manually.

      !
      --with-long-double-128

      Specify if long double type should be 128-bit by default on selected GNU/Linux architectures. If using --without-long-double-128, long double will be by default 64-bit, the same as double type. --- 1675,1689 ---- (densely packed decimal) format is default on PowerPC systems.

      !
      --enable-fixed-point
      !
      --disable-fixed-point

      Enable (or disable) support for C fixed-point arithmetic. This option is enabled by default for some targets (such as MIPS) which have hardware-support for fixed-point operations. On other targets, you may enable this option manually.

      !
      --with-long-double-128

      Specify if long double type should be 128-bit by default on selected GNU/Linux architectures. If using --without-long-double-128, long double will be by default 64-bit, the same as double type. *************** When neither of these configure options *** 1683,1690 **** 64-bit long double otherwise.

      !
      --with-long-double-format=ibm
      !
      --with-long-double-format=ieee

      Specify whether long double uses the IBM extended double format or the IEEE 128-bit floating point format on PowerPC Linux systems. This configuration switch will only work on little endian PowerPC --- 1692,1699 ---- 64-bit long double otherwise.

      !
      --with-long-double-format=ibm
      !
      --with-long-double-format=ieee

      Specify whether long double uses the IBM extended double format or the IEEE 128-bit floating point format on PowerPC Linux systems. This configuration switch will only work on little endian PowerPC *************** point, it is not recommended to use *** 1702,1720 **** --with-long-double-format=ieee.

      !
      --enable-fdpic

      On SH Linux systems, generate ELF FDPIC code.

      !
      --with-gmp=pathname
      !
      --with-gmp-include=pathname
      !
      --with-gmp-lib=pathname
      !
      --with-mpfr=pathname
      !
      --with-mpfr-include=pathname
      !
      --with-mpfr-lib=pathname
      !
      --with-mpc=pathname
      !
      --with-mpc-include=pathname
      !
      --with-mpc-lib=pathname

      If you want to build GCC but do not have the GMP library, the MPFR library and/or the MPC library installed in a standard location and do not have their sources present in the GCC source tree then you --- 1711,1729 ---- --with-long-double-format=ieee.

      !
      --enable-fdpic

      On SH Linux systems, generate ELF FDPIC code.

      !
      --with-gmp=pathname
      !
      --with-gmp-include=pathname
      !
      --with-gmp-lib=pathname
      !
      --with-mpfr=pathname
      !
      --with-mpfr-include=pathname
      !
      --with-mpfr-lib=pathname
      !
      --with-mpc=pathname
      !
      --with-mpc-include=pathname
      !
      --with-mpc-lib=pathname

      If you want to build GCC but do not have the GMP library, the MPFR library and/or the MPC library installed in a standard location and do not have their sources present in the GCC source tree then you *************** variable (LD_LIBRARY_PATH o *** 1741,1749 **** a cross compiler, they will not be used to configure target libraries.

      !
      --with-isl=pathname
      !
      --with-isl-include=pathname
      !
      --with-isl-lib=pathname

      If you do not have the isl library installed in a standard location and you want to build GCC, you can explicitly specify the directory where it is installed (‘--with-isl=islinstalldir’). The --- 1750,1758 ---- a cross compiler, they will not be used to configure target libraries.

      !
      --with-isl=pathname
      !
      --with-isl-include=pathname
      !
      --with-isl-lib=pathname

      If you do not have the isl library installed in a standard location and you want to build GCC, you can explicitly specify the directory where it is installed (‘--with-isl=islinstalldir’). The *************** include and lib options directly. *** 1757,1763 **** a cross compiler, they will not be used to configure target libraries.

      !
      --with-stage1-ldflags=flags

      This option may be used to set linker flags to be used when linking stage 1 of GCC. These are also used when linking GCC if configured with --disable-bootstrap. If --with-stage1-libs is not set to a --- 1766,1772 ---- a cross compiler, they will not be used to configure target libraries.

      !
      --with-stage1-ldflags=flags

      This option may be used to set linker flags to be used when linking stage 1 of GCC. These are also used when linking GCC if configured with --disable-bootstrap. If --with-stage1-libs is not set to a *************** value, then the default is ‘ *** 1765,1795 **** supported.

      !
      --with-stage1-libs=libs

      This option may be used to set libraries to be used when linking stage 1 of GCC. These are also used when linking GCC if configured with --disable-bootstrap.

      !
      --with-boot-ldflags=flags

      This option may be used to set linker flags to be used when linking stage 2 and later when bootstrapping GCC. If –with-boot-libs is not is set to a value, then the default is ‘-static-libstdc++ -static-libgcc’.

      !
      --with-boot-libs=libs

      This option may be used to set libraries to be used when linking stage 2 and later when bootstrapping GCC.

      !
      --with-debug-prefix-map=map

      Convert source directory names using -fdebug-prefix-map when building runtime libraries. ‘map’ is a space-separated list of maps of the form ‘old=new’.

      !
      --enable-linker-build-id

      Tells GCC to pass --build-id option to the linker for all final links (links performed without the -r or --relocatable option), if the linker supports it. If you specify --- 1774,1804 ---- supported.

      !
      --with-stage1-libs=libs

      This option may be used to set libraries to be used when linking stage 1 of GCC. These are also used when linking GCC if configured with --disable-bootstrap.

      !
      --with-boot-ldflags=flags

      This option may be used to set linker flags to be used when linking stage 2 and later when bootstrapping GCC. If –with-boot-libs is not is set to a value, then the default is ‘-static-libstdc++ -static-libgcc’.

      !
      --with-boot-libs=libs

      This option may be used to set libraries to be used when linking stage 2 and later when bootstrapping GCC.

      !
      --with-debug-prefix-map=map

      Convert source directory names using -fdebug-prefix-map when building runtime libraries. ‘map’ is a space-separated list of maps of the form ‘old=new’.

      !
      --enable-linker-build-id

      Tells GCC to pass --build-id option to the linker for all final links (links performed without the -r or --relocatable option), if the linker supports it. If you specify *************** support --build-id option, *** 1798,1818 **** --enable-linker-build-id option is ignored. The default is off.

      !
      --with-linker-hash-style=choice

      Tells GCC to pass --hash-style=choice option to the linker for all final links. choice can be one of ‘sysv’, ‘gnu’, and ‘both’ where ‘sysv’ is the default.

      !
      --enable-gnu-unique-object
      !
      --disable-gnu-unique-object

      Tells GCC to use the gnu_unique_object relocation for C++ template static data members and inline function local statics. Enabled by default for a toolchain with an assembler that accepts it and GLIBC 2.11 or above, otherwise disabled.

      !
      --with-diagnostics-color=choice

      Tells GCC to use choice as the default for -fdiagnostics-color= option (if not used explicitly on the command line). choice can be one of ‘never’, ‘auto’, ‘always’, and ‘auto-if-env’ --- 1807,1827 ---- --enable-linker-build-id option is ignored. The default is off.

      !
      --with-linker-hash-style=choice

      Tells GCC to pass --hash-style=choice option to the linker for all final links. choice can be one of ‘sysv’, ‘gnu’, and ‘both’ where ‘sysv’ is the default.

      !
      --enable-gnu-unique-object
      !
      --disable-gnu-unique-object

      Tells GCC to use the gnu_unique_object relocation for C++ template static data members and inline function local statics. Enabled by default for a toolchain with an assembler that accepts it and GLIBC 2.11 or above, otherwise disabled.

      !
      --with-diagnostics-color=choice

      Tells GCC to use choice as the default for -fdiagnostics-color= option (if not used explicitly on the command line). choice can be one of ‘never’, ‘auto’, ‘always’, and ‘auto-if-env’ *************** is present and non-empty in the environm *** 1822,1828 **** -fdiagnostics-color=never otherwise.

      !
      --with-diagnostics-urls=choice

      Tells GCC to use choice as the default for -fdiagnostics-urls= option (if not used explicitly on the command line). choice can be one of ‘never’, ‘auto’, ‘always’, and ‘auto-if-env’ --- 1831,1837 ---- -fdiagnostics-color=never otherwise.

      !
      --with-diagnostics-urls=choice

      Tells GCC to use choice as the default for -fdiagnostics-urls= option (if not used explicitly on the command line). choice can be one of ‘never’, ‘auto’, ‘always’, and ‘auto-if-env’ *************** or TERM_URLS is present and *** 1832,1845 **** compiler, and -fdiagnostics-urls=never otherwise.

      !
      --enable-lto
      !
      --disable-lto

      Enable support for link-time optimization (LTO). This is enabled by default, and may be disabled using --disable-lto.

      !
      --enable-linker-plugin-configure-flags=FLAGS
      !
      --enable-linker-plugin-flags=FLAGS

      By default, linker plugins (such as the LTO plugin) are built for the host system architecture. For the case that the linker has a different (but run-time compatible) architecture, these flags can be --- 1841,1854 ---- compiler, and -fdiagnostics-urls=never otherwise.

      !
      --enable-lto
      !
      --disable-lto

      Enable support for link-time optimization (LTO). This is enabled by default, and may be disabled using --disable-lto.

      !
      --enable-linker-plugin-configure-flags=FLAGS
      !
      --enable-linker-plugin-flags=FLAGS

      By default, linker plugins (such as the LTO plugin) are built for the host system architecture. For the case that the linker has a different (but run-time compatible) architecture, these flags can be *************** GNU/Linux (‘i686-pc-linux-gn *** 1850,1864 **** executable on the former system), you can configure GCC as follows for getting compatible linker plugins:

      !
      !
      % srcdir/configure \
            --host=x86_64-pc-linux-gnu \
            --enable-linker-plugin-configure-flags=--host=i686-pc-linux-gnu \
            --enable-linker-plugin-flags='CC=gcc\ -m32\ -Wl,-rpath,[...]/i686-pc-linux-gnu/lib'
        
      !
      --with-plugin-ld=pathname

      Enable an alternate linker to be used at link-time optimization (LTO) link time when -fuse-linker-plugin is enabled. This linker should have plugin support such as gold starting with --- 1859,1873 ---- executable on the former system), you can configure GCC as follows for getting compatible linker plugins:

      !
      !
      % srcdir/configure \
            --host=x86_64-pc-linux-gnu \
            --enable-linker-plugin-configure-flags=--host=i686-pc-linux-gnu \
            --enable-linker-plugin-flags='CC=gcc\ -m32\ -Wl,-rpath,[...]/i686-pc-linux-gnu/lib'
        
      !
      --with-plugin-ld=pathname

      Enable an alternate linker to be used at link-time optimization (LTO) link time when -fuse-linker-plugin is enabled. This linker should have plugin support such as gold starting with *************** version 2.20 or GNU ld starting with ver *** 1866,1873 **** See -fuse-linker-plugin for details.

      !
      --enable-canonical-system-headers
      !
      --disable-canonical-system-headers

      Enable system header path canonicalization for libcpp. This can produce shorter header file paths in diagnostics and dependency output files, but these changed header paths may conflict with some compilation --- 1875,1882 ---- See -fuse-linker-plugin for details.

      !
      --enable-canonical-system-headers
      !
      --disable-canonical-system-headers

      Enable system header path canonicalization for libcpp. This can produce shorter header file paths in diagnostics and dependency output files, but these changed header paths may conflict with some compilation *************** environments. Enabled by default, and m *** 1875,1881 **** --disable-canonical-system-headers.

      !
      --with-glibc-version=major.minor

      Tell GCC that when the GNU C Library (glibc) is used on the target it will be version major.minor or later. Normally this can be detected from the C library’s header files, but this option may be --- 1884,1890 ---- --disable-canonical-system-headers.

      !
      --with-glibc-version=major.minor

      Tell GCC that when the GNU C Library (glibc) is used on the target it will be version major.minor or later. Normally this can be detected from the C library’s header files, but this option may be *************** However, such configurations may not wor *** 1888,1910 **** configuration in GCC is on a per-multilib basis.

      !
      --enable-as-accelerator-for=target

      Build as offload target compiler. Specify offload host triple by target.

      !
      --enable-offload-targets=target1[=path1],…,targetN[=pathN]

      Enable offloading to targets target1, …, targetN. Offload compilers are expected to be already installed. Default search path for them is exec-prefix, but it can be changed by specifying paths path1, …, pathN.

      !
      !
      % srcdir/configure \
            --enable-offload-targets=x86_64-intelmicemul-linux-gnu=/path/to/x86_64/compiler,nvptx-none
        
      !
      --enable-offload-defaulted

      Tell GCC that configured but not installed offload compilers and libgomp plugins are silently ignored. Useful for distribution compilers where --- 1897,1919 ---- configuration in GCC is on a per-multilib basis.

      !
      --enable-as-accelerator-for=target

      Build as offload target compiler. Specify offload host triple by target.

      !
      --enable-offload-targets=target1[=path1],…,targetN[=pathN]

      Enable offloading to targets target1, …, targetN. Offload compilers are expected to be already installed. Default search path for them is exec-prefix, but it can be changed by specifying paths path1, …, pathN.

      !
      !
      % srcdir/configure \
            --enable-offload-targets=x86_64-intelmicemul-linux-gnu=/path/to/x86_64/compiler,nvptx-none
        
      !
      --enable-offload-defaulted

      Tell GCC that configured but not installed offload compilers and libgomp plugins are silently ignored. Useful for distribution compilers where *************** of those optional packages should determ *** 1913,1921 **** target set rather than the GCC configure-time selection.

      !
      --with-hsa-runtime=pathname
      !
      --with-hsa-runtime-include=pathname
      !
      --with-hsa-runtime-lib=pathname

      If you configure GCC with offloading which uses an HSA run-time such as AMDGCN but do not have the HSA run-time library installed in a standard --- 1922,1930 ---- target set rather than the GCC configure-time selection.

      !
      --with-hsa-runtime=pathname
      !
      --with-hsa-runtime-include=pathname
      !
      --with-hsa-runtime-lib=pathname

      If you configure GCC with offloading which uses an HSA run-time such as AMDGCN but do not have the HSA run-time library installed in a standard *************** is a shorthand for *** 1926,1933 **** --with-hsa-runtime-include=hsainstalldir/include.

      !
      --enable-cet
      !
      --disable-cet

      Enable building target run-time libraries with control-flow instrumentation, see -fcf-protection option. When --enable-cet is specified target libraries are configured --- 1935,1942 ---- --with-hsa-runtime-include=hsainstalldir/include.

      !
      --enable-cet
      !
      --disable-cet

      Enable building target run-time libraries with control-flow instrumentation, see -fcf-protection option. When --enable-cet is specified target libraries are configured *************** otherwise. In this case, the target lib *** 1940,1946 **** additional -fcf-protection option.

      !
      --with-riscv-attribute=‘yes’, ‘no’ or ‘default

      Generate RISC-V attribute by default, in order to record extra build information in object.

      --- 1949,1955 ---- additional -fcf-protection option.

      !
      --with-riscv-attribute=‘yes’, ‘no’ or ‘default

      Generate RISC-V attribute by default, in order to record extra build information in object.

      *************** information in object. *** 1948,1955 **** target if target binutils supported.

      !
      --enable-s390-excess-float-precision
      !
      --disable-s390-excess-float-precision

      On s390(x) targets, enable treatment of float expressions with double precision when in standards-compliant mode (e.g., when --std=c99 or -fexcess-precision=standard are given). --- 1957,1964 ---- target if target binutils supported.

      !
      --enable-s390-excess-float-precision
      !
      --disable-s390-excess-float-precision

      On s390(x) targets, enable treatment of float expressions with double precision when in standards-compliant mode (e.g., when --std=c99 or -fexcess-precision=standard are given). *************** GCC follows and enables the option. For *** 1960,1968 **** disabled.

      !
      --with-zstd=pathname
      !
      --with-zstd-include=pathname
      !
      --with-zstd-lib=pathname

      If you do not have the zstd library installed in a standard location and you want to build GCC, you can explicitly specify the directory where it is installed (‘--with-zstd=zstdinstalldir’). --- 1969,1977 ---- disabled.

      !
      --with-zstd=pathname
      !
      --with-zstd-include=pathname
      !
      --with-zstd-lib=pathname

      If you do not have the zstd library installed in a standard location and you want to build GCC, you can explicitly specify the directory where it is installed (‘--with-zstd=zstdinstalldir’). *************** a cross compiler, they will not be used *** 1977,1993 ****

      !

      Cross-Compiler-Specific Options

      The following options only apply to building cross compilers.

      !
      --with-toolexeclibdir=dir

      Specify the installation directory for libraries built with a cross compiler. The default is ${gcc_tooldir}/lib.

      !
      --with-sysroot
      !
      --with-sysroot=dir

      Tells GCC to consider dir as the root of a tree that contains (a subset of) the root filesystem of the target operating system. Target system headers, libraries and run-time object files will be --- 1986,2003 ----

      ! !

      Cross-Compiler-Specific Options

      The following options only apply to building cross compilers.

      !
      --with-toolexeclibdir=dir

      Specify the installation directory for libraries built with a cross compiler. The default is ${gcc_tooldir}/lib.

      !
      --with-sysroot
      !
      --with-sysroot=dir

      Tells GCC to consider dir as the root of a tree that contains (a subset of) the root filesystem of the target operating system. Target system headers, libraries and run-time object files will be *************** option then the compiler will search tha *** 2011,2018 **** native system headers rather than the default /usr/include.

      !
      --with-build-sysroot
      !
      --with-build-sysroot=dir

      Tells GCC to consider dir as the system root (see --with-sysroot) while building target libraries, instead of the directory specified with --with-sysroot. This option is --- 2021,2028 ---- native system headers rather than the default /usr/include.

      !
      --with-build-sysroot
      !
      --with-build-sysroot=dir

      Tells GCC to consider dir as the system root (see --with-sysroot) while building target libraries, instead of the directory specified with --with-sysroot. This option is *************** option then the compiler will search tha *** 2030,2037 **** native system headers rather than the default /usr/include.

      !
      --with-headers
      !
      --with-headers=dir

      Deprecated in favor of --with-sysroot. Specifies that target headers are available when building a cross compiler. The dir argument specifies a directory which has the target include --- 2040,2047 ---- native system headers rather than the default /usr/include.

      !
      --with-headers
      !
      --with-headers=dir

      Deprecated in favor of --with-sysroot. Specifies that target headers are available when building a cross compiler. The dir argument specifies a directory which has the target include *************** pre-exist, the dir argument m *** 2043,2056 **** will be run on these files to make them compatible with GCC.

      !
      --without-headers

      Tells GCC not use any target headers from a libc when building a cross compiler. When crossing to GNU/Linux, you need the headers so GCC can build the exception handling for libgcc.

      !
      --with-libs
      !
      --with-libs="dir1 dir2dirN"

      Deprecated in favor of --with-sysroot. Specifies a list of directories which contain the target runtime libraries. These libraries will be copied into the gcc install --- 2053,2066 ---- will be run on these files to make them compatible with GCC.

      !
      --without-headers

      Tells GCC not use any target headers from a libc when building a cross compiler. When crossing to GNU/Linux, you need the headers so GCC can build the exception handling for libgcc.

      !
      --with-libs
      !
      --with-libs="dir1 dir2dirN"

      Deprecated in favor of --with-sysroot. Specifies a list of directories which contain the target runtime libraries. These libraries will be copied into the gcc install *************** directory. If the directory list is omi *** 2058,2064 **** effect.

      !
      --with-newlib

      Specifies that ‘newlib’ is being used as the target C library. This causes __eprintf to be omitted from libgcc.a on the assumption that it will be provided by --- 2068,2074 ---- effect.

      !
      --with-newlib

      Specifies that ‘newlib’ is being used as the target C library. This causes __eprintf to be omitted from libgcc.a on the assumption that it will be provided by *************** omitted from libgcc.a on th *** 2066,2072 ****

      !
      --with-avrlibc

      Only supported for the AVR target. Specifies that ‘AVR-Libc’ is being used as the target C  library. This causes float support functions like __addsf3 to be omitted from libgcc.a on --- 2076,2082 ----

      !
      --with-avrlibc

      Only supported for the AVR target. Specifies that ‘AVR-Libc’ is being used as the target C  library. This causes float support functions like __addsf3 to be omitted from libgcc.a on *************** RTEMS configurations, which currently us *** 2077,2084 **** supported since version 4.7.2 and is the default in 4.8.0 and newer.

      !
      --with-double={32|64|32,64|64,32}
      !
      --with-long-double={32|64|32,64|64,32|double}

      Only supported for the AVR target since version 10. Specify the default layout available for the C/C++ ‘double’ and ‘long double’ type, respectively. The following rules apply: --- 2087,2094 ---- supported since version 4.7.2 and is the default in 4.8.0 and newer.

      !
      --with-double={32|64|32,64|64,32}
      !
      --with-long-double={32|64|32,64|64,32|double}

      Only supported for the AVR target since version 10. Specify the default layout available for the C/C++ ‘double’ and ‘long double’ type, respectively. The following rules apply: *************** that ‘long double&rsq *** 2105,2111 **** 32 bits wide.

      !
      --with-double-comparison={tristate|bool|libf7}

      Only supported for the AVR target since version 10. Specify what result format is returned by library functions that compare 64-bit floating point values (DFmode). --- 2115,2121 ---- 32 bits wide.

      !
      --with-double-comparison={tristate|bool|libf7}

      Only supported for the AVR target since version 10. Specify what result format is returned by library functions that compare 64-bit floating point values (DFmode). *************** The GCC default is ‘tristate *** 2113,2119 **** implementation returns a boolean instead, set it to ‘bool’.

      !
      --with-libf7={libgcc|math|math-symbols|no}

      Only supported for the AVR target since version 10. Specify to which degree code from LibF7 is included in libgcc. LibF7 is an ad-hoc, AVR-specific, 64-bit floating point emulation --- 2123,2129 ---- implementation returns a boolean instead, set it to ‘bool’.

      !
      --with-libf7={libgcc|math|math-symbols|no}

      Only supported for the AVR target since version 10. Specify to which degree code from LibF7 is included in libgcc. LibF7 is an ad-hoc, AVR-specific, 64-bit floating point emulation *************** from elsewhere. This option sets *** 2129,2141 **** to ‘bool’.

      !
      --with-nds32-lib=library

      Specifies that library setting is used for building libgcc.a. Currently, the valid library is ‘newlib’ or ‘mculib’. This option is only supported for the NDS32 target.

      !
      --with-build-time-tools=dir

      Specifies where to find the set of target tools (assembler, linker, etc.) that will be used while building GCC itself. This option can be useful if the directory layouts are different between the system you are building --- 2139,2151 ---- to ‘bool’.

      !
      --with-nds32-lib=library

      Specifies that library setting is used for building libgcc.a. Currently, the valid library is ‘newlib’ or ‘mculib’. This option is only supported for the NDS32 target.

      !
      --with-build-time-tools=dir

      Specifies where to find the set of target tools (assembler, linker, etc.) that will be used while building GCC itself. This option can be useful if the directory layouts are different between the system you are building *************** tools. *** 2154,2160 ****

      !

      Overriding configure test results

      Sometimes, it might be necessary to override the result of some configure test, for example in order to ease porting to a new --- 2164,2171 ----

    ! !

    Overriding configure test results

    Sometimes, it might be necessary to override the result of some configure test, for example in order to ease porting to a new *************** system or work around a bug in a test. *** 2162,2179 **** script provides three variables for this:

    !
    build_configargs
    !

    The contents of this variable is passed to all build configure scripts.

    !
    host_configargs
    !

    The contents of this variable is passed to all host configure scripts.

    !
    target_configargs
    !

    The contents of this variable is passed to all target configure scripts.

    --- 2173,2193 ---- script provides three variables for this:

    !
    build_configargs
    !
    !

    The contents of this variable is passed to all build configure scripts.

    !
    host_configargs
    !
    !

    The contents of this variable is passed to all host configure scripts.

    !
    target_configargs
    !
    !

    The contents of this variable is passed to all target configure scripts.

    *************** scripts. *** 2183,2194 **** overrides, you can pass a setting for CONFIG_SITE and set variables in the site file.

    !

    Objective-C-Specific Options

    The following options apply to the build of the Objective-C runtime library.

    !
    --enable-objc-gc

    Specify that an additional variant of the GNU Objective-C runtime library is built, using an external build of the Boehm-Demers-Weiser garbage collector (https://www.hboehm.info/gc/). This library needs to be --- 2197,2209 ---- overrides, you can pass a setting for CONFIG_SITE and set variables in the site file.

    ! !

    Objective-C-Specific Options

    The following options apply to the build of the Objective-C runtime library.

    !
    --enable-objc-gc

    Specify that an additional variant of the GNU Objective-C runtime library is built, using an external build of the Boehm-Demers-Weiser garbage collector (https://www.hboehm.info/gc/). This library needs to be *************** additional runtime library is skipped wh *** 2198,2206 **** continues.

    !
    --with-target-bdw-gc=list
    !
    --with-target-bdw-gc-include=list
    !
    --with-target-bdw-gc-lib=list

    Specify search directories for the garbage collector header files and libraries. list is a comma separated list of key value pairs of the form ‘multilibdir=path’, where the default multilib key --- 2213,2221 ---- continues.

    !
    --with-target-bdw-gc=list
    !
    --with-target-bdw-gc-include=list
    !
    --with-target-bdw-gc-lib=list

    Specify search directories for the garbage collector header files and libraries. list is a comma separated list of key value pairs of the form ‘multilibdir=path’, where the default multilib key *************** default locations. *** 2219,2232 ****

    !

    D-Specific Options

    The following options apply to the build of the D runtime library.

    !
    --enable-libphobos-checking
    !
    --disable-libphobos-checking
    !
    --enable-libphobos-checking=list

    This option controls whether run-time checks and contracts are compiled into the D runtime library. When the option is not specified, the library is built with ‘release’ checking. When the option is specified without a --- 2234,2248 ----

    ! !

    D-Specific Options

    The following options apply to the build of the D runtime library.

    !
    --enable-libphobos-checking
    !
    --disable-libphobos-checking
    !
    --enable-libphobos-checking=list

    This option controls whether run-time checks and contracts are compiled into the D runtime library. When the option is not specified, the library is built with ‘release’ checking. When the option is specified without a *************** libphobos with -fno-release *** 2243,2250 **** with an extra option -fassert).

    !
    --with-libphobos-druntime-only
    !
    --with-libphobos-druntime-only=choice

    Specify whether to build only the core D runtime library (druntime), or both the core and standard library (phobos) into libphobos. This is useful for targets that have full support in druntime, but no or incomplete support --- 2259,2266 ---- with an extra option -fassert).

    !
    --with-libphobos-druntime-only
    !
    --with-libphobos-druntime-only=choice

    Specify whether to build only the core D runtime library (druntime), or both the core and standard library (phobos) into libphobos. This is useful for targets that have full support in druntime, but no or incomplete support *************** When the option is specified without a < *** 2257,2263 **** ‘--with-libphobos-druntime-only=yes’.

    !
    --with-target-system-zlib

    Use installed ‘zlib’ rather than that included with GCC. This needs to be available for each multilib variant, unless configured with --with-target-system-zlib=‘auto in which case the GCC included --- 2273,2279 ---- ‘--with-libphobos-druntime-only=yes’.

    !
    --with-target-system-zlib

    Use installed ‘zlib’ rather than that included with GCC. This needs to be available for each multilib variant, unless configured with --with-target-system-zlib=‘auto in which case the GCC included diff -Nrcpad gcc-12.4.0/INSTALL/download.html gcc-12.5.0-RC-20250704/INSTALL/download.html *** gcc-12.4.0/INSTALL/download.html Thu Jun 20 08:10:30 2024 --- gcc-12.5.0-RC-20250704/INSTALL/download.html Fri Jul 4 07:24:49 2025 *************** *** 1,8 **** - - - + + + Downloading GCC *************** You have freedom to copy and modify this *** 29,52 **** - - --- 29,58 ---- *************** ul.no-bullet {list-style: none} *** 74,81 **** ! !

    GCC is distributed via git and via HTTPS as tarballs compressed with gzip or bzip2. --- 80,87 ---- ! !

    GCC is distributed via git and via HTTPS as tarballs compressed with gzip or bzip2. diff -Nrcpad gcc-12.4.0/INSTALL/finalinstall.html gcc-12.5.0-RC-20250704/INSTALL/finalinstall.html *** gcc-12.4.0/INSTALL/finalinstall.html Thu Jun 20 08:10:31 2024 --- gcc-12.5.0-RC-20250704/INSTALL/finalinstall.html Fri Jul 4 07:24:50 2025 *************** *** 1,8 **** - - - + + + Installing GCC: Final installation *************** You have freedom to copy and modify this *** 29,52 **** - - --- 29,58 ---- *************** ul.no-bullet {list-style: none} *** 80,87 ****

    Now that GCC has been built (and optionally tested), you can install it with !

    !
    cd objdir && make install
      

    We strongly recommend to install into a target directory where there is --- 86,93 ----

    Now that GCC has been built (and optionally tested), you can install it with !

    !
    cd objdir && make install
      

    We strongly recommend to install into a target directory where there is *************** binutils, including assembler and linker *** 113,120 ****

    Installation into a temporary staging area or into a chroot jail can be achieved with the command

    !
    !
    make DESTDIR=path-to-rootdir install
      

    where path-to-rootdir is the absolute path of --- 119,126 ----

    Installation into a temporary staging area or into a chroot jail can be achieved with the command

    !
    !
    make DESTDIR=path-to-rootdir install
      

    where path-to-rootdir is the absolute path of *************** using the DESTDIR feature. *** 133,140 ****

    You can install stripped programs and libraries with

    !
    !
    make install-strip
      

    If you are bootstrapping a released version of GCC then please --- 139,146 ----

    You can install stripped programs and libraries with

    !
    !
    make install-strip
      

    If you are bootstrapping a released version of GCC then please diff -Nrcpad gcc-12.4.0/INSTALL/gfdl.html gcc-12.5.0-RC-20250704/INSTALL/gfdl.html *** gcc-12.4.0/INSTALL/gfdl.html Thu Jun 20 08:10:31 2024 --- gcc-12.5.0-RC-20250704/INSTALL/gfdl.html Fri Jul 4 07:24:50 2025 *************** *** 1,8 **** - - - + + + Installing GCC: GNU Free Documentation License *************** You have freedom to copy and modify this *** 29,52 **** - - --- 29,58 ---- *************** ul.no-bullet {list-style: none} *** 83,89 ****

    Installing GCC: GNU Free Documentation License

    !
    Version 1.3, 3 November 2008
    --- 89,95 ----

    Installing GCC: GNU Free Documentation License

    !
    Version 1.3, 3 November 2008
    *************** provided the MMC is eligible for relicen *** 516,530 ****

  • !

    ADDENDUM: How to use this License for your documents

    To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:

    !
    !
      Copyright (C)  year  your name.
        Permission is granted to copy, distribute and/or modify this document
        under the terms of the GNU Free Documentation License, Version 1.3
        or any later version published by the Free Software Foundation;
    --- 522,536 ----
      

    !

    ADDENDUM: How to use this License for your documents

    To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:

    !
    !
      Copyright (C)  year  your name.
        Permission is granted to copy, distribute and/or modify this document
        under the terms of the GNU Free Documentation License, Version 1.3
        or any later version published by the Free Software Foundation;
    *************** license notices just after the title pag
    *** 536,543 ****
      

    If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the “with...Texts.” line with this:

    !
    !
        with the Invariant Sections being list their titles, with
          the Front-Cover Texts being list, and with the Back-Cover Texts
          being list.
      
    --- 542,549 ----

    If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the “with...Texts.” line with this:

    !
    !
        with the Invariant Sections being list their titles, with
          the Front-Cover Texts being list, and with the Back-Cover Texts
          being list.
      
    *************** to permit their use in free software. *** 557,563 ****

    Return to the GCC Installation page

    !
    --- 563,569 ----

    Return to the GCC Installation page

    !
    diff -Nrcpad gcc-12.4.0/INSTALL/index.html gcc-12.5.0-RC-20250704/INSTALL/index.html *** gcc-12.4.0/INSTALL/index.html Thu Jun 20 08:10:29 2024 --- gcc-12.5.0-RC-20250704/INSTALL/index.html Fri Jul 4 07:24:48 2025 *************** *** 1,8 **** - - - + + + Installing GCC *************** You have freedom to copy and modify this *** 29,52 **** - - --- 29,58 ---- *************** Free Documentation License”. *** 139,144 **** --- 145,151 ---- + diff -Nrcpad gcc-12.4.0/INSTALL/prerequisites.html gcc-12.5.0-RC-20250704/INSTALL/prerequisites.html *** gcc-12.4.0/INSTALL/prerequisites.html Thu Jun 20 08:10:30 2024 --- gcc-12.5.0-RC-20250704/INSTALL/prerequisites.html Fri Jul 4 07:24:49 2025 *************** *** 1,8 **** - - - + + + Prerequisites for GCC *************** You have freedom to copy and modify this *** 29,52 **** - - --- 29,58 ---- *************** ul.no-bullet {list-style: none} *** 73,87 **** !

    GCC requires that various tools and packages be available for use in the build procedure. Modifying GCC sources requires additional tools described below.

    !

    Tools/packages necessary for building GCC

    !
    ISO C++11 compiler

    Necessary to bootstrap GCC. GCC 4.8.3 or newer has sufficient support for used C++11 features, with earlier GCC versions you might run into implementation bugs. --- 79,94 ---- !

    GCC requires that various tools and packages be available for use in the build procedure. Modifying GCC sources requires additional tools described below.

    ! !

    Tools/packages necessary for building GCC

    !
    ISO C++11 compiler

    Necessary to bootstrap GCC. GCC 4.8.3 or newer has sufficient support for used C++11 features, with earlier GCC versions you might run into implementation bugs. *************** GCC binary (version 4.8.3 or later) beca *** 97,103 **** frontends other than C might use GCC extensions.

    !
    C standard library and headers

    In order to build GCC, the C standard library and headers must be present for all target variants for which target libraries will be built (and not --- 104,110 ---- frontends other than C might use GCC extensions.

    !
    C standard library and headers

    In order to build GCC, the C standard library and headers must be present for all target variants for which target libraries will be built (and not *************** name of the package depends on your dist *** 114,120 **** ‘fatal error: gnu/stubs-32.h: No such file

    !
    GNAT

    In order to build GNAT, the Ada compiler, you need a working GNAT compiler (GCC version 5.1 or later). --- 121,127 ---- ‘fatal error: gnu/stubs-32.h: No such file

    !
    GNAT

    In order to build GNAT, the Ada compiler, you need a working GNAT compiler (GCC version 5.1 or later). *************** by verifying that ‘gnatls -v *** 144,150 **** section.

    !
    GDC

    In order to build GDC, the D compiler, you need a working GDC compiler (GCC version 9.4 or later) and D runtime library, --- 151,157 ---- section.

    !
    GDC

    In order to build GDC, the D compiler, you need a working GDC compiler (GCC version 9.4 or later) and D runtime library, *************** and works if --enable-libphobos

    !
    A “working” POSIX compatible shell, or GNU bash

    Necessary when running configure because some /bin/sh shells have bugs and may crash when configuring the --- 176,182 ---- documented for affected targets.

    !
    A “working” POSIX compatible shell, or GNU bash

    Necessary when running configure because some /bin/sh shells have bugs and may crash when configuring the *************** environment to your “good” s *** 188,201 **** work when configuring GCC.

    !
    A POSIX or SVR4 awk

    Necessary for creating some of the generated source files for GCC. If in doubt, use a recent GNU awk version, as some of the older ones are broken. GNU awk version 3.1.5 is known to work.

    !
    GNU binutils

    Necessary in some circumstances, optional in others. See the host/target specific instructions for your platform for the exact --- 195,208 ---- work when configuring GCC.

    !
    A POSIX or SVR4 awk

    Necessary for creating some of the generated source files for GCC. If in doubt, use a recent GNU awk version, as some of the older ones are broken. GNU awk version 3.1.5 is known to work.

    !
    GNU binutils

    Necessary in some circumstances, optional in others. See the host/target specific instructions for your platform for the exact *************** requirements. *** 205,230 **** with GNU libtool that includes doing a bootstrap with LTO enabled.

    !
    gzip version 1.2.4 (or later) or
    !
    bzip2 version 1.0.2 (or later)

    Necessary to uncompress GCC tar files when source code is obtained via HTTPS mirror sites.

    !
    GNU make version 3.80 (or later)

    You must have GNU make installed to build GCC.

    !
    GNU tar version 1.14 (or later)

    Necessary (only on some platforms) to untar the source code. Many systems’ tar programs will also work, only try GNU tar if you have problems.

    !
    Perl version between 5.6.1 and 5.6.24

    Necessary when targeting Darwin, building ‘libstdc++’, and not using --disable-symvers. --- 212,237 ---- with GNU libtool that includes doing a bootstrap with LTO enabled.

    !
    gzip version 1.2.4 (or later) or
    !
    bzip2 version 1.0.2 (or later)

    Necessary to uncompress GCC tar files when source code is obtained via HTTPS mirror sites.

    !
    GNU make version 3.80 (or later)

    You must have GNU make installed to build GCC.

    !
    GNU tar version 1.14 (or later)

    Necessary (only on some platforms) to untar the source code. Many systems’ tar programs will also work, only try GNU tar if you have problems.

    !
    Perl version between 5.6.1 and 5.6.24

    Necessary when targeting Darwin, building ‘libstdc++’, and not using --disable-symvers. *************** support libraries then using those packa *** 256,262 **** install the libraries.

    !
    GNU Multiple Precision Library (GMP) version 4.3.2 (or later)

    Necessary to build GCC. If a GMP source distribution is found in a subdirectory of your GCC sources named gmp, it will be built --- 263,269 ---- install the libraries.

    !
    GNU Multiple Precision Library (GMP) version 4.3.2 (or later)

    Necessary to build GCC. If a GMP source distribution is found in a subdirectory of your GCC sources named gmp, it will be built *************** The in-tree build is only supported with *** 268,274 **** download_prerequisites installs.

    !
    MPFR Library version 3.1.0 (or later)

    Necessary to build GCC. It can be downloaded from https://www.mpfr.org. If an MPFR source distribution is found --- 275,281 ---- download_prerequisites installs.

    !
    MPFR Library version 3.1.0 (or later)

    Necessary to build GCC. It can be downloaded from https://www.mpfr.org. If an MPFR source distribution is found *************** The in-tree build is only supported with *** 281,287 **** download_prerequisites installs.

    !
    MPC Library version 1.0.1 (or later)

    Necessary to build GCC. It can be downloaded from https://www.multiprecision.org/mpc/. If an MPC source distribution --- 288,294 ---- download_prerequisites installs.

    !
    MPC Library version 1.0.1 (or later)

    Necessary to build GCC. It can be downloaded from https://www.multiprecision.org/mpc/. If an MPC source distribution *************** The in-tree build is only supported with *** 294,300 **** download_prerequisites installs.

    !
    isl Library version 0.15 or later.

    Necessary to build GCC with the Graphite loop optimizations. It can be downloaded from https://gcc.gnu.org/pub/gcc/infrastructure/. --- 301,307 ---- download_prerequisites installs.

    !
    isl Library version 0.15 or later.

    Necessary to build GCC with the Graphite loop optimizations. It can be downloaded from https://gcc.gnu.org/pub/gcc/infrastructure/. *************** option should be used if isl is not inst *** 305,311 **** search path.

    !
    zstd Library.

    Necessary to build GCC with zstd compression used for LTO bytecode. The library is searched in your default library patch search. --- 312,318 ---- search path.

    !
    zstd Library.

    Necessary to build GCC with zstd compression used for LTO bytecode. The library is searched in your default library patch search. *************** Alternatively, the --with-zstd

    !

    Tools/packages necessary for modifying GCC

    !
    autoconf version 2.69
    !
    GNU m4 version 1.4.6 (or later)

    Necessary when modifying configure.ac, aclocal.m4, etc. to regenerate configure and config.in files.

    !
    automake version 1.15.1

    Necessary when modifying a Makefile.am file to regenerate its associated Makefile.in. --- 321,337 ----

    ! !

    Tools/packages necessary for modifying GCC

    !
    autoconf version 2.69
    !
    GNU m4 version 1.4.6 (or later)

    Necessary when modifying configure.ac, aclocal.m4, etc. to regenerate configure and config.in files.

    !
    automake version 1.15.1

    Necessary when modifying a Makefile.am file to regenerate its associated Makefile.in. *************** to a newer version, please update all th *** 339,366 **** to the latest released version.

    !
    gettext version 0.14.5 (or later)

    Needed to regenerate gcc.pot.

    !
    gperf version 2.7.2 (or later)

    Necessary when modifying gperf input files, e.g. gcc/cp/cfns.gperf to regenerate its associated header file, e.g. gcc/cp/cfns.h.

    !
    DejaGnu version 1.5.3 (or later)
    !
    Expect
    !
    Tcl

    Necessary to run the GCC testsuite; see the section on testing for details.

    !
    autogen version 5.5.4 (or later) and
    !
    guile version 1.4.1 (or later)

    Necessary to regenerate fixinc/fixincl.x from fixinc/inclhack.def and fixinc/*.tpl. --- 347,374 ---- to the latest released version.

    !
    gettext version 0.14.5 (or later)

    Needed to regenerate gcc.pot.

    !
    gperf version 2.7.2 (or later)

    Necessary when modifying gperf input files, e.g. gcc/cp/cfns.gperf to regenerate its associated header file, e.g. gcc/cp/cfns.h.

    !
    DejaGnu version 1.5.3 (or later)
    !
    Expect
    !
    Tcl

    Necessary to run the GCC testsuite; see the section on testing for details.

    !
    autogen version 5.5.4 (or later) and
    !
    guile version 1.4.1 (or later)

    Necessary to regenerate fixinc/fixincl.x from fixinc/inclhack.def and fixinc/*.tpl. *************** details. *** 371,377 **** Makefile.tpl and Makefile.def.

    !
    Flex version 2.5.4 (or later)

    Necessary when modifying *.l files.

    --- 379,385 ---- Makefile.tpl and Makefile.def.

    !
    Flex version 2.5.4 (or later)

    Necessary when modifying *.l files.

    *************** files are not included in the version-co *** 380,386 **** They are included in releases.

    !
    Texinfo version 4.7 (or later)

    Necessary for running makeinfo when modifying *.texi files to test your changes. --- 388,394 ---- They are included in releases.

    !
    Texinfo version 4.7 (or later)

    Necessary for running makeinfo when modifying *.texi files to test your changes. *************** generated output files are not included *** 394,425 **** included in releases.

    !
    TeX (any working version)

    Necessary for running texi2dvi and texi2pdf, which are used when running make dvi or make pdf to create DVI or PDF files, respectively.

    !
    Sphinx version 1.0 (or later)

    Necessary to regenerate jit/docs/_build/texinfo from the .rst files in the directories below jit/docs.

    !
    git (any version)
    !
    SSH (any version)

    Necessary to access the source repository. Public releases and weekly snapshots of the development sources are also available via HTTPS.

    !
    GNU diffutils version 2.7 (or later)

    Useful when submitting patches for the GCC source code.

    !
    patch version 2.5.4 (or later)

    Necessary when applying patches, created with diff, to one’s own sources. --- 402,433 ---- included in releases.

    !
    TeX (any working version)

    Necessary for running texi2dvi and texi2pdf, which are used when running make dvi or make pdf to create DVI or PDF files, respectively.

    !
    Sphinx version 1.0 (or later)

    Necessary to regenerate jit/docs/_build/texinfo from the .rst files in the directories below jit/docs.

    !
    git (any version)
    !
    SSH (any version)

    Necessary to access the source repository. Public releases and weekly snapshots of the development sources are also available via HTTPS.

    !
    GNU diffutils version 2.7 (or later)

    Useful when submitting patches for the GCC source code.

    !
    patch version 2.5.4 (or later)

    Necessary when applying patches, created with diff, to one’s own sources. diff -Nrcpad gcc-12.4.0/INSTALL/specific.html gcc-12.5.0-RC-20250704/INSTALL/specific.html *** gcc-12.4.0/INSTALL/specific.html Thu Jun 20 08:10:30 2024 --- gcc-12.5.0-RC-20250704/INSTALL/specific.html Fri Jul 4 07:24:49 2025 *************** *** 1,8 **** - - - + + + Host/Target specific installation notes for GCC *************** You have freedom to copy and modify this *** 29,52 **** - - --- 29,58 ---- *************** ul.no-bullet {list-style: none} *** 80,90 **** ! ! ! ! !

    Please read this document carefully before installing the GNU Compiler Collection on your machine. --- 86,96 ---- ! ! ! ! !

    Please read this document carefully before installing the GNU Compiler Collection on your machine. *************** information have to. *** 185,191 ****


    !

    aarch64*-*-*

    Binutils pre 2.24 does not have support for selecting -mabi and does not support ILP32. If it is used to build GCC 4.9 or later, GCC will not support option -mabi=ilp32. --- 191,198 ----


    ! !

    aarch64*-*-*

    Binutils pre 2.24 does not have support for selecting -mabi and does not support ILP32. If it is used to build GCC 4.9 or later, GCC will not support option -mabi=ilp32. *************** protections by default. This mechanism *** 222,238 **** of the options are given at configure time.


    !

    alpha*-*-*

    This section contains general configuration information for all Alpha-based platforms using ELF. In addition to reading this section, please read all other sections that match your target.


    !

    amd64-*-solaris2*

    This is a synonym for ‘x86_64-*-solaris2*’.


    !

    amdgcn-*-amdhsa

    AMD GCN GPU target.

    Instead of GNU Binutils, you will need to install LLVM 13.0.1, or later, and copy --- 229,248 ---- of the options are given at configure time.


    ! !

    alpha*-*-*

    This section contains general configuration information for all Alpha-based platforms using ELF. In addition to reading this section, please read all other sections that match your target.


    ! !

    amd64-*-solaris2*

    This is a synonym for ‘x86_64-*-solaris2*’.


    ! !

    amdgcn-*-amdhsa

    AMD GCN GPU target.

    Instead of GNU Binutils, you will need to install LLVM 13.0.1, or later, and copy *************** section, please read all other sections *** 250,268 **** on the GPU.


    !

    arc-*-elf32

    Use ‘configure --target=arc-elf32 --with-cpu=cpu --enable-languages="c,c++"’ to configure GCC, with cpu being one of ‘arc600’, ‘arc601’, or ‘arc700’.


    !

    arc-linux-uclibc

    Use ‘configure --target=arc-linux-uclibc --with-cpu=arc700 --enable-languages="c,c++"’ to configure GCC.


    !

    arm-*-eabi

    ARM-family processors.

    Building the Ada frontend commonly fails (an infinite loop executing --- 260,281 ---- on the GPU.


    ! !

    arc-*-elf32

    Use ‘configure --target=arc-elf32 --with-cpu=cpu --enable-languages="c,c++"’ to configure GCC, with cpu being one of ‘arc600’, ‘arc601’, or ‘arc700’.


    ! !

    arc-linux-uclibc

    Use ‘configure --target=arc-linux-uclibc --with-cpu=arc700 --enable-languages="c,c++"’ to configure GCC.


    ! !

    arm-*-eabi

    ARM-family processors.

    Building the Ada frontend commonly fails (an infinite loop executing *************** or ‘arc700’. *** 270,276 **** GNAT 4.6, 4.9 or 5 release branches are known to succeed.


    !

    avr

    ATMEL AVR-family micro controllers. These are used in embedded applications. There are no standard Unix configurations. See “AVR Options” in the main manual --- 283,290 ---- GNAT 4.6, 4.9 or 5 release branches are known to succeed.


    ! !

    avr

    ATMEL AVR-family micro controllers. These are used in embedded applications. There are no standard Unix configurations. See “AVR Options” in the main manual *************** can also be obtained from: *** 287,300 ****

The following error: !

!
Error: register required
  

indicates that you should upgrade to a newer version of the binutils.


!

Blackfin

The Blackfin processor, an Analog Devices DSP. See “Blackfin Options” in the main manual

--- 301,315 ----

The following error: !

!
Error: register required
  

indicates that you should upgrade to a newer version of the binutils.


! !

Blackfin

The Blackfin processor, an Analog Devices DSP. See “Blackfin Options” in the main manual

*************** See “Blackfin Options” in th *** 302,308 **** are available at https://sourceforge.net/projects/adi-toolchain/.


!

CR16

The CR16 CompactRISC architecture is a 16-bit architecture. This architecture is used in embedded applications.

--- 317,324 ---- are available at https://sourceforge.net/projects/adi-toolchain/.


! !

CR16

The CR16 CompactRISC architecture is a 16-bit architecture. This architecture is used in embedded applications.

*************** GCC for building a CR16 elf cross-c *** 316,322 **** configure GCC for building a CR16 uclinux cross-compiler.


!

CRIS

CRIS is a CPU architecture in Axis Communications systems-on-a-chip, for example the ETRAX series. These are used in embedded applications.

--- 332,339 ---- configure GCC for building a CR16 uclinux cross-compiler.


! !

CRIS

CRIS is a CPU architecture in Axis Communications systems-on-a-chip, for example the ETRAX series. These are used in embedded applications.

*************** for a list of CRIS-specific options. *** 326,332 ****

Use ‘configure --target=cris-elf’ to configure GCC for building a cross-compiler for CRIS.


!

DOS

Please have a look at the binaries page.

You cannot install GCC by itself on MSDOS; it will not compile under --- 343,350 ----

Use ‘configure --target=cris-elf’ to configure GCC for building a cross-compiler for CRIS.


!

!

DOS

Please have a look at the binaries page.

You cannot install GCC by itself on MSDOS; it will not compile under *************** compilation package DJGPP, which include *** 335,346 **** and includes all the necessary compilation tools and libraries.


!

epiphany-*-elf

Adapteva Epiphany. This configuration is intended for embedded systems.


!

*-*-freebsd*

In order to better utilize FreeBSD base system functionality and match the configuration of the system compiler, GCC 4.5 and above as well as GCC 4.4 past 2010-06-20 leverage SSP support in libc (which is present --- 353,366 ---- and includes all the necessary compilation tools and libraries.


! !

epiphany-*-elf

Adapteva Epiphany. This configuration is intended for embedded systems.


! !

*-*-freebsd*

In order to better utilize FreeBSD base system functionality and match the configuration of the system compiler, GCC 4.5 and above as well as GCC 4.4 past 2010-06-20 leverage SSP support in libc (which is present *************** properly on FreeBSD prior to the FreeBSD *** 371,382 **** after 2.16.1.


!

ft32-*-elf

The FT32 processor. This configuration is intended for embedded systems.


!

h8300-hms

Renesas H8/300 series of processors.

Please have a look at the binaries page. --- 391,404 ---- after 2.16.1.


! !

ft32-*-elf

The FT32 processor. This configuration is intended for embedded systems.


! !

h8300-hms

Renesas H8/300 series of processors.

Please have a look at the binaries page. *************** first three arguments in function calls *** 387,393 **** longer a multiple of 2 bytes.


!

hppa*-hp-hpux*

Support for HP-UX version 9 and older was discontinued in GCC 3.4.

We require using gas/binutils on all hppa platforms. Version 2.19 or --- 409,416 ---- longer a multiple of 2 bytes.


! !

hppa*-hp-hpux*

Support for HP-UX version 9 and older was discontinued in GCC 3.4.

We require using gas/binutils on all hppa platforms. Version 2.19 or *************** a list of the predefines used with each *** 437,443 ****

More specific information to ‘hppa*-hp-hpux*’ targets follows.


!

hppa*-hp-hpux10

For hpux10.20, we highly recommend you pick up the latest sed patch PHCO_19798 from HP.

--- 460,467 ----

More specific information to ‘hppa*-hp-hpux*’ targets follows.


! !

hppa*-hp-hpux10

For hpux10.20, we highly recommend you pick up the latest sed patch PHCO_19798 from HP.

*************** problems in using C++ on this target. H *** 447,453 **** with the one implemented under HP-UX 11 using secondary definitions.


!

hppa*-hp-hpux11

GCC 3.0 and up support HP-UX 11. GCC 2.95.x is not supported and cannot be used to compile GCC 3.0 and up.

--- 471,478 ---- with the one implemented under HP-UX 11 using secondary definitions.


! !

hppa*-hp-hpux11

GCC 3.0 and up support HP-UX 11. GCC 2.95.x is not supported and cannot be used to compile GCC 3.0 and up.

*************** versioning with --disable-symvers< *** 550,556 **** supported, so --enable-threads=dce does not work.


!

*-*-linux-gnu

The .init_array and .fini_array sections are enabled unconditionally which requires at least glibc 2.1 and binutils 2.12.

--- 575,582 ---- supported, so --enable-threads=dce does not work.


! !

*-*-linux-gnu

The .init_array and .fini_array sections are enabled unconditionally which requires at least glibc 2.1 and binutils 2.12.

*************** in glibc 2.2.5 and later. More informat *** 559,565 **** libstdc++-v3 documentation.


!

i?86-*-linux*

As of GCC 3.3, binutils 2.13.1 or later is required for this platform. See bug 10877 for more information.

--- 585,592 ---- libstdc++-v3 documentation.


! !

i?86-*-linux*

As of GCC 3.3, binutils 2.13.1 or later is required for this platform. See bug 10877 for more information.

*************** possible you have a hardware problem. F *** 568,574 **** found on www.bitwizard.nl.


!

i?86-*-solaris2*

Use this for Solaris 11.3 or later on x86 and x86-64 systems. Starting with GCC 4.7, there is also a 64-bit ‘amd64-*-solaris2*’ or ‘x86_64-*-solaris2*’ configuration that corresponds to --- 595,602 ---- found on www.bitwizard.nl.


! !

i?86-*-solaris2*

Use this for Solaris 11.3 or later on x86 and x86-64 systems. Starting with GCC 4.7, there is also a 64-bit ‘amd64-*-solaris2*’ or ‘x86_64-*-solaris2*’ configuration that corresponds to *************** to configure with --without-gnu-ld *** 592,598 **** guarantee use of Solaris ld.


!

ia64-*-linux

IA-64 processor (also known as IPF, or Itanium Processor Family) running GNU/Linux.

--- 620,627 ---- guarantee use of Solaris ld.


! !

ia64-*-linux

IA-64 processor (also known as IPF, or Itanium Processor Family) running GNU/Linux.

*************** running GNU/Linux. *** 601,607 **** later.


!

ia64-*-hpux*

Building GCC on this target requires the GNU Assembler. The bundled HP assembler will not work. To prevent GCC from using the wrong assembler, the option --with-gnu-as may be necessary. --- 630,637 ---- later.


! !

ia64-*-hpux*

Building GCC on this target requires the GNU Assembler. The bundled HP assembler will not work. To prevent GCC from using the wrong assembler, the option --with-gnu-as may be necessary. *************** removed and the system libunwind library *** 614,620 ****


!

*-ibm-aix*

Support for AIX version 3 and older was discontinued in GCC 3.4. Support for AIX version 4.2 and older was discontinued in GCC 4.5.

--- 644,651 ----


! !

*-ibm-aix*

Support for AIX version 3 and older was discontinued in GCC 3.4. Support for AIX version 4.2 and older was discontinued in GCC 4.5.

*************** with an earlier release of GCC is recomm *** 631,638 **** requires a larger data segment, which can be enabled through the LDR_CNTRL environment variable, e.g.,

!
!
% LDR_CNTRL=MAXDATA=0x50000000
  % export LDR_CNTRL
  
--- 662,669 ---- requires a larger data segment, which can be enabled through the LDR_CNTRL environment variable, e.g.,

!
!
% LDR_CNTRL=MAXDATA=0x50000000
  % export LDR_CNTRL
  
*************** with a version of GCC built for an earli *** 643,650 ****

To speed up the configuration phases of bootstrapping and installing GCC, one may use GNU Bash instead of AIX /bin/sh, e.g.,

!
!
% CONFIG_SHELL=/opt/freeware/bin/bash
  % export CONFIG_SHELL
  
--- 674,681 ----

To speed up the configuration phases of bootstrapping and installing GCC, one may use GNU Bash instead of AIX /bin/sh, e.g.,

!
!
% CONFIG_SHELL=/opt/freeware/bin/bash
  % export CONFIG_SHELL
  
*************** APAR IY26685 (AIX 4.3) or APAR IY25528 ( *** 694,700 **** fix for another AIX Assembler bug and a co-dependent AIX Archiver fix referenced as APAR IY53606 (AIX 5.2) or as APAR IY54774 (AIX 5.1)

!

libstdc++’ in GCC 3.4 increments the major version number of the shared object and GCC installation places the libstdc++.a shared library in a common location which will overwrite the and GCC 3.3 version of the shared library. Applications either need to be --- 725,731 ---- fix for another AIX Assembler bug and a co-dependent AIX Archiver fix referenced as APAR IY53606 (AIX 5.2) or as APAR IY54774 (AIX 5.1)

!

libstdc++’ in GCC 3.4 increments the major version number of the shared object and GCC installation places the libstdc++.a shared library in a common location which will overwrite the and GCC 3.3 version of the shared library. Applications either need to be *************** multilib libstdc++.a instal *** 708,727 ****

Extract the shared objects from the currently installed libstdc++.a archive: !

!
% ar -x libstdc++.a libstdc++.so.4 libstdc++.so.5
  

Enable the ‘F_LOADONLY’ flag so that the shared object will be available for runtime dynamic loading, but not linking: !

!
% strip -e libstdc++.so.4 libstdc++.so.5
  

Archive the runtime-only shared object in the GCC 3.4 libstdc++.a archive: !

!
% ar -q libstdc++.a libstdc++.so.4 libstdc++.so.5
  

Eventually, the --- 739,758 ----

Extract the shared objects from the currently installed libstdc++.a archive: !

!
% ar -x libstdc++.a libstdc++.so.4 libstdc++.so.5
  

Enable the ‘F_LOADONLY’ flag so that the shared object will be available for runtime dynamic loading, but not linking: !

!
% strip -e libstdc++.so.4 libstdc++.so.5
  

Archive the runtime-only shared object in the GCC 3.4 libstdc++.a archive: !

!
% ar -q libstdc++.a libstdc++.so.4 libstdc++.so.5
  

Eventually, the *************** environment variable to ‘C--with-cpu-cpu_type.


!

iq2000-*-elf

Vitesse IQ2000 processors. These are used in embedded applications. There are no standard Unix configurations.


!

lm32-*-elf

Lattice Mico32 processor. This configuration is intended for embedded systems.


!

lm32-*-uclinux

Lattice Mico32 processor. This configuration is intended for embedded systems running uClinux.


!

LoongArch

LoongArch processor. The following LoongArch targets are available:

!
loongarch64-linux-gnu*

LoongArch processor running GNU/Linux. This target triplet may be coupled with a small set of possible suffixes to identify their default ABI type:

!
f64

Uses lp64d/base ABI by default.

!
f32

Uses lp64f/base ABI by default.

!
sf

Uses lp64s/base ABI by default.

!
loongarch64-linux-gnu

Same as loongarch64-linux-gnuf64, but may be used with --with-abi=* to configure the default ABI type.

--- 809,854 ---- switch and using the configure option --with-cpu-cpu_type.


! !

iq2000-*-elf

Vitesse IQ2000 processors. These are used in embedded applications. There are no standard Unix configurations.


! !

lm32-*-elf

Lattice Mico32 processor. This configuration is intended for embedded systems.


! !

lm32-*-uclinux

Lattice Mico32 processor. This configuration is intended for embedded systems running uClinux.


! !

LoongArch

LoongArch processor. The following LoongArch targets are available:

!
loongarch64-linux-gnu*

LoongArch processor running GNU/Linux. This target triplet may be coupled with a small set of possible suffixes to identify their default ABI type:

!
f64

Uses lp64d/base ABI by default.

!
f32

Uses lp64f/base ABI by default.

!
sf

Uses lp64s/base ABI by default.

!
loongarch64-linux-gnu

Same as loongarch64-linux-gnuf64, but may be used with --with-abi=* to configure the default ABI type.

*************** with a small set of possible suffixes to *** 823,839 **** https://github.com/loongson/LoongArch-Documentation.


!

m32c-*-elf

Renesas M32C processor. This configuration is intended for embedded systems.


!

m32r-*-elf

Renesas M32R processor. This configuration is intended for embedded systems.


!

m68k-*-*

By default, ‘m68k-*-elf*’, ‘m68k-*-rtems’, ‘m68k-*-uclinux’ and ‘m68k-*-linux’ --- 858,877 ---- https://github.com/loongson/LoongArch-Documentation.


! !

m32c-*-elf

Renesas M32C processor. This configuration is intended for embedded systems.


! !

m32r-*-elf

Renesas M32R processor. This configuration is intended for embedded systems.


! !

m68k-*-*

By default, ‘m68k-*-elf*’, ‘m68k-*-rtems’, ‘m68k-*-uclinux’ and ‘m68k-*-linux’ *************** be a -mcpu argument or one *** 859,877 ****

GCC requires at least binutils version 2.17 on these targets.


!

m68k-*-uclinux

GCC 4.3 changed the uClinux configuration so that it uses the ‘m68k-linux-gnu’ ABI rather than the ‘m68k-elf’ ABI. It also added improved support for C++ and flat shared libraries, both of which were ABI changes.


!

microblaze-*-elf

Xilinx MicroBlaze processor. This configuration is intended for embedded systems.


!

mips-*-*

If on a MIPS system you get an error message saying “does not have gp sections for all it’s [sic] sectons [sic]”, don’t worry about it. This happens whenever you use GAS with the MIPS linker, but there is not --- 897,918 ----

GCC requires at least binutils version 2.17 on these targets.


! !

m68k-*-uclinux

GCC 4.3 changed the uClinux configuration so that it uses the ‘m68k-linux-gnu’ ABI rather than the ‘m68k-elf’ ABI. It also added improved support for C++ and flat shared libraries, both of which were ABI changes.


! !

microblaze-*-elf

Xilinx MicroBlaze processor. This configuration is intended for embedded systems.


! !

mips-*-*

If on a MIPS system you get an error message saying “does not have gp sections for all it’s [sic] sectons [sic]”, don’t worry about it. This happens whenever you use GAS with the MIPS linker, but there is not *************** the use of break, use the --with-d *** 911,921 **** use traps on systems that support them.


!

moxie-*-elf

The moxie processor.


!

msp430-*-elf*

TI MSP430 processor. This configuration is intended for embedded systems.

--- 952,964 ---- use traps on systems that support them.


! !

moxie-*-elf

The moxie processor.


! !

msp430-*-elf*

TI MSP430 processor. This configuration is intended for embedded systems.

*************** in a minimal run-time environment by def *** 934,948 ****
!

nds32le-*-elf

Andes NDS32 target in little endian mode.


!

nds32be-*-elf

Andes NDS32 target in big endian mode.


!

nvptx-*-none

Nvidia PTX target.

Instead of GNU binutils, you will need to install --- 977,994 ----


! !

nds32le-*-elf

Andes NDS32 target in little endian mode.


! !

nds32be-*-elf

Andes NDS32 target in big endian mode.


! !

nvptx-*-none

Nvidia PTX target.

Instead of GNU binutils, you will need to install *************** the GCC sources. *** 959,981 **** --enable-newlib-io-long-long options when configuring.


!

or1k-*-elf

The OpenRISC 1000 32-bit processor with delay slots. This configuration is intended for embedded systems.


!

or1k-*-linux

The OpenRISC 1000 32-bit processor with delay slots.


!

powerpc-*-*

You can specify a default version for the -mcpu=cpu_type switch by using the configure option --with-cpu-cpu_type.

You will need GNU binutils 2.20 or newer.


!

powerpc-*-darwin*

PowerPC running Darwin (Mac OS X kernel).

Pre-installed versions of Mac OS X may not include any developer tools, --- 1005,1031 ---- --enable-newlib-io-long-long options when configuring.


! !

or1k-*-elf

The OpenRISC 1000 32-bit processor with delay slots. This configuration is intended for embedded systems.


! !

or1k-*-linux

The OpenRISC 1000 32-bit processor with delay slots.


! !

powerpc-*-*

You can specify a default version for the -mcpu=cpu_type switch by using the configure option --with-cpu-cpu_type.

You will need GNU binutils 2.20 or newer.


! !

powerpc-*-darwin*

PowerPC running Darwin (Mac OS X kernel).

Pre-installed versions of Mac OS X may not include any developer tools, *************** cctools-590.36 package referenced from *** 989,1073 **** on systems older than 10.3.9 (aka darwin7.9.0).


!

powerpc-*-elf

PowerPC system in big endian mode, running System V.4.


!

powerpc*-*-linux-gnu*

PowerPC system in big endian mode running Linux.


!

powerpc-*-netbsd*

PowerPC system in big endian mode running NetBSD.


!

powerpc-*-eabisim

Embedded PowerPC system in big endian mode for use in running under the PSIM simulator.


!

powerpc-*-eabi

Embedded PowerPC system in big endian mode.


!

powerpcle-*-elf

PowerPC system in little endian mode, running System V.4.


!

powerpcle-*-eabisim

Embedded PowerPC system in little endian mode for use in running under the PSIM simulator.


!

powerpcle-*-eabi

Embedded PowerPC system in little endian mode.


!

rl78-*-elf

The Renesas RL78 processor. This configuration is intended for embedded systems.


!

riscv32-*-elf

The RISC-V RV32 instruction set. This configuration is intended for embedded systems. This (and all other RISC-V) targets require the binutils 2.30 release.


!

riscv32-*-linux

The RISC-V RV32 instruction set running GNU/Linux. This (and all other RISC-V) targets require the binutils 2.30 release.


!

riscv64-*-elf

The RISC-V RV64 instruction set. This configuration is intended for embedded systems. This (and all other RISC-V) targets require the binutils 2.30 release.


!

riscv64-*-linux

The RISC-V RV64 instruction set running GNU/Linux. This (and all other RISC-V) targets require the binutils 2.30 release.


!

rx-*-elf

The Renesas RX processor.


!

s390-*-linux*

S/390 system running GNU/Linux for S/390.


!

s390x-*-linux*

zSeries system (64-bit) running GNU/Linux for zSeries.


!

s390x-ibm-tpf*

zSeries system (64-bit) running TPF. This platform is supported as cross-compilation target only.


!

*-*-solaris2*

Support for Solaris 10 has been removed in GCC 10. Support for Solaris 9 has been removed in GCC 5. Support for Solaris 8 has been removed in GCC 4.8. Support for Solaris 7 has been removed in GCC 4.6. --- 1039,1141 ---- on systems older than 10.3.9 (aka darwin7.9.0).


! !

powerpc-*-elf

PowerPC system in big endian mode, running System V.4.


! !

powerpc*-*-linux-gnu*

PowerPC system in big endian mode running Linux.


! !

powerpc-*-netbsd*

PowerPC system in big endian mode running NetBSD.


! !

powerpc-*-eabisim

Embedded PowerPC system in big endian mode for use in running under the PSIM simulator.


! !

powerpc-*-eabi

Embedded PowerPC system in big endian mode.


! !

powerpcle-*-elf

PowerPC system in little endian mode, running System V.4.


! !

powerpcle-*-eabisim

Embedded PowerPC system in little endian mode for use in running under the PSIM simulator.


! !

powerpcle-*-eabi

Embedded PowerPC system in little endian mode.


! !

rl78-*-elf

The Renesas RL78 processor. This configuration is intended for embedded systems.


! !

riscv32-*-elf

The RISC-V RV32 instruction set. This configuration is intended for embedded systems. This (and all other RISC-V) targets require the binutils 2.30 release.


! !

riscv32-*-linux

The RISC-V RV32 instruction set running GNU/Linux. This (and all other RISC-V) targets require the binutils 2.30 release.


! !

riscv64-*-elf

The RISC-V RV64 instruction set. This configuration is intended for embedded systems. This (and all other RISC-V) targets require the binutils 2.30 release.


! !

riscv64-*-linux

The RISC-V RV64 instruction set running GNU/Linux. This (and all other RISC-V) targets require the binutils 2.30 release.


! !

rx-*-elf

The Renesas RX processor.


! !

s390-*-linux*

S/390 system running GNU/Linux for S/390.


! !

s390x-*-linux*

zSeries system (64-bit) running GNU/Linux for zSeries.


! !

s390x-ibm-tpf*

zSeries system (64-bit) running TPF. This platform is supported as cross-compilation target only.


! !

*-*-solaris2*

Support for Solaris 10 has been removed in GCC 10. Support for Solaris 9 has been removed in GCC 5. Support for Solaris 8 has been removed in GCC 4.8. Support for Solaris 7 has been removed in GCC 4.6. *************** you can install a pre-built GCC to boots *** 1082,1089 **** ‘libstdc++-v3’. We therefore recommend using the following initial sequence of commands

!
!
% CONFIG_SHELL=/bin/ksh
  % export CONFIG_SHELL
  
--- 1150,1157 ---- ‘libstdc++-v3’. We therefore recommend using the following initial sequence of commands

!
!
% CONFIG_SHELL=/bin/ksh
  % export CONFIG_SHELL
  
*************** need to provide a more recent one. *** 1147,1153 ****
!

sparc*-*-*

This section contains general configuration information for all SPARC-based platforms. In addition to reading this section, please read all other sections that match your target. --- 1215,1222 ----


! !

sparc*-*-*

This section contains general configuration information for all SPARC-based platforms. In addition to reading this section, please read all other sections that match your target. *************** of the exact versions of these libraries *** 1159,1165 **** in the prerequisites.


!

sparc-sun-solaris2*

When GCC is configured to use GNU binutils 2.14 or later, the binaries produced are smaller than the ones produced using Solaris native tools; this difference is quite significant for binaries containing debugging --- 1228,1235 ---- in the prerequisites.


! !

sparc-sun-solaris2*

When GCC is configured to use GNU binutils 2.14 or later, the binaries produced are smaller than the ones produced using Solaris native tools; this difference is quite significant for binaries containing debugging *************** target triplet must be specified as the *** 1179,1193 **** configure line. This target triplet can be obtained by invoking ./config.guess in the toplevel source directory of GCC (and not that of GMP or MPFR or MPC). For example on a Solaris 11 system:

!
!
% ./configure --build=sparc-sun-solaris2.11 --prefix=xxx
  

!

sparc-*-linux*


!

sparc64-*-solaris2*

When configuring a 64-bit-default GCC on Solaris/SPARC, you must use a build compiler that generates 64-bit code, either by default or by specifying ‘CC='gcc -m64' CXX='gcc-m64'’ to configure. --- 1249,1265 ---- configure line. This target triplet can be obtained by invoking ./config.guess in the toplevel source directory of GCC (and not that of GMP or MPFR or MPC). For example on a Solaris 11 system:

!
!
% ./configure --build=sparc-sun-solaris2.11 --prefix=xxx
  

! !

sparc-*-linux*


! !

sparc64-*-solaris2*

When configuring a 64-bit-default GCC on Solaris/SPARC, you must use a build compiler that generates 64-bit code, either by default or by specifying ‘CC='gcc -m64' CXX='gcc-m64'’ to configure. *************** library or the MPC library, the canonica *** 1200,1239 **** as the build parameter on the configure line. For example on a Solaris 11 system:

!
!
% ./configure --build=sparc64-sun-solaris2.11 --prefix=xxx
  

!

sparcv9-*-solaris2*

This is a synonym for ‘sparc64-*-solaris2*’.


!

c6x-*-*

The C6X family of processors. This port requires binutils-2.22 or newer.


!

tilegx-*-linux*

The TILE-Gx processor in little endian mode, running GNU/Linux. This port requires binutils-2.22 or newer.


!

tilegxbe-*-linux*

The TILE-Gx processor in big endian mode, running GNU/Linux. This port requires binutils-2.23 or newer.


!

tilepro-*-linux*

The TILEPro processor running GNU/Linux. This port requires binutils-2.22 or newer.


!

visium-*-elf

CDS VISIUMcore processor. This configuration is intended for embedded systems.


!

*-*-vxworks*

Support for VxWorks is in flux. At present GCC supports only the very recent VxWorks 5.5 (aka Tornado 2.2) release, and only on PowerPC. We welcome patches for other architectures supported by VxWorks 5.5. --- 1272,1318 ---- as the build parameter on the configure line. For example on a Solaris 11 system:

!
!
% ./configure --build=sparc64-sun-solaris2.11 --prefix=xxx
  

! !

sparcv9-*-solaris2*

This is a synonym for ‘sparc64-*-solaris2*’.


! !

c6x-*-*

The C6X family of processors. This port requires binutils-2.22 or newer.


! !

tilegx-*-linux*

The TILE-Gx processor in little endian mode, running GNU/Linux. This port requires binutils-2.22 or newer.


! !

tilegxbe-*-linux*

The TILE-Gx processor in big endian mode, running GNU/Linux. This port requires binutils-2.23 or newer.


! !

tilepro-*-linux*

The TILEPro processor running GNU/Linux. This port requires binutils-2.22 or newer.


! !

visium-*-elf

CDS VISIUMcore processor. This configuration is intended for embedded systems.


! !

*-*-vxworks*

Support for VxWorks is in flux. At present GCC supports only the very recent VxWorks 5.5 (aka Tornado 2.2) release, and only on PowerPC. We welcome patches for other architectures supported by VxWorks 5.5. *************** that file to add the module to your kern *** 1266,1279 **** VxWorks will incorporate this module.)


!

x86_64-*-*, amd64-*-*

GCC supports the x86-64 architecture implemented by the AMD64 processor (amd64-*-* is an alias for x86_64-*-*) on GNU/Linux, FreeBSD and NetBSD. On GNU/Linux the default is a bi-arch compiler which is able to generate both 64-bit x86-64 and 32-bit x86 code (via the -m32 switch).


!

x86_64-*-solaris2*

GCC also supports the x86-64 architecture implemented by the AMD64 processor (‘amd64-*-*’ is an alias for ‘x86_64-*-*’) on Solaris 10 or later. Unlike other systems, without special options a --- 1345,1360 ---- VxWorks will incorporate this module.)


! !

x86_64-*-*, amd64-*-*

GCC supports the x86-64 architecture implemented by the AMD64 processor (amd64-*-* is an alias for x86_64-*-*) on GNU/Linux, FreeBSD and NetBSD. On GNU/Linux the default is a bi-arch compiler which is able to generate both 64-bit x86-64 and 32-bit x86 code (via the -m32 switch).


! !

x86_64-*-solaris2*

GCC also supports the x86-64 architecture implemented by the AMD64 processor (‘amd64-*-*’ is an alias for ‘x86_64-*-*’) on Solaris 10 or later. Unlike other systems, without special options a *************** as 64-bit code, configure with --t *** 1286,1292 **** and ‘CC=gcc -m64’.


!

xtensa*-*-elf

This target is intended for embedded Xtensa systems using the ‘newlib’ C library. It uses ELF but does not support shared objects. Designed-defined instructions specified via the --- 1367,1374 ---- and ‘CC=gcc -m64’.


! !

xtensa*-*-elf

This target is intended for embedded Xtensa systems using the ‘newlib’ C library. It uses ELF but does not support shared objects. Designed-defined instructions specified via the *************** downloaded files include a customized co *** 1301,1307 **** which you can use to replace the default header file.


!

xtensa*-*-linux*

This target is for Xtensa systems running GNU/Linux. It supports ELF shared objects and the GNU C library (glibc). It also generates position-independent code (PIC) regardless of whether the --- 1383,1390 ---- which you can use to replace the default header file.


! !

xtensa*-*-linux*

This target is for Xtensa systems running GNU/Linux. It supports ELF shared objects and the GNU C library (glibc). It also generates position-independent code (PIC) regardless of whether the *************** respects, this target is the same as the *** 1310,1325 **** xtensa*-*-elf target.


!

Microsoft Windows

!

Intel 16-bit versions

The 16-bit versions of Microsoft Windows, such as Windows 3.1, are not supported.

However, the 32-bit port has limited support for Microsoft Windows 3.11 in the Win32s environment, as a target only. See below.

!

Intel 32-bit versions

The 32-bit versions of Windows, including Windows 95, Windows NT, Windows XP, and Windows Vista, are supported by several different target platforms. These targets differ in which Windows subsystem they target --- 1393,1411 ---- xtensa*-*-elf target.


! !

Microsoft Windows

! !

Intel 16-bit versions

The 16-bit versions of Microsoft Windows, such as Windows 3.1, are not supported.

However, the 32-bit port has limited support for Microsoft Windows 3.11 in the Win32s environment, as a target only. See below.

! !

Intel 32-bit versions

The 32-bit versions of Windows, including Windows 95, Windows NT, Windows XP, and Windows Vista, are supported by several different target platforms. These targets differ in which Windows subsystem they target *************** the Win32 subsystem that provides a subs *** 1334,1349 **** https://www.mkssoftware.com for more information. !

Intel 64-bit versions

GCC contains support for x86-64 using the mingw-w64 runtime library, available from https://www.mingw-w64.org/downloads/. This library should be used with the target triple x86_64-pc-mingw32.

!

Windows CE

Windows CE is supported as a target only on Hitachi SuperH (sh-wince-pe), and MIPS (mips-wince-pe).

!

Other Windows Platforms

GCC no longer supports Windows NT on the Alpha or PowerPC.

GCC no longer supports the Windows POSIX subsystem. However, it does --- 1420,1438 ---- https://www.mkssoftware.com for more information. ! !

Intel 64-bit versions

GCC contains support for x86-64 using the mingw-w64 runtime library, available from https://www.mingw-w64.org/downloads/. This library should be used with the target triple x86_64-pc-mingw32.

! !

Windows CE

Windows CE is supported as a target only on Hitachi SuperH (sh-wince-pe), and MIPS (mips-wince-pe).

! !

Other Windows Platforms

GCC no longer supports Windows NT on the Alpha or PowerPC.

GCC no longer supports the Windows POSIX subsystem. However, it does *************** be inactive. See

*-*-cygwin

Ports of GCC are included with the Cygwin environment.

--- 1446,1453 ----

UWIN support has been removed due to a lack of maintenance.


! !

*-*-cygwin

Ports of GCC are included with the Cygwin environment.

*************** the latest official GNU binutils release *** 1371,1377 **** or version 2.20 or above if building your own.


!

*-*-mingw32

GCC will build with and support only MinGW runtime 3.12 and later. Earlier versions of headers are incompatible with the new default semantics of extern inline in -std=c99 and -std=gnu99 modes. --- 1461,1468 ---- or version 2.20 or above if building your own.


! !

*-*-mingw32

GCC will build with and support only MinGW runtime 3.12 and later. Earlier versions of headers are incompatible with the new default semantics of extern inline in -std=c99 and -std=gnu99 modes. *************** version 2.16 or above containing support *** 1381,1387 **** assembler pseudo-op.


!

Older systems

GCC contains support files for many older (1980s and early 1990s) Unix variants. For the most part, support for these systems has not been deliberately removed, but it has not been maintained for --- 1472,1479 ---- assembler pseudo-op.


! !

Older systems

GCC contains support files for many older (1980s and early 1990s) Unix variants. For the most part, support for these systems has not been deliberately removed, but it has not been maintained for *************** about GCC on such systems (which may no *** 1424,1430 **** current GCC) is to be found in the GCC texinfo manual.


!

all ELF targets (SVR4, Solaris 2, etc.)

C++ support is significantly better on ELF targets if you use the GNU linker; duplicate copies of inlines, vtables and template instantiations will be discarded --- 1516,1523 ---- current GCC) is to be found in the GCC texinfo manual.


! !

all ELF targets (SVR4, Solaris 2, etc.)

C++ support is significantly better on ELF targets if you use the GNU linker; duplicate copies of inlines, vtables and template instantiations will be discarded diff -Nrcpad gcc-12.4.0/INSTALL/test.html gcc-12.5.0-RC-20250704/INSTALL/test.html *** gcc-12.4.0/INSTALL/test.html Thu Jun 20 08:10:31 2024 --- gcc-12.5.0-RC-20250704/INSTALL/test.html Fri Jul 4 07:24:49 2025 *************** *** 1,8 **** - - - + + + Installing GCC: Testing *************** You have freedom to copy and modify this *** 29,52 **** - - --- 29,58 ---- *************** ul.no-bullet {list-style: none} *** 77,85 **** ! ! !

Before you install GCC, we encourage you to run the testsuites and to compare your results with results from a similar configuration that have --- 83,91 ---- ! ! !

Before you install GCC, we encourage you to run the testsuites and to compare your results with results from a similar configuration that have *************** installed are not in the PATH/usr/local):

!
!
TCL_LIBRARY = /usr/local/share/tcl8.0
  DEJAGNULIBS = /usr/local/share/dejagnu
  
--- 113,120 ---- environment variables appropriately, as in the following example (which assumes that DejaGnu has been installed under /usr/local):

!
!
TCL_LIBRARY = /usr/local/share/tcl8.0
  DEJAGNULIBS = /usr/local/share/dejagnu
  
*************** portability in the DejaGnu code.) *** 118,125 ****

Finally, you can run the testsuite (which may take a long time): !

!
cd objdir; make -k check
  

This will test various components of GCC, such as compiler --- 124,131 ----

Finally, you can run the testsuite (which may take a long time): !

!
cd objdir; make -k check
  

This will test various components of GCC, such as compiler *************** might emit some harmless messages resemb *** 131,137 ****

If you are testing a cross-compiler, you may want to run the testsuite on a simulator as described at https://gcc.gnu.org/simtest-howto.html.

!

How can you run the testsuite on selected tests?

In order to run sets of tests selectively, there are targets --- 137,143 ----

If you are testing a cross-compiler, you may want to run the testsuite on a simulator as described at https://gcc.gnu.org/simtest-howto.html.

!

How can you run the testsuite on selected tests?

In order to run sets of tests selectively, there are targets *************** just run ‘make check& *** 146,160 ****

A more selective way to just run all gcc execute tests in the testsuite is to use

!
!
make check-gcc RUNTESTFLAGS="execute.exp other-options"
  

Likewise, in order to run only the g++ “old-deja” tests in the testsuite with filenames matching ‘9805*’, you would use

!
!
make check-g++ RUNTESTFLAGS="old-deja.exp=9805* other-options"
  

The file-matching expression following filename.exp= is treated --- 152,166 ----

A more selective way to just run all gcc execute tests in the testsuite is to use

!
!
make check-gcc RUNTESTFLAGS="execute.exp other-options"
  

Likewise, in order to run only the g++ “old-deja” tests in the testsuite with filenames matching ‘9805*’, you would use

!
!
make check-g++ RUNTESTFLAGS="old-deja.exp=9805* other-options"
  

The file-matching expression following filename.exp= is treated *************** as a series of whitespace-delimited glob *** 162,169 **** may be passed, although any whitespace must either be escaped or surrounded by single quotes if multiple expressions are desired. For example,

!
!
make check-g++ RUNTESTFLAGS="old-deja.exp=9805*\ virtual2.c other-options"
  make check-g++ RUNTESTFLAGS="'old-deja.exp=9805* virtual2.c' other-options"
  
--- 168,175 ---- may be passed, although any whitespace must either be escaped or surrounded by single quotes if multiple expressions are desired. For example,

!
!
make check-g++ RUNTESTFLAGS="old-deja.exp=9805*\ virtual2.c other-options"
  make check-g++ RUNTESTFLAGS="'old-deja.exp=9805* virtual2.c' other-options"
  
*************** To get a list of the possible *.ex *** 174,181 **** output of ‘make check’ into a file and look at the ‘Running … .exp’ lines.

!
!

Passing options and running multiple testsuites

You can pass multiple options to the testsuite using the --- 180,186 ---- output of ‘make check’ into a file and look at the ‘Running … .exp’ lines.

!

Passing options and running multiple testsuites

You can pass multiple options to the testsuite using the *************** output of ‘make check *** 183,190 **** ‘RUNTESTFLAGS’, or directly to runtest if you prefer to work outside the makefiles. For example,

!
!
make check-g++ RUNTESTFLAGS="--target_board=unix/-O3/-fmerge-constants"
  

will run the standard g++ testsuites (“unix” is the target name --- 188,195 ---- ‘RUNTESTFLAGS’, or directly to runtest if you prefer to work outside the makefiles. For example,

!
!
make check-g++ RUNTESTFLAGS="--target_board=unix/-O3/-fmerge-constants"
  

will run the standard g++ testsuites (“unix” is the target name *************** slashes separate options. *** 195,210 ****

You can run the testsuites multiple times using combinations of options with a syntax similar to the brace expansion of popular shells:

!
!
…"--target_board=arm-sim\{-mhard-float,-msoft-float\}\{-O1,-O2,-O3,\}"
  

(Note the empty option caused by the trailing comma in the final group.) The following will run each testsuite eight times using the ‘arm-sim’ target, as if you had specified all possible combinations yourself:

!
!
--target_board='arm-sim/-mhard-float/-O1 \
                  arm-sim/-mhard-float/-O2 \
                  arm-sim/-mhard-float/-O3 \
                  arm-sim/-mhard-float \
--- 200,215 ----
  

You can run the testsuites multiple times using combinations of options with a syntax similar to the brace expansion of popular shells:

!
!
…"--target_board=arm-sim\{-mhard-float,-msoft-float\}\{-O1,-O2,-O3,\}"
  

(Note the empty option caused by the trailing comma in the final group.) The following will run each testsuite eight times using the ‘arm-sim’ target, as if you had specified all possible combinations yourself:

!
!
--target_board='arm-sim/-mhard-float/-O1 \
                  arm-sim/-mhard-float/-O2 \
                  arm-sim/-mhard-float/-O3 \
                  arm-sim/-mhard-float \
*************** target, as if you had specified all poss
*** 217,224 ****
  

They can be combined as many times as you wish, in arbitrary ways. This list:

!
!
…"--target_board=unix/-Wextra\{-O3,-fno-strength\}\{-fomit-frame,\}"
  

will generate four combinations, all involving ‘-Wextra’. --- 222,229 ----

They can be combined as many times as you wish, in arbitrary ways. This list:

!
!
…"--target_board=unix/-Wextra\{-O3,-fno-strength\}\{-fomit-frame,\}"
  

will generate four combinations, all involving ‘-Wextra’. *************** parallel by having the shell perform the *** 230,243 **** do the parallel runs. Instead of using ‘--target_board’, use a special makefile target:

!
!
make -jN check-testsuite//test-target/option1/option2/…
  

For example,

!
!
make -j3 check-gcc//sh-hms-sim/{-m1,-m2,-m3,-m3e,-m4}/{,-nofpu}
  

will run three concurrent “make-gcc” testsuites, eventually testing all --- 235,248 ---- do the parallel runs. Instead of using ‘--target_board’, use a special makefile target:

!
!
make -jN check-testsuite//test-target/option1/option2/…
  

For example,

!
!
make -j3 check-gcc//sh-hms-sim/{-m1,-m2,-m3,-m3e,-m4}/{,-nofpu}
  

will run three concurrent “make-gcc” testsuites, eventually testing all *************** supported in the gcc subdir *** 246,253 **** typing echo before the example given here.)

!
!

How to interpret test results

The result of running the testsuite are various *.sum and *.log --- 251,257 ---- typing echo before the example given here.)

!

How to interpret test results

The result of running the testsuite are various *.sum and *.log *************** over whether or not a test is expected t *** 272,286 **** be fixed in future releases.

!
!

Submitting test results

If you want to report the results to the GCC project, use the contrib/test_summary shell script. Start it in the objdir with

!
!
srcdir/contrib/test_summary -p your_commentary.txt \
      -m gcc-testresults@gcc.gnu.org |sh
  
--- 276,289 ---- be fixed in future releases.

!

Submitting test results

If you want to report the results to the GCC project, use the contrib/test_summary shell script. Start it in the objdir with

!
!
srcdir/contrib/test_summary -p your_commentary.txt \
      -m gcc-testresults@gcc.gnu.org |sh
  
*************** messages may be automatically processed. *** 300,306 **** !
--- 303,309 ---- !
diff -Nrcpad gcc-12.4.0/LAST_UPDATED gcc-12.5.0-RC-20250704/LAST_UPDATED *** gcc-12.4.0/LAST_UPDATED Thu Jun 20 08:10:29 2024 --- gcc-12.5.0-RC-20250704/LAST_UPDATED Fri Jul 4 07:24:48 2025 *************** *** 1 **** ! Obtained from git: releases/gcc-12.4.0 revision 2bada4bc59bed4be34fab463bdb3c3ebfd2b41bb --- 1 ---- ! Obtained from git: releases/gcc-12 revision b71ac987cd149928d1eecd498a721d4377505da8 diff -Nrcpad gcc-12.4.0/MD5SUMS gcc-12.5.0-RC-20250704/MD5SUMS *** gcc-12.4.0/MD5SUMS Thu Jun 20 08:36:33 2024 --- gcc-12.5.0-RC-20250704/MD5SUMS Fri Jul 4 07:45:06 2025 *************** *** 1,5 **** # This file contains the MD5 checksums of the files in the ! # gcc-12.4.0.tar.xz tarball. # # Besides verifying that all files in the tarball were correctly expanded, # it also can be used to determine if any files have changed since the --- 1,5 ---- # This file contains the MD5 checksums of the files in the ! # gcc-12.5.0-RC-20250704.tar.xz tarball. # # Besides verifying that all files in the tarball were correctly expanded, # it also can be used to determine if any files have changed since the *************** d32239bcb673463ab874e80d47fae504 COPYIN *** 21,52 **** fd4ecdf5d672efe2b0e409aca9cf9446 ChangeLog.jit 09538b708302f1735f6fa05b622ecf5e ChangeLog.tree-ssa 24ab760126489e69436a43185dc3d202 INSTALL/README ! b93d2ca394302dd94200d70f9ce18e9a INSTALL/binaries.html ! 4ff343bb22799689df4157f66fd2e02f INSTALL/build.html ! 5fd84b20eabbc771d129e03d38497f11 INSTALL/configure.html ! 7312f37eca7f87fdaf0109372c9f0fbf INSTALL/download.html ! 12af9db430df6f5e5921262cbd87cc74 INSTALL/finalinstall.html ! 426a68ec13ea682de13e36e6934581a1 INSTALL/gfdl.html ! eec537a84d35419efce0bd937f6ccc5d INSTALL/index.html ! 675cc88506b47eb23db9620a26b6be7e INSTALL/prerequisites.html ! 206aed6ce455c53dbf4771fad7ef04c5 INSTALL/specific.html ! f0298cd4a6e81839709030e3d915984e INSTALL/test.html ! ac6bd3b0432f120dd441ad3cb29c55d8 LAST_UPDATED e854cb1e639422e089031eba0c689e15 MAINTAINERS 5b26d0dff99e7a528342ab4d77a284df Makefile.def e2f1751d40a9663c173f048c1179539e Makefile.in 382a58bdaf362535403c959d6afd6a00 Makefile.tpl ! 82bfc219a55eda78a21962561cdf5317 NEWS 80d26bc3b1ad4f6969a96a24c9181bf5 README a657821f65bab77f4fbf3a75cdee6da9 ar-lib ! 0a9e893aeeadd3c3426b58ee7f0f690a c++tools/ChangeLog 2c6571dc657d98d1537d54460dab13c7 c++tools/Makefile.in edf805e559bf9ecb62db313d2e6edb47 c++tools/config.h.in ccd3498e6b247dfe4e65793a88a27296 c++tools/configure d0a958ed0647ffae3446c59780997d14 c++tools/configure.ac da3f3927414dbcf7878d2d582a2a8992 c++tools/resolver.cc 2f289f995668c3da5c27ce8ce93f91fb c++tools/resolver.h ! 47cce9032389f473d27c2ab8f07441dc c++tools/server.cc 500b9244caa7a7ab23ece1db37efa76d compile 0a5df71d999a1a0135a99ab79fb42e4f config-ml.in c64564b7c7563dae5ebe016f340c9cd9 config.guess --- 21,52 ---- fd4ecdf5d672efe2b0e409aca9cf9446 ChangeLog.jit 09538b708302f1735f6fa05b622ecf5e ChangeLog.tree-ssa 24ab760126489e69436a43185dc3d202 INSTALL/README ! b0c49ff8001cc228ea2b2c71e6eb5f7b INSTALL/binaries.html ! 178498b2c7f5269c5914f2bc9e9b7a6b INSTALL/build.html ! aaa7ee19e5c451962a9923490621fe8c INSTALL/configure.html ! b61913a05566e86adef9f0d3f7b5aa1e INSTALL/download.html ! eade632147e6980dce3a575626bfb7d4 INSTALL/finalinstall.html ! 307ece182d7d9c9f217123598f0a64b1 INSTALL/gfdl.html ! fd2841cf7b80cfa2306f84216efc1f00 INSTALL/index.html ! 8eae0bcb6b491bc75dc2ce6ca9d3ebac INSTALL/prerequisites.html ! 0b655530a682d64e7b648f4cdaabf4a1 INSTALL/specific.html ! 0e9d9f68caad88a4d573cba915fabda6 INSTALL/test.html ! cf1fca6f3438219bbb926d3506825e62 LAST_UPDATED e854cb1e639422e089031eba0c689e15 MAINTAINERS 5b26d0dff99e7a528342ab4d77a284df Makefile.def e2f1751d40a9663c173f048c1179539e Makefile.in 382a58bdaf362535403c959d6afd6a00 Makefile.tpl ! 83debf84248ec92ed6105c6a087cfa92 NEWS 80d26bc3b1ad4f6969a96a24c9181bf5 README a657821f65bab77f4fbf3a75cdee6da9 ar-lib ! cdba9ad76fd0bbd02f33d49b34d63773 c++tools/ChangeLog 2c6571dc657d98d1537d54460dab13c7 c++tools/Makefile.in edf805e559bf9ecb62db313d2e6edb47 c++tools/config.h.in ccd3498e6b247dfe4e65793a88a27296 c++tools/configure d0a958ed0647ffae3446c59780997d14 c++tools/configure.ac da3f3927414dbcf7878d2d582a2a8992 c++tools/resolver.cc 2f289f995668c3da5c27ce8ce93f91fb c++tools/resolver.h ! db4c7cd48951cd321891187571ac2294 c++tools/server.cc 500b9244caa7a7ab23ece1db37efa76d compile 0a5df71d999a1a0135a99ab79fb42e4f config-ml.in c64564b7c7563dae5ebe016f340c9cd9 config.guess *************** b6e3f4950abc6e254b467063381f6473 fixinc *** 347,359 **** 77fbad4fc8ec7be3578d045d003446ec fixincludes/fixinc.in 8ca216a7024876b7eb9b8abc30a30775 fixincludes/fixincl.c adf245e3714f799eafba40af16be8eb5 fixincludes/fixincl.tpl ! cc72e6efd47d1a095fe7c188b475159e fixincludes/fixincl.x 545875b4fe1c26bc3e1befc75b34e9f5 fixincludes/fixlib.c 620c770139fc32c75b975b614d3156e8 fixincludes/fixlib.h 5b2c1fd3ef9d44fb6beb1a0d45ddd533 fixincludes/fixopts.c ed1415e9dbc8f421fd9288bde0d90ad1 fixincludes/fixtests.c 51e915676df084b64297d3c4fb0d9c18 fixincludes/genfixes ! f199934516406bffb5a24919d4a15d99 fixincludes/inclhack.def dd5ae70d9f725bcaf2a15212782db49a fixincludes/mkfixinc.sh 516608ac1550577d47f48809bb512629 fixincludes/mkheaders.in 3aa0563cd682ee61ecd9eb6eea0b0bce fixincludes/procopen.c --- 347,359 ---- 77fbad4fc8ec7be3578d045d003446ec fixincludes/fixinc.in 8ca216a7024876b7eb9b8abc30a30775 fixincludes/fixincl.c adf245e3714f799eafba40af16be8eb5 fixincludes/fixincl.tpl ! 685b21ae517cfa8a5abadb60b39b2c5d fixincludes/fixincl.x 545875b4fe1c26bc3e1befc75b34e9f5 fixincludes/fixlib.c 620c770139fc32c75b975b614d3156e8 fixincludes/fixlib.h 5b2c1fd3ef9d44fb6beb1a0d45ddd533 fixincludes/fixopts.c ed1415e9dbc8f421fd9288bde0d90ad1 fixincludes/fixtests.c 51e915676df084b64297d3c4fb0d9c18 fixincludes/genfixes ! 5be51bfe1bfbcbe918f2cbe8c49a4c02 fixincludes/inclhack.def dd5ae70d9f725bcaf2a15212782db49a fixincludes/mkfixinc.sh 516608ac1550577d47f48809bb512629 fixincludes/mkheaders.in 3aa0563cd682ee61ecd9eb6eea0b0bce fixincludes/procopen.c *************** a22e70b3f29292d0e628450f4bb11e62 fixinc *** 477,488 **** 8baab8698bb83c6b90ef4091c00ddc1e fixincludes/tests/base/unistd.h 75d75572793b62bdd8ff4d1504e0cb4c fixincludes/tests/base/yvals.h 76f58c169c1a57cb2dd035a5136b56dd gcc/ABOUT-GCC-NLS ! 600ff201f0a5614d91d36ef58cbdc432 gcc/BASE-VER 59530bdf33659b29e73d4adb9f9f6552 gcc/COPYING a916467b91076e631dd8edb7424769c7 gcc/COPYING.LIB d32239bcb673463ab874e80d47fae504 gcc/COPYING3 6a6a8e020838b23406c81b19c1d46df6 gcc/COPYING3.LIB ! 1d327b63c68f498384139709162c6a48 gcc/ChangeLog a3b63c675afa7a655cc2bfa8a907af79 gcc/ChangeLog-1997 d9a88529352a010253c2e8fb1ed6023b gcc/ChangeLog-1998 240f08f81cb4699e8b49347db38233db gcc/ChangeLog-1999 --- 477,488 ---- 8baab8698bb83c6b90ef4091c00ddc1e fixincludes/tests/base/unistd.h 75d75572793b62bdd8ff4d1504e0cb4c fixincludes/tests/base/yvals.h 76f58c169c1a57cb2dd035a5136b56dd gcc/ABOUT-GCC-NLS ! 9a9776c4a29fc9afe4138014c4a2d8ba gcc/BASE-VER 59530bdf33659b29e73d4adb9f9f6552 gcc/COPYING a916467b91076e631dd8edb7424769c7 gcc/COPYING.LIB d32239bcb673463ab874e80d47fae504 gcc/COPYING3 6a6a8e020838b23406c81b19c1d46df6 gcc/COPYING3.LIB ! 1e764e7935ce5fe84de2fcb239c54a6f gcc/ChangeLog a3b63c675afa7a655cc2bfa8a907af79 gcc/ChangeLog-1997 d9a88529352a010253c2e8fb1ed6023b gcc/ChangeLog-1998 240f08f81cb4699e8b49347db38233db gcc/ChangeLog-1999 *************** fb3fadb88e1d2b3b640cfaaa5ff11780 gcc/Ch *** 516,522 **** 3eb07e0b2e542409bf73d359f7f65609 gcc/ChangeLog.ptr e13638e26743ba41e6011b76cc00d9a9 gcc/ChangeLog.tree-ssa 739ab47f6425bcea1d05e4fc0542de54 gcc/ChangeLog.tuples ! d80b9edbabe4db241df7a207e52a1153 gcc/DATESTAMP d41d8cd98f00b204e9800998ecf8427e gcc/DEV-PHASE eb92e1ff5e982ca07e173e0eb286d243 gcc/FSFChangeLog 30e1e33411566388b3164558482dc5e6 gcc/FSFChangeLog.10 --- 516,522 ---- 3eb07e0b2e542409bf73d359f7f65609 gcc/ChangeLog.ptr e13638e26743ba41e6011b76cc00d9a9 gcc/ChangeLog.tree-ssa 739ab47f6425bcea1d05e4fc0542de54 gcc/ChangeLog.tuples ! 7257a1e8dde6460b6f972e587613c6e5 gcc/DATESTAMP d41d8cd98f00b204e9800998ecf8427e gcc/DEV-PHASE eb92e1ff5e982ca07e173e0eb286d243 gcc/FSFChangeLog 30e1e33411566388b3164558482dc5e6 gcc/FSFChangeLog.10 *************** ec6799501b2eb2923d5de6a66169dbd2 gcc/ON *** 528,534 **** 40d826b642dccc9eb94a099ef3cefa86 gcc/acinclude.m4 6526979dd900a0b58b7691b478a91fec gcc/aclocal.m4 16a499934b71eb6cf7c0d6899cd6006a gcc/ada/.gitignore ! 3ae363fad0203d324b47b3fb20e1260e gcc/ada/ChangeLog 683be0b07dc4f64f118fd5e8ae9cb30d gcc/ada/ChangeLog-2001 7aff25efb203be4136b8776cdc812956 gcc/ada/ChangeLog-2002 cd2379152000f40157d349018fb9364d gcc/ada/ChangeLog-2003 --- 528,534 ---- 40d826b642dccc9eb94a099ef3cefa86 gcc/acinclude.m4 6526979dd900a0b58b7691b478a91fec gcc/aclocal.m4 16a499934b71eb6cf7c0d6899cd6006a gcc/ada/.gitignore ! a910b3164ae473c754597c1e30e8b191 gcc/ada/ChangeLog 683be0b07dc4f64f118fd5e8ae9cb30d gcc/ada/ChangeLog-2001 7aff25efb203be4136b8776cdc812956 gcc/ada/ChangeLog-2002 cd2379152000f40157d349018fb9364d gcc/ada/ChangeLog-2003 *************** eb047ffc35b1d44455bed0519888503c gcc/ad *** 554,560 **** 2cf41efa2dee24b2dda73018b855edd3 gcc/ada/ChangeLog.tree-ssa 79432d3beb46b4a8f4c4c114203a6527 gcc/ada/Make-generated.in 6c9c3b4249e781ed48c7ae55e8ef9999 gcc/ada/Makefile.in ! 87ef82c8aad0e2530882436cb0a03443 gcc/ada/Makefile.rtl c9e89f300abcda134a1a604241085980 gcc/ada/ada_get_targ.adb 340e6148317da7a48a9b6e559bb78b37 gcc/ada/adabkend.adb 000a9d75ae95cc17f681998d95d6bd95 gcc/ada/adabkend.ads --- 554,560 ---- 2cf41efa2dee24b2dda73018b855edd3 gcc/ada/ChangeLog.tree-ssa 79432d3beb46b4a8f4c4c114203a6527 gcc/ada/Make-generated.in 6c9c3b4249e781ed48c7ae55e8ef9999 gcc/ada/Makefile.in ! 13932977aa55faf7f3d6eb1b11e1ffc7 gcc/ada/Makefile.rtl c9e89f300abcda134a1a604241085980 gcc/ada/ada_get_targ.adb 340e6148317da7a48a9b6e559bb78b37 gcc/ada/adabkend.adb 000a9d75ae95cc17f681998d95d6bd95 gcc/ada/adabkend.ads *************** aaf91eb612c3609411c6e023f5bb66c0 gcc/ad *** 613,619 **** f99a67883670b32df0dfaf4c2e100d99 gcc/ada/cal.c 50ec1344da1b017e65a5eb5a28c9536a gcc/ada/casing.adb 592c20ca587a6b1c899f07001d99fb8a gcc/ada/casing.ads ! bf7dde4bc31048eec96689ff40b3d433 gcc/ada/checks.adb aebcb80ff995a10442ee627fa91ec2f1 gcc/ada/checks.ads 52835d65af202f58a22a7c6767b07408 gcc/ada/cio.c eaf64fd94febe71bc32da33b94997d2d gcc/ada/clean.adb --- 613,619 ---- f99a67883670b32df0dfaf4c2e100d99 gcc/ada/cal.c 50ec1344da1b017e65a5eb5a28c9536a gcc/ada/casing.adb 592c20ca587a6b1c899f07001d99fb8a gcc/ada/casing.ads ! a10a4b0552766baaac60f047cfa640fb gcc/ada/checks.adb aebcb80ff995a10442ee627fa91ec2f1 gcc/ada/checks.ads 52835d65af202f58a22a7c6767b07408 gcc/ada/cio.c eaf64fd94febe71bc32da33b94997d2d gcc/ada/clean.adb *************** b758ca9ff1e670b06faa91172b54821c gcc/ad *** 694,700 **** 4973644be06a9ffee0f1ecc75fd661b8 gcc/ada/eval_fat.adb b3afcb4757e1716de34c0bfa9592e38b gcc/ada/eval_fat.ads 5984eaf2b94418d32ae102682dfdf568 gcc/ada/exit.c ! 20f27f498e9b06aaad420c4fb96b8102 gcc/ada/exp_aggr.adb 36e1c9b931704c591af9513c4532543b gcc/ada/exp_aggr.ads e10405e98b44d560103a055b1f00418e gcc/ada/exp_atag.adb 774118c8b5d8ee467bab29cc546bfe90 gcc/ada/exp_atag.ads --- 694,700 ---- 4973644be06a9ffee0f1ecc75fd661b8 gcc/ada/eval_fat.adb b3afcb4757e1716de34c0bfa9592e38b gcc/ada/eval_fat.ads 5984eaf2b94418d32ae102682dfdf568 gcc/ada/exit.c ! 95dcfffba510fa710ee47514966cfe6b gcc/ada/exp_aggr.adb 36e1c9b931704c591af9513c4532543b gcc/ada/exp_aggr.ads e10405e98b44d560103a055b1f00418e gcc/ada/exp_atag.adb 774118c8b5d8ee467bab29cc546bfe90 gcc/ada/exp_atag.ads *************** c644e5128369eb58431084edb4dbf579 gcc/ad *** 842,848 **** 8aeafbe31b5998852d69e8c9e65a0250 gcc/ada/gnatprep.adb c21a15f7a0586b2c9b64ddd701ce45e3 gcc/ada/gnatprep.ads aaf95b1ef85ff9c1554072f1ea7b261f gcc/ada/gnatvsn.adb ! 650410eaa4c35c6d3957b4aac334800a gcc/ada/gnatvsn.ads 0358a5c8118b84d5a959b3e00266ed8e gcc/ada/gnatxref.adb 49bc19d7e396c6088497a148513098e1 gcc/ada/gprep.adb 9510aa5668897b508c629072d71b3d91 gcc/ada/gprep.ads --- 842,848 ---- 8aeafbe31b5998852d69e8c9e65a0250 gcc/ada/gnatprep.adb c21a15f7a0586b2c9b64ddd701ce45e3 gcc/ada/gnatprep.ads aaf95b1ef85ff9c1554072f1ea7b261f gcc/ada/gnatvsn.adb ! 2731f0ef6817069d3aa648a6b859b967 gcc/ada/gnatvsn.ads 0358a5c8118b84d5a959b3e00266ed8e gcc/ada/gnatxref.adb 49bc19d7e396c6088497a148513098e1 gcc/ada/gprep.adb 9510aa5668897b508c629072d71b3d91 gcc/ada/gprep.ads *************** b58d97b9cc5af0a3d40484f2a2f788a5 gcc/ad *** 1031,1037 **** 4b44bbfaf2b28f517960c74f544e51bf gcc/ada/libgnarl/s-taprob.adb 275b510eed63de65855a8c2c094e1d6c gcc/ada/libgnarl/s-taprob.ads 54de2e2648b91941489bc5540d0c7b2c gcc/ada/libgnarl/s-taprop.ads ! d0470e39c593b3221f3144e31077acfa gcc/ada/libgnarl/s-taprop__dummy.adb 03dfbcf4714bd43ef7fdda008e931854 gcc/ada/libgnarl/s-taprop__hpux-dce.adb c7aeab8526e44003049730e6bf49ccde gcc/ada/libgnarl/s-taprop__linux.adb 649e7e8ebf59815c6185eebb05a7a00c gcc/ada/libgnarl/s-taprop__mingw.adb --- 1031,1037 ---- 4b44bbfaf2b28f517960c74f544e51bf gcc/ada/libgnarl/s-taprob.adb 275b510eed63de65855a8c2c094e1d6c gcc/ada/libgnarl/s-taprob.ads 54de2e2648b91941489bc5540d0c7b2c gcc/ada/libgnarl/s-taprop.ads ! dea0583c120fa806e9b6205f7eeb662c gcc/ada/libgnarl/s-taprop__dummy.adb 03dfbcf4714bd43ef7fdda008e931854 gcc/ada/libgnarl/s-taprop__hpux-dce.adb c7aeab8526e44003049730e6bf49ccde gcc/ada/libgnarl/s-taprop__linux.adb 649e7e8ebf59815c6185eebb05a7a00c gcc/ada/libgnarl/s-taprop__mingw.adb *************** e01e5568219b9887dc3e0af1641e4fcd gcc/ad *** 1335,1347 **** f8a74f5169bf9eba09b0050d2ce025f4 gcc/ada/libgnat/a-ncelfu.ads dc4a387ada5c32ac0973dee502c80457 gcc/ada/libgnat/a-ngcefu.adb 2e229d27b615410dbc242fd1d7d4bd98 gcc/ada/libgnat/a-ngcefu.ads ! f1f543b8e781922438cdc3c5ce02aebe gcc/ada/libgnat/a-ngcoar.adb a26d13d8c2030d72490c9b3c42f94f28 gcc/ada/libgnat/a-ngcoar.ads fff1b31ad32fa569b8c5a4a7ad96c7f3 gcc/ada/libgnat/a-ngcoty.adb d418fbf604b7373dc4c9f00e8ad0bc90 gcc/ada/libgnat/a-ngcoty.ads d4c4c7b457433508926f7d73accc7810 gcc/ada/libgnat/a-ngelfu.adb 6d7cd31ca27629d4a92170ca3c723788 gcc/ada/libgnat/a-ngelfu.ads ! 8564b3477f26c86fe243e7ba097c30e5 gcc/ada/libgnat/a-ngrear.adb 8be04f786df7a145ad4d191f3dc3a166 gcc/ada/libgnat/a-ngrear.ads 7f894c161f872e68b50172715a8a311e gcc/ada/libgnat/a-nlcefu.ads 307582c16af8c2d164031fd8dfb72581 gcc/ada/libgnat/a-nlcoar.ads --- 1335,1347 ---- f8a74f5169bf9eba09b0050d2ce025f4 gcc/ada/libgnat/a-ncelfu.ads dc4a387ada5c32ac0973dee502c80457 gcc/ada/libgnat/a-ngcefu.adb 2e229d27b615410dbc242fd1d7d4bd98 gcc/ada/libgnat/a-ngcefu.ads ! acdc38023b878f3ace2aa0b8ba083013 gcc/ada/libgnat/a-ngcoar.adb a26d13d8c2030d72490c9b3c42f94f28 gcc/ada/libgnat/a-ngcoar.ads fff1b31ad32fa569b8c5a4a7ad96c7f3 gcc/ada/libgnat/a-ngcoty.adb d418fbf604b7373dc4c9f00e8ad0bc90 gcc/ada/libgnat/a-ngcoty.ads d4c4c7b457433508926f7d73accc7810 gcc/ada/libgnat/a-ngelfu.adb 6d7cd31ca27629d4a92170ca3c723788 gcc/ada/libgnat/a-ngelfu.ads ! 0682a3a4a07db927947bb9e9e2b316d2 gcc/ada/libgnat/a-ngrear.adb 8be04f786df7a145ad4d191f3dc3a166 gcc/ada/libgnat/a-ngrear.ads 7f894c161f872e68b50172715a8a311e gcc/ada/libgnat/a-nlcefu.ads 307582c16af8c2d164031fd8dfb72581 gcc/ada/libgnat/a-nlcoar.ads *************** eb4028f006fd0cb6382152163430904e gcc/ad *** 2049,2054 **** --- 2049,2055 ---- 08cf155178bc09bfaa5759d83a788166 gcc/ada/libgnat/s-dmotpr.ads f8a52699d8feb20e69e6a2d502d88050 gcc/ada/libgnat/s-dorepr.adb 010d855fa885ef103c4842495cbebb35 gcc/ada/libgnat/s-dorepr__fma.adb + 4d528424421585e18b2d22bdde89cb4b gcc/ada/libgnat/s-dorepr__freebsd.adb 562128326ef8b16d96a03a2cf4b32819 gcc/ada/libgnat/s-dourea.adb afbaf868483fc31869ca137dc47963d0 gcc/ada/libgnat/s-dourea.ads abcf07c86e5502fd604a8e89dc574f20 gcc/ada/libgnat/s-dsaser.ads *************** a9f6ccfb3b3d25af8699d16d5eb39a61 gcc/ad *** 2874,2880 **** ced6f4c926b27df96eabe9cc72246849 gcc/ada/sem_mech.ads 5e3a726517c8f1a4fcfa6b3073094c1b gcc/ada/sem_prag.adb c6e6052728dc8f38b8706c60a66f87ce gcc/ada/sem_prag.ads ! 80e49f1efa4308862b93520d911ec796 gcc/ada/sem_res.adb 8aafa0bbe0659305fca1075cf9a63c76 gcc/ada/sem_res.ads 30540a00a0ce832eed79b6ff5b0cc1c5 gcc/ada/sem_scil.adb 59032b02529742b631ce33ade9468c5a gcc/ada/sem_scil.ads --- 2875,2881 ---- ced6f4c926b27df96eabe9cc72246849 gcc/ada/sem_mech.ads 5e3a726517c8f1a4fcfa6b3073094c1b gcc/ada/sem_prag.adb c6e6052728dc8f38b8706c60a66f87ce gcc/ada/sem_prag.ads ! c5f9ff072a5526235dbe8788ceeb2b06 gcc/ada/sem_res.adb 8aafa0bbe0659305fca1075cf9a63c76 gcc/ada/sem_res.ads 30540a00a0ce832eed79b6ff5b0cc1c5 gcc/ada/sem_scil.adb 59032b02529742b631ce33ade9468c5a gcc/ada/sem_scil.ads *************** c6e6052728dc8f38b8706c60a66f87ce gcc/ad *** 2882,2889 **** 478eb6ea661d5b540267c4201773eff1 gcc/ada/sem_smem.ads 51410f50817afb7b5094d6a6e5df03ce gcc/ada/sem_type.adb 7e6ab12fc0bce9d19b4e8e0b9327be8f gcc/ada/sem_type.ads ! bcf68d301dcea3e1e527845ed079cbc0 gcc/ada/sem_util.adb ! 746ca2f7005c08414f729a68fc968c6c gcc/ada/sem_util.ads 60cb492388f0caa03e204c000be58bd0 gcc/ada/sem_warn.adb 7b374cdde28e95c32461b8d806966e17 gcc/ada/sem_warn.ads 5fd3414f332fe2b02bd14ccd6d951b9e gcc/ada/set_targ.adb --- 2883,2890 ---- 478eb6ea661d5b540267c4201773eff1 gcc/ada/sem_smem.ads 51410f50817afb7b5094d6a6e5df03ce gcc/ada/sem_type.adb 7e6ab12fc0bce9d19b4e8e0b9327be8f gcc/ada/sem_type.ads ! 30f7472c6a67166b01e7c45a1eafbc67 gcc/ada/sem_util.adb ! f19175e2a8e5feb903fc99cae29f2fb2 gcc/ada/sem_util.ads 60cb492388f0caa03e204c000be58bd0 gcc/ada/sem_warn.adb 7b374cdde28e95c32461b8d806966e17 gcc/ada/sem_warn.ads 5fd3414f332fe2b02bd14ccd6d951b9e gcc/ada/set_targ.adb *************** f6b908ab4dfb434bd6afac8d19ea3276 gcc/ad *** 2971,2977 **** 37b910fbabf4f79382fbd303e310d9fc gcc/ada/validsw.ads dc26bc03330c6085ea3ca9b101ce682c gcc/ada/vast.adb 9900e838f80047e22058c2d7ac2b35fd gcc/ada/vast.ads ! 107a84185fe50c348afd3b9e76042a6e gcc/ada/version.c 49ef8bc97a344f91b927f23054ade642 gcc/ada/vx_stack_info.c 884e1a54368295893128977447d7e59c gcc/ada/vxworks-arm-link.spec e158d4a4cda56237d4f66dfddc3b9915 gcc/ada/vxworks-e500-link.spec --- 2972,2978 ---- 37b910fbabf4f79382fbd303e310d9fc gcc/ada/validsw.ads dc26bc03330c6085ea3ca9b101ce682c gcc/ada/vast.adb 9900e838f80047e22058c2d7ac2b35fd gcc/ada/vast.ads ! 80a9d1726e421d58c661b761812b04b6 gcc/ada/version.c 49ef8bc97a344f91b927f23054ade642 gcc/ada/vx_stack_info.c 884e1a54368295893128977447d7e59c gcc/ada/vxworks-arm-link.spec e158d4a4cda56237d4f66dfddc3b9915 gcc/ada/vxworks-e500-link.spec *************** c4e83b9f0c73f00f8809c61dcc9ecc3b gcc/as *** 3080,3086 **** 7d35e1c3a62d4663c96e9110e4ef797b gcc/attribs.cc f35983fbc75e85ec6bb625c1e3d93060 gcc/attribs.h f2a5b546c85c4efb7d2f0103653a5728 gcc/auto-inc-dec.cc ! 98a3904d4727900960256e4afbf77de7 gcc/auto-profile.cc 96b0d496f959bdb607cc3d80d8f0e62e gcc/auto-profile.h e8ddb5768af138adb4c7dc9ceeef18fc gcc/backend.h 789f9c53260b2e6310c6d9cce6573842 gcc/basic-block.h --- 3081,3087 ---- 7d35e1c3a62d4663c96e9110e4ef797b gcc/attribs.cc f35983fbc75e85ec6bb625c1e3d93060 gcc/attribs.h f2a5b546c85c4efb7d2f0103653a5728 gcc/auto-inc-dec.cc ! c040093414b152f6b63f26402d1aaaa9 gcc/auto-profile.cc 96b0d496f959bdb607cc3d80d8f0e62e gcc/auto-profile.h e8ddb5768af138adb4c7dc9ceeef18fc gcc/backend.h 789f9c53260b2e6310c6d9cce6573842 gcc/basic-block.h *************** e8ddb5768af138adb4c7dc9ceeef18fc gcc/ba *** 3091,3100 **** effc7bf1ccdcbbcde7f3785aa54561c2 gcc/btfout.cc 054e5fb089c16e62b46b994b919a245d gcc/builtin-attrs.def 9397c619ec5582634dc3e244ff03f6c9 gcc/builtin-types.def ! cb0ebb96c500ae3babe07c47b90dc82a gcc/builtins.cc a72c74534e856f4d387a76fa2204ea5b gcc/builtins.def 48b30dc7e25f5905415a1dac460e9750 gcc/builtins.h ! 352544f35e8e1ef116ef08051f376415 gcc/c-family/ChangeLog ea3fa1f4d7390a105fa3caab4f79aaf7 gcc/c-family/ChangeLog.gimple-classes a7afd263f1b3f5cb5c733ee443f9dfe1 gcc/c-family/c-ada-spec.cc 77ea826f6e5f43400d6095c1026cb640 gcc/c-family/c-ada-spec.h --- 3092,3101 ---- effc7bf1ccdcbbcde7f3785aa54561c2 gcc/btfout.cc 054e5fb089c16e62b46b994b919a245d gcc/builtin-attrs.def 9397c619ec5582634dc3e244ff03f6c9 gcc/builtin-types.def ! 0e6f02354e236c8c1ee7e8a0567faf8f gcc/builtins.cc a72c74534e856f4d387a76fa2204ea5b gcc/builtins.def 48b30dc7e25f5905415a1dac460e9750 gcc/builtins.h ! 20d3ca48f2b5f945353c7cf44ea86945 gcc/c-family/ChangeLog ea3fa1f4d7390a105fa3caab4f79aaf7 gcc/c-family/ChangeLog.gimple-classes a7afd263f1b3f5cb5c733ee443f9dfe1 gcc/c-family/c-ada-spec.cc 77ea826f6e5f43400d6095c1026cb640 gcc/c-family/c-ada-spec.h *************** f7c3a2eff4387977c7c4e40122d5fe31 gcc/c- *** 3102,3108 **** 67aa846540cd3d9fe2c7636d03eb4716 gcc/c-family/c-common.cc 8a7421b92ec542eccb81b8a4069ba2ad gcc/c-family/c-common.def bd4a6637b69d074cb9b9ce8f5ffbd9a1 gcc/c-family/c-common.h ! 1d3feccdb648bc027a269369f47b3c83 gcc/c-family/c-cppbuiltin.cc ace6960d00063212ee9ff914f19af263 gcc/c-family/c-dump.cc 80d00f99e45ecd540ec701c130df1919 gcc/c-family/c-format.cc 074df03d16455b2d5d97400267b29292 gcc/c-family/c-format.h --- 3103,3109 ---- 67aa846540cd3d9fe2c7636d03eb4716 gcc/c-family/c-common.cc 8a7421b92ec542eccb81b8a4069ba2ad gcc/c-family/c-common.def bd4a6637b69d074cb9b9ce8f5ffbd9a1 gcc/c-family/c-common.h ! f932a10dfd156811715cae2bb4234b92 gcc/c-family/c-cppbuiltin.cc ace6960d00063212ee9ff914f19af263 gcc/c-family/c-dump.cc 80d00f99e45ecd540ec701c130df1919 gcc/c-family/c-format.cc 074df03d16455b2d5d97400267b29292 gcc/c-family/c-format.h *************** eb037f948fa34a189765877123cb18b4 gcc/c- *** 3127,3140 **** d377f983a2b7608542fc0d1034ab9e5a gcc/c-family/c-target.h 014a9d801945dfd171d22b65b225162c gcc/c-family/c-ubsan.cc 644fa2dfeaf0cfe53b8bca3d6ad5bb1c gcc/c-family/c-ubsan.h ! a8af3dce61b3e9a821c7119465d43e09 gcc/c-family/c-warn.cc 9ba31ec21d4ddd5e65ec4f2a9510fb5f gcc/c-family/c.opt dcb2cef5a26e1633b9899946a2ea78cb gcc/c-family/cppspec.cc 20446c529e92951bf598907c958af026 gcc/c-family/known-headers.cc a68d869def2a6738d328ed7689f87190 gcc/c-family/known-headers.h 55d4227fdfb9e5cd81ffac2fadcf85c9 gcc/c-family/name-hint.h d5e5e6221af65ab5bf8c100105a7e635 gcc/c-family/stub-objc.cc ! f3a00163305dd2c4f3c75f8a0b4d4e5b gcc/c/ChangeLog c34f18ab50963bd48783733e4cc912d5 gcc/c/Make-lang.in bca8b48089af255e3dc7cdc6705005fa gcc/c/c-aux-info.cc a670199451d3424bfef5a97af7e81f86 gcc/c/c-convert.cc --- 3128,3141 ---- d377f983a2b7608542fc0d1034ab9e5a gcc/c-family/c-target.h 014a9d801945dfd171d22b65b225162c gcc/c-family/c-ubsan.cc 644fa2dfeaf0cfe53b8bca3d6ad5bb1c gcc/c-family/c-ubsan.h ! 6b4e83e8fedbcb38954f73dbb25c0a5e gcc/c-family/c-warn.cc 9ba31ec21d4ddd5e65ec4f2a9510fb5f gcc/c-family/c.opt dcb2cef5a26e1633b9899946a2ea78cb gcc/c-family/cppspec.cc 20446c529e92951bf598907c958af026 gcc/c-family/known-headers.cc a68d869def2a6738d328ed7689f87190 gcc/c-family/known-headers.h 55d4227fdfb9e5cd81ffac2fadcf85c9 gcc/c-family/name-hint.h d5e5e6221af65ab5bf8c100105a7e635 gcc/c-family/stub-objc.cc ! a2cae5e7086e3aa581e916a73a9b0f0d gcc/c/ChangeLog c34f18ab50963bd48783733e4cc912d5 gcc/c/Make-lang.in bca8b48089af255e3dc7cdc6705005fa gcc/c/c-aux-info.cc a670199451d3424bfef5a97af7e81f86 gcc/c/c-convert.cc *************** e2d3c0a7888d2d1089c7b84ca5cf8adb gcc/c/ *** 3145,3154 **** 4c41bcf57ef70a715d912f300edcaa93 gcc/c/c-lang.h 98887635b3689bf1da23e924fb5f3af8 gcc/c/c-objc-common.cc 1002460f01d21f3324f0ab1de4f57e08 gcc/c/c-objc-common.h ! d7823112039ac702a5510a61168966bf gcc/c/c-parser.cc 9a67949fe8b699fa17a2d86df0c26982 gcc/c/c-parser.h a0c8332636dfa9ddad34279ddb02f408 gcc/c/c-tree.h ! 4d0fb7afb63cc0802ef9d49ae33d804b gcc/c/c-typeck.cc b7fb26d29af07468efe2938b8b9bf0af gcc/c/config-lang.in 3afc109228b19fcb0d4a94d5d641b0bb gcc/c/gccspec.cc 781af451520f205a34a5c0cf153b304e gcc/c/gimple-parser.cc --- 3146,3155 ---- 4c41bcf57ef70a715d912f300edcaa93 gcc/c/c-lang.h 98887635b3689bf1da23e924fb5f3af8 gcc/c/c-objc-common.cc 1002460f01d21f3324f0ab1de4f57e08 gcc/c/c-objc-common.h ! 9be233372fedf36b32c47d6b0e50a13e gcc/c/c-parser.cc 9a67949fe8b699fa17a2d86df0c26982 gcc/c/c-parser.h a0c8332636dfa9ddad34279ddb02f408 gcc/c/c-tree.h ! 37a05495394ba2e62ef4727ee3a2f89c gcc/c/c-typeck.cc b7fb26d29af07468efe2938b8b9bf0af gcc/c/config-lang.in 3afc109228b19fcb0d4a94d5d641b0bb gcc/c/gccspec.cc 781af451520f205a34a5c0cf153b304e gcc/c/gimple-parser.cc *************** d28ee28e1915a34068f3acb03f4a49bb gcc/cf *** 3167,3173 **** b12c021dcabda408f8a77b1262578938 gcc/cfgbuild.h a4a247f647880ceaa0b9d18d5312a4b7 gcc/cfgcleanup.cc 26d6ce4714a68321ba5ee3ca8d8d5042 gcc/cfgcleanup.h ! 7d8e9abcbf726ac326e731f09fd14e4a gcc/cfgexpand.cc 2081ed1f982aff326fd96314f500b487 gcc/cfgexpand.h 9425b52a9b66d59c96ac2ccb5f5fb020 gcc/cfghooks.cc c07ae507570a86e164131d0adbb19c7a gcc/cfghooks.h --- 3168,3174 ---- b12c021dcabda408f8a77b1262578938 gcc/cfgbuild.h a4a247f647880ceaa0b9d18d5312a4b7 gcc/cfgcleanup.cc 26d6ce4714a68321ba5ee3ca8d8d5042 gcc/cfgcleanup.h ! 99494bcd099bcd958b7ee3ed82acc308 gcc/cfgexpand.cc 2081ed1f982aff326fd96314f500b487 gcc/cfgexpand.h 9425b52a9b66d59c96ac2ccb5f5fb020 gcc/cfghooks.cc c07ae507570a86e164131d0adbb19c7a gcc/cfghooks.h *************** c07ae507570a86e164131d0adbb19c7a gcc/cf *** 3178,3184 **** 4455a96e3179beb08bf7d4c4275ea90a gcc/cfgloopmanip.h 06df51e753cd5e404ce6c631e9f53a74 gcc/cfgrtl.cc 3040600eba8d49493411fbff497fd94b gcc/cfgrtl.h ! a9e07719fdcc54085a77ed0d2cfa2ba1 gcc/cgraph.cc 36f2d894754990a4d109b7c95700ab75 gcc/cgraph.h 5757ec66e81724328cf4c78ce0354445 gcc/cgraphbuild.cc af0efaf9e2173f391a376b4f8f61037f gcc/cgraphclones.cc --- 3179,3185 ---- 4455a96e3179beb08bf7d4c4275ea90a gcc/cfgloopmanip.h 06df51e753cd5e404ce6c631e9f53a74 gcc/cfgrtl.cc 3040600eba8d49493411fbff497fd94b gcc/cfgrtl.h ! a11456a9397736bbc4b4d21681ba0123 gcc/cgraph.cc 36f2d894754990a4d109b7c95700ab75 gcc/cgraph.h 5757ec66e81724328cf4c78ce0354445 gcc/cgraphbuild.cc af0efaf9e2173f391a376b4f8f61037f gcc/cgraphclones.cc *************** edbea9c45bd94aaebcdc56d9cf836f77 gcc/co *** 3192,3198 **** 2ec72d0e57c1f7b840013ba711e852c7 gcc/collect2.h a11d1e0986f7e4980609556464f7402b gcc/color-macros.h 8944f9bf83d393ae5343dc8323fbe27c gcc/combine-stack-adj.cc ! 4128cbee668e7335703ba833dccbd4c4 gcc/combine.cc 95a28c5bec13efb49456ad7b0b35c5e8 gcc/common.md e204bf4b5990ec9536bc7ebd5fbed741 gcc/common.opt 1dfb24e07014e2857e3871b986f7cda8 gcc/common/common-target-def.h --- 3193,3199 ---- 2ec72d0e57c1f7b840013ba711e852c7 gcc/collect2.h a11d1e0986f7e4980609556464f7402b gcc/color-macros.h 8944f9bf83d393ae5343dc8323fbe27c gcc/combine-stack-adj.cc ! a3cb6b5d84c46d042e97ebc7b53d0394 gcc/combine.cc 95a28c5bec13efb49456ad7b0b35c5e8 gcc/common.md e204bf4b5990ec9536bc7ebd5fbed741 gcc/common.opt 1dfb24e07014e2857e3871b986f7cda8 gcc/common/common-target-def.h *************** cd40090c6b0ff392d059a73dafb6c8e7 gcc/co *** 3217,3225 **** 20e390668a44860c3145733d9c796800 gcc/common/config/frv/frv-common.cc be9b9d41f6660137eeec7dfdf8a7f359 gcc/common/config/gcn/gcn-common.cc 165032b6a1a6571ace982867c4ff2039 gcc/common/config/h8300/h8300-common.cc ! 15b82148b3920dba211649a5ab23b40e gcc/common/config/i386/cpuinfo.h ! 3737d93d5e1cf0e50e1596dbfcfc3452 gcc/common/config/i386/i386-common.cc ! 09f083db704de0dbd05d89d9a77468d5 gcc/common/config/i386/i386-cpuinfo.h 3f143be99f8781c66861c65ae2a601a3 gcc/common/config/i386/i386-isas.h 5494bdbe00937fd7a5af86c32a0899ff gcc/common/config/ia64/ia64-common.cc 6dbb6f1d886765f6d8351ac84a0be2e5 gcc/common/config/iq2000/iq2000-common.cc --- 3218,3226 ---- 20e390668a44860c3145733d9c796800 gcc/common/config/frv/frv-common.cc be9b9d41f6660137eeec7dfdf8a7f359 gcc/common/config/gcn/gcn-common.cc 165032b6a1a6571ace982867c4ff2039 gcc/common/config/h8300/h8300-common.cc ! aa69d82c23a0b653e473816c76c4c069 gcc/common/config/i386/cpuinfo.h ! a25efb2ffc0fd7746933f33703369cee gcc/common/config/i386/i386-common.cc ! adfbeec7fc338b785010778a6714a321 gcc/common/config/i386/i386-cpuinfo.h 3f143be99f8781c66861c65ae2a601a3 gcc/common/config/i386/i386-isas.h 5494bdbe00937fd7a5af86c32a0899ff gcc/common/config/ia64/ia64-common.cc 6dbb6f1d886765f6d8351ac84a0be2e5 gcc/common/config/iq2000/iq2000-common.cc *************** e0c84d669ee99cd7622e8c33152058ed gcc/co *** 3256,3271 **** 25664084a9decb16a9842381eb5de52d gcc/compare-elim.cc 7d9fe45f414a34e7ac860c896c22256a gcc/conditions.h 6a09dc5d69c18159e48b650b80038ce6 gcc/config.build ! 43bf829407a766488ab296a7c420d149 gcc/config.gcc f9e9c6799c33fd97ecef8d0371a5960e gcc/config.host ! d2539a7b151ea00b14ee8995c3be8c0e gcc/config.in 8e697813dc96ca90f5d0f4c196efe2cc gcc/config/README f1de29e1b542d2f98786a8a5bed74596 gcc/config/aarch64/aarch64-arches.def fe42934bb2be20fce3a65bddc5f20adf gcc/config/aarch64/aarch64-bti-insert.cc 8db85981761ae473436b6df5503400e5 gcc/config/aarch64/aarch64-builtins.cc ! 3a596e16575b27f2763dd0c1aa74b9a6 gcc/config/aarch64/aarch64-c.cc 228a5b455d8db6951f07072ca3e905a0 gcc/config/aarch64/aarch64-cc-fusion.cc ! 7a31061721060f1b5fece4c161bd8841 gcc/config/aarch64/aarch64-cores.def 1bef2bc91d6c2282d3b5a48cdccc9a9b gcc/config/aarch64/aarch64-cost-tables.h bfcad118f4e1d0faf33cd0f4724802c5 gcc/config/aarch64/aarch64-d.cc a7af803a36f47f80fa9cab4d71a67940 gcc/config/aarch64/aarch64-d.h --- 3257,3272 ---- 25664084a9decb16a9842381eb5de52d gcc/compare-elim.cc 7d9fe45f414a34e7ac860c896c22256a gcc/conditions.h 6a09dc5d69c18159e48b650b80038ce6 gcc/config.build ! a36897732f44933d376b872a2b8da9e5 gcc/config.gcc f9e9c6799c33fd97ecef8d0371a5960e gcc/config.host ! 7f75571c61d799f96e7a05ada9bd45d0 gcc/config.in 8e697813dc96ca90f5d0f4c196efe2cc gcc/config/README f1de29e1b542d2f98786a8a5bed74596 gcc/config/aarch64/aarch64-arches.def fe42934bb2be20fce3a65bddc5f20adf gcc/config/aarch64/aarch64-bti-insert.cc 8db85981761ae473436b6df5503400e5 gcc/config/aarch64/aarch64-builtins.cc ! 1577692876c296fa97c7fe32f60f30b6 gcc/config/aarch64/aarch64-c.cc 228a5b455d8db6951f07072ca3e905a0 gcc/config/aarch64/aarch64-cc-fusion.cc ! 40d71800573021fcd59821be012e166a gcc/config/aarch64/aarch64-cores.def 1bef2bc91d6c2282d3b5a48cdccc9a9b gcc/config/aarch64/aarch64-cost-tables.h bfcad118f4e1d0faf33cd0f4724802c5 gcc/config/aarch64/aarch64-d.cc a7af803a36f47f80fa9cab4d71a67940 gcc/config/aarch64/aarch64-d.h *************** be2d39d69b16e211235b01445aa8434d gcc/co *** 3286,3292 **** 605913e6bba64efb989549a141209408 gcc/config/aarch64/aarch64-simd-builtins.def eb4ee2e7be03c43ecbad8d44393fc9d6 gcc/config/aarch64/aarch64-simd.md 89b6e3bb922a7ecffb1ea41a6096a245 gcc/config/aarch64/aarch64-speculation.cc ! 1dfc36ff708ed17d15151c526f798cfa gcc/config/aarch64/aarch64-sve-builtins-base.cc 5d4f0cd0807c7b852603326ad3b0b5ac gcc/config/aarch64/aarch64-sve-builtins-base.def cbf190821c63dfc5a59e6ff4f682d34e gcc/config/aarch64/aarch64-sve-builtins-base.h d2457037123414759e6ef743d9c63a7a gcc/config/aarch64/aarch64-sve-builtins-functions.h --- 3287,3293 ---- 605913e6bba64efb989549a141209408 gcc/config/aarch64/aarch64-simd-builtins.def eb4ee2e7be03c43ecbad8d44393fc9d6 gcc/config/aarch64/aarch64-simd.md 89b6e3bb922a7ecffb1ea41a6096a245 gcc/config/aarch64/aarch64-speculation.cc ! c8b10cbd8463c76c0c69869fd19be938 gcc/config/aarch64/aarch64-sve-builtins-base.cc 5d4f0cd0807c7b852603326ad3b0b5ac gcc/config/aarch64/aarch64-sve-builtins-base.def cbf190821c63dfc5a59e6ff4f682d34e gcc/config/aarch64/aarch64-sve-builtins-base.h d2457037123414759e6ef743d9c63a7a gcc/config/aarch64/aarch64-sve-builtins-functions.h *************** d53d0fbc6526d523bedefd90ee66c697 gcc/co *** 3298,3311 **** 4ee5cc2c228992609e084d50e91244a4 gcc/config/aarch64/aarch64-sve-builtins.cc 383ed610f544cbe7d2313216b980674d gcc/config/aarch64/aarch64-sve-builtins.def 85b90f18099c71fc34e444232db3299e gcc/config/aarch64/aarch64-sve-builtins.h ! 97d187db01e9e11ef088f9a15fc481e6 gcc/config/aarch64/aarch64-sve.md 4a8e12ce42731642b5f6346e6f2509b5 gcc/config/aarch64/aarch64-sve2.md ! 6205ae3ac0346139e0b7de98e127e761 gcc/config/aarch64/aarch64-tune.md 6c7986c4d9051e8d2c655a393c08965a gcc/config/aarch64/aarch64-tuning-flags.def 4f60050851035039851c9bded03b452d gcc/config/aarch64/aarch64-vxworks.h ! b3b16035524292a1bb4eb281dd94e356 gcc/config/aarch64/aarch64.cc c91f3bcf184147536b8712f1f259177a gcc/config/aarch64/aarch64.h ! 1883f5e6689b3fafcc7c6ef49a64eb11 gcc/config/aarch64/aarch64.md 3d8b1c6373873351739af54d209f8abe gcc/config/aarch64/aarch64.opt bec9f610ee73c38f986c017ad5b57b7f gcc/config/aarch64/arm_acle.h 8c46e4dc6d25951568fbb758738a675e gcc/config/aarch64/arm_bf16.h --- 3299,3312 ---- 4ee5cc2c228992609e084d50e91244a4 gcc/config/aarch64/aarch64-sve-builtins.cc 383ed610f544cbe7d2313216b980674d gcc/config/aarch64/aarch64-sve-builtins.def 85b90f18099c71fc34e444232db3299e gcc/config/aarch64/aarch64-sve-builtins.h ! 9e3be44af18b278f378ee5750a5c3543 gcc/config/aarch64/aarch64-sve.md 4a8e12ce42731642b5f6346e6f2509b5 gcc/config/aarch64/aarch64-sve2.md ! 184968231b51aa8f6411c16f5b7617b7 gcc/config/aarch64/aarch64-tune.md 6c7986c4d9051e8d2c655a393c08965a gcc/config/aarch64/aarch64-tuning-flags.def 4f60050851035039851c9bded03b452d gcc/config/aarch64/aarch64-vxworks.h ! ec43f00d32b6d79297618c576c49504e gcc/config/aarch64/aarch64.cc c91f3bcf184147536b8712f1f259177a gcc/config/aarch64/aarch64.h ! 8caef4f52d1d9ea6813f3604e8dd5699 gcc/config/aarch64/aarch64.md 3d8b1c6373873351739af54d209f8abe gcc/config/aarch64/aarch64.opt bec9f610ee73c38f986c017ad5b57b7f gcc/config/aarch64/arm_acle.h 8c46e4dc6d25951568fbb758738a675e gcc/config/aarch64/arm_bf16.h *************** a07ee362a4961e9d41cb0ab83553de74 gcc/co *** 3345,3351 **** e89eb587493c56bdc128738eea0198b4 gcc/config/alpha/alpha-protos.h e9c377b9e5c7dee01b1c710b5b118fc0 gcc/config/alpha/alpha.cc 05c0209aea53a4b5fe54f1962ba99c45 gcc/config/alpha/alpha.h ! 58efd6f77af8bbdb19e3b179619f5079 gcc/config/alpha/alpha.md bf0393dd31f6ef36bef17dc70498bb0d gcc/config/alpha/alpha.opt 423542683a8c90ccc4156f5701fddbec gcc/config/alpha/constraints.md 201f3f214a1b283e6a27afe845fad351 gcc/config/alpha/driver-alpha.cc --- 3346,3352 ---- e89eb587493c56bdc128738eea0198b4 gcc/config/alpha/alpha-protos.h e9c377b9e5c7dee01b1c710b5b118fc0 gcc/config/alpha/alpha.cc 05c0209aea53a4b5fe54f1962ba99c45 gcc/config/alpha/alpha.h ! b8e0475c51042c70e423581631803e2a gcc/config/alpha/alpha.md bf0393dd31f6ef36bef17dc70498bb0d gcc/config/alpha/alpha.opt 423542683a8c90ccc4156f5701fddbec gcc/config/alpha/constraints.md 201f3f214a1b283e6a27afe845fad351 gcc/config/alpha/driver-alpha.cc *************** c2d0c814a2ee25dbbb1edfceeb6f5683 gcc/co *** 3426,3432 **** e6d8d15841677273be28f2c17f0334d0 gcc/config/arm/arm-simd-builtin-types.def 5760ab040aa998c3ead41b255c932c2e gcc/config/arm/arm-tables.opt 92cd8a4833cea94a90965e7682f7a34c gcc/config/arm/arm-tune.md ! f690165fb40e5eb0944c4a7c6d5b8958 gcc/config/arm/arm.cc 7fc9da8a136669bc443455b6424ccc9b gcc/config/arm/arm.h baa138251371e569c79b7ed7b5315efc gcc/config/arm/arm.md ad6a9cfbbef5a63b153aea7b4ddcea81 gcc/config/arm/arm.opt --- 3427,3433 ---- e6d8d15841677273be28f2c17f0334d0 gcc/config/arm/arm-simd-builtin-types.def 5760ab040aa998c3ead41b255c932c2e gcc/config/arm/arm-tables.opt 92cd8a4833cea94a90965e7682f7a34c gcc/config/arm/arm-tune.md ! 6a8092d877966389b71b5520603cf519 gcc/config/arm/arm.cc 7fc9da8a136669bc443455b6424ccc9b gcc/config/arm/arm.h baa138251371e569c79b7ed7b5315efc gcc/config/arm/arm.md ad6a9cfbbef5a63b153aea7b4ddcea81 gcc/config/arm/arm.opt *************** f82fe1ddbe3db8a800ef98ecafa6bd46 gcc/co *** 3441,3449 **** fc5cc271a5697d0016cd6c64a67c71db gcc/config/arm/arm_cde_builtins.def 2d8f46acb748e5350c359a70c09571a8 gcc/config/arm/arm_cmse.h c4cb23cd7b0bb7e50703761c71c47806 gcc/config/arm/arm_fp16.h ! c0efc85f8545791b68603e4c54d8c26f gcc/config/arm/arm_mve.h 4d52cc595e40683c2116c1c9505f3c21 gcc/config/arm/arm_mve_builtins.def ! 675c2bc4d01144ddb0d3ca1324746a54 gcc/config/arm/arm_mve_types.h 46cdfe229792555c51a5405c7d7daaf3 gcc/config/arm/arm_neon.h 1c21874aa25780518de958786ec1fc00 gcc/config/arm/arm_neon_builtins.def b713bc09f037a0f4cd254202dd76a14b gcc/config/arm/arm_vfp_builtins.def --- 3442,3450 ---- fc5cc271a5697d0016cd6c64a67c71db gcc/config/arm/arm_cde_builtins.def 2d8f46acb748e5350c359a70c09571a8 gcc/config/arm/arm_cmse.h c4cb23cd7b0bb7e50703761c71c47806 gcc/config/arm/arm_fp16.h ! a3e7d7b69d2684bf51fd3491644613c4 gcc/config/arm/arm_mve.h 4d52cc595e40683c2116c1c9505f3c21 gcc/config/arm/arm_mve_builtins.def ! 78e4608b1bf816c1b8e1e8c8a7d9d217 gcc/config/arm/arm_mve_types.h 46cdfe229792555c51a5405c7d7daaf3 gcc/config/arm/arm_neon.h 1c21874aa25780518de958786ec1fc00 gcc/config/arm/arm_neon_builtins.def b713bc09f037a0f4cd254202dd76a14b gcc/config/arm/arm_vfp_builtins.def *************** b50c07130eb3ca41d10c14b178702537 gcc/co *** 3490,3496 **** 412a503ee16d05e1867a26c7d731c031 gcc/config/arm/marvell-f-iwmmxt.md eca77d0ebe850d280b635d61d19d0052 gcc/config/arm/marvell-pj4.md 37e6b29bad3412ebd9262122316c26f8 gcc/config/arm/mmintrin.h ! d8e9c12f73f488a2247e7fdda0567ca3 gcc/config/arm/mve.md b263140b79efc075c33734e48b7008b9 gcc/config/arm/neon.md 9d7507b760b746eedf6516e465f78934 gcc/config/arm/netbsd-eabi.h 2acba2050567d91862751ac4509442fc gcc/config/arm/netbsd-elf.h --- 3491,3497 ---- 412a503ee16d05e1867a26c7d731c031 gcc/config/arm/marvell-f-iwmmxt.md eca77d0ebe850d280b635d61d19d0052 gcc/config/arm/marvell-pj4.md 37e6b29bad3412ebd9262122316c26f8 gcc/config/arm/mmintrin.h ! 31d6e5d35408d86c0e4293a9d7590ef1 gcc/config/arm/mve.md b263140b79efc075c33734e48b7008b9 gcc/config/arm/neon.md 9d7507b760b746eedf6516e465f78934 gcc/config/arm/netbsd-eabi.h 2acba2050567d91862751ac4509442fc gcc/config/arm/netbsd-elf.h *************** df81f23fd0210a50276836db87675296 gcc/co *** 3531,3537 **** d483c5d70f26ba46db3fd243f30229fc gcc/config/avr/avr-arch.h 2f32979b314fdfa213d04509e193eea9 gcc/config/avr/avr-c.cc 952ae95453da752980ef4fbee9df9c44 gcc/config/avr/avr-devices.cc ! d64e43aad4ad9bbf3d299acd55495ac0 gcc/config/avr/avr-dimode.md f8da9c6ca3a4de8f25b05bad4aab4103 gcc/config/avr/avr-fixed.md 0a144448d4f6070a4b9fcace87d0201f gcc/config/avr/avr-log.cc 09ce676bb7cf71f13790ea4501506101 gcc/config/avr/avr-mcus.def --- 3532,3538 ---- d483c5d70f26ba46db3fd243f30229fc gcc/config/avr/avr-arch.h 2f32979b314fdfa213d04509e193eea9 gcc/config/avr/avr-c.cc 952ae95453da752980ef4fbee9df9c44 gcc/config/avr/avr-devices.cc ! 6804a4c46854aac30da4007a99d120ec gcc/config/avr/avr-dimode.md f8da9c6ca3a4de8f25b05bad4aab4103 gcc/config/avr/avr-fixed.md 0a144448d4f6070a4b9fcace87d0201f gcc/config/avr/avr-log.cc 09ce676bb7cf71f13790ea4501506101 gcc/config/avr/avr-mcus.def *************** f8da9c6ca3a4de8f25b05bad4aab4103 gcc/co *** 3539,3547 **** a0fc31d8a59f7d686e973180e1669f56 gcc/config/avr/avr-passes.def 8f3858c21eacb8bac31962b42074a3d0 gcc/config/avr/avr-protos.h 164ff6dd3b6f3a910fed5a48242842d5 gcc/config/avr/avr-stdint.h ! 7b5ca8cf22bead3a6e27ed383769be3d gcc/config/avr/avr.cc ed39df13044ebe7bc1b2f5ff146ac579 gcc/config/avr/avr.h ! 149e0a205cf14ccd500e344eed283927 gcc/config/avr/avr.md 6edbfde303cb883ffe1050b8e0085fd4 gcc/config/avr/avr.opt eaed73ea14d92bf236ad5c9187507c16 gcc/config/avr/avrlibc.h 9f9294792b117b0797422b0f0fd8db86 gcc/config/avr/builtins.def --- 3540,3548 ---- a0fc31d8a59f7d686e973180e1669f56 gcc/config/avr/avr-passes.def 8f3858c21eacb8bac31962b42074a3d0 gcc/config/avr/avr-protos.h 164ff6dd3b6f3a910fed5a48242842d5 gcc/config/avr/avr-stdint.h ! ef3b5d93147930af488ac406b11de981 gcc/config/avr/avr.cc ed39df13044ebe7bc1b2f5ff146ac579 gcc/config/avr/avr.h ! abe39355f4b308847b7f1600d271e95c gcc/config/avr/avr.md 6edbfde303cb883ffe1050b8e0085fd4 gcc/config/avr/avr.opt eaed73ea14d92bf236ad5c9187507c16 gcc/config/avr/avrlibc.h 9f9294792b117b0797422b0f0fd8db86 gcc/config/avr/builtins.def *************** f45abe10e3aa93ce43dc8cdba5640b58 gcc/co *** 3669,3675 **** 6d32e8a940bb7132ce6928ce2767a4e5 gcc/config/darwin-protos.h 6db41de9eb5ca0404e49baaa94feddc1 gcc/config/darwin-sections.def 82212d8fc6ccddcaac88d0eeb35d2bf1 gcc/config/darwin.cc ! 2b57f631a28d110f81bca230156aee14 gcc/config/darwin.h 03ee4661b994ef3daddfe9a40d567124 gcc/config/darwin.opt 3565bbd41b50b8b5d5ee9ea2a2f7418a gcc/config/dbxcoff.h 6d89a3bd0a87690df3f4303c420c070f gcc/config/dbxelf.h --- 3670,3676 ---- 6d32e8a940bb7132ce6928ce2767a4e5 gcc/config/darwin-protos.h 6db41de9eb5ca0404e49baaa94feddc1 gcc/config/darwin-sections.def 82212d8fc6ccddcaac88d0eeb35d2bf1 gcc/config/darwin.cc ! 6708f987f925d9e3640332ad37ca70e0 gcc/config/darwin.h 03ee4661b994ef3daddfe9a40d567124 gcc/config/darwin.opt 3565bbd41b50b8b5d5ee9ea2a2f7418a gcc/config/dbxcoff.h 6d89a3bd0a87690df3f4303c420c070f gcc/config/dbxelf.h *************** bde1cc60bc22dd5c40dbe9162fbe2181 gcc/co *** 3810,3819 **** 0d1af95164b629c8b7619906eaa97f05 gcc/config/i386/avx512bitalgintrin.h 57f72074beed4351594174390bd9b12c gcc/config/i386/avx512bwintrin.h ec59a1f379b4a6d2df23c1d1f791a3b9 gcc/config/i386/avx512cdintrin.h ! b8f23feb64286343e8c537a762328cd8 gcc/config/i386/avx512dqintrin.h a21425cd910ddeaed645e93c404ffdfd gcc/config/i386/avx512erintrin.h c70510aeae161f6db18254c909ae296f gcc/config/i386/avx512fintrin.h ! f6a397fcaafe179a3fcf582de0587a18 gcc/config/i386/avx512fp16intrin.h d1ea9818a80c84dadac9be7405cc15e2 gcc/config/i386/avx512fp16vlintrin.h ac74949772b9541e61d1682972037dae gcc/config/i386/avx512ifmaintrin.h fc191ab288a6a41536ca5d96ad45699b gcc/config/i386/avx512ifmavlintrin.h --- 3811,3820 ---- 0d1af95164b629c8b7619906eaa97f05 gcc/config/i386/avx512bitalgintrin.h 57f72074beed4351594174390bd9b12c gcc/config/i386/avx512bwintrin.h ec59a1f379b4a6d2df23c1d1f791a3b9 gcc/config/i386/avx512cdintrin.h ! b77f1c53d72a7cb82b2d77f1ba5b4893 gcc/config/i386/avx512dqintrin.h a21425cd910ddeaed645e93c404ffdfd gcc/config/i386/avx512erintrin.h c70510aeae161f6db18254c909ae296f gcc/config/i386/avx512fintrin.h ! 4c25d513dba377aca7863eabaa7d3d4b gcc/config/i386/avx512fp16intrin.h d1ea9818a80c84dadac9be7405cc15e2 gcc/config/i386/avx512fp16vlintrin.h ac74949772b9541e61d1682972037dae gcc/config/i386/avx512ifmaintrin.h fc191ab288a6a41536ca5d96ad45699b gcc/config/i386/avx512ifmavlintrin.h *************** fc191ab288a6a41536ca5d96ad45699b gcc/co *** 3822,3830 **** d653d694cb28bfc56860269d956df861 gcc/config/i386/avx512vbmi2vlintrin.h defbe635d7ee201cee8ca21199314805 gcc/config/i386/avx512vbmiintrin.h 79fb67ae683bc52be5dffa7356b50e53 gcc/config/i386/avx512vbmivlintrin.h ! e1a827ccee55d539e84cc4221c704f1f gcc/config/i386/avx512vlbwintrin.h 03026296f468ffeaa3c1a073aa5397ad gcc/config/i386/avx512vldqintrin.h ! baeb5882f6596e82a75b91e6ae18f054 gcc/config/i386/avx512vlintrin.h 25b2058dfd67782c5354eba5d7d350e6 gcc/config/i386/avx512vnniintrin.h 2de001abaf8dccb13af0bedd3a865855 gcc/config/i386/avx512vnnivlintrin.h c3c8d8a04233e3add79dddec32b01182 gcc/config/i386/avx512vp2intersectintrin.h --- 3823,3831 ---- d653d694cb28bfc56860269d956df861 gcc/config/i386/avx512vbmi2vlintrin.h defbe635d7ee201cee8ca21199314805 gcc/config/i386/avx512vbmiintrin.h 79fb67ae683bc52be5dffa7356b50e53 gcc/config/i386/avx512vbmivlintrin.h ! 68e0359c57dea41f5b91085536bf513e gcc/config/i386/avx512vlbwintrin.h 03026296f468ffeaa3c1a073aa5397ad gcc/config/i386/avx512vldqintrin.h ! 5da7013a833ba5fa90c9ba359c9399e4 gcc/config/i386/avx512vlintrin.h 25b2058dfd67782c5354eba5d7d350e6 gcc/config/i386/avx512vnniintrin.h 2de001abaf8dccb13af0bedd3a865855 gcc/config/i386/avx512vnnivlintrin.h c3c8d8a04233e3add79dddec32b01182 gcc/config/i386/avx512vp2intersectintrin.h *************** f7ca71f828338d4873e78b9b6bd6ccd5 gcc/co *** 3849,3855 **** bc01acfe036d2d3ce5793b08e7e71e84 gcc/config/i386/clflushoptintrin.h 8a68f20d16a95399525876593d0f0c5e gcc/config/i386/clwbintrin.h 08ed13abc6279c8d104750728c0eda30 gcc/config/i386/clzerointrin.h ! 6f7a046604e438dfd3188b35279b140b gcc/config/i386/constraints.md 723dcedc010d5320b4aaf22a6c002f15 gcc/config/i386/core2.md 09cc0a2e973bdd1c8da875aea61cfbf9 gcc/config/i386/cpuid.h c458e148668e78e4e02a6f3565ab7e07 gcc/config/i386/cross-stdarg.h --- 3850,3856 ---- bc01acfe036d2d3ce5793b08e7e71e84 gcc/config/i386/clflushoptintrin.h 8a68f20d16a95399525876593d0f0c5e gcc/config/i386/clwbintrin.h 08ed13abc6279c8d104750728c0eda30 gcc/config/i386/clzerointrin.h ! cbc0a424463c2a66ab7de20c84855725 gcc/config/i386/constraints.md 723dcedc010d5320b4aaf22a6c002f15 gcc/config/i386/core2.md 09cc0a2e973bdd1c8da875aea61cfbf9 gcc/config/i386/cpuid.h c458e148668e78e4e02a6f3565ab7e07 gcc/config/i386/cross-stdarg.h *************** d814710db736a5c02793ee42a6b77cd2 gcc/co *** 3868,3874 **** 5135abfd085a03440a72720ea08d1236 gcc/config/i386/djgpp.h 6c2cff0c0935c1a4e69a6a5a3d530d57 gcc/config/i386/djgpp.opt 4d2bdb5675fe72510f87cfc2f1f59ed9 gcc/config/i386/dragonfly.h ! 5dd030afb348bf35c8e707490fb2d51c gcc/config/i386/driver-i386.cc 46537b6e4f3201da0654cd2cd0817466 gcc/config/i386/driver-mingw32.cc 64793fc332993d758284d9eda4002a19 gcc/config/i386/emmintrin.h ecc97a46ec73aa2bb87f8b72eea7dec8 gcc/config/i386/enqcmdintrin.h --- 3869,3875 ---- 5135abfd085a03440a72720ea08d1236 gcc/config/i386/djgpp.h 6c2cff0c0935c1a4e69a6a5a3d530d57 gcc/config/i386/djgpp.opt 4d2bdb5675fe72510f87cfc2f1f59ed9 gcc/config/i386/dragonfly.h ! ff8e6b0caabf91bab7e309f7234bcb44 gcc/config/i386/driver-i386.cc 46537b6e4f3201da0654cd2cd0817466 gcc/config/i386/driver-mingw32.cc 64793fc332993d758284d9eda4002a19 gcc/config/i386/emmintrin.h ecc97a46ec73aa2bb87f8b72eea7dec8 gcc/config/i386/enqcmdintrin.h *************** dac1d55fce23c07f7334ab60107d2740 gcc/co *** 3896,3921 **** f49f27ecc3f73457a104e71798f69e31 gcc/config/i386/hresetintrin.h 59f4f2b14da54e4579a407bec8feacf2 gcc/config/i386/i386-builtin-types.awk e5f608519e1f03ddbe8c845378fdadc8 gcc/config/i386/i386-builtin-types.def ! fd940784d70365a012747bd266742f09 gcc/config/i386/i386-builtin.def 120f6b3cdd9d2f1ae9b44ba63e6dbbec gcc/config/i386/i386-builtins.cc 1386ed6c665b92fb05c52b30d7fab44f gcc/config/i386/i386-builtins.h ! 7fb11c6fb9a30a343631cdbe654af3c0 gcc/config/i386/i386-c.cc e9dba11a6030bb896e56316e87976b8d gcc/config/i386/i386-d.cc 18d8aca3d6be4c0f13a294b167f38f45 gcc/config/i386/i386-d.h ! e90e18d477373b2c879ec7688343be85 gcc/config/i386/i386-expand.cc 3c709d191abaf095a50b0ccc29328991 gcc/config/i386/i386-expand.h 0b4580838b2788a24d7a70eca267bf73 gcc/config/i386/i386-features.cc d3b148611be020715f6ff78424760245 gcc/config/i386/i386-features.h 6937d1c6ece95c74b1c7ca2eb0265674 gcc/config/i386/i386-isa.def 0093d40a44064ad74492537c26a7eac7 gcc/config/i386/i386-modes.def ! cb41e6bfb20d6a1bc16b3028ffc8e991 gcc/config/i386/i386-options.cc 7be51e744d8f9807ab03a83afaf685ca gcc/config/i386/i386-options.h af85d0ff6d4cd15b14460985c816bbb3 gcc/config/i386/i386-opts.h bc068488ad4d00d93e15004aec10c28f gcc/config/i386/i386-passes.def ec6047eefecd3fcbd1f5f5e73eedfe2f gcc/config/i386/i386-protos.h ! 65aef74fb267532a74e992960237e606 gcc/config/i386/i386.cc ! e5d843a5a920b7d7680734c13c8929bd gcc/config/i386/i386.h ! f2909eec244ba6b2236b7775f2fd1852 gcc/config/i386/i386.md 7abb49886360a7038bbe29d74fa68b6f gcc/config/i386/i386.opt 916e372af07c88992a4dde741f963eac gcc/config/i386/i386elf.h 14e1802bbf5e0d6233d80d8f9fc83ed0 gcc/config/i386/ia32intrin.h --- 3897,3922 ---- f49f27ecc3f73457a104e71798f69e31 gcc/config/i386/hresetintrin.h 59f4f2b14da54e4579a407bec8feacf2 gcc/config/i386/i386-builtin-types.awk e5f608519e1f03ddbe8c845378fdadc8 gcc/config/i386/i386-builtin-types.def ! e56b5c517c8cac38d5eec95db2ed9cdf gcc/config/i386/i386-builtin.def 120f6b3cdd9d2f1ae9b44ba63e6dbbec gcc/config/i386/i386-builtins.cc 1386ed6c665b92fb05c52b30d7fab44f gcc/config/i386/i386-builtins.h ! b6386a07333bfb1726c2a12b55f8e9ef gcc/config/i386/i386-c.cc e9dba11a6030bb896e56316e87976b8d gcc/config/i386/i386-d.cc 18d8aca3d6be4c0f13a294b167f38f45 gcc/config/i386/i386-d.h ! fe611b8f34437f411a462cb91985c39a gcc/config/i386/i386-expand.cc 3c709d191abaf095a50b0ccc29328991 gcc/config/i386/i386-expand.h 0b4580838b2788a24d7a70eca267bf73 gcc/config/i386/i386-features.cc d3b148611be020715f6ff78424760245 gcc/config/i386/i386-features.h 6937d1c6ece95c74b1c7ca2eb0265674 gcc/config/i386/i386-isa.def 0093d40a44064ad74492537c26a7eac7 gcc/config/i386/i386-modes.def ! 6bcaa8f4206c0a7831811039e8aa22b5 gcc/config/i386/i386-options.cc 7be51e744d8f9807ab03a83afaf685ca gcc/config/i386/i386-options.h af85d0ff6d4cd15b14460985c816bbb3 gcc/config/i386/i386-opts.h bc068488ad4d00d93e15004aec10c28f gcc/config/i386/i386-passes.def ec6047eefecd3fcbd1f5f5e73eedfe2f gcc/config/i386/i386-protos.h ! a7b8c6f1f22d4528f0b70d53a2cd8673 gcc/config/i386/i386.cc ! 24dcc86a446ed2e253e4f6b319d3a46d gcc/config/i386/i386.h ! 50c085de5bff2f31e14c488e9e916548 gcc/config/i386/i386.md 7abb49886360a7038bbe29d74fa68b6f gcc/config/i386/i386.opt 916e372af07c88992a4dde741f963eac gcc/config/i386/i386elf.h 14e1802bbf5e0d6233d80d8f9fc83ed0 gcc/config/i386/ia32intrin.h *************** d6906912055f25ce87b3f315021dd99b gcc/co *** 3973,3982 **** 5dc568f106b96e0944f39b6c8f27c51d gcc/config/i386/slm.md 2729a11650973e195375af7bccb55ce7 gcc/config/i386/smmintrin.h daccd4e3cdd63f0dbda7ded81a1478e8 gcc/config/i386/sol2.h ! 9a5c7dc008a1431011dd8f2d24c1453a gcc/config/i386/sse.md 10b2b2efc6fdb5368eb608587f67539d gcc/config/i386/ssemath.h 6bdc7b51876de6e87681dd2c97093efb gcc/config/i386/stringop.def ! 63673be1e52dad91e6e09ab3fd23682e gcc/config/i386/subst.md 6b6e12c5305ed84ce236c77eead867ac gcc/config/i386/sync.md 95b4519ccfef2ae18ed93a2d7a1425f2 gcc/config/i386/sysv4.h 7564e944008a7878b7028ed05d6c4100 gcc/config/i386/t-cygming --- 3974,3983 ---- 5dc568f106b96e0944f39b6c8f27c51d gcc/config/i386/slm.md 2729a11650973e195375af7bccb55ce7 gcc/config/i386/smmintrin.h daccd4e3cdd63f0dbda7ded81a1478e8 gcc/config/i386/sol2.h ! ab86ff969229567f17a3db70ff7f4a0e gcc/config/i386/sse.md 10b2b2efc6fdb5368eb608587f67539d gcc/config/i386/ssemath.h 6bdc7b51876de6e87681dd2c97093efb gcc/config/i386/stringop.def ! ba0d595ee17e8ccc41a8831de007adfa gcc/config/i386/subst.md 6b6e12c5305ed84ce236c77eead867ac gcc/config/i386/sync.md 95b4519ccfef2ae18ed93a2d7a1425f2 gcc/config/i386/sysv4.h 7564e944008a7878b7028ed05d6c4100 gcc/config/i386/t-cygming *************** b4cde95b709fc93c90bf4d6b3edc7fd0 gcc/co *** 4022,4033 **** 8d6956f3535d501680a321eb01dafb35 gcc/config/i386/x-i386 14d904f1842012d94e081c578d51a5c0 gcc/config/i386/x-mingw32 f73f78a01e075bc90fe68c6a1b71ac1b gcc/config/i386/x86-64.h ! 2d1b59173edccd95ac38be912c155924 gcc/config/i386/x86-tune-costs.h 032dfa38c24a2e6d5688d2ee24822928 gcc/config/i386/x86-tune-sched-atom.cc 389139c200520120fb9419c1c8e1b828 gcc/config/i386/x86-tune-sched-bd.cc 40bf2fd6e01b2d322f54a763a3b55a06 gcc/config/i386/x86-tune-sched-core.cc ! 862c36dc0312bd87cf63a2119be99160 gcc/config/i386/x86-tune-sched.cc ! 766b6a2e3fe2c2189e0630dc70ca24c9 gcc/config/i386/x86-tune.def ce22b05cc535a89dbb219457d178cacf gcc/config/i386/x86gprintrin.h e44c986b85092282aced3b766506ebb6 gcc/config/i386/x86intrin.h 111ac823774e8831ad95ac74302324da gcc/config/i386/xm-cygwin.h --- 4023,4034 ---- 8d6956f3535d501680a321eb01dafb35 gcc/config/i386/x-i386 14d904f1842012d94e081c578d51a5c0 gcc/config/i386/x-mingw32 f73f78a01e075bc90fe68c6a1b71ac1b gcc/config/i386/x86-64.h ! f761eea993b884e2653c6dc213c4277f gcc/config/i386/x86-tune-costs.h 032dfa38c24a2e6d5688d2ee24822928 gcc/config/i386/x86-tune-sched-atom.cc 389139c200520120fb9419c1c8e1b828 gcc/config/i386/x86-tune-sched-bd.cc 40bf2fd6e01b2d322f54a763a3b55a06 gcc/config/i386/x86-tune-sched-core.cc ! e31f1e72fba77327f013970351a937b7 gcc/config/i386/x86-tune-sched.cc ! b06089f4d7bd6e5c8c57829b70967f71 gcc/config/i386/x86-tune.def ce22b05cc535a89dbb219457d178cacf gcc/config/i386/x86gprintrin.h e44c986b85092282aced3b766506ebb6 gcc/config/i386/x86intrin.h 111ac823774e8831ad95ac74302324da gcc/config/i386/xm-cygwin.h *************** c7c4480d077162974a6c2f5b66f1f902 gcc/co *** 4040,4047 **** fdc9a224be0ac9d209959ec3b01b8ee9 gcc/config/i386/xsaveoptintrin.h cf28c57990b8c5cf140b1a7d87680476 gcc/config/i386/xsavesintrin.h 1b799c94b2d5a4e806fa102223ad2783 gcc/config/i386/xtestintrin.h 00f2f2bc20dd8833ba5d58a528808c78 gcc/config/i386/znver.md - a08f5902eecead19f6f0b3f635c1f717 gcc/config/i386/znver4.md 13e36aec05a89d945eed6a80045e9b60 gcc/config/ia64/constraints.md ccfd0b47609d79688c15727c453d954a gcc/config/ia64/div.md 2a5ccfba319b36e873c8175cdf580f86 gcc/config/ia64/elf.h --- 4041,4048 ---- fdc9a224be0ac9d209959ec3b01b8ee9 gcc/config/i386/xsaveoptintrin.h cf28c57990b8c5cf140b1a7d87680476 gcc/config/i386/xsavesintrin.h 1b799c94b2d5a4e806fa102223ad2783 gcc/config/i386/xtestintrin.h + 81aee71a26429b0fb3b36474068b2699 gcc/config/i386/zn4zn5.md 00f2f2bc20dd8833ba5d58a528808c78 gcc/config/i386/znver.md 13e36aec05a89d945eed6a80045e9b60 gcc/config/ia64/constraints.md ccfd0b47609d79688c15727c453d954a gcc/config/ia64/div.md 2a5ccfba319b36e873c8175cdf580f86 gcc/config/ia64/elf.h *************** af2bcd42f13e33ccdad4352e0681db30 gcc/co *** 4453,4459 **** ebd0574bf5ea7ace79b2066a22377fc2 gcc/config/nvptx/nvptx-opts.h bde7aba55747f4c0cddc582357c9b400 gcc/config/nvptx/nvptx-protos.h bf2434d0636138653c724a48b710c2d4 gcc/config/nvptx/nvptx-sm.def ! 638d0b49e4aad1c3c3a3870f49cce61d gcc/config/nvptx/nvptx.cc fb9643087230b89c5d11eb8c50e6dc7f gcc/config/nvptx/nvptx.h 23f266496c8fd8187d450f94bfc132d1 gcc/config/nvptx/nvptx.md d9b445a4b2e607c77f96d5a8ea11c4b2 gcc/config/nvptx/nvptx.opt --- 4454,4460 ---- ebd0574bf5ea7ace79b2066a22377fc2 gcc/config/nvptx/nvptx-opts.h bde7aba55747f4c0cddc582357c9b400 gcc/config/nvptx/nvptx-protos.h bf2434d0636138653c724a48b710c2d4 gcc/config/nvptx/nvptx-sm.def ! 1cb79c09092cb84b3641704c219ef91e gcc/config/nvptx/nvptx.cc fb9643087230b89c5d11eb8c50e6dc7f gcc/config/nvptx/nvptx.h 23f266496c8fd8187d450f94bfc132d1 gcc/config/nvptx/nvptx.md d9b445a4b2e607c77f96d5a8ea11c4b2 gcc/config/nvptx/nvptx.opt *************** a73dbc08c36278d137a8e336dcbeb022 gcc/co *** 4495,4514 **** c44dcf4bfdb1fd06c246d1462a8c7334 gcc/config/pa/pa-hpux1111.opt f2c69fb5655b2cb22df86cc408739e2e gcc/config/pa/pa-hpux1131.h d6619977545d5efa41edfe75d4367153 gcc/config/pa/pa-hpux1131.opt ! 748184241abd60ec9f430126ca554df8 gcc/config/pa/pa-linux.h c4f705eeb54ff34c883f9c113e818df5 gcc/config/pa/pa-modes.def e47d71d86ebb0d0f8afddf6d199f5364 gcc/config/pa/pa-netbsd.h 2eda1205dffee59771ece16cfd9f0d8b gcc/config/pa/pa-openbsd.h 7a10250d76ade2d934709e9b7bb5ed6a gcc/config/pa/pa-opts.h 81f28e8af0f5bc5ba27387764d23963b gcc/config/pa/pa-protos.h ! 5b34dd1d849b62c46f8d67394383d9da gcc/config/pa/pa.cc 98df2e15f09cff2f151120ceee9f12df gcc/config/pa/pa.h ! cfa25b49f1d3f48a07efd8522187432f gcc/config/pa/pa.md 64cec30c3507a2146fe6ab58b03330af gcc/config/pa/pa.opt 891f23207e8d80f19e1df8c9e5118ab1 gcc/config/pa/pa32-linux.h b721e31e8ac5cfd5c02dda7a9fbca7c3 gcc/config/pa/pa32-netbsd.h 97292197746bd674a0a991f5adb7c047 gcc/config/pa/pa32-openbsd.h ! a46bddf0c41ab2d8e73b4edb4c044aac gcc/config/pa/pa32-regs.h ac3161b72a192cbb0d9e4f1f448f188a gcc/config/pa/pa64-hpux.h 41a82ce71a1f146358eabdaa8599e50c gcc/config/pa/pa64-hpux.opt 3339b90a27e3347097e3f0e935ccd59a gcc/config/pa/pa64-linux.h --- 4496,4515 ---- c44dcf4bfdb1fd06c246d1462a8c7334 gcc/config/pa/pa-hpux1111.opt f2c69fb5655b2cb22df86cc408739e2e gcc/config/pa/pa-hpux1131.h d6619977545d5efa41edfe75d4367153 gcc/config/pa/pa-hpux1131.opt ! 59b6f403554ac871c2bd01f0d891c3ea gcc/config/pa/pa-linux.h c4f705eeb54ff34c883f9c113e818df5 gcc/config/pa/pa-modes.def e47d71d86ebb0d0f8afddf6d199f5364 gcc/config/pa/pa-netbsd.h 2eda1205dffee59771ece16cfd9f0d8b gcc/config/pa/pa-openbsd.h 7a10250d76ade2d934709e9b7bb5ed6a gcc/config/pa/pa-opts.h 81f28e8af0f5bc5ba27387764d23963b gcc/config/pa/pa-protos.h ! a5a7015e060a5d5cf374f53ed7b30acb gcc/config/pa/pa.cc 98df2e15f09cff2f151120ceee9f12df gcc/config/pa/pa.h ! e3aa2729a1c57ca1c1d2673764f65b4f gcc/config/pa/pa.md 64cec30c3507a2146fe6ab58b03330af gcc/config/pa/pa.opt 891f23207e8d80f19e1df8c9e5118ab1 gcc/config/pa/pa32-linux.h b721e31e8ac5cfd5c02dda7a9fbca7c3 gcc/config/pa/pa32-netbsd.h 97292197746bd674a0a991f5adb7c047 gcc/config/pa/pa32-openbsd.h ! 26aaabaca8c448bd21bb470fd28b5abd gcc/config/pa/pa32-regs.h ac3161b72a192cbb0d9e4f1f448f188a gcc/config/pa/pa64-hpux.h 41a82ce71a1f146358eabdaa8599e50c gcc/config/pa/pa64-hpux.opt 3339b90a27e3347097e3f0e935ccd59a gcc/config/pa/pa64-linux.h *************** ff4a6b203fb6d5089653a8497f00f395 gcc/co *** 4613,4620 **** ba9a44e430912aebbb6a1b81be97cd3a gcc/config/rs6000/aix72.h 896ac66876b04d2b76989e6eee0b90ce gcc/config/rs6000/aix73.h ef2ced8f2fb6ce8c5c1245ce6cee66f6 gcc/config/rs6000/altivec.h ! 278886351e264c850ab923bdc10b063e gcc/config/rs6000/altivec.md ! cc49b81ab7c9ca29772c01a9a7535cca gcc/config/rs6000/amo.h 02da5ce24a764b70228b18b91f3c71b7 gcc/config/rs6000/biarch64.h 1085f75a8407fb26f3c9146067f6f20b gcc/config/rs6000/bmi2intrin.h 8a5022bd5be332623fff8b360ac05bae gcc/config/rs6000/bmiintrin.h --- 4614,4621 ---- ba9a44e430912aebbb6a1b81be97cd3a gcc/config/rs6000/aix72.h 896ac66876b04d2b76989e6eee0b90ce gcc/config/rs6000/aix73.h ef2ced8f2fb6ce8c5c1245ce6cee66f6 gcc/config/rs6000/altivec.h ! f19fe6765f795eae03f3828b6cab6340 gcc/config/rs6000/altivec.md ! 9ca00b8bc251cba733b9e7ffc1c48cb5 gcc/config/rs6000/amo.h 02da5ce24a764b70228b18b91f3c71b7 gcc/config/rs6000/biarch64.h 1085f75a8407fb26f3c9146067f6f20b gcc/config/rs6000/bmi2intrin.h 8a5022bd5be332623fff8b360ac05bae gcc/config/rs6000/bmiintrin.h *************** dd882bb8b346fd5c71c3edc3523c9837 gcc/co *** 4678,4685 **** f9988f8ee768613f827ca390bf213e67 gcc/config/rs6000/predicates.md 8c1455ab31e44fd0dfaba2988aeac309 gcc/config/rs6000/rbtree.cc a8d5a7b4dde5aabdefe618616c9a0f75 gcc/config/rs6000/rbtree.h ! e0f4c016a8d3df118d1708c557d018e4 gcc/config/rs6000/rs6000-builtin.cc ! 36e5061a4c56bd75de1ff83419264a74 gcc/config/rs6000/rs6000-builtins.def a1cb6b8388293cf391d13f28b0b92a24 gcc/config/rs6000/rs6000-c.cc d69516edfcccc824ece23ac1abebc808 gcc/config/rs6000/rs6000-call.cc e38bd123eaaee0c150c6ec09d8eb707f gcc/config/rs6000/rs6000-cpus.def --- 4679,4686 ---- f9988f8ee768613f827ca390bf213e67 gcc/config/rs6000/predicates.md 8c1455ab31e44fd0dfaba2988aeac309 gcc/config/rs6000/rbtree.cc a8d5a7b4dde5aabdefe618616c9a0f75 gcc/config/rs6000/rbtree.h ! 6b19baaf787bea1dd72f77738fa2bfb8 gcc/config/rs6000/rs6000-builtin.cc ! 38361a861f4139d78394fb32528c8dfc gcc/config/rs6000/rs6000-builtins.def a1cb6b8388293cf391d13f28b0b92a24 gcc/config/rs6000/rs6000-c.cc d69516edfcccc824ece23ac1abebc808 gcc/config/rs6000/rs6000-call.cc e38bd123eaaee0c150c6ec09d8eb707f gcc/config/rs6000/rs6000-cpus.def *************** c338280d6b54073cccb52687d0ecc47a gcc/co *** 4688,4707 **** b90cf26dc9bd4b4b16ba5b0cf51ac967 gcc/config/rs6000/rs6000-gen-builtins.cc a490bd1734755760e696287f317cb9db gcc/config/rs6000/rs6000-internal.h a9fd9182753b1742f0240fb46af52781 gcc/config/rs6000/rs6000-linux.cc ! a4066af94f9fef208343046356f48fdc gcc/config/rs6000/rs6000-logue.cc a4c1225bedfe922184db546f041df392 gcc/config/rs6000/rs6000-modes.def 8440a5bf31dc635cd102f3098d8d48cb gcc/config/rs6000/rs6000-modes.h b0ebc5652bf92a4f2c752b74777afe46 gcc/config/rs6000/rs6000-opts.h 464e1ea6617fc22502820a50a5a002af gcc/config/rs6000/rs6000-overload.def ! 107000c18e5cd9c9e67b4c3b23c7c3fc gcc/config/rs6000/rs6000-p8swap.cc 67835799ee87533e04f2fbed2bd60702 gcc/config/rs6000/rs6000-passes.def ffda8f63c8242e1c9b8ca7d891c3106a gcc/config/rs6000/rs6000-pcrel-opt.cc 91fffda8ae46844deb7a9db32b7d07ba gcc/config/rs6000/rs6000-protos.h 5f7d4f8db6bc1a1c6c4d685afb0436cf gcc/config/rs6000/rs6000-string.cc e63a23cfbabbc08ab82c8dba906a13b9 gcc/config/rs6000/rs6000-tables.opt ! 4e63e5675fc8f8c9eb57693d81e8da0d gcc/config/rs6000/rs6000.cc ! 1d02c47bea7435e1d2b6dd88bd87ee2d gcc/config/rs6000/rs6000.h ! f9b93ce818416fda5a78cf21cf72cce2 gcc/config/rs6000/rs6000.md 8700751be0214a4ca8ae23c73529d19f gcc/config/rs6000/rs6000.opt 6ae739401a438fbbd4f5625c7f040ce2 gcc/config/rs6000/rs64.md 4d688d01298aeea9600a8af44172f891 gcc/config/rs6000/rtems.h --- 4689,4708 ---- b90cf26dc9bd4b4b16ba5b0cf51ac967 gcc/config/rs6000/rs6000-gen-builtins.cc a490bd1734755760e696287f317cb9db gcc/config/rs6000/rs6000-internal.h a9fd9182753b1742f0240fb46af52781 gcc/config/rs6000/rs6000-linux.cc ! 4e116f987ce2eca2ae117266bba53e21 gcc/config/rs6000/rs6000-logue.cc a4c1225bedfe922184db546f041df392 gcc/config/rs6000/rs6000-modes.def 8440a5bf31dc635cd102f3098d8d48cb gcc/config/rs6000/rs6000-modes.h b0ebc5652bf92a4f2c752b74777afe46 gcc/config/rs6000/rs6000-opts.h 464e1ea6617fc22502820a50a5a002af gcc/config/rs6000/rs6000-overload.def ! a963083fbdf314aba50ebf6cdc4036e1 gcc/config/rs6000/rs6000-p8swap.cc 67835799ee87533e04f2fbed2bd60702 gcc/config/rs6000/rs6000-passes.def ffda8f63c8242e1c9b8ca7d891c3106a gcc/config/rs6000/rs6000-pcrel-opt.cc 91fffda8ae46844deb7a9db32b7d07ba gcc/config/rs6000/rs6000-protos.h 5f7d4f8db6bc1a1c6c4d685afb0436cf gcc/config/rs6000/rs6000-string.cc e63a23cfbabbc08ab82c8dba906a13b9 gcc/config/rs6000/rs6000-tables.opt ! 8e8cea28f87cd4c4bbe6fa02664ce934 gcc/config/rs6000/rs6000.cc ! 32cf0c966bd20fdd06d18e644bb54283 gcc/config/rs6000/rs6000.h ! 450844e2e40e7aa595fd77ae442279f4 gcc/config/rs6000/rs6000.md 8700751be0214a4ca8ae23c73529d19f gcc/config/rs6000/rs6000.opt 6ae739401a438fbbd4f5625c7f040ce2 gcc/config/rs6000/rs64.md 4d688d01298aeea9600a8af44172f891 gcc/config/rs6000/rtems.h *************** afddd2a7589607f0c4fbe9ac61a90663 gcc/co *** 4739,4745 **** be77ffba248fa7ebb90e840df8bdae02 gcc/config/rs6000/tmmintrin.h 79d33dfc94147d876ca015f4a25d8cac gcc/config/rs6000/vec_types.h 3ad3eb71ffcf8b730887d1083c86969b gcc/config/rs6000/vector.md ! e72d9c433c122a98aa6c87ca01c0b8d1 gcc/config/rs6000/vsx.md 07be543763620625532c4855fd2bbd8b gcc/config/rs6000/vxworks.h 410becd5ec1d44b12ad8abac150d8386 gcc/config/rs6000/vxworksae.h c81225cedf76fb8af245069ce63f1856 gcc/config/rs6000/vxworksmils.h --- 4740,4746 ---- be77ffba248fa7ebb90e840df8bdae02 gcc/config/rs6000/tmmintrin.h 79d33dfc94147d876ca015f4a25d8cac gcc/config/rs6000/vec_types.h 3ad3eb71ffcf8b730887d1083c86969b gcc/config/rs6000/vector.md ! 31600a450d9a5cdd0a220c572b72a0f7 gcc/config/rs6000/vsx.md 07be543763620625532c4855fd2bbd8b gcc/config/rs6000/vxworks.h 410becd5ec1d44b12ad8abac150d8386 gcc/config/rs6000/vxworksae.h c81225cedf76fb8af245069ce63f1856 gcc/config/rs6000/vxworksmils.h *************** e026bdfc658b8a60cfd31deec2bbfa1f gcc/co *** 4774,4780 **** c5d3bebac716fd4a316b901396acc252 gcc/config/s390/2827.md b5ef7b2524783a772ddc76ea26d7eccc gcc/config/s390/2964.md d4e1e800040c115bce581bd7d85a5226 gcc/config/s390/3906.md ! 3de5efa33fd3b43fd73ae9987f9041b1 gcc/config/s390/3931.md 32823a5e5b65e7ba2a07d792157dd28a gcc/config/s390/8561.md 10a569eac4473f3ddded15ee29819c3f gcc/config/s390/constraints.md 9e4d71bfef068f24f886008038b950e9 gcc/config/s390/driver-native.cc --- 4775,4781 ---- c5d3bebac716fd4a316b901396acc252 gcc/config/s390/2827.md b5ef7b2524783a772ddc76ea26d7eccc gcc/config/s390/2964.md d4e1e800040c115bce581bd7d85a5226 gcc/config/s390/3906.md ! e6f96a278978a60730b332726ee67db1 gcc/config/s390/3931.md 32823a5e5b65e7ba2a07d792157dd28a gcc/config/s390/8561.md 10a569eac4473f3ddded15ee29819c3f gcc/config/s390/constraints.md 9e4d71bfef068f24f886008038b950e9 gcc/config/s390/driver-native.cc *************** b68ec35ec95b05aa6b0e84d90013d13b gcc/co *** 4785,4800 **** 594de881b84d2f9fdf9eee00d90b8f2c gcc/config/s390/s390-builtin-types.def 03a2ec9d36d2a73872bd80f3f7148d44 gcc/config/s390/s390-builtins.def 22357511e88799e5bfc88e5b20872bf3 gcc/config/s390/s390-builtins.h ! 516c46c6b49109c567bf1ebcf7ebce07 gcc/config/s390/s390-c.cc 7650415e0f99d3f7df3c3b305ed32ae7 gcc/config/s390/s390-d.cc 265d0f4c363ddd1d2980b9147c70ffe1 gcc/config/s390/s390-d.h 8b80a6657af26d782f169c111c636dad gcc/config/s390/s390-modes.def e0c7d30da142a08bd9975fbdb040f734 gcc/config/s390/s390-opts.h 4cfd0da8f3916e0e979b45418a3be3c1 gcc/config/s390/s390-passes.def ! 5e57cbe5da89cb6f8e77066a207a4bb1 gcc/config/s390/s390-protos.h ! 89f048d4f7ab29f9bd0f99f5ccca8f67 gcc/config/s390/s390.cc 294445369544c0bc3cb50ebb7a62241f gcc/config/s390/s390.h ! e66be85d254ad5ff9f56696645307a28 gcc/config/s390/s390.md 675257e80950b443158a1f1a91b85fa1 gcc/config/s390/s390.opt e1e734cafc3999b9c4451398b3ff4e92 gcc/config/s390/s390intrin.h d2ef3b386594d6299790fa7d37320d79 gcc/config/s390/s390x.h --- 4786,4801 ---- 594de881b84d2f9fdf9eee00d90b8f2c gcc/config/s390/s390-builtin-types.def 03a2ec9d36d2a73872bd80f3f7148d44 gcc/config/s390/s390-builtins.def 22357511e88799e5bfc88e5b20872bf3 gcc/config/s390/s390-builtins.h ! 913e1dee9c8e7735abf1abc649049659 gcc/config/s390/s390-c.cc 7650415e0f99d3f7df3c3b305ed32ae7 gcc/config/s390/s390-d.cc 265d0f4c363ddd1d2980b9147c70ffe1 gcc/config/s390/s390-d.h 8b80a6657af26d782f169c111c636dad gcc/config/s390/s390-modes.def e0c7d30da142a08bd9975fbdb040f734 gcc/config/s390/s390-opts.h 4cfd0da8f3916e0e979b45418a3be3c1 gcc/config/s390/s390-passes.def ! 334e22f43e6c48caed8d4619aab96d99 gcc/config/s390/s390-protos.h ! 59769886ad47dabc2ef62a09e0c8c4e5 gcc/config/s390/s390.cc 294445369544c0bc3cb50ebb7a62241f gcc/config/s390/s390.h ! 3842a116216dbf00da008e63a0c9139f gcc/config/s390/s390.md 675257e80950b443158a1f1a91b85fa1 gcc/config/s390/s390.opt e1e734cafc3999b9c4451398b3ff4e92 gcc/config/s390/s390intrin.h d2ef3b386594d6299790fa7d37320d79 gcc/config/s390/s390x.h *************** dea694db96376a2d9908b267a5040c17 gcc/co *** 4805,4811 **** 47d557aa9caaa18246e98d2d9eddef04 gcc/config/s390/tpf.md 18d4c6e4b3a1b1818fa4f2cd9ecc6f05 gcc/config/s390/tpf.opt c7b92ccab9bff5c85e9152a5010610f4 gcc/config/s390/vecintrin.h ! ad9359225a1e3d5b27b56cb348e419f3 gcc/config/s390/vector.md 1df8979d57854e3bcc36569a0839ba3e gcc/config/s390/vx-builtins.md 7813da5eac25ac16f589b0319ad43386 gcc/config/s390/x-native 1f3d467f5460c18c2b65887f6efc41ef gcc/config/sh/constraints.md --- 4806,4812 ---- 47d557aa9caaa18246e98d2d9eddef04 gcc/config/s390/tpf.md 18d4c6e4b3a1b1818fa4f2cd9ecc6f05 gcc/config/s390/tpf.opt c7b92ccab9bff5c85e9152a5010610f4 gcc/config/s390/vecintrin.h ! 387be75d967e94176cc05251c28fd6c8 gcc/config/s390/vector.md 1df8979d57854e3bcc36569a0839ba3e gcc/config/s390/vx-builtins.md 7813da5eac25ac16f589b0319ad43386 gcc/config/s390/x-native 1f3d467f5460c18c2b65887f6efc41ef gcc/config/sh/constraints.md *************** df711d3c4209dc2078403fede05b0c9f gcc/co *** 4827,4833 **** f6221f8d3397d492618e56579e467e42 gcc/config/sh/sh-mem.cc d22ca9f61b3c805404561dcfc87d2298 gcc/config/sh/sh-modes.def 2df8afb4e4a2466319288500b8b1cafa gcc/config/sh/sh-protos.h ! 687f75dfd1d216956fe6284997d6cab8 gcc/config/sh/sh.cc d7a6129121131f3e3e065eca8b30ecaf gcc/config/sh/sh.h 39d122a7a70bd88e5e0438b959f43d36 gcc/config/sh/sh.md 139aee6f03e0b710a7924323803aae81 gcc/config/sh/sh.opt --- 4828,4834 ---- f6221f8d3397d492618e56579e467e42 gcc/config/sh/sh-mem.cc d22ca9f61b3c805404561dcfc87d2298 gcc/config/sh/sh-modes.def 2df8afb4e4a2466319288500b8b1cafa gcc/config/sh/sh-protos.h ! fff32e080cf29ff53f57e149e046867f gcc/config/sh/sh.cc d7a6129121131f3e3e065eca8b30ecaf gcc/config/sh/sh.h 39d122a7a70bd88e5e0438b959f43d36 gcc/config/sh/sh.md 139aee6f03e0b710a7924323803aae81 gcc/config/sh/sh.opt *************** db7e9d820bb832167ac7f105d093fdda gcc/co *** 5071,5078 **** 414aed735962abfc0a242138b2833d30 gcc/config/xtensa/xtensa.h f8577ed90789aeb2b1d1e68701b2a18b gcc/config/xtensa/xtensa.md 49b91f52a0ff696a3067d3288badf84f gcc/config/xtensa/xtensa.opt ! f5dd44687a7725be30a01fa6fb661cb1 gcc/configure ! a9f1550dec52e693637c60ed8f546854 gcc/configure.ac 2c3b5239194c0b4a2e4fb1effa7de1fe gcc/context.cc f0af356bf719524dae46597a2b9376be gcc/context.h 9f79427f6fb6308f148ac1b824d74c87 gcc/convert.cc --- 5072,5079 ---- 414aed735962abfc0a242138b2833d30 gcc/config/xtensa/xtensa.h f8577ed90789aeb2b1d1e68701b2a18b gcc/config/xtensa/xtensa.md 49b91f52a0ff696a3067d3288badf84f gcc/config/xtensa/xtensa.opt ! ec09a6c70c0380cd5e22f6cc822dba9a gcc/configure ! 9fe6f1040f313d7011e8680f6a10653a gcc/configure.ac 2c3b5239194c0b4a2e4fb1effa7de1fe gcc/context.cc f0af356bf719524dae46597a2b9376be gcc/context.h 9f79427f6fb6308f148ac1b824d74c87 gcc/convert.cc *************** b81f031d36161f2b75151b5503458623 gcc/co *** 5082,5088 **** 5f947cfa4f11adffe84f558e88a17922 gcc/coroutine-passes.cc 0fa89640cf054df390ce1a7cc7f2a797 gcc/coverage.cc b0252895005c33390b86f406799d9e70 gcc/coverage.h ! af049c41b25440eb2d60ecf6b8e44908 gcc/cp/ChangeLog d271e3663538ba1f3281cab3838e92cd gcc/cp/ChangeLog-1993 f5a44adbc05521162350ca409d1d95ce gcc/cp/ChangeLog-1994 ac55db48d964cb5469ff03c1cd3ee04d gcc/cp/ChangeLog-1995 --- 5083,5089 ---- 5f947cfa4f11adffe84f558e88a17922 gcc/coroutine-passes.cc 0fa89640cf054df390ce1a7cc7f2a797 gcc/coverage.cc b0252895005c33390b86f406799d9e70 gcc/coverage.h ! 98d6c55bd47941b97000acfd15ef5f48 gcc/cp/ChangeLog d271e3663538ba1f3281cab3838e92cd gcc/cp/ChangeLog-1993 f5a44adbc05521162350ca409d1d95ce gcc/cp/ChangeLog-1994 ac55db48d964cb5469ff03c1cd3ee04d gcc/cp/ChangeLog-1995 *************** c1c7801b9b0f379e702a4f6cb83972e7 gcc/cp *** 5120,5127 **** 4af50d4f82b93440a2801cf7837dce2e gcc/cp/cfns.h 0d6cd9a708e60767c26f8266b56114ff gcc/cp/class.cc 19c35c5421d2b8d512ffa110701df758 gcc/cp/config-lang.in ! c4feeea05c30ce9511d7f88e10c5830d gcc/cp/constexpr.cc ! 77a979d32de8cb8e46d54a3ebe92ea42 gcc/cp/constraint.cc 27cb7d2ba6312acadcfc0dfc15dbcd2b gcc/cp/coroutines.cc 7501a8946b544f82ced7912c0f8f957f gcc/cp/cp-gimplify.cc 59c2096cf662e2d5bf81f477c55c9d2d gcc/cp/cp-lang.cc --- 5121,5128 ---- 4af50d4f82b93440a2801cf7837dce2e gcc/cp/cfns.h 0d6cd9a708e60767c26f8266b56114ff gcc/cp/class.cc 19c35c5421d2b8d512ffa110701df758 gcc/cp/config-lang.in ! cdbe5d32255a400b963d536b1d69e117 gcc/cp/constexpr.cc ! 439c2d50df1ac75d97da9ecd731afaab gcc/cp/constraint.cc 27cb7d2ba6312acadcfc0dfc15dbcd2b gcc/cp/coroutines.cc 7501a8946b544f82ced7912c0f8f957f gcc/cp/cp-gimplify.cc 59c2096cf662e2d5bf81f477c55c9d2d gcc/cp/cp-lang.cc *************** af9e79c65b8109b071bfab436f53fd06 gcc/cp *** 5134,5150 **** cf937b536f89656bbd216fda359c5f56 gcc/cp/cvt.cc 2b73a9fc46b5816431c794ab7d308871 gcc/cp/cxx-pretty-print.cc fb305bef28206d87862d28cb7233a56b gcc/cp/cxx-pretty-print.h ! e960a8e842a0bf98a49e42ea7d47e8f3 gcc/cp/decl.cc cffc01a2fb968bde8c15a0cf880e57f3 gcc/cp/decl.h ! a85051d5a44d327240b1f0b44cdee94d gcc/cp/decl2.cc a5dba9831bf8a38a28a4b412c76ceef5 gcc/cp/dump.cc b05e7f9587bf188168b525f48c7479f4 gcc/cp/error.cc 9882b133987e0ef98e9551a9762234f3 gcc/cp/except.cc 8cebaad85dc0c01a9c1ceb500919c45c gcc/cp/expr.cc 1a3ebbf7c0f22d963d7ba4a245ff205c gcc/cp/friend.cc 0f6900a5092d59c380273a15cc1e6995 gcc/cp/g++spec.cc ! 180f96c767a8be30b0159ffb3308d628 gcc/cp/init.cc ! 070afdcd7a31bfd27df0dbdd7a063376 gcc/cp/lambda.cc 2d025243c67abcccf63845127a051ce4 gcc/cp/lang-specs.h 7fae35cf7f4dae942a3e4ba08e3fc077 gcc/cp/lex.cc 759fe1cd255ae198380e59f3fe7c721f gcc/cp/logic.cc --- 5135,5151 ---- cf937b536f89656bbd216fda359c5f56 gcc/cp/cvt.cc 2b73a9fc46b5816431c794ab7d308871 gcc/cp/cxx-pretty-print.cc fb305bef28206d87862d28cb7233a56b gcc/cp/cxx-pretty-print.h ! c5163c0c7345435d35efd122a134995e gcc/cp/decl.cc cffc01a2fb968bde8c15a0cf880e57f3 gcc/cp/decl.h ! eacca6c3a38e530127fba530aac0780f gcc/cp/decl2.cc a5dba9831bf8a38a28a4b412c76ceef5 gcc/cp/dump.cc b05e7f9587bf188168b525f48c7479f4 gcc/cp/error.cc 9882b133987e0ef98e9551a9762234f3 gcc/cp/except.cc 8cebaad85dc0c01a9c1ceb500919c45c gcc/cp/expr.cc 1a3ebbf7c0f22d963d7ba4a245ff205c gcc/cp/friend.cc 0f6900a5092d59c380273a15cc1e6995 gcc/cp/g++spec.cc ! dcf23e46933f4d8234a3ad60c2baca6b gcc/cp/init.cc ! 249c313a7d69e0ff37e383cdb01b0b03 gcc/cp/lambda.cc 2d025243c67abcccf63845127a051ce4 gcc/cp/lang-specs.h 7fae35cf7f4dae942a3e4ba08e3fc077 gcc/cp/lex.cc 759fe1cd255ae198380e59f3fe7c721f gcc/cp/logic.cc *************** b05e7f9587bf188168b525f48c7479f4 gcc/cp *** 5152,5173 **** 5324dfd367e7c8ebba7e3c511388ba71 gcc/cp/mapper-client.cc c08ce26e97ca92d6e36c71453aac5baf gcc/cp/mapper-client.h 5afaaf13a0191802d9adaa6cd1ff7b4b gcc/cp/mapper-resolver.cc ! 0daac91a7d76dece74349caf1c32143a gcc/cp/method.cc 9b4fa8523bf6057cee15600a65221bb9 gcc/cp/module.cc ! 1e2da2f220c242ff666dacd4d7252e97 gcc/cp/name-lookup.cc eb7607457e31c0a54edf0539675b5b2e gcc/cp/name-lookup.h a8c0211ed0a1501bf948aff39864fd1b gcc/cp/operators.def ! a175d4e76fa35476b1f2d1cef21b9d1e gcc/cp/optimize.cc ! 01bf4863b0be9b5cc2c0ce928457af40 gcc/cp/parser.cc dee781c4e5da6a9ed8a8ed1119c12dbb gcc/cp/parser.h ! bb948a64bada4c750e3cab95dd84d6aa gcc/cp/pt.cc 39ea1e495d971ae62d15c580b9b26531 gcc/cp/ptree.cc ! a69253bf5f41f60f5be44abcb3134ee0 gcc/cp/rtti.cc 763aed8f1a637266774e6466b1b98345 gcc/cp/search.cc ! dd0c13e5e9eeead8942a845760f28344 gcc/cp/semantics.cc ! 96228ad6b38f3037301535261b3c6026 gcc/cp/tree.cc 3ffb7b1546d92ce86c89a0d8324fa763 gcc/cp/type-utils.h ! 1b4ba2b4d067c335f7feb6d0787f71f9 gcc/cp/typeck.cc 5833643279133cc5dbf13a9631077ce4 gcc/cp/typeck2.cc 04b0f0bf0cbb8a2ebc3665e2acdd1be9 gcc/cp/vtable-class-hierarchy.cc 2ed020c144695714d83ff76c8dc8551c gcc/cppbuiltin.cc --- 5153,5174 ---- 5324dfd367e7c8ebba7e3c511388ba71 gcc/cp/mapper-client.cc c08ce26e97ca92d6e36c71453aac5baf gcc/cp/mapper-client.h 5afaaf13a0191802d9adaa6cd1ff7b4b gcc/cp/mapper-resolver.cc ! a3af8e9d6edf70880e519d02ee01a6dd gcc/cp/method.cc 9b4fa8523bf6057cee15600a65221bb9 gcc/cp/module.cc ! d3726efa0f1082ae69f35e8ad09ca233 gcc/cp/name-lookup.cc eb7607457e31c0a54edf0539675b5b2e gcc/cp/name-lookup.h a8c0211ed0a1501bf948aff39864fd1b gcc/cp/operators.def ! d940799ac1f7ea6bf3b0f6c9b172ee97 gcc/cp/optimize.cc ! ac087fd972ce85a0d0bf281183e87a5f gcc/cp/parser.cc dee781c4e5da6a9ed8a8ed1119c12dbb gcc/cp/parser.h ! aec4c4c5b751a43f7fc4066809b0ab7e gcc/cp/pt.cc 39ea1e495d971ae62d15c580b9b26531 gcc/cp/ptree.cc ! 731b5588c718f95bb18be9d8bc5f387b gcc/cp/rtti.cc 763aed8f1a637266774e6466b1b98345 gcc/cp/search.cc ! 66d1f1061ecd73d3cd36fc7fa1272b69 gcc/cp/semantics.cc ! 9b6bbdbb821569ceb50a5032790ae90b gcc/cp/tree.cc 3ffb7b1546d92ce86c89a0d8324fa763 gcc/cp/type-utils.h ! d5a58f4a9a1ef6e86e7d5c7c976c4022 gcc/cp/typeck.cc 5833643279133cc5dbf13a9631077ce4 gcc/cp/typeck2.cc 04b0f0bf0cbb8a2ebc3665e2acdd1be9 gcc/cp/vtable-class-hierarchy.cc 2ed020c144695714d83ff76c8dc8551c gcc/cppbuiltin.cc *************** dd0c13e5e9eeead8942a845760f28344 gcc/cp *** 5175,5188 **** 22407913ee8063f2b6226b5860f0ea95 gcc/cppdefault.cc 6ec17d982c4a82bb37cb668fada8a325 gcc/cppdefault.h 3fd65bb756f17a28aaa8aaf215865361 gcc/cprop.cc ! 920a4d7947132423a7d010e42c59d61a gcc/cse.cc 3693d7a5568e545df024d55501f2c82b gcc/cselib.cc b6d6c874c2b61fc5ea973ad62359a416 gcc/cselib.h 1ded054093de910d9786c62bc4fe8cc6 gcc/cstamp-h.in d5ed22370e5dd622b0b12c32b21f04cd gcc/ctfc.cc 0a1449a42c84460895e02a7a3ee5eb09 gcc/ctfc.h c86420385a29dc1b103e1a4cca601af9 gcc/ctfout.cc ! e69672de58a628bae0976a20defee3aa gcc/d/ChangeLog 86f687c485111eedca2eb048294f957e gcc/d/ChangeLog-2006 70ed1c47fd9b3f5dd95055642ed79265 gcc/d/ChangeLog-2007 a7090ab2dd83aa4f44823c17566b83ef gcc/d/ChangeLog-2008 --- 5176,5189 ---- 22407913ee8063f2b6226b5860f0ea95 gcc/cppdefault.cc 6ec17d982c4a82bb37cb668fada8a325 gcc/cppdefault.h 3fd65bb756f17a28aaa8aaf215865361 gcc/cprop.cc ! 971f4ccb04a3a21814c6955565ec4bd4 gcc/cse.cc 3693d7a5568e545df024d55501f2c82b gcc/cselib.cc b6d6c874c2b61fc5ea973ad62359a416 gcc/cselib.h 1ded054093de910d9786c62bc4fe8cc6 gcc/cstamp-h.in d5ed22370e5dd622b0b12c32b21f04cd gcc/ctfc.cc 0a1449a42c84460895e02a7a3ee5eb09 gcc/ctfc.h c86420385a29dc1b103e1a4cca601af9 gcc/ctfout.cc ! a4eb6ce824734af0a73ceb3f4a1f4794 gcc/d/ChangeLog 86f687c485111eedca2eb048294f957e gcc/d/ChangeLog-2006 70ed1c47fd9b3f5dd95055642ed79265 gcc/d/ChangeLog-2007 a7090ab2dd83aa4f44823c17566b83ef gcc/d/ChangeLog-2008 *************** d46228dde1a38d9a1d640d737074c7c6 gcc/d/ *** 5199,5221 **** 2bdf87680f3ebc496c728540c3e6d88a gcc/d/ChangeLog-2019 e432bfc5c605ae0b1beedf0492ad40d1 gcc/d/ChangeLog-2020 1978e6674dd960299d771fdb335a9df2 gcc/d/ChangeLog-2021 ! 718e75aef088ebea5fb535a8b8f56fa1 gcc/d/Make-lang.in 426254b45d40584d0597c63f3fd1f889 gcc/d/README.gcc 8bf5d890e781b56206924e00d9e49939 gcc/d/config-lang.in d08c623f247be5cfa5170417f26d5480 gcc/d/d-attribs.cc 688fb2314b162760f8950ea9705af7ab gcc/d/d-builtins.cc ! cb8d3dc5d6edece8d62b15cc87441f55 gcc/d/d-codegen.cc d392fda0a2aca5434b3f337c80f8f864 gcc/d/d-compiler.cc 7afde298a7a53e5dee640eeaa93a1feb gcc/d/d-convert.cc ! 8d7ac5eca73cc075b175513a7fc713e3 gcc/d/d-ctfloat.cc a45dc5a01e8d32b42d3e48a112e065b4 gcc/d/d-diagnostic.cc 1e4c2f76e9781d5cadf99f2a0b628299 gcc/d/d-frontend.cc 081862d5113ae5cc3ad55dc801bbe7a5 gcc/d/d-frontend.h 25d90846df654cbb5e2794235724df6b gcc/d/d-gimplify.cc d187ab42ee24bae8e09e49fbd31d3752 gcc/d/d-incpath.cc 4483db03463dbf2d1ea97dac1d5e840b gcc/d/d-lang.cc ! 7318ef907f2b33e0b107950b0ea87935 gcc/d/d-longdouble.cc ! 73015d522ced90e2e8281c387934577d gcc/d/d-port.cc 7fd2410570d6cc275d2f4bd82620eb39 gcc/d/d-spec.cc 5e7a162f22439e5912f58fe3facdc6ee gcc/d/d-system.h 6f744f77de810e88c4285983c844098c gcc/d/d-target-def.h --- 5200,5222 ---- 2bdf87680f3ebc496c728540c3e6d88a gcc/d/ChangeLog-2019 e432bfc5c605ae0b1beedf0492ad40d1 gcc/d/ChangeLog-2020 1978e6674dd960299d771fdb335a9df2 gcc/d/ChangeLog-2021 ! 248bb8ec05744249cf41bd4498ffba23 gcc/d/Make-lang.in 426254b45d40584d0597c63f3fd1f889 gcc/d/README.gcc 8bf5d890e781b56206924e00d9e49939 gcc/d/config-lang.in d08c623f247be5cfa5170417f26d5480 gcc/d/d-attribs.cc 688fb2314b162760f8950ea9705af7ab gcc/d/d-builtins.cc ! 9c9817b6b98f3cdfdc745812fb948b1b gcc/d/d-codegen.cc d392fda0a2aca5434b3f337c80f8f864 gcc/d/d-compiler.cc 7afde298a7a53e5dee640eeaa93a1feb gcc/d/d-convert.cc ! f159ec5682bbd1ca869c8ba0c54452c4 gcc/d/d-ctfloat.cc a45dc5a01e8d32b42d3e48a112e065b4 gcc/d/d-diagnostic.cc 1e4c2f76e9781d5cadf99f2a0b628299 gcc/d/d-frontend.cc 081862d5113ae5cc3ad55dc801bbe7a5 gcc/d/d-frontend.h 25d90846df654cbb5e2794235724df6b gcc/d/d-gimplify.cc d187ab42ee24bae8e09e49fbd31d3752 gcc/d/d-incpath.cc 4483db03463dbf2d1ea97dac1d5e840b gcc/d/d-lang.cc ! d5ff88c3872575864f4067c3bda58354 gcc/d/d-longdouble.cc ! a50d4da8ceb9c6565bb2696cdf9b55ee gcc/d/d-port.cc 7fd2410570d6cc275d2f4bd82620eb39 gcc/d/d-spec.cc 5e7a162f22439e5912f58fe3facdc6ee gcc/d/d-system.h 6f744f77de810e88c4285983c844098c gcc/d/d-target-def.h *************** d187ab42ee24bae8e09e49fbd31d3752 gcc/d/ *** 5224,5230 **** af194d51ac76779c9790fddaa8ca34ec gcc/d/d-target.h e67401e2b9e7e3fd1c7867f4a1dd0db2 gcc/d/d-tree.def 695b1e7c5849dfe615e0b4f1706520c0 gcc/d/d-tree.h ! ac8b41005cbf2a7b5de89495104d9561 gcc/d/decl.cc 4a330cb9c9f0c38ccced280946873aa1 gcc/d/dmd/MERGE c65e8ed7b55dcb02725394bcde7c2da6 gcc/d/dmd/README.md d626781f165e41221200fce4c11b7ac8 gcc/d/dmd/VERSION --- 5225,5231 ---- af194d51ac76779c9790fddaa8ca34ec gcc/d/d-target.h e67401e2b9e7e3fd1c7867f4a1dd0db2 gcc/d/d-tree.def 695b1e7c5849dfe615e0b4f1706520c0 gcc/d/d-tree.h ! 5e051d81ca04139d6f67d46ce7479187 gcc/d/decl.cc 4a330cb9c9f0c38ccced280946873aa1 gcc/d/dmd/MERGE c65e8ed7b55dcb02725394bcde7c2da6 gcc/d/dmd/README.md d626781f165e41221200fce4c11b7ac8 gcc/d/dmd/VERSION *************** d5204f87064447609d6339627fdff5d1 gcc/d/ *** 5397,5405 **** 484e2455ce6e8669895e099600f824a6 gcc/d/dmd/version.h ddc228ae57e81b4b8d64d30be36696ec gcc/d/dmd/visitor.d 64beecc207e7f501df4ed2c6baf7a398 gcc/d/dmd/visitor.h ! 2f79baf188b752c8e89f529cb5a25be7 gcc/d/expr.cc 12f00f3f5da3f7bca99022b121c5668d gcc/d/gdc.texi ! 0b922a119416d9822c173c0d2497f62a gcc/d/imports.cc 5a94ef82a61da2924e9bccb76de28992 gcc/d/intrinsics.cc 64c73cd509877a6967d709b72d528b40 gcc/d/intrinsics.def 5f46cece4cf39b1190b559bd7a38e482 gcc/d/lang-specs.h --- 5398,5406 ---- 484e2455ce6e8669895e099600f824a6 gcc/d/dmd/version.h ddc228ae57e81b4b8d64d30be36696ec gcc/d/dmd/visitor.d 64beecc207e7f501df4ed2c6baf7a398 gcc/d/dmd/visitor.h ! b8546bae2c0f1d5bb9e1b6f5e8168996 gcc/d/expr.cc 12f00f3f5da3f7bca99022b121c5668d gcc/d/gdc.texi ! f742a72b5d53b278e3376db16dc72e60 gcc/d/imports.cc 5a94ef82a61da2924e9bccb76de28992 gcc/d/intrinsics.cc 64c73cd509877a6967d709b72d528b40 gcc/d/intrinsics.def 5f46cece4cf39b1190b559bd7a38e482 gcc/d/lang-specs.h *************** ffea256fc730c237f2321d3c920f8afd gcc/dd *** 5428,5434 **** 1dc9f8001040e0826b7a38db7b66f5bc gcc/debug.h e04e0ab971a272cf98a0c03386a2ba34 gcc/defaults.h 27b4a82493588153035930f04d741918 gcc/df-core.cc ! 7cc1910d78f8cbc03f999a767642156e gcc/df-problems.cc 9a0da8b80ab422998ce18b85244a7a45 gcc/df-scan.cc c8db7a8caacb75191f768e57365be4c4 gcc/df.h 501abd95cb1ca6134594e6d452dc8cce gcc/dfp.cc --- 5429,5435 ---- 1dc9f8001040e0826b7a38db7b66f5bc gcc/debug.h e04e0ab971a272cf98a0c03386a2ba34 gcc/defaults.h 27b4a82493588153035930f04d741918 gcc/df-core.cc ! 171a045dd1e6505486bb227c282e26e4 gcc/df-problems.cc 9a0da8b80ab422998ce18b85244a7a45 gcc/df-scan.cc c8db7a8caacb75191f768e57365be4c4 gcc/df.h 501abd95cb1ca6134594e6d452dc8cce gcc/dfp.cc *************** aa3b7596dd5b6f06217a90d7090a99b9 gcc/do *** 5459,5496 **** fbce9ef3057c5f46171c7f3214e3bd9b gcc/doc/configterms.texi eb2a47d945ad5f919fce2e58dff16598 gcc/doc/contrib.texi ebe9d4f914f26d51d300bb1949a5014b gcc/doc/contribute.texi ! 5a4f06c04510cdc9d55cc2ea358bcc92 gcc/doc/cpp.1 ! 485193e3958418cda66dc78323d7e6de gcc/doc/cpp.info ! 42df7076a2292d64e19b48fc9937d922 gcc/doc/cpp.texi f06003c25ea278478f8d118f1aa63c83 gcc/doc/cppdiropts.texi 6b35517a77153b269c71dd54e78e7cf2 gcc/doc/cppenv.texi ! 45fbf6c3e44aace9c2cc3ce98a28f777 gcc/doc/cppinternals.info fb4b91ad27bb3454d9988d80aa141644 gcc/doc/cppinternals.texi e800c0bc2befa6987b1fc171b3fa6bc7 gcc/doc/cppopts.texi a6ec6f6984012460fa04c405c52a8edc gcc/doc/cppwarnopts.texi ! 3d2d35467ad153920b396dc5819a8072 gcc/doc/extend.texi f78fa1359032f84915fdfb60653ea30e gcc/doc/fragments.texi e3001342aaa637f17a507b55b36479bd gcc/doc/frontends.texi ! 1c44baacde492afcf9d4c311a52231c3 gcc/doc/fsf-funding.7 ! aed1e3233b11642b0ba23943b6127c44 gcc/doc/g++.1 ! aed1e3233b11642b0ba23943b6127c44 gcc/doc/gcc.1 ! 9bd2c6ea0bbede3ca08558f6c197b493 gcc/doc/gcc.info c6b0b2d1fe3f28a04931a2a794048df7 gcc/doc/gcc.texi ! 55eb152a74d7baed6582f489debfc619 gcc/doc/gccinstall.info ! f6e2c8b7eb32862b4ae6e488f3949b15 gcc/doc/gccint.info 83afe7721012ae63b2ecff4e1ebbd1a9 gcc/doc/gccint.texi ! 5ed7be33815f87287233781e8cc768e0 gcc/doc/gcov-dump.1 16145e16ee9428009371a59cc1659d32 gcc/doc/gcov-dump.texi ! 1a2b860074ddc4673cc861d11b1c1ded gcc/doc/gcov-tool.1 f234ef2a5d2f8fe46b7356d02c709f19 gcc/doc/gcov-tool.texi ! a738a63b92a1cc2a53284e1ff11acfd6 gcc/doc/gcov.1 6bd61a8c28ffcb5521e74ade47e2ef45 gcc/doc/gcov.texi 322c30453c6bcdafc13e52f81b71ed22 gcc/doc/generic.texi ! 17462a35f794768a5686210117e1d0c1 gcc/doc/gfdl.7 ! 5af033489085939a7ef6e3ed039e293a gcc/doc/gfortran.1 ca8fb1fb499d550701f96d68b817cb3d gcc/doc/gimple.texi dc4ccd9843d88bc01c909438dabfd6ab gcc/doc/gnu.texi ! d03cb1fa4c3ca8dac3ec47f917681944 gcc/doc/gpl.7 8330c58afc651426d5be3104dc1ae1c1 gcc/doc/gty.texi 1840b0e622f12b4964da9c34e9416d46 gcc/doc/headerdirs.texi db2126fd791cbb35d3fcb1c79364c6d7 gcc/doc/hostconfig.texi --- 5460,5504 ---- fbce9ef3057c5f46171c7f3214e3bd9b gcc/doc/configterms.texi eb2a47d945ad5f919fce2e58dff16598 gcc/doc/contrib.texi ebe9d4f914f26d51d300bb1949a5014b gcc/doc/contribute.texi ! ccc9a1979cd2ef2fa0c286245b7966e4 gcc/doc/cpp.1 ! 39116af1fe17925ce70e73327a0b4fdd gcc/doc/cpp.info ! a74147dab1da7b33639d00f7c5f12123 gcc/doc/cpp.texi f06003c25ea278478f8d118f1aa63c83 gcc/doc/cppdiropts.texi 6b35517a77153b269c71dd54e78e7cf2 gcc/doc/cppenv.texi ! 9735497c8956be8c361e7d90a6fe40e6 gcc/doc/cppinternals.info fb4b91ad27bb3454d9988d80aa141644 gcc/doc/cppinternals.texi e800c0bc2befa6987b1fc171b3fa6bc7 gcc/doc/cppopts.texi a6ec6f6984012460fa04c405c52a8edc gcc/doc/cppwarnopts.texi ! 608e3ec77aea51d307cf644dfa352cd0 gcc/doc/extend.texi f78fa1359032f84915fdfb60653ea30e gcc/doc/fragments.texi e3001342aaa637f17a507b55b36479bd gcc/doc/frontends.texi ! 2c93880a2d822bbbc8ca8a28d9f9ab54 gcc/doc/fsf-funding.7 ! 787a914ad8edcf337e748186fdfdb038 gcc/doc/g++.1 ! 787a914ad8edcf337e748186fdfdb038 gcc/doc/gcc.1 ! 2f39b5bd9693cb65b709ab2ab2d12ea4 gcc/doc/gcc.info c6b0b2d1fe3f28a04931a2a794048df7 gcc/doc/gcc.texi ! 7930cef602ec63f99ffaa8597eb04a3e gcc/doc/gccgo.1 ! 552e604fce4c62ff2b2b7c69957eb74a gcc/doc/gccgo.info ! 1c9ee1047149bd8741671196856917e8 gcc/doc/gccinstall.info ! 4fe86689438999a80c53e2267f00ad56 gcc/doc/gccint.info 83afe7721012ae63b2ecff4e1ebbd1a9 gcc/doc/gccint.texi ! ecef97d015d815472203edc8df6bdba2 gcc/doc/gcov-dump.1 16145e16ee9428009371a59cc1659d32 gcc/doc/gcov-dump.texi ! fd1289a56d78448e32a50cb7085f8517 gcc/doc/gcov-tool.1 f234ef2a5d2f8fe46b7356d02c709f19 gcc/doc/gcov-tool.texi ! b60b660a235c450ea7217920bbc7301e gcc/doc/gcov.1 6bd61a8c28ffcb5521e74ade47e2ef45 gcc/doc/gcov.texi + b8819e347c358800a20654a5db6f2986 gcc/doc/gdc.1 + 5a1238bf70f4497444444e531a7642bf gcc/doc/gdc.info 322c30453c6bcdafc13e52f81b71ed22 gcc/doc/generic.texi ! 24b05f8e80e5772b613279a81e78c22a gcc/doc/gfdl.7 ! 8a7b338094eefbe7a0d902b803c494ef gcc/doc/gfortran.1 ca8fb1fb499d550701f96d68b817cb3d gcc/doc/gimple.texi + a45c8d29ff795d37b2d7bbf03c1140de gcc/doc/gnat-style.info + 857e7dcfd729371c2b94ceca4b58bcb8 gcc/doc/gnat_rm.info + 420181ce67304fe4a627fb156af041f1 gcc/doc/gnat_ugn.info dc4ccd9843d88bc01c909438dabfd6ab gcc/doc/gnu.texi ! a0c2758ab32de2302c240e4f03486085 gcc/doc/gpl.7 8330c58afc651426d5be3104dc1ae1c1 gcc/doc/gty.texi 1840b0e622f12b4964da9c34e9416d46 gcc/doc/headerdirs.texi db2126fd791cbb35d3fcb1c79364c6d7 gcc/doc/hostconfig.texi *************** a2fcc43c6167952462815a241fa20c2d gcc/do *** 5504,5514 **** 607216c84fb912edd028f62a1869d856 gcc/doc/install.texi 83bdbd3efd0ffdf2178c97f60413b453 gcc/doc/install.texi2html 8e0aeb138252c5b0cc976f5c554be2d0 gcc/doc/interface.texi ! 15a9c856f5fc65ffd46a3fd545a5eaf2 gcc/doc/invoke.texi 93a82af201aef19ff405acd00915277e gcc/doc/languages.texi 0f02293e0eb313d57f6242dda564ff0d gcc/doc/libgcc.texi de63c5bbc556a96d33ce1ee36e44532b gcc/doc/loop.texi ! 970f68096b2dec1bb11dd6d9cac9e57d gcc/doc/lto-dump.1 701872dd40d1ad8a34b97404ea51aba7 gcc/doc/lto-dump.texi 408827455143000e36d847cc841a3315 gcc/doc/lto.texi 56814e4949686c0010ab623d14f28323 gcc/doc/makefile.texi --- 5512,5522 ---- 607216c84fb912edd028f62a1869d856 gcc/doc/install.texi 83bdbd3efd0ffdf2178c97f60413b453 gcc/doc/install.texi2html 8e0aeb138252c5b0cc976f5c554be2d0 gcc/doc/interface.texi ! 9e15152190ddd9d3c3b3abc2c67bc3e5 gcc/doc/invoke.texi 93a82af201aef19ff405acd00915277e gcc/doc/languages.texi 0f02293e0eb313d57f6242dda564ff0d gcc/doc/libgcc.texi de63c5bbc556a96d33ce1ee36e44532b gcc/doc/loop.texi ! f9b4ecb3ef323b95a4a8a5db2eeeeb51 gcc/doc/lto-dump.1 701872dd40d1ad8a34b97404ea51aba7 gcc/doc/lto-dump.texi 408827455143000e36d847cc841a3315 gcc/doc/lto.texi 56814e4949686c0010ab623d14f28323 gcc/doc/makefile.texi *************** c844952cfe2642f0dd0361d70ec9bffa gcc/er *** 5559,5570 **** fac4dc8e95eb5eae825a0db47ce1ab7b gcc/escaped_string.h 3b0f4c63c8cea8da78fc4646096cd806 gcc/et-forest.cc 9199096b782143b97a1c0b49e6398c40 gcc/et-forest.h ! b81446cad469d50f18943e386f286fbd gcc/except.cc f009c0b679814cf0230400579922b602 gcc/except.h d6bf493c0749d890bd5bee8a86e3f372 gcc/exec-tool.in fa7f9340e6c1ee56aa3bc2c04629d9cc gcc/explow.cc 4bb0068974444cdffe19b60784f8e189 gcc/explow.h ! e4ec3dcea74829d2563e351ee905542a gcc/expmed.cc ba8393b3e2b8742976d1fc0c4727108f gcc/expmed.h 7190e8eebaf1071d068473e5f7b38549 gcc/expr.cc 063529794de14145f9a6e5822e051a83 gcc/expr.h --- 5567,5578 ---- fac4dc8e95eb5eae825a0db47ce1ab7b gcc/escaped_string.h 3b0f4c63c8cea8da78fc4646096cd806 gcc/et-forest.cc 9199096b782143b97a1c0b49e6398c40 gcc/et-forest.h ! ec64e848c47d3afcc6d75f778200c46a gcc/except.cc f009c0b679814cf0230400579922b602 gcc/except.h d6bf493c0749d890bd5bee8a86e3f372 gcc/exec-tool.in fa7f9340e6c1ee56aa3bc2c04629d9cc gcc/explow.cc 4bb0068974444cdffe19b60784f8e189 gcc/explow.h ! 3344170be10fd8f9b505d0106752cc58 gcc/expmed.cc ba8393b3e2b8742976d1fc0c4727108f gcc/expmed.h 7190e8eebaf1071d068473e5f7b38549 gcc/expr.cc 063529794de14145f9a6e5822e051a83 gcc/expr.h *************** afc1b29624fc1932c0588c26e81bdae8 gcc/fi *** 5574,5589 **** 9a1908e89c4cedc23d7b8cafd6494b35 gcc/file-find.h d296a9fbf031636c9cbb9d90df1a55c7 gcc/file-prefix-map.cc d0051818c00184510e1a5cf9fd3d2233 gcc/file-prefix-map.h ! 4a9cd658f2b66c395304d1831da3d9c0 gcc/final.cc 39766f7f0402e4710761f1aecae6a4d9 gcc/fixed-value.cc f7b68b5bf0105bcfb975bf6c1949ca00 gcc/fixed-value.h ba26be1a33461d149c9e3304d436ea94 gcc/flag-types.h 59b3ec4c17038e4fff61e05b2bfd220f gcc/flags.h acba3643fd3d7dbe62ff3b7f99130cb8 gcc/fold-const-call.cc f1700f1cc85dfe93bddd7114e6202635 gcc/fold-const-call.h ! 447d1af3c7f6ed1e4aaac6eb037d5b79 gcc/fold-const.cc 63f13230cb3584d77e9b8a26c6ac5fd8 gcc/fold-const.h ! 8d62c604091fb49fbb352c9e8d632754 gcc/fortran/ChangeLog 3330102ad3a0217cba963be6b5eefd58 gcc/fortran/ChangeLog-2002 d000ab985b1eeb1ad5749f98b8fef99f gcc/fortran/ChangeLog-2003 bf42f94f0c51dcc7d8051cc7fda1efdc gcc/fortran/ChangeLog-2004 --- 5582,5597 ---- 9a1908e89c4cedc23d7b8cafd6494b35 gcc/file-find.h d296a9fbf031636c9cbb9d90df1a55c7 gcc/file-prefix-map.cc d0051818c00184510e1a5cf9fd3d2233 gcc/file-prefix-map.h ! 0a93eb9de60f4a0c64ed81f97a78feb2 gcc/final.cc 39766f7f0402e4710761f1aecae6a4d9 gcc/fixed-value.cc f7b68b5bf0105bcfb975bf6c1949ca00 gcc/fixed-value.h ba26be1a33461d149c9e3304d436ea94 gcc/flag-types.h 59b3ec4c17038e4fff61e05b2bfd220f gcc/flags.h acba3643fd3d7dbe62ff3b7f99130cb8 gcc/fold-const-call.cc f1700f1cc85dfe93bddd7114e6202635 gcc/fold-const-call.h ! d73084f068b6ff11317f27835a24d078 gcc/fold-const.cc 63f13230cb3584d77e9b8a26c6ac5fd8 gcc/fold-const.h ! e61049443afec723f4473c3f4360c1ac gcc/fortran/ChangeLog 3330102ad3a0217cba963be6b5eefd58 gcc/fortran/ChangeLog-2002 d000ab985b1eeb1ad5749f98b8fef99f gcc/fortran/ChangeLog-2003 bf42f94f0c51dcc7d8051cc7fda1efdc gcc/fortran/ChangeLog-2004 *************** f2515ce2d4eea4ae49c7f087b70eeb2a gcc/fo *** 5620,5626 **** e56cff2ad51a1b28676176eb3400bc07 gcc/fortran/cpp.h 0da9a435768cc177cbc0d04823ce91bc gcc/fortran/data.cc 89e31dec4e882508d7059aab12320a40 gcc/fortran/data.h ! a18ab7f2b5f5fb7305cf7500ed485cc1 gcc/fortran/decl.cc 023c4b8af2411ad18f677acf07e91c79 gcc/fortran/dependency.cc 250e4847bac7531e425b6d1630dbc690 gcc/fortran/dependency.h 5ac8d3ba62499628c08beaf09d5e95f3 gcc/fortran/dump-parse-tree.cc --- 5628,5634 ---- e56cff2ad51a1b28676176eb3400bc07 gcc/fortran/cpp.h 0da9a435768cc177cbc0d04823ce91bc gcc/fortran/data.cc 89e31dec4e882508d7059aab12320a40 gcc/fortran/data.h ! ffb0de07f1812d83f1f173f2251da9c5 gcc/fortran/decl.cc 023c4b8af2411ad18f677acf07e91c79 gcc/fortran/dependency.cc 250e4847bac7531e425b6d1630dbc690 gcc/fortran/dependency.h 5ac8d3ba62499628c08beaf09d5e95f3 gcc/fortran/dump-parse-tree.cc *************** a148fdc43cbb2bba84d76259bebc9f8f gcc/fo *** 5630,5640 **** ba80f8acb7bf77204b60d0e749d2fba8 gcc/fortran/frontend-passes.cc 3842572731984dc9a83b47e901428f04 gcc/fortran/gfc-diagnostic.def d7b4e8b2f31d751e0a42d341c615dc7f gcc/fortran/gfc-internals.texi ! dd92182774122379d86159764729446e gcc/fortran/gfortran.h ! 9a929fd3a7e3799babcd4a6bf4061145 gcc/fortran/gfortran.info 5c2caffc27a96f9251901dd1c9cfd20a gcc/fortran/gfortran.texi b4bb48ba890803cc506acdcb573cfeae gcc/fortran/gfortranspec.cc ! f112449f0ba199d8e8a7c7e4ffd725b9 gcc/fortran/interface.cc a03fe27b3b22ea5f5c81e309e2dfa904 gcc/fortran/intrinsic.cc d09791007ba9b64b832806a486152ed3 gcc/fortran/intrinsic.h 9c3f90c89e00cbc99c598333c76cd336 gcc/fortran/intrinsic.texi --- 5638,5648 ---- ba80f8acb7bf77204b60d0e749d2fba8 gcc/fortran/frontend-passes.cc 3842572731984dc9a83b47e901428f04 gcc/fortran/gfc-diagnostic.def d7b4e8b2f31d751e0a42d341c615dc7f gcc/fortran/gfc-internals.texi ! 8f15bbda43d0ed96eb337dd0266c47bd gcc/fortran/gfortran.h ! 98deac524ca057f39e3bc28cc03b3299 gcc/fortran/gfortran.info 5c2caffc27a96f9251901dd1c9cfd20a gcc/fortran/gfortran.texi b4bb48ba890803cc506acdcb573cfeae gcc/fortran/gfortranspec.cc ! a27a9b3c736a245d72d0e1c56f4d78d9 gcc/fortran/interface.cc a03fe27b3b22ea5f5c81e309e2dfa904 gcc/fortran/intrinsic.cc d09791007ba9b64b832806a486152ed3 gcc/fortran/intrinsic.h 9c3f90c89e00cbc99c598333c76cd336 gcc/fortran/intrinsic.texi *************** f008d3a6da41af237126d87d5692c6c2 gcc/fo *** 5648,5654 **** 62f204ebbefe65d09c98419e35d9000e gcc/fortran/lang.opt cabe262cd3c9d670e57dd9956fe371b4 gcc/fortran/libgfortran.h 9d2b6e96c017ba52c1f2145a8383d82b gcc/fortran/match.cc ! bd0ab91f17def7a653d5ff09c58bb9f4 gcc/fortran/match.h 10fbc914f1a899407778deafa7f5875f gcc/fortran/matchexp.cc fb7c80f6f5f88ba80c7723f53eb05efe gcc/fortran/mathbuiltins.def 7d2e2d3ee5b1e4e1964aaf46366e0f08 gcc/fortran/misc.cc --- 5656,5662 ---- 62f204ebbefe65d09c98419e35d9000e gcc/fortran/lang.opt cabe262cd3c9d670e57dd9956fe371b4 gcc/fortran/libgfortran.h 9d2b6e96c017ba52c1f2145a8383d82b gcc/fortran/match.cc ! f34287348b88b5a04619a92d7a6f6ade gcc/fortran/match.h 10fbc914f1a899407778deafa7f5875f gcc/fortran/matchexp.cc fb7c80f6f5f88ba80c7723f53eb05efe gcc/fortran/mathbuiltins.def 7d2e2d3ee5b1e4e1964aaf46366e0f08 gcc/fortran/misc.cc *************** fb7c80f6f5f88ba80c7723f53eb05efe gcc/fo *** 5657,5679 **** b48cbfda0304562a0eaac72d7b9a6d90 gcc/fortran/options.cc 73e90223d49b4963392fec92a45d6f62 gcc/fortran/parse.cc 0a48590b2bb36243e9f4a9d98183afa0 gcc/fortran/parse.h ! 7935e989682da90c4fee6b579e54f874 gcc/fortran/primary.cc ! f58b4486ad33e421af5b4e0b5b23d04b gcc/fortran/resolve.cc 0573ab635ad3ccc4839e1f4636811d27 gcc/fortran/scanner.cc caa38bdbcffb68e954b6424c1c3c340c gcc/fortran/scanner.h ! fe71c67ee010a6eb5ea9a08226be4f30 gcc/fortran/simplify.cc 4a7855d2420481b81f4ff31d48066f24 gcc/fortran/st.cc 78f4d0d8c194b7b730dee61dc940ff25 gcc/fortran/symbol.cc c6d5b41165a24519b1877dafd17780c7 gcc/fortran/target-memory.cc d58dc979add87c7e22ecf3fe8ea7d636 gcc/fortran/target-memory.h ! 1304a933c0072eda346bf1ebef5dc9b6 gcc/fortran/trans-array.cc 699968d0496851dd2f7c7cc5566f73f2 gcc/fortran/trans-array.h 451f5b83f594fdd9a854e00dbc66fd9b gcc/fortran/trans-common.cc 60dfb80d5ab4bb8f574d40380456a8ef gcc/fortran/trans-const.cc 7468f5a70b780bf92036ea75d5312bd4 gcc/fortran/trans-const.h ! ce37a7099768c06117e736b50fbc8005 gcc/fortran/trans-decl.cc ! 62d392ee7355339ae3ad756dbcea4882 gcc/fortran/trans-expr.cc ! 408605a1145b1a8bb8b94b3ba47e9a54 gcc/fortran/trans-intrinsic.cc 85141448817f23e9ee692c3b7b763c75 gcc/fortran/trans-io.cc 59236c5b820b6ffc26470283bc0e6db6 gcc/fortran/trans-openmp.cc ee76646a8bbb271f793e1e8867f57d71 gcc/fortran/trans-stmt.cc --- 5665,5687 ---- b48cbfda0304562a0eaac72d7b9a6d90 gcc/fortran/options.cc 73e90223d49b4963392fec92a45d6f62 gcc/fortran/parse.cc 0a48590b2bb36243e9f4a9d98183afa0 gcc/fortran/parse.h ! baed7018608beb6c3aaccd86cbe2d7ba gcc/fortran/primary.cc ! d5695df2bc0f3b5a4bc5965328eaf60e gcc/fortran/resolve.cc 0573ab635ad3ccc4839e1f4636811d27 gcc/fortran/scanner.cc caa38bdbcffb68e954b6424c1c3c340c gcc/fortran/scanner.h ! 2a5c229102e3d00cb615e6d77099f9cf gcc/fortran/simplify.cc 4a7855d2420481b81f4ff31d48066f24 gcc/fortran/st.cc 78f4d0d8c194b7b730dee61dc940ff25 gcc/fortran/symbol.cc c6d5b41165a24519b1877dafd17780c7 gcc/fortran/target-memory.cc d58dc979add87c7e22ecf3fe8ea7d636 gcc/fortran/target-memory.h ! 426533b58b271a371a3554e6ea5fc502 gcc/fortran/trans-array.cc 699968d0496851dd2f7c7cc5566f73f2 gcc/fortran/trans-array.h 451f5b83f594fdd9a854e00dbc66fd9b gcc/fortran/trans-common.cc 60dfb80d5ab4bb8f574d40380456a8ef gcc/fortran/trans-const.cc 7468f5a70b780bf92036ea75d5312bd4 gcc/fortran/trans-const.h ! dbba248ad99588047fed13881a506bf3 gcc/fortran/trans-decl.cc ! 8834e0694a268bd5a8ce4e286174ce7f gcc/fortran/trans-expr.cc ! 7a85628e74dac51f1bef12409c94e252 gcc/fortran/trans-intrinsic.cc 85141448817f23e9ee692c3b7b763c75 gcc/fortran/trans-io.cc 59236c5b820b6ffc26470283bc0e6db6 gcc/fortran/trans-openmp.cc ee76646a8bbb271f793e1e8867f57d71 gcc/fortran/trans-stmt.cc *************** e407ce5e464ee5640a9730448c53532b gcc/fo *** 5688,5694 **** 45bd02cc1348dbf322ee97df8ac53c43 gcc/function-abi.cc 4c0c4b1c00c37358843ae3349346bdec gcc/function-abi.h 4e2f34bb1401e871b7cca9babb99ec3e gcc/function-tests.cc ! 2a4309239adfb0f59d7062cddae8a372 gcc/function.cc 691a265913d36a47e60accc3677bb50c gcc/function.h 191568f8ff996f25b093ee138a7a5590 gcc/fwprop.cc 254a48c75187b7e47b94abf826e16c94 gcc/gcc-ar.cc --- 5696,5702 ---- 45bd02cc1348dbf322ee97df8ac53c43 gcc/function-abi.cc 4c0c4b1c00c37358843ae3349346bdec gcc/function-abi.h 4e2f34bb1401e871b7cca9babb99ec3e gcc/function-tests.cc ! 16bfb9441d5f3d12a3fe19ac1d03a7e3 gcc/function.cc 691a265913d36a47e60accc3677bb50c gcc/function.h 191568f8ff996f25b093ee138a7a5590 gcc/fwprop.cc 254a48c75187b7e47b94abf826e16c94 gcc/gcc-ar.cc *************** c21ee37cecaf1b25e3bd8de9fb19e968 gcc/gc *** 5697,5703 **** a85c939fa43dfee6075872172327e4f3 gcc/gcc-rich-location.cc c6a1992de949bd6bd63861fbebe06618 gcc/gcc-rich-location.h 5eba488d62cd83afcd74ebaddd3e2db9 gcc/gcc-symtab.h ! 526e56c0ee557a5e684f36ee8f95eec4 gcc/gcc.cc 50339e09857ada5c5cbc9c2c74775d71 gcc/gcc.h 907e96abb298d108295ecfe939301b54 gcc/gcov-counter.def 098804cd843ca0a2ac068140d2023f15 gcc/gcov-dump.cc --- 5705,5711 ---- a85c939fa43dfee6075872172327e4f3 gcc/gcc-rich-location.cc c6a1992de949bd6bd63861fbebe06618 gcc/gcc-rich-location.h 5eba488d62cd83afcd74ebaddd3e2db9 gcc/gcc-symtab.h ! c863f7783b234ba8a84abdce3d438418 gcc/gcc.cc 50339e09857ada5c5cbc9c2c74775d71 gcc/gcc.h 907e96abb298d108295ecfe939301b54 gcc/gcov-counter.def 098804cd843ca0a2ac068140d2023f15 gcc/gcov-dump.cc *************** dda76c5b5ec0948d9ce70a2bef27cfca gcc/ge *** 5716,5722 **** 2432cbe939cbb7a5372cde88c946d50d gcc/genattr-common.cc 75da21cfde7e116835aec220cd9be1b9 gcc/genattr.cc 819311f444f94a9139c5b08ef130794d gcc/genattrtab.cc ! 0ba27d303bec1bd1072b35d1e4bf673d gcc/genautomata.cc 1b860d71137ce697637feddef156dce8 gcc/gencfn-macros.cc 737436dcf51f8f9f75ab2e2f7e7f4fd1 gcc/gencheck.cc 3004285788bb3ea898abf2a24a56996b gcc/genchecksum.cc --- 5724,5730 ---- 2432cbe939cbb7a5372cde88c946d50d gcc/genattr-common.cc 75da21cfde7e116835aec220cd9be1b9 gcc/genattr.cc 819311f444f94a9139c5b08ef130794d gcc/genattrtab.cc ! 16b19bf7c53e8373f6e3d857b313f059 gcc/genautomata.cc 1b860d71137ce697637feddef156dce8 gcc/gencfn-macros.cc 737436dcf51f8f9f75ab2e2f7e7f4fd1 gcc/gencheck.cc 3004285788bb3ea898abf2a24a56996b gcc/genchecksum.cc *************** b061e1a9c4a98dd20f874b7c8b25e7d6 gcc/ge *** 5731,5737 **** f750f2d25d09cf621bc33d71e2d4257a gcc/genextract.cc 1afb6dee14dd76199f347ef290ebb806 gcc/genflags.cc e57a4ee7a3efa6f9879d9401732ce8e9 gcc/gengenrtl.cc ! ee15c27c589e29ab4bc2c1e441a22453 gcc/gengtype-lex.cc dccb6b651cc3b08a9d91dc473d2c5c56 gcc/gengtype-lex.l eb4d9740e017bdc5f85328a53d2d1727 gcc/gengtype-parse.cc 50a65f1126e7a18b74cea77bdd779e98 gcc/gengtype-state.cc --- 5739,5745 ---- f750f2d25d09cf621bc33d71e2d4257a gcc/genextract.cc 1afb6dee14dd76199f347ef290ebb806 gcc/genflags.cc e57a4ee7a3efa6f9879d9401732ce8e9 gcc/gengenrtl.cc ! 99bcc51c543ac7153c27da29782d1ecf gcc/gengtype-lex.cc dccb6b651cc3b08a9d91dc473d2c5c56 gcc/gengtype-lex.l eb4d9740e017bdc5f85328a53d2d1727 gcc/gengtype-parse.cc 50a65f1126e7a18b74cea77bdd779e98 gcc/gengtype-state.cc *************** bbca916c48235ccd181eeac0628a881d gcc/gg *** 5762,5770 **** 9e34b6c0ac98f04d76ac1c5ac6498112 gcc/gimple-array-bounds.h c09c9c82904f715ce24dbb5f5e7ae143 gcc/gimple-builder.cc 71288f9828f96bb6d528314ca5d455fd gcc/gimple-builder.h ! f50e26d784233d2ffe55ee17bc3ac46a gcc/gimple-expr.cc d1de4fb8ce13938f7c3dd22dd3afe622 gcc/gimple-expr.h ! 24e48b82778727622ebae55cb3ebae09 gcc/gimple-fold.cc 759408e1e968762ac2845df7ae6efa73 gcc/gimple-fold.h 8350312718333859d5f584a2792e3c00 gcc/gimple-harden-conditionals.cc 5397f4236c244ea6e396da577b07cb75 gcc/gimple-if-to-switch.cc --- 5770,5778 ---- 9e34b6c0ac98f04d76ac1c5ac6498112 gcc/gimple-array-bounds.h c09c9c82904f715ce24dbb5f5e7ae143 gcc/gimple-builder.cc 71288f9828f96bb6d528314ca5d455fd gcc/gimple-builder.h ! b0ddb2208f015fb8e455aae7c60c9f72 gcc/gimple-expr.cc d1de4fb8ce13938f7c3dd22dd3afe622 gcc/gimple-expr.h ! 25a27a65de48e4e7a122c73966e97a75 gcc/gimple-fold.cc 759408e1e968762ac2845df7ae6efa73 gcc/gimple-fold.h 8350312718333859d5f584a2792e3c00 gcc/gimple-harden-conditionals.cc 5397f4236c244ea6e396da577b07cb75 gcc/gimple-if-to-switch.cc *************** f9d354fe0de883a8e04540c764cf1128 gcc/gi *** 5773,5783 **** 6800bca49ee3d1f5c964f5ff789b91ec gcc/gimple-iterator.h 273c34c7e5f11b3c27736f861ff39dd1 gcc/gimple-laddress.cc ea6739e1baae6fef631091cd341aeb7a gcc/gimple-loop-interchange.cc ! 278049a0befd1100b7907765baf0b1a2 gcc/gimple-loop-jam.cc f5fb978108285be3c589c1080dbbad96 gcc/gimple-loop-versioning.cc 14024b204b227ade2750e2161a5c3082 gcc/gimple-low.cc e5fb54e1c9ffbbb7c5e6cff5991f2104 gcc/gimple-low.h ! 66e4c9653e0abbc7db3b65422a8738b4 gcc/gimple-match-head.cc 72fb6758017af5de87e230d25359555b gcc/gimple-match.h 8d43733f6347e3670a9aef1e2d7419ee gcc/gimple-predicate-analysis.cc 7eb33d03e7b1e6b6327f7cb427da050e gcc/gimple-predicate-analysis.h --- 5781,5791 ---- 6800bca49ee3d1f5c964f5ff789b91ec gcc/gimple-iterator.h 273c34c7e5f11b3c27736f861ff39dd1 gcc/gimple-laddress.cc ea6739e1baae6fef631091cd341aeb7a gcc/gimple-loop-interchange.cc ! f1ff1431a140157a282a2d1b0a78b39d gcc/gimple-loop-jam.cc f5fb978108285be3c589c1080dbbad96 gcc/gimple-loop-versioning.cc 14024b204b227ade2750e2161a5c3082 gcc/gimple-low.cc e5fb54e1c9ffbbb7c5e6cff5991f2104 gcc/gimple-low.h ! 13497025f64f6c6a2e81b83c353f151f gcc/gimple-match-head.cc 72fb6758017af5de87e230d25359555b gcc/gimple-match.h 8d43733f6347e3670a9aef1e2d7419ee gcc/gimple-predicate-analysis.cc 7eb33d03e7b1e6b6327f7cb427da050e gcc/gimple-predicate-analysis.h *************** e5fb54e1c9ffbbb7c5e6cff5991f2104 gcc/gi *** 5786,5792 **** 3efe916bb7c15be5080b13dbaee9c3b0 gcc/gimple-pretty-print.h 9c9dc21d5e0a5467580381c4f3e88246 gcc/gimple-range-cache.cc 34423785bbebf48c5894527a2d85dfa3 gcc/gimple-range-cache.h ! de819abc38e5513404e31ba8147f6719 gcc/gimple-range-edge.cc ff7214e2064e1c914da68bbc5c59ac6d gcc/gimple-range-edge.h 4b6d81555c2fd93dce4352b2756cacec gcc/gimple-range-fold.cc a25f3a6963c602d111eb631ee4444cf9 gcc/gimple-range-fold.h --- 5794,5800 ---- 3efe916bb7c15be5080b13dbaee9c3b0 gcc/gimple-pretty-print.h 9c9dc21d5e0a5467580381c4f3e88246 gcc/gimple-range-cache.cc 34423785bbebf48c5894527a2d85dfa3 gcc/gimple-range-cache.h ! c2bf6d7926dd7df6fc435baafbacd4d3 gcc/gimple-range-edge.cc ff7214e2064e1c914da68bbc5c59ac6d gcc/gimple-range-edge.h 4b6d81555c2fd93dce4352b2756cacec gcc/gimple-range-fold.cc a25f3a6963c602d111eb631ee4444cf9 gcc/gimple-range-fold.h *************** f0756e5b5cf48a95b7e157d22e9faeda gcc/gi *** 5799,5815 **** ae1d2577cae83e6acea7dc5239c033f3 gcc/gimple-range-trace.h 59b9f2f75e5de30ecfda93bde785915a gcc/gimple-range.cc 79c8ed03d56c9a2f09f77ece8c2838bc gcc/gimple-range.h ! 224993fb57f0387f4a6a3eb261687a41 gcc/gimple-ssa-backprop.cc 3a9acfb81d934871fc78a536f2df929c gcc/gimple-ssa-evrp-analyze.cc a2e47746135af17dac3a1f31d5ec570b gcc/gimple-ssa-evrp-analyze.h 7b4c1e8f532bae009a7eee5a9914f4e0 gcc/gimple-ssa-evrp.cc ! 1b1d4df650a10ddd70ed93d3ff96663c gcc/gimple-ssa-isolate-paths.cc 6881154cb788d83ed5d3a6faa40e8491 gcc/gimple-ssa-nonnull-compare.cc 8e1e93b40c3c71852038f4e15cc0ea0e gcc/gimple-ssa-split-paths.cc 4f7e23705d457e93b29edca5a1da0961 gcc/gimple-ssa-sprintf.cc ! 62346616dd003a655894e57f5b102985 gcc/gimple-ssa-store-merging.cc ! ca63b943de7942e5678ba99a1ddd3285 gcc/gimple-ssa-strength-reduction.cc ! 4c37768065cd62ce8453e3c4678efa08 gcc/gimple-ssa-warn-access.cc 7064ea947fe572efdcb48307a73cc457 gcc/gimple-ssa-warn-access.h 760b69c7948cbd7e7ee6a848c204e287 gcc/gimple-ssa-warn-alloca.cc 1bc2d755960e18e2591f149a5eb08cfc gcc/gimple-ssa-warn-restrict.cc --- 5807,5823 ---- ae1d2577cae83e6acea7dc5239c033f3 gcc/gimple-range-trace.h 59b9f2f75e5de30ecfda93bde785915a gcc/gimple-range.cc 79c8ed03d56c9a2f09f77ece8c2838bc gcc/gimple-range.h ! 92f032cb59fda3102a8e7215a37fcf21 gcc/gimple-ssa-backprop.cc 3a9acfb81d934871fc78a536f2df929c gcc/gimple-ssa-evrp-analyze.cc a2e47746135af17dac3a1f31d5ec570b gcc/gimple-ssa-evrp-analyze.h 7b4c1e8f532bae009a7eee5a9914f4e0 gcc/gimple-ssa-evrp.cc ! 97c3ab05afaa6024132b750dc1c0ee9f gcc/gimple-ssa-isolate-paths.cc 6881154cb788d83ed5d3a6faa40e8491 gcc/gimple-ssa-nonnull-compare.cc 8e1e93b40c3c71852038f4e15cc0ea0e gcc/gimple-ssa-split-paths.cc 4f7e23705d457e93b29edca5a1da0961 gcc/gimple-ssa-sprintf.cc ! b5e28957b6ebdb400eedc1fc7ab56662 gcc/gimple-ssa-store-merging.cc ! dbd01759558a0a093579baedc1616efe gcc/gimple-ssa-strength-reduction.cc ! 40f9a6cd1632a39ab9b31da7c74f121d gcc/gimple-ssa-warn-access.cc 7064ea947fe572efdcb48307a73cc457 gcc/gimple-ssa-warn-access.h 760b69c7948cbd7e7ee6a848c204e287 gcc/gimple-ssa-warn-alloca.cc 1bc2d755960e18e2591f149a5eb08cfc gcc/gimple-ssa-warn-restrict.cc *************** cedfeeeb6a89b08187da0a55778ff05c gcc/gi *** 5826,5832 **** b1f2597055332f7a009df2374360eee2 gcc/gimple.h 1a79444af2bcf0c019b20c37cb346635 gcc/gimplify-me.cc 489260dcd67a90caca7adf7b361f9078 gcc/gimplify-me.h ! 98f389d1036f8f326636c7afcfe3b5b4 gcc/gimplify.cc acbd4cf19da012507fa6f90cc988cc15 gcc/gimplify.h 4b707ba8acc84c0c2c69cd7d11b0b878 gcc/ginclude/float.h 5e92ed0886d68a4cce339044cf03cd57 gcc/ginclude/iso646.h --- 5834,5840 ---- b1f2597055332f7a009df2374360eee2 gcc/gimple.h 1a79444af2bcf0c019b20c37cb346635 gcc/gimplify-me.cc 489260dcd67a90caca7adf7b361f9078 gcc/gimplify-me.h ! 84cbbf230c30eb137d19c257ba9b3d37 gcc/gimplify.cc acbd4cf19da012507fa6f90cc988cc15 gcc/gimplify.h 4b707ba8acc84c0c2c69cd7d11b0b878 gcc/ginclude/float.h 5e92ed0886d68a4cce339044cf03cd57 gcc/ginclude/iso646.h *************** fdcce39ba434215ff2ed425e037af50e gcc/in *** 5967,5976 **** af937d6371bfc6dae1126fa3b845a40d gcc/ipa-comdats.cc 1fe4e2c00fb6b7385df67480e33d0fc6 gcc/ipa-cp.cc c902d1e07ec7e9d3fc10e9ad37aa9a67 gcc/ipa-devirt.cc ! b8faf7652ab73348eb8dfd2b188a5d56 gcc/ipa-fnsummary.cc 634795391b1718599123e8f6f5dd1068 gcc/ipa-fnsummary.h ! b34559e01a3cf2fa5b4a65c745283e25 gcc/ipa-free-lang-data.cc ! 1461ba766c8866ca428487c7aa48d5cd gcc/ipa-icf-gimple.cc ac03bc194f37ee5eb93086c446e09d46 gcc/ipa-icf-gimple.h 0ce567e80b74cab5db05bbd7c890c3b8 gcc/ipa-icf.cc 160f6907201241c29aa0aba8c773fb7d gcc/ipa-icf.h --- 5975,5984 ---- af937d6371bfc6dae1126fa3b845a40d gcc/ipa-comdats.cc 1fe4e2c00fb6b7385df67480e33d0fc6 gcc/ipa-cp.cc c902d1e07ec7e9d3fc10e9ad37aa9a67 gcc/ipa-devirt.cc ! e53488d9d3ac74d139bab421e0486e33 gcc/ipa-fnsummary.cc 634795391b1718599123e8f6f5dd1068 gcc/ipa-fnsummary.h ! e4ac2034c1b934240fac069ac8fe8cdb gcc/ipa-free-lang-data.cc ! cec97b36e5b622b3af7c95f2d53e3a73 gcc/ipa-icf-gimple.cc ac03bc194f37ee5eb93086c446e09d46 gcc/ipa-icf-gimple.h 0ce567e80b74cab5db05bbd7c890c3b8 gcc/ipa-icf.cc 160f6907201241c29aa0aba8c773fb7d gcc/ipa-icf.h *************** e3a631a3659e24702ef403fc44290218 gcc/ip *** 5980,5986 **** 1fa2c0c59dc4da56860cc6f2a97f7f83 gcc/ipa-inline.h df25330f62b3dfe116e3d208d97382c0 gcc/ipa-modref-tree.cc e232a9fa53a9e55ca7d904fd6d08cfd3 gcc/ipa-modref-tree.h ! 626c06f88fb95c500f85a961b35a2586 gcc/ipa-modref.cc a1998332fb371fefb1d136e55f251318 gcc/ipa-modref.h a3ac337da07de091ab3c184819c1c37e gcc/ipa-param-manipulation.cc 1642ce52f56ac97998826713b05f7f8e gcc/ipa-param-manipulation.h --- 5988,5994 ---- 1fa2c0c59dc4da56860cc6f2a97f7f83 gcc/ipa-inline.h df25330f62b3dfe116e3d208d97382c0 gcc/ipa-modref-tree.cc e232a9fa53a9e55ca7d904fd6d08cfd3 gcc/ipa-modref-tree.h ! 6bcef7c284c11575ef0242a4d7bc6c88 gcc/ipa-modref.cc a1998332fb371fefb1d136e55f251318 gcc/ipa-modref.h a3ac337da07de091ab3c184819c1c37e gcc/ipa-param-manipulation.cc 1642ce52f56ac97998826713b05f7f8e gcc/ipa-param-manipulation.h *************** a3ac337da07de091ab3c184819c1c37e gcc/ip *** 5988,5994 **** 8e4ffa832ff8be986741e4db4fb7a14d gcc/ipa-predicate.cc 8ea80a7dfb62d31f755b1bab47536cfb gcc/ipa-predicate.h 186ed06995655200325c448906fd4688 gcc/ipa-profile.cc ! 91026c5b205f54cc0d1bf952ef64a75c gcc/ipa-prop.cc 13a31f6e6202f187029df90f9cb2412d gcc/ipa-prop.h e4663294020d7a5d918996dbcaacdb0d gcc/ipa-pure-const.cc 57bca18eaf2476064d1e04fcdcff555b gcc/ipa-ref.cc --- 5996,6002 ---- 8e4ffa832ff8be986741e4db4fb7a14d gcc/ipa-predicate.cc 8ea80a7dfb62d31f755b1bab47536cfb gcc/ipa-predicate.h 186ed06995655200325c448906fd4688 gcc/ipa-profile.cc ! 096fc71bb4a8abc7ec378358e1e9b523 gcc/ipa-prop.cc 13a31f6e6202f187029df90f9cb2412d gcc/ipa-prop.h e4663294020d7a5d918996dbcaacdb0d gcc/ipa-pure-const.cc 57bca18eaf2476064d1e04fcdcff555b gcc/ipa-ref.cc *************** d4c66c0391e81354d287eec0bcf46762 gcc/li *** 6113,6119 **** 83de5c6450456e215a5484083afcd32a gcc/limity.h e341f9a991267d99f0bc9e1c4453d3ac gcc/lists.cc 30b8e3e407f46ad2cb39260ec4bab9f6 gcc/lock-and-run.sh ! 0a9c4c99ad1df21ceeeb816a2c7b541b gcc/loop-doloop.cc e5932fb927bbb4bfb85cb5d33ffd6417 gcc/loop-init.cc 6ddb38f2371c76647a7cbe757b023b34 gcc/loop-invariant.cc 8e7bd8eadb7b7bdc1e578d13b7da86c2 gcc/loop-iv.cc --- 6121,6127 ---- 83de5c6450456e215a5484083afcd32a gcc/limity.h e341f9a991267d99f0bc9e1c4453d3ac gcc/lists.cc 30b8e3e407f46ad2cb39260ec4bab9f6 gcc/lock-and-run.sh ! 9ecc13cb883d6a5d9b032c59484f077d gcc/loop-doloop.cc e5932fb927bbb4bfb85cb5d33ffd6417 gcc/loop-init.cc 6ddb38f2371c76647a7cbe757b023b34 gcc/loop-invariant.cc 8e7bd8eadb7b7bdc1e578d13b7da86c2 gcc/loop-iv.cc *************** d5e19107ed41503bb67b0d933a4d56a3 gcc/lr *** 6127,6140 **** 38a6b3fbfbeebe88bec281b43a09213a gcc/lra-eliminations.cc e9afb9364b5e117827c3db67a1717c17 gcc/lra-int.h cfd5ab112698229bbb833f8a805d27ef gcc/lra-lives.cc ! b1a7f9f7a4796f7d3f6a6c60ac9d2bd2 gcc/lra-remat.cc a12ca899bd59ccbeec416fc43977c608 gcc/lra-spills.cc 8af016f653ef309d269a40b20c238258 gcc/lra.cc f490aaab2d136c3ac960b8a2268bbeae gcc/lra.h ! e1627fa0450d2bf925dc226db5eea40f gcc/lto-cgraph.cc 5f9713f5327a766eda14c98080a2f793 gcc/lto-compress.cc dc7879f80a53a211ef0a2279b918b482 gcc/lto-compress.h ! abb79d7ba9534061b9c18bc473a07b94 gcc/lto-opts.cc 76aa6318b1ff313a3ebae8c03a117449 gcc/lto-section-in.cc daebc1236d16034267b252a3005afafe gcc/lto-section-names.h 552822b6b924fec051ecb1eedb0d585e gcc/lto-section-out.cc --- 6135,6148 ---- 38a6b3fbfbeebe88bec281b43a09213a gcc/lra-eliminations.cc e9afb9364b5e117827c3db67a1717c17 gcc/lra-int.h cfd5ab112698229bbb833f8a805d27ef gcc/lra-lives.cc ! a8690b1b1211e5729fe7d4b48fa78daa gcc/lra-remat.cc a12ca899bd59ccbeec416fc43977c608 gcc/lra-spills.cc 8af016f653ef309d269a40b20c238258 gcc/lra.cc f490aaab2d136c3ac960b8a2268bbeae gcc/lra.h ! 6a8705800de664c76eba7c18b3eb563c gcc/lto-cgraph.cc 5f9713f5327a766eda14c98080a2f793 gcc/lto-compress.cc dc7879f80a53a211ef0a2279b918b482 gcc/lto-compress.h ! 0ee6efb06e1ce3cefa32570d64f96871 gcc/lto-opts.cc 76aa6318b1ff313a3ebae8c03a117449 gcc/lto-section-in.cc daebc1236d16034267b252a3005afafe gcc/lto-section-names.h 552822b6b924fec051ecb1eedb0d585e gcc/lto-section-out.cc *************** daebc1236d16034267b252a3005afafe gcc/lt *** 6143,6149 **** f8113169f67aa54af90435250435dd6c gcc/lto-streamer.cc 2936f9135f911160faf0cb4b721086ea gcc/lto-streamer.h c6b404aebb74d7a1c0ea56a649ed875f gcc/lto-wrapper.cc ! 1552594aca4c68b158c4e26253ed94a5 gcc/lto/ChangeLog 3abc3928a490a07a555d38d6e8879173 gcc/lto/Make-lang.in 26c76b7cd7c3c43bd918e8cf35d2e1c8 gcc/lto/common.cc f4c6748bc258cf396c8c26902b79122c gcc/lto/common.h --- 6151,6157 ---- f8113169f67aa54af90435250435dd6c gcc/lto-streamer.cc 2936f9135f911160faf0cb4b721086ea gcc/lto-streamer.h c6b404aebb74d7a1c0ea56a649ed875f gcc/lto-wrapper.cc ! 14c6efeb1482c831e2e667309695dceb gcc/lto/ChangeLog 3abc3928a490a07a555d38d6e8879173 gcc/lto/Make-lang.in 26c76b7cd7c3c43bd918e8cf35d2e1c8 gcc/lto/common.cc f4c6748bc258cf396c8c26902b79122c gcc/lto/common.h *************** f31532497458ba97547513ece031819c gcc/lt *** 6157,6163 **** e719d993ca5644498c09e65a9997d4a8 gcc/lto/lto-object.cc 4fd3b5c29ead1d413aff659921336d56 gcc/lto/lto-partition.cc b3aeaab4af3bbe880adc32eab519bbd0 gcc/lto/lto-partition.h ! 5856df4a1de591e39896c5c3bfb1e56f gcc/lto/lto-symtab.cc 7f60a7cb3744a70b89288720475121b0 gcc/lto/lto-symtab.h 961812bc8fc7de0dd27cdc381f40e3ef gcc/lto/lto-tree.h bf5e6aa2269343ff80fdecaeae86c158 gcc/lto/lto.cc --- 6165,6171 ---- e719d993ca5644498c09e65a9997d4a8 gcc/lto/lto-object.cc 4fd3b5c29ead1d413aff659921336d56 gcc/lto/lto-partition.cc b3aeaab4af3bbe880adc32eab519bbd0 gcc/lto/lto-partition.h ! 282f584d095d289b6f3970b0873aea87 gcc/lto/lto-symtab.cc 7f60a7cb3744a70b89288720475121b0 gcc/lto/lto-symtab.h 961812bc8fc7de0dd27cdc381f40e3ef gcc/lto/lto-tree.h bf5e6aa2269343ff80fdecaeae86c158 gcc/lto/lto.cc *************** dff2331e5edc5d66c07f2ba05c20a9c5 gcc/lt *** 6165,6171 **** 704dbc3758376f5f1a822ef60e3ab455 gcc/machmode.def ae630ad63e4030b0c8fb86461bc683c9 gcc/machmode.h 002d4a917af4cc0bb0f4dc295bbc4b17 gcc/main.cc ! 2c6b2210ec6773c7af2f4660c1d13625 gcc/match.pd d9414a0dc03cec270c998d720054b9fa gcc/mcf.cc efc7ef9dc4204c76b419e2a76287ef0b gcc/mem-stats-traits.h a31c8fb12b7bbe32c163b580c91affad gcc/mem-stats.h --- 6173,6179 ---- 704dbc3758376f5f1a822ef60e3ab455 gcc/machmode.def ae630ad63e4030b0c8fb86461bc683c9 gcc/machmode.h 002d4a917af4cc0bb0f4dc295bbc4b17 gcc/main.cc ! 22b3cf90a7055b112d255abf77ffd880 gcc/match.pd d9414a0dc03cec270c998d720054b9fa gcc/mcf.cc efc7ef9dc4204c76b419e2a76287ef0b gcc/mem-stats-traits.h a31c8fb12b7bbe32c163b580c91affad gcc/mem-stats.h *************** c51124a47a3b6c89f04733f9177ae51e gcc/op *** 6224,6230 **** cc40c946f7b8d8f98cea92c31d89b31e gcc/opt-problem.cc 0040ccd16fe3412114ec53a82407a4c7 gcc/opt-problem.h 3695862735cbfad640dc6ff8238ee68a gcc/opt-read.awk ! 6a908766705881b86f2093fb082edaf3 gcc/opt-suggestions.cc bd0e05064e12f50320714a3a859b59c8 gcc/opt-suggestions.h 5a8cce324b219e51fa147e21531c0383 gcc/optabs-libfuncs.cc 3a8bf24583a0106af624d257ab7ef573 gcc/optabs-libfuncs.h --- 6232,6238 ---- cc40c946f7b8d8f98cea92c31d89b31e gcc/opt-problem.cc 0040ccd16fe3412114ec53a82407a4c7 gcc/opt-problem.h 3695862735cbfad640dc6ff8238ee68a gcc/opt-read.awk ! f6462036c66008260bac8ce4750ed0ab gcc/opt-suggestions.cc bd0e05064e12f50320714a3a859b59c8 gcc/opt-suggestions.h 5a8cce324b219e51fa147e21531c0383 gcc/optabs-libfuncs.cc 3a8bf24583a0106af624d257ab7ef573 gcc/optabs-libfuncs.h *************** bd0e05064e12f50320714a3a859b59c8 gcc/op *** 6232,6248 **** c0ba177165367a0975291f9920aadf51 gcc/optabs-query.h 0e8bfc89a9c3d2e3abcf8600733f2fb0 gcc/optabs-tree.cc 52ec5ad3f57345e13cb41d723e2a33af gcc/optabs-tree.h ! 54e76ae6a0e002668ce32afc2bb50cda gcc/optabs.cc 3b5dde2042c9c3b420ce7becb5248f58 gcc/optabs.def 234d417c73a1c9170dfe1eb986c28950 gcc/optabs.h 75d4127222473ed096547c333b8da80c gcc/optc-gen.awk ! 50b65e9c9fa59c935bd58f3d4cb42a5d gcc/optc-save-gen.awk f304b54f13e9f101244e3f6f98fcb2bc gcc/opth-gen.awk c74285e950d8a6ff441bcf560e0287da gcc/optinfo-emit-json.cc b4ac54463074944fdc745ff8daa183bf gcc/optinfo-emit-json.h a88f4db5a2f071deae7fb76236a41ee6 gcc/optinfo.cc 8cd985fe2f6d5ad07cd1a5234b58705e gcc/optinfo.h ! 8f1654ba7236665d97ac58075248d6f6 gcc/opts-common.cc fba5619d803715ac83289523abdb5513 gcc/opts-diagnostic.h cc4beb900c58d571dccc6e32de83cdfa gcc/opts-global.cc abb990f120fd8b648831963db6ecec8c gcc/opts-jobserver.h --- 6240,6256 ---- c0ba177165367a0975291f9920aadf51 gcc/optabs-query.h 0e8bfc89a9c3d2e3abcf8600733f2fb0 gcc/optabs-tree.cc 52ec5ad3f57345e13cb41d723e2a33af gcc/optabs-tree.h ! 8dad7275795756b5d4e75cb67b7bc2e5 gcc/optabs.cc 3b5dde2042c9c3b420ce7becb5248f58 gcc/optabs.def 234d417c73a1c9170dfe1eb986c28950 gcc/optabs.h 75d4127222473ed096547c333b8da80c gcc/optc-gen.awk ! 85dc8cda43e21abf63d9917081bdb8b8 gcc/optc-save-gen.awk f304b54f13e9f101244e3f6f98fcb2bc gcc/opth-gen.awk c74285e950d8a6ff441bcf560e0287da gcc/optinfo-emit-json.cc b4ac54463074944fdc745ff8daa183bf gcc/optinfo-emit-json.h a88f4db5a2f071deae7fb76236a41ee6 gcc/optinfo.cc 8cd985fe2f6d5ad07cd1a5234b58705e gcc/optinfo.h ! 672def3e5a948207f4901bf8f2882824 gcc/opts-common.cc fba5619d803715ac83289523abdb5513 gcc/opts-diagnostic.h cc4beb900c58d571dccc6e32de83cdfa gcc/opts-global.cc abb990f120fd8b648831963db6ecec8c gcc/opts-jobserver.h *************** d7fd8d51e503de22036b0a801d050698 gcc/po *** 6300,6306 **** 196d7fd24ea47161b8bce63fb543ba25 gcc/po/zh_CN.po 055e47d0ee5114cfb1b7b8fb9f53466e gcc/po/zh_TW.gmo b6c748e7dd2e58de498be8609e1df294 gcc/po/zh_TW.po ! badd3abd7109bf15a4e3e631fbbf05ca gcc/pointer-query.cc c64ba944344ccbf9de24872de9d05e23 gcc/pointer-query.h 805123a4729c62a7508babaf78dbce36 gcc/poly-int-types.h 43c674080bb28f988f54a8a9d074f887 gcc/poly-int.h --- 6308,6314 ---- 196d7fd24ea47161b8bce63fb543ba25 gcc/po/zh_CN.po 055e47d0ee5114cfb1b7b8fb9f53466e gcc/po/zh_TW.gmo b6c748e7dd2e58de498be8609e1df294 gcc/po/zh_TW.po ! f78d0fd881fdd44cb64d963fdbdb1bc1 gcc/pointer-query.cc c64ba944344ccbf9de24872de9d05e23 gcc/pointer-query.h 805123a4729c62a7508babaf78dbce36 gcc/poly-int-types.h 43c674080bb28f988f54a8a9d074f887 gcc/poly-int.h *************** b149c10ec9175a62b2cacecd1a122265 gcc/re *** 6331,6337 **** 395567685a6400596031764ffab205d9 gcc/read-rtl-function.cc d4585c5b545aa5cacf2e013b2ff344ba gcc/read-rtl-function.h 3c88d8d8b7ab7b0008173c12d284746e gcc/read-rtl.cc ! 707e5482d6c4e9fa7260cdea542405d0 gcc/real.cc 5e52056da5c57c516abcd8cdd3ec7daf gcc/real.h 7b4e904ee64a419d0981d9b23045cc05 gcc/realmpfr.cc 03313b503aec1d8db4d8fde449f49d84 gcc/realmpfr.h --- 6339,6345 ---- 395567685a6400596031764ffab205d9 gcc/read-rtl-function.cc d4585c5b545aa5cacf2e013b2ff344ba gcc/read-rtl-function.h 3c88d8d8b7ab7b0008173c12d284746e gcc/read-rtl.cc ! 9b8596b088fb9ecd20aae99832c7e152 gcc/real.cc 5e52056da5c57c516abcd8cdd3ec7daf gcc/real.h 7b4e904ee64a419d0981d9b23045cc05 gcc/realmpfr.cc 03313b503aec1d8db4d8fde449f49d84 gcc/realmpfr.h *************** e220fee4e4977ddb2570fe12f97f45a5 gcc/re *** 6351,6357 **** 8045d9a1685d70ea8674222e4aa0fa7d gcc/reload.cc 706a2adc5d0c484db36057fb33b0eefc gcc/reload.h 0775a3d3caf169a31c61ae0213ae8b2b gcc/reload1.cc ! df014e7829f7df5e9773bd9573d4e19c gcc/reorg.cc 617ed1529638865ae3fc830d27ecd144 gcc/resource.cc 809404bdc57031fca063f81dbec0f528 gcc/resource.h b1ba4fb3766a132eabe47d085b341c4d gcc/rtl-error.cc --- 6359,6365 ---- 8045d9a1685d70ea8674222e4aa0fa7d gcc/reload.cc 706a2adc5d0c484db36057fb33b0eefc gcc/reload.h 0775a3d3caf169a31c61ae0213ae8b2b gcc/reload1.cc ! 3d261ce86c75569adb96c604b66641a5 gcc/reorg.cc 617ed1529638865ae3fc830d27ecd144 gcc/resource.cc 809404bdc57031fca063f81dbec0f528 gcc/resource.h b1ba4fb3766a132eabe47d085b341c4d gcc/rtl-error.cc *************** bdb7861240a719686c5923e70bd8347a gcc/ta *** 6466,6472 **** 6149228cab283a1f92d51b26eb37646e gcc/targhooks.cc 008304bca4d8ea66f0c9bc8749e23bb5 gcc/targhooks.h f39fcaa8197187283ccfed40107b426d gcc/testsuite/.gitattributes ! 24bab2a1a6bee9ab645d2cc95e36e99c gcc/testsuite/ChangeLog 862f04afbd87da2cc6bc432c3f28430f gcc/testsuite/ChangeLog-1993-2007 029a5d8dacd25eb5d4711452ac448e5b gcc/testsuite/ChangeLog-2008 13ac28c41d51b66b4ec40dba6bd50f39 gcc/testsuite/ChangeLog-2009 --- 6474,6480 ---- 6149228cab283a1f92d51b26eb37646e gcc/targhooks.cc 008304bca4d8ea66f0c9bc8749e23bb5 gcc/targhooks.h f39fcaa8197187283ccfed40107b426d gcc/testsuite/.gitattributes ! 6750ba9abec92d9c63b5b1768785cec6 gcc/testsuite/ChangeLog 862f04afbd87da2cc6bc432c3f28430f gcc/testsuite/ChangeLog-1993-2007 029a5d8dacd25eb5d4711452ac448e5b gcc/testsuite/ChangeLog-2008 13ac28c41d51b66b4ec40dba6bd50f39 gcc/testsuite/ChangeLog-2009 *************** c51902099b5071373c02eb23d9a61aab gcc/te *** 9115,9120 **** --- 9123,9129 ---- ad210b6699449d7c2f1c95f9c363d606 gcc/testsuite/c-c++-common/Warray-bounds.c 1465c746ce0da634140bd11994689fb1 gcc/testsuite/c-c++-common/Warray-compare-1.c 86563e27b22c96809703786cd874a440 gcc/testsuite/c-c++-common/Warray-compare-2.c + 4e5a083c4ba660d982d456bf7982468f gcc/testsuite/c-c++-common/Warray-compare-3.c fe25f03fdb469ad245f6cae14480ddad gcc/testsuite/c-c++-common/Wattributes-2.c 17bdcdb759c07d09c2d4d9895b89253d gcc/testsuite/c-c++-common/Wattributes-3.c e07fdc272a434aa05e75700c13b249b0 gcc/testsuite/c-c++-common/Wattributes.c *************** c7eebf2a6120dfecf1a6ae7de1f49694 gcc/te *** 9330,9335 **** --- 9339,9345 ---- bf0b620625355f346eefd54a379f0ac2 gcc/testsuite/c-c++-common/Wsizeof-pointer-memaccess2.c 9435b893d35596d6e6c421a7d0ca6b4e gcc/testsuite/c-c++-common/Wsizeof-pointer-memaccess3.c c2f8af9a24cbf598244cbdf23a6eb007 gcc/testsuite/c-c++-common/Wsizeof-pointer-memaccess4.c + af1ddc910423deb7037d0df021bc094d gcc/testsuite/c-c++-common/Wsizeof-pointer-memaccess5.c f65e675073fa6e887cf5c8b46811dbbd gcc/testsuite/c-c++-common/Wstringop-overflow-2-novec.c 72b026b6797ea3ac3a7342c55601477c gcc/testsuite/c-c++-common/Wstringop-overflow-2.c ed599254a04855f3e360dc18fbdba9d9 gcc/testsuite/c-c++-common/Wstringop-overflow.c *************** ac27af3ea0b119b95109334b03d48ca9 gcc/te *** 9662,9667 **** --- 9672,9678 ---- 1ba0ade791f40edbd80fddddb700282b gcc/testsuite/c-c++-common/cpp/openmp-define-2.c 88fdfa7ad0dd8169a90963238ee1847e gcc/testsuite/c-c++-common/cpp/openmp-define-3.c fb93693065e3e66c29a51aa146b3d3fa gcc/testsuite/c-c++-common/cpp/pr104147.c + c9c90fd4b9d3e25d8629a40a44fff10f gcc/testsuite/c-c++-common/cpp/pr115913.c c85025f0def783f70f9bb6a4ea9a23f3 gcc/testsuite/c-c++-common/cpp/pr45457.c 50c40c5b8912ad75a2e46fd06778339d gcc/testsuite/c-c++-common/cpp/pr57580.c 6b93142f33f13f29aa948ea5e779f1a0 gcc/testsuite/c-c++-common/cpp/pr58844-1.c *************** ef8ec3320ae234be32fcdfc5379eaca2 gcc/te *** 10215,10220 **** --- 10226,10232 ---- 0cff3c6576e6db18b71f25c5da8bcbb0 gcc/testsuite/c-c++-common/gomp/pr104968.c 1164bc26f7382179d1bd6b607af1d336 gcc/testsuite/c-c++-common/gomp/pr106981.c 8f995161beda01326e712ba172a760f8 gcc/testsuite/c-c++-common/gomp/pr107001.c + c83ce004951a9a0719e190f7457302c7 gcc/testsuite/c-c++-common/gomp/pr119000.c e16ef156ad193ef1f3cba60ad16e57ab gcc/testsuite/c-c++-common/gomp/pr51360.c 84c977571aeb43c0224137efe7f5b213 gcc/testsuite/c-c++-common/gomp/pr53580.c 28bfd873981083756a16f70fdb0b86db gcc/testsuite/c-c++-common/gomp/pr54017.c *************** f64e9a0e7b5ee2dca69c8d247f6246ab gcc/te *** 10829,10839 **** 6099fd0b163b9c570575cfa376ad44ae gcc/testsuite/c-c++-common/torture/builtin-arith-overflow-p-8.c 1521bd071912021d30375778ada20c27 gcc/testsuite/c-c++-common/torture/builtin-arith-overflow-p-9.c c0ced56aa092fbe05fcfb0400e4a7973 gcc/testsuite/c-c++-common/torture/builtin-arith-overflow.h ! 80c6991dac30744cf52461dd3f956e72 gcc/testsuite/c-c++-common/torture/builtin-clear-padding-1.c ! dcfe45ba6f5d3cfc6a596ae589694b44 gcc/testsuite/c-c++-common/torture/builtin-clear-padding-2.c ! 895fbc9bc655600ce8926f0324c028bf gcc/testsuite/c-c++-common/torture/builtin-clear-padding-3.c ! ecf00277bf404ed30fb08d5a8347834e gcc/testsuite/c-c++-common/torture/builtin-clear-padding-4.c ! 02ccc099dac6a69400f154fddb7c755d gcc/testsuite/c-c++-common/torture/builtin-clear-padding-5.c e6519a905d51bc4a47ceea85c886d98b gcc/testsuite/c-c++-common/torture/builtin-convertvector-1.c 1152c43998c24654fd01c67b23e23932 gcc/testsuite/c-c++-common/torture/builtin-convertvector-2.c 78be28e180d73a89ef820b89b8e47458 gcc/testsuite/c-c++-common/torture/builtin-shufflevector-1.c --- 10841,10852 ---- 6099fd0b163b9c570575cfa376ad44ae gcc/testsuite/c-c++-common/torture/builtin-arith-overflow-p-8.c 1521bd071912021d30375778ada20c27 gcc/testsuite/c-c++-common/torture/builtin-arith-overflow-p-9.c c0ced56aa092fbe05fcfb0400e4a7973 gcc/testsuite/c-c++-common/torture/builtin-arith-overflow.h ! 3cee92adaa1a38086edfab9c3d84f00a gcc/testsuite/c-c++-common/torture/builtin-clear-padding-1.c ! 1865956f3fc939653de54faba3618b72 gcc/testsuite/c-c++-common/torture/builtin-clear-padding-2.c ! 31f715afb9a58cc96ce3fe60e4c8101d gcc/testsuite/c-c++-common/torture/builtin-clear-padding-3.c ! 1428b405a26a5320e9400f0d631ac3b9 gcc/testsuite/c-c++-common/torture/builtin-clear-padding-4.c ! f1ab5d6173eb9710341597174f8f1538 gcc/testsuite/c-c++-common/torture/builtin-clear-padding-5.c ! 550bf6a95b93ecdb962dab3cc0becb47 gcc/testsuite/c-c++-common/torture/builtin-clear-padding-6.c e6519a905d51bc4a47ceea85c886d98b gcc/testsuite/c-c++-common/torture/builtin-convertvector-1.c 1152c43998c24654fd01c67b23e23932 gcc/testsuite/c-c++-common/torture/builtin-convertvector-2.c 78be28e180d73a89ef820b89b8e47458 gcc/testsuite/c-c++-common/torture/builtin-shufflevector-1.c *************** d61cc0116375f68235d4f54cec36629f gcc/te *** 10854,10859 **** --- 10867,10876 ---- 7a43079b53195516c0a573da0a3b9672 gcc/testsuite/c-c++-common/torture/harden-cond.c 75b3c9a6df31ced0517c8cbc745ba01b gcc/testsuite/c-c++-common/torture/pr101636.c 72a2947bdd50352d6b0c1363882b7249 gcc/testsuite/c-c++-common/torture/pr104497.c + 669d583becd8ce34c50d8bdb30169d9c gcc/testsuite/c-c++-common/torture/pr116189-1.c + 993b07c1c8f1a0db0b2e9956c1045e2c gcc/testsuite/c-c++-common/torture/pr117912-1.c + 457a8eeb2f3d9696c824ae9b75b4c721 gcc/testsuite/c-c++-common/torture/pr117912-2.c + 700dd88b5774e08268eb43b2572a7160 gcc/testsuite/c-c++-common/torture/pr117912-3.c 9f1ae2fa915c5159ec134a1894ad5cf1 gcc/testsuite/c-c++-common/torture/pr42834.c 675e839574d99a5e8a0446f66b3520ca gcc/testsuite/c-c++-common/torture/pr46137.c dad442c09041500a2c414da240f49b82 gcc/testsuite/c-c++-common/torture/pr53505.c *************** fb777e6427f4a224508112af8340c3d4 gcc/te *** 11618,11623 **** --- 11635,11641 ---- 0bd40d9ed57b38d1bedec8f7fbb98d1c gcc/testsuite/g++.dg/asan/large-func-test-1.C ca4a8065918a3119cb5474bacec801f2 gcc/testsuite/g++.dg/asan/pr102656.C b03be3a03970717959df65ccdcbebe88 gcc/testsuite/g++.dg/asan/pr104449.C + 350e8cfd78cd243b5ca66f3b0149e4b7 gcc/testsuite/g++.dg/asan/pr118763.C e472f2ce37f2b55b1358ec08717d9f08 gcc/testsuite/g++.dg/asan/pr55617.C 74a04a20e12a8acd0fd7d05742cf8d63 gcc/testsuite/g++.dg/asan/pr62017.C 505943436d80a41b5e95bf0b67db97cd gcc/testsuite/g++.dg/asan/pr64937.C *************** be8e4b63955ef6076e0e2cd57b4fd61c gcc/te *** 13058,13063 **** --- 13076,13082 ---- e0a86859c165bfaac8fd8efd9023935b gcc/testsuite/g++.dg/cpp0x/constexpr-union6.C 7229788425547bc1befff78305c473c8 gcc/testsuite/g++.dg/cpp0x/constexpr-union7.C 5d95979f72aa52bb0abbd82d05bf5e53 gcc/testsuite/g++.dg/cpp0x/constexpr-union7a.C + 672d560c9bad4c9225e64d802d62bb03 gcc/testsuite/g++.dg/cpp0x/constexpr-union9.C 9c897128234fa6ab41edf384f11dd381 gcc/testsuite/g++.dg/cpp0x/constexpr-using.C 7a9a83c41c3d2c5f82ac428442905b65 gcc/testsuite/g++.dg/cpp0x/constexpr-using2.C 6dc93e335ab58c26289327a9c7e9d042 gcc/testsuite/g++.dg/cpp0x/constexpr-using3.C *************** ec6bf8354ca1b8834959e856431d6ac4 gcc/te *** 13076,13081 **** --- 13095,13101 ---- 58e380f5c0bc16e86009e605e19acb07 gcc/testsuite/g++.dg/cpp0x/constexpr-volatile.C 5081c9b6e2b0e12bf7d6e127f365efe7 gcc/testsuite/g++.dg/cpp0x/constexpr-volatile2.C 30ced1e6b63c1eb7ae6b537c9e49bc1f gcc/testsuite/g++.dg/cpp0x/constexpr-volatile3.C + a219624071878a5955efe99a018a2b43 gcc/testsuite/g++.dg/cpp0x/constexpr-volatile4.C 7bca20d6ac21d6cb78ab16d5c52b7e64 gcc/testsuite/g++.dg/cpp0x/constexpr-wstring1.C b16fc42e77fa07ebcdb1053ea5d24120 gcc/testsuite/g++.dg/cpp0x/constexpr-wstring2.C 70dc080523c40a07cec30261f6f7007a gcc/testsuite/g++.dg/cpp0x/conv-tmpl1.C *************** f570e39b0271d39d9cdde0565b1fe390 gcc/te *** 14180,14185 **** --- 14200,14206 ---- 038b57fc82284f2499013b6711bc0a8e gcc/testsuite/g++.dg/cpp0x/nsdmi-defer4.C 171384a7319ac1870302b512ac8be270 gcc/testsuite/g++.dg/cpp0x/nsdmi-defer5.C 01f9c6930a387a0b45cb4220fc7ec298 gcc/testsuite/g++.dg/cpp0x/nsdmi-defer6.C + d5481fd30f66f5324cfb9ec037967222 gcc/testsuite/g++.dg/cpp0x/nsdmi-defer7.C 9a72677ce49b64f4a0e186df8902abff gcc/testsuite/g++.dg/cpp0x/nsdmi-dr1397.C 5af761999024cb836ca412ed02230774 gcc/testsuite/g++.dg/cpp0x/nsdmi-eh1.C a10475b2a54810b2909ccfef2102f693 gcc/testsuite/g++.dg/cpp0x/nsdmi-empty1.C *************** a174690fe306aaf345b02df91c3ddebe gcc/te *** 14317,14322 **** --- 14338,14344 ---- 70ac2374ee7486817d2f1310406bcc69 gcc/testsuite/g++.dg/cpp0x/pr104668.C ab53f37eb7254188dd01a8c1e25841fd gcc/testsuite/g++.dg/cpp0x/pr105256.C fa773bb98628f5c9f0fa9d8d8b29beda gcc/testsuite/g++.dg/cpp0x/pr107065.C + c6b0d9f964bf85f5f703f5dfa5e809e9 gcc/testsuite/g++.dg/cpp0x/pr119123.C 26dea799d49ce223a0c4130a3c955271 gcc/testsuite/g++.dg/cpp0x/pr31431-2.C 4d1da29b669bf3178b3987abce4d58b1 gcc/testsuite/g++.dg/cpp0x/pr31431.C d65e06a3830e2b511cc25692b94615a1 gcc/testsuite/g++.dg/cpp0x/pr31432.C *************** cf4d7a0934fa5897248e568b884df620 gcc/te *** 14555,14560 **** --- 14577,14583 ---- b01c3079ace1bdd462b03d3af7906721 gcc/testsuite/g++.dg/cpp0x/pr93905.C 114fa71f09fe7fd9b70ee4d41e776e26 gcc/testsuite/g++.dg/cpp0x/pr94616.C c60c0db646b29d21cd7d61d24670d63e gcc/testsuite/g++.dg/cpp0x/pr96440.C + 7f57e13552a3dc10e25c07f282add219 gcc/testsuite/g++.dg/cpp0x/pr98533.C 1f725aacb479fe72f5d994446fab5d54 gcc/testsuite/g++.dg/cpp0x/ptrmem-cst-arg1.C 0564cc0225d38f734d46986570531094 gcc/testsuite/g++.dg/cpp0x/ptrmem-cst1.C 6e8e648c26d9bf237cc152180e88c2c2 gcc/testsuite/g++.dg/cpp0x/range-for1.C *************** be875f126134f7edf9c2ff78ec08400f gcc/te *** 15837,15842 **** --- 15860,15866 ---- c7ab12616c35e8ba0c0796618d522c42 gcc/testsuite/g++.dg/cpp1y/var-templ77.C 65e2c5dc982b2101d716a561b1d08003 gcc/testsuite/g++.dg/cpp1y/var-templ78.C 7490ba7f2bf9511118a48f52e8c4ceed gcc/testsuite/g++.dg/cpp1y/var-templ8.C + 2555b4c1ccdec6b7fca5b625f06840d3 gcc/testsuite/g++.dg/cpp1y/var-templ87.C c62c3c5ce4dabfb077ffd26896b1d204 gcc/testsuite/g++.dg/cpp1y/var-templ9.C 2e5f8fa912af0b2871356af6f1adbd06 gcc/testsuite/g++.dg/cpp1y/vla-initlist1.C f82f70352e70742cc985b48be0774ebe gcc/testsuite/g++.dg/cpp1y/vla10.C *************** db3b073f0c7359db6e2ad4fbfa9c08d5 gcc/te *** 15905,15910 **** --- 15929,15935 ---- 871331a13941944f7010cfb1344eab6e gcc/testsuite/g++.dg/cpp1z/class-deduction109.C 517aaeb274419d156e09eb5a7d5b7077 gcc/testsuite/g++.dg/cpp1z/class-deduction11.C 9f4ecb418c0bbb6f3b318882c20889a4 gcc/testsuite/g++.dg/cpp1z/class-deduction110.C + a57c191ff65947f62c8c80935a968d19 gcc/testsuite/g++.dg/cpp1z/class-deduction117.C fccf66f75d0bb293e6ce56753e50eeda gcc/testsuite/g++.dg/cpp1z/class-deduction12.C 8033f2dbb1dc793a3fea073353a0487a gcc/testsuite/g++.dg/cpp1z/class-deduction13.C f51a81e3b0aa46f289c5ca9d3faaded6 gcc/testsuite/g++.dg/cpp1z/class-deduction14.C *************** e5653327dac59b8fbbaf57941cdf7070 gcc/te *** 16000,16005 **** --- 16025,16031 ---- 72569990a4289b5fd2ca50f289a5457b gcc/testsuite/g++.dg/cpp1z/class-deduction97.C ee498b90c48803ed7e1e39f604107077 gcc/testsuite/g++.dg/cpp1z/class-deduction98.C 196827ac69f45d97751bae8af9fb4549 gcc/testsuite/g++.dg/cpp1z/class-deduction99.C + 44dc55aa88b0ff0d3bd94802f0dc4d4b gcc/testsuite/g++.dg/cpp1z/constexpr-116676.C d09105e6c1f377543e5514e34d2837cd gcc/testsuite/g++.dg/cpp1z/constexpr-83692.C 6962bfa121a4383ee0b7a8f045abde3f gcc/testsuite/g++.dg/cpp1z/constexpr-84684.C 7417be75f23f5974ec35fe6261395c8c gcc/testsuite/g++.dg/cpp1z/constexpr-89074-1.C *************** d309961f0255b13605cf111efa2b095a gcc/te *** 16014,16019 **** --- 16040,16046 ---- 6a2eb0af9be5a3b73df8e66127a94fd9 gcc/testsuite/g++.dg/cpp1z/constexpr-if-lambda3.C 2746f29337da849f597ad6ce8bbb74c2 gcc/testsuite/g++.dg/cpp1z/constexpr-if-lambda4.C f40b7c3743735802b3e2fa6c768cf560 gcc/testsuite/g++.dg/cpp1z/constexpr-if-lambda5.C + ae7754ba50de7c7210949438f1a4a6bc gcc/testsuite/g++.dg/cpp1z/constexpr-if-lambda6.C b70f4276933d24cd68ae2e047a954ece gcc/testsuite/g++.dg/cpp1z/constexpr-if1.C 1e52ede853069710bb8cc3b5b323de8c gcc/testsuite/g++.dg/cpp1z/constexpr-if10.C 6ad161b09218162d754ac9e397dad17c gcc/testsuite/g++.dg/cpp1z/constexpr-if11.C *************** c19f90a6b67cea2957e319db88a63ee3 gcc/te *** 16155,16160 **** --- 16182,16188 ---- e6baed7e5941603d690b9c2c737ea663 gcc/testsuite/g++.dg/cpp1z/elide6.C 63be3b6d75aa3c2c8088552683d5245e gcc/testsuite/g++.dg/cpp1z/eval-order10.C 3abc6084e572264410718d38beb290bb gcc/testsuite/g++.dg/cpp1z/eval-order11.C + 2a2d4866a044c20823b5f37f629ac147 gcc/testsuite/g++.dg/cpp1z/eval-order13.C bb194d9ce590c9e5e69935ebac0f25e4 gcc/testsuite/g++.dg/cpp1z/eval-order2.C 8b89dee7164b6f4d992706e5b85433f4 gcc/testsuite/g++.dg/cpp1z/eval-order3.C 6d8d378fedaf65b4cb89952060799280 gcc/testsuite/g++.dg/cpp1z/eval-order4.C *************** ae3e1959f85f05c9ec509a6dbdbe24ca gcc/te *** 16321,16326 **** --- 16349,16356 ---- 97b68e1efbd20ee3ef9eee20ccf717b4 gcc/testsuite/g++.dg/cpp1z/nontype3a.C 6459f300d92f04eeb92c53237b82baac gcc/testsuite/g++.dg/cpp1z/nontype4.C 2d69a9b79c8f3fadb2bfb68b9d761c49 gcc/testsuite/g++.dg/cpp1z/nontype4a.C + 1a73a13a161c05eab6182bb64cba004b gcc/testsuite/g++.dg/cpp1z/nontype7.C + 86d3c074d77c88bd7ef317faea9d2968 gcc/testsuite/g++.dg/cpp1z/pr115440.C e668ace19a2b0d8946e0e19fd8317af1 gcc/testsuite/g++.dg/cpp1z/pr78771.C bc5edc17d9b70d77a054dd4736a66223 gcc/testsuite/g++.dg/cpp1z/pr79143.C 3e5ca07aaa322577e51fd003d9524cb0 gcc/testsuite/g++.dg/cpp1z/pr81016.C *************** a7e2f7d20a67204e43ab8b4439aa4e77 gcc/te *** 16605,16610 **** --- 16635,16641 ---- db4d7afa9cc5c159bbf139e868fd3544 gcc/testsuite/g++.dg/cpp2a/concepts-lambda19.C c61f89754bf19eb066c90223050eb1d6 gcc/testsuite/g++.dg/cpp2a/concepts-lambda2.C 2cdd3df6d70a6187c69e0b2e31916579 gcc/testsuite/g++.dg/cpp2a/concepts-lambda20.C + c5f62ec8bee71a828d47886f4bfb04dc gcc/testsuite/g++.dg/cpp2a/concepts-lambda24.C f2b845034b89685c0074632f8a1947ff gcc/testsuite/g++.dg/cpp2a/concepts-lambda3.C 6f185f0a7016ab67c7f0d4ffa7012182 gcc/testsuite/g++.dg/cpp2a/concepts-lambda4.C 86976d8466300862e381a2182c187b35 gcc/testsuite/g++.dg/cpp2a/concepts-lambda5.C *************** aad62a0962b0becb6f9d460d4e8a552b gcc/te *** 16998,17003 **** --- 17029,17035 ---- b41b1406ccaabb57748ecf4f05c3e13b gcc/testsuite/g++.dg/cpp2a/constexpr-virtual19.C 8356345162577a74b103ae82b69fde6d gcc/testsuite/g++.dg/cpp2a/constexpr-virtual2.C 86447166a312855244c09f8495d3f788 gcc/testsuite/g++.dg/cpp2a/constexpr-virtual20.C + f435a2ed33541ac90cf1337aa6bbe7b1 gcc/testsuite/g++.dg/cpp2a/constexpr-virtual22.C 387607aa06c3438be11d475781b728ae gcc/testsuite/g++.dg/cpp2a/constexpr-virtual3.C 4d58f9556b7091659bbc5730f1a2697b gcc/testsuite/g++.dg/cpp2a/constexpr-virtual4.C ff80d3043b2e823e497517b5dffee736 gcc/testsuite/g++.dg/cpp2a/constexpr-virtual5.C *************** f917e8e53ce100d9b00585ebdb34ff7a gcc/te *** 17317,17322 **** --- 17349,17356 ---- 98005d747053b3076aa53928776efb7e gcc/testsuite/g++.dg/cpp2a/paren-init7.C ddb0c78842f6b4e3e4606849bc1a4a82 gcc/testsuite/g++.dg/cpp2a/paren-init8.C fc8ccbfe7f14dd4a41ff708c5a05b226 gcc/testsuite/g++.dg/cpp2a/paren-init9.C + 9d5c0df7ab0b6e3e5ab03bc8eb135452 gcc/testsuite/g++.dg/cpp2a/pr117317-1.C + 4b52a1949fed25dc03d5cfb83047e7c5 gcc/testsuite/g++.dg/cpp2a/pr117317-2.C 7d1c1719a1c3e44cf69662819769f8a5 gcc/testsuite/g++.dg/cpp2a/pr88534.C 3a4139bbe15eef2dce96cb020b2681f7 gcc/testsuite/g++.dg/cpp2a/pr88537.C b94ce4741edeca1190c4590e425522dc gcc/testsuite/g++.dg/cpp2a/pr89913.C *************** fa076f7aee99ba9138c0541bc50c2e01 gcc/te *** 17977,17983 **** 95a348b65d678b6ebd4ff12262eeb554 gcc/testsuite/g++.dg/eh/pr42859.C 6b7a6fb9b5bb6227cd79629a94634556 gcc/testsuite/g++.dg/eh/pr43365.C 6eb9d68250f630420d0fdb982047fe17 gcc/testsuite/g++.dg/eh/pr45569.C ! d38795dc5765c85251d1b51d2837fa65 gcc/testsuite/g++.dg/eh/pr84968.C 9623b61344d258574a3ed60670199161 gcc/testsuite/g++.dg/eh/ref-temp1.C edd7f2bf186873e0f253e337b7c0baa7 gcc/testsuite/g++.dg/eh/ref-temp2.C a9ed8d0335c982c533cb9ab886ed3a49 gcc/testsuite/g++.dg/eh/registers1.C --- 18011,18017 ---- 95a348b65d678b6ebd4ff12262eeb554 gcc/testsuite/g++.dg/eh/pr42859.C 6b7a6fb9b5bb6227cd79629a94634556 gcc/testsuite/g++.dg/eh/pr43365.C 6eb9d68250f630420d0fdb982047fe17 gcc/testsuite/g++.dg/eh/pr45569.C ! 9c5d2920df5e7cc1662956187cc0aabc gcc/testsuite/g++.dg/eh/pr84968.C 9623b61344d258574a3ed60670199161 gcc/testsuite/g++.dg/eh/ref-temp1.C edd7f2bf186873e0f253e337b7c0baa7 gcc/testsuite/g++.dg/eh/ref-temp2.C a9ed8d0335c982c533cb9ab886ed3a49 gcc/testsuite/g++.dg/eh/registers1.C *************** c58cd83dba14fdd69d32822d58dce947 gcc/te *** 18111,18116 **** --- 18145,18151 ---- d1d6d34f10781c55aeb5890ea6052f5e gcc/testsuite/g++.dg/expr/pmf-1.C b1bfb08b8dd0886fd13d34d4e48087cc gcc/testsuite/g++.dg/expr/pmf-2.C 25d2470fc9b2a170d6429d0eb09ab6d3 gcc/testsuite/g++.dg/expr/pmf-3.C + a777585e4c5deccae4ecf9c2e334927f gcc/testsuite/g++.dg/expr/pmf-4.C e0ba8ce6144da0b9ed7164d2baac70c5 gcc/testsuite/g++.dg/expr/pr19355-1.C 60bb03281297f707f9874467907ac6cf gcc/testsuite/g++.dg/expr/pr29066.C 45c0fe859061b956d94f9743c51c2fa6 gcc/testsuite/g++.dg/expr/ptr-arith1.C *************** ed7c739de707916f3c9f5cc4c86b846a gcc/te *** 18273,18278 **** --- 18308,18314 ---- 436654db69995e2c5c9e51a240c1fb2b gcc/testsuite/g++.dg/ext/attr-unavailable-1.C 363318401f6c24d1fd4eb4b1352223b5 gcc/testsuite/g++.dg/ext/attr-unavailable-10.C dcdd1affde3b96d5073c02e9962a3e1f gcc/testsuite/g++.dg/ext/attr-unavailable-11.C + b813499357caf8cdbe9a29e67e87622f gcc/testsuite/g++.dg/ext/attr-unavailable-13.C edbfa498035679b0c1142cf98ca9e622 gcc/testsuite/g++.dg/ext/attr-unavailable-2.C 4e90e81502c480379e69d6b0b0b238aa gcc/testsuite/g++.dg/ext/attr-unavailable-3.C 5403ddd4b93109633d19e176e484580f gcc/testsuite/g++.dg/ext/attr-unavailable-4.C *************** a3a19e204ac6e54df8904525f84903a0 gcc/te *** 18773,18778 **** --- 18809,18815 ---- a355ef8a91fca7be6ca2387ec0ad27bd gcc/testsuite/g++.dg/ext/pr93998.C 0de975ae227332dc92f27d4dc970fa65 gcc/testsuite/g++.dg/ext/pr94197.C 2e98a912d14514a9d68f342ae3ccc4cd gcc/testsuite/g++.dg/ext/pr99508.C + 91b1b7433c2bf56ffbffab03e9b95707 gcc/testsuite/g++.dg/ext/pragma-target2.C ad117686eb16e680b29f2f5e45ebe0df gcc/testsuite/g++.dg/ext/pragmaweak1.C ae2794e104309a224e228d70e4cede48 gcc/testsuite/g++.dg/ext/pretty1.C faa8333681bedde3ba84daa60ec26ff8 gcc/testsuite/g++.dg/ext/pretty2.C *************** e6bc1a09cf3c9d838c7ad4575c3d8740 gcc/te *** 18800,18805 **** --- 18837,18843 ---- 4fcd7687415acab5a06f5081c00cf224 gcc/testsuite/g++.dg/ext/stmtexpr21.C 4d09ca3f75571211a1af55640503553d gcc/testsuite/g++.dg/ext/stmtexpr22.C 08aa6b7926e8190151b8337923a5ece9 gcc/testsuite/g++.dg/ext/stmtexpr23.C + fb5464937383d03f7e56903a4aec5a8f gcc/testsuite/g++.dg/ext/stmtexpr26.C 15be25b1a07f94e4d65103bfb52d6406 gcc/testsuite/g++.dg/ext/stmtexpr3.C 7f4e8ebedb382ebc1349d7067b034121 gcc/testsuite/g++.dg/ext/stmtexpr4.C a6cc01634e0bd707301c873f2d35f891 gcc/testsuite/g++.dg/ext/stmtexpr5.C *************** e7a4920eaa905e671e74b6482c654721 gcc/te *** 19674,19679 **** --- 19712,19718 ---- 12f516d0ef7088644b46185bbd83ef4d gcc/testsuite/g++.dg/init/array6.C c083b6ec43687658fab80f7d11038fb8 gcc/testsuite/g++.dg/init/array60.C cb77b5e3742bffa76c379088ce860b88 gcc/testsuite/g++.dg/init/array61.C + 6dacb8601d29390665707d5d3244c16d gcc/testsuite/g++.dg/init/array66.C 02cf876b0b0d2594118addc046b9112a gcc/testsuite/g++.dg/init/array7.C 4ab5bb9dc38b78d749ba584adefbdc33 gcc/testsuite/g++.dg/init/array8.C b1c2a3438d19ab4734ef026ce6aba7fa gcc/testsuite/g++.dg/init/array9.C *************** c0d5ffeb75a35d8442846603fb55dbb5 gcc/te *** 20406,20412 **** a08f7a8ee36ffedf58d45cdd0bea310c gcc/testsuite/g++.dg/lookup/pr97905.C f7f019c20c4a98b96f2eecf985428f03 gcc/testsuite/g++.dg/lookup/pr99030.C a4d811ecd0c3887d68812c42b8d16691 gcc/testsuite/g++.dg/lookup/pr99039.C ! f3f1703b34389748bf54d9576b9b99a7 gcc/testsuite/g++.dg/lookup/pr99116-1.C cba7f8d0ef2bdfaf7627f1941b7dcd57 gcc/testsuite/g++.dg/lookup/pr99116-2.C 9fc063d780e4510399927cfe832e8770 gcc/testsuite/g++.dg/lookup/pretty1.C f30dda31dee159f3aebbbc269a5fd8e4 gcc/testsuite/g++.dg/lookup/ptrmem1.C --- 20445,20451 ---- a08f7a8ee36ffedf58d45cdd0bea310c gcc/testsuite/g++.dg/lookup/pr97905.C f7f019c20c4a98b96f2eecf985428f03 gcc/testsuite/g++.dg/lookup/pr99030.C a4d811ecd0c3887d68812c42b8d16691 gcc/testsuite/g++.dg/lookup/pr99039.C ! bfaf930bf878b1d2b2edff1232d8f515 gcc/testsuite/g++.dg/lookup/pr99116-1.C cba7f8d0ef2bdfaf7627f1941b7dcd57 gcc/testsuite/g++.dg/lookup/pr99116-2.C 9fc063d780e4510399927cfe832e8770 gcc/testsuite/g++.dg/lookup/pretty1.C f30dda31dee159f3aebbbc269a5fd8e4 gcc/testsuite/g++.dg/lookup/ptrmem1.C *************** cac1beb5973f2ae7f413286aea273726 gcc/te *** 20684,20689 **** --- 20723,20729 ---- 8b0aae3760bbbdbb56a12a24c02e7d7e gcc/testsuite/g++.dg/lto/pr101396_0.C ac5555b4df88275d04e41aa95b0aca9a gcc/testsuite/g++.dg/lto/pr101396_1.C 57e4a1572912531a0ef7ae5e66a36910 gcc/testsuite/g++.dg/lto/pr105399_0.C + 6e7e7fc204b3df6d8de9823aac948376 gcc/testsuite/g++.dg/lto/pr107467_0.C ba9b686c163762488051ec4094a838b2 gcc/testsuite/g++.dg/lto/pr40818_0.C 08a786b250f802e56e458c7d60a358fc gcc/testsuite/g++.dg/lto/pr42987_0.C 1b56fef803fe85ec97121919ad3ba2b9 gcc/testsuite/g++.dg/lto/pr42987_1.C *************** bad9496f071793031ea4ab93b911a483 gcc/te *** 22041,22046 **** --- 22081,22087 ---- 2613159e61afceaa9e7ace58beef53f4 gcc/testsuite/g++.dg/opt/pr108854.C fc956d5d39ddca9870d1a2fca7df287d gcc/testsuite/g++.dg/opt/pr109434.C b8fef9a1bd09e90415f3e35f5466c85c gcc/testsuite/g++.dg/opt/pr110515.C + 149c3b47d16cfa08669bf79341552440 gcc/testsuite/g++.dg/opt/pr119327.C 2896f5b1a96dd9fabb1dbb65cb4c5921 gcc/testsuite/g++.dg/opt/pr13066-1.C 4f87f86b9f018cae74888e97468b2fe0 gcc/testsuite/g++.dg/opt/pr14029.C 8fb7e68e9e9b5eb02628e03f5333e645 gcc/testsuite/g++.dg/opt/pr14888.C *************** f3924301e9a75e88ee237b6baeb316be gcc/te *** 22971,22976 **** --- 23012,23018 ---- 34393b72e5dec85fca930dee15e2f669 gcc/testsuite/g++.dg/parse/crash7.C 73b1cabb6ebba6515fc142024f664fa3 gcc/testsuite/g++.dg/parse/crash70.C 78546442b1a4a93b74bc9a74697998e4 gcc/testsuite/g++.dg/parse/crash71.C + c3945b36146c7d629c7336eb3f9329fe gcc/testsuite/g++.dg/parse/crash77.C 5818f331167c496db06ad694932a1beb gcc/testsuite/g++.dg/parse/crash9.C 5940e29a523673e2c47048c21c11d678 gcc/testsuite/g++.dg/parse/ctor1.C 6a4d22d64949d622a19d9e79684aad65 gcc/testsuite/g++.dg/parse/ctor10.C *************** ce5771924fa5fd60b270c30c11bee489 gcc/te *** 23227,23232 **** --- 23269,23276 ---- 290161573b66c49ae4261f07f77681d3 gcc/testsuite/g++.dg/parse/parser-pr28152-2.C a0fee4f3ee4678b54afd993b619baa05 gcc/testsuite/g++.dg/parse/parser-pr28152.C 19f7d11d9ad101a38756eab150921947 gcc/testsuite/g++.dg/parse/pr101783.C + 732ccde523003692267913067f6a0ccd gcc/testsuite/g++.dg/parse/pr120471.C + 225e1d7f8cf80186eac35ff37acc9379 gcc/testsuite/g++.dg/parse/pr120940.C 2dde7d845edb3fc1b6b06c1f7c1d71f6 gcc/testsuite/g++.dg/parse/pr16696-permissive.C f8326578679fecd658e1bec2d3ed7654 gcc/testsuite/g++.dg/parse/pr16696.C 29f6ba15da1283765b5179abe6707d09 gcc/testsuite/g++.dg/parse/pr18770.C *************** cb3b0d87ebb06649d90f205f72680272 gcc/te *** 23476,23481 **** --- 23520,23526 ---- 18b9174889675eec328ca8173a24e49a gcc/testsuite/g++.dg/pr104869.C 152c50eb40e9677388868b9fc74192a1 gcc/testsuite/g++.dg/pr105276.C 2fed98e7e2272502be0cfa68e9b4dca8 gcc/testsuite/g++.dg/pr105871.C + 6431e5522e8138d482199836afdeb823 gcc/testsuite/g++.dg/pr114501_0.C 2ac64817a39fe1a5c2dc328f4233cda1 gcc/testsuite/g++.dg/pr37742.C 32b2fbda29ffd2ac2181c43c971f3a7d gcc/testsuite/g++.dg/pr44328.C e43b4ea2d038b181b57782d5d56d22ba gcc/testsuite/g++.dg/pr44486.C *************** d50cfc924c3c6bfe48d010f49b0320c5 gcc/te *** 23554,23559 **** --- 23599,23605 ---- ff90a96b0f5bda64aea35147770302e1 gcc/testsuite/g++.dg/pr65240.h 225c688c4f2ead1be77c30e05bf4245c gcc/testsuite/g++.dg/pr65242.C c987d521d6ec4222a0bbaff58ae0df77 gcc/testsuite/g++.dg/pr65295.C + 2909098d71cb5efcd254025c0c520d24 gcc/testsuite/g++.dg/pr66279.C 20bcb78b164336c6b42304de362d905a gcc/testsuite/g++.dg/pr66655.C 575d8cfa0f7cc7a30ac74c14eec274d2 gcc/testsuite/g++.dg/pr66655.h 9b717eabe7d22f65a71673e3ffc1470b gcc/testsuite/g++.dg/pr66655_1.cc *************** d1ab3a2909d9d576c5dfa94f007a2714 gcc/te *** 23874,23879 **** --- 23920,23926 ---- 5428fd71694c60d17f4ec642a0d2f66b gcc/testsuite/g++.dg/template/access40a.C 70ca1a844bab441488d753b92bdb5b0a gcc/testsuite/g++.dg/template/access41.C 546a46c71775301a03f3deb4b60d4aad gcc/testsuite/g++.dg/template/access41a.C + 7b80fa9125b48cb8cc6fddc40f053fa4 gcc/testsuite/g++.dg/template/access42.C 043c53bbc7cad60a3c72bfa79987f011 gcc/testsuite/g++.dg/template/access5.C 3f2e5ae210f767c1589637afbcf45353 gcc/testsuite/g++.dg/template/access6.C 974ff59cea85bedc028eb1bc9e350cc5 gcc/testsuite/g++.dg/template/access7.C *************** e99bfe98523cadafac68ba8e9e8c8f35 gcc/te *** 24445,24450 **** --- 24492,24498 ---- 08aeef7e95f0f822e6e8b78c88d9bbb7 gcc/testsuite/g++.dg/template/friend74.C 5ded44dad812054a2b06422df4b95665 gcc/testsuite/g++.dg/template/friend78.C ceb858e95982ac0af2e9168f31aea229 gcc/testsuite/g++.dg/template/friend8.C + ae55d6e48a2ac8b72c938dc82c696408 gcc/testsuite/g++.dg/template/friend84.C 59b5bf61b7f6210d3cf3b9b45692794a gcc/testsuite/g++.dg/template/friend9.C d5d24fc94d133229a10c5b13f44c253b gcc/testsuite/g++.dg/template/func1.C 1959538a6f69b747e873f9e029cc6fa6 gcc/testsuite/g++.dg/template/func2.C *************** e0f2cfb1a1f922a19280efa88e1e5f1c gcc/te *** 25496,25502 **** --- 25544,25554 ---- fa23934e49741783f674026ff5030aff gcc/testsuite/g++.dg/torture/pr108166.C 695916482bd1d276cc3c727b90232254 gcc/testsuite/g++.dg/torture/pr109724.C 4b7c75dc51b97d5dc81c7e936ff3b460 gcc/testsuite/g++.dg/torture/pr111019.C + 6766aa21b009a63d71d22aa6baba228d gcc/testsuite/g++.dg/torture/pr111245.C f5cb8caa482838045861d5ee18445814 gcc/testsuite/g++.dg/torture/pr113896.C + 6c3c5585841ff28b7c4ab8a61978f689 gcc/testsuite/g++.dg/torture/pr113994.C + f298eddbaaad3dfdc15f6cf9683ff08a gcc/testsuite/g++.dg/torture/pr11911.C + 9df51f0b5a7e716286f2e97dfd28d477 gcc/testsuite/g++.dg/torture/pr119610.C 161154ed9f6193a2a7da119e068c3f3f gcc/testsuite/g++.dg/torture/pr27218.C a84e9fff95df4801f8e582fbc33303b8 gcc/testsuite/g++.dg/torture/pr30252.C e980bf95890544d46879b89f7aa98df6 gcc/testsuite/g++.dg/torture/pr30567.C *************** d53f4a36bfd00298b6b687881aad6861 gcc/te *** 25952,25957 **** --- 26004,26010 ---- 5afe578074ff640a77903318faea8e72 gcc/testsuite/g++.dg/torture/str_empty.C 42e128b3145495bd2df35c3cdcc684ac gcc/testsuite/g++.dg/torture/tail-padding1.C 0b01f7feb325a8c1dfd3c796eab53860 gcc/testsuite/g++.dg/torture/type-generic-1.C + 578b102f9caacae988fc6b469dc3f9c1 gcc/testsuite/g++.dg/torture/vect-absu-1.C ed87f64357e7fd49760145e5c345491d gcc/testsuite/g++.dg/torture/vector-struct-1.C 451c0082f351cdec594741735d086495 gcc/testsuite/g++.dg/torture/vector-subaccess-1.C 164b3eb60b0c717428d0673a23922dfc gcc/testsuite/g++.dg/torture/vshuf-16.inc *************** b43892ed3a0294f440ccfdc4017d74ed gcc/te *** 26045,26050 **** --- 26098,26104 ---- 4f4b9d993ed3cb39bcc4613af0e55332 gcc/testsuite/g++.dg/tree-ssa/pr104529.C c83f56529fd38813d353eb12ea5fa5e9 gcc/testsuite/g++.dg/tree-ssa/pr106922.C 473b75bc40f72c03a042a150d43cb69b gcc/testsuite/g++.dg/tree-ssa/pr107206.C + 284302237efd60e1d517c0925cad7644 gcc/testsuite/g++.dg/tree-ssa/pr118924.C 482a64ed60783060cd1097d55e09aa68 gcc/testsuite/g++.dg/tree-ssa/pr13146.C e92faf794746371f0e92e8a68244ff5e gcc/testsuite/g++.dg/tree-ssa/pr13954.C 316b32deb2433fa7d0e4ad1c5a62804b gcc/testsuite/g++.dg/tree-ssa/pr14703.C *************** ebc4dd8d7b9c346d612ab748d0d8bda0 gcc/te *** 26270,26275 **** --- 26324,26332 ---- 80dcb1a17f65b63cbfe2e3509439563c gcc/testsuite/g++.dg/ubsan/pr101210.C ad6c0b4132032f21f64bfdd4836d3313 gcc/testsuite/g++.dg/ubsan/pr105093.C 59f2687e6719ef7d3d19b4de0e99a075 gcc/testsuite/g++.dg/ubsan/pr105729.C + 06fb5e3c91f4d1b4f58ee978dd2b4b30 gcc/testsuite/g++.dg/ubsan/pr116449.C + a9c7210a5fb28a26cd54ad5ce0872a53 gcc/testsuite/g++.dg/ubsan/pr117259.C + a4c08c025f777efea858788766890b26 gcc/testsuite/g++.dg/ubsan/pr120471.C a654df71119821a4303cc9fe0501191b gcc/testsuite/g++.dg/ubsan/pr59250.C 420a6623146bb014dc1310134356d81f gcc/testsuite/g++.dg/ubsan/pr59306.C 79755a51c3cbb97ff48bd411272f6b08 gcc/testsuite/g++.dg/ubsan/pr59331.C *************** ece1d03dfdd44a22781b77ed9ec271d4 gcc/te *** 26595,26600 **** --- 26652,26658 ---- c32e2d9c26f73ceab75448129f154a62 gcc/testsuite/g++.dg/warn/Wduplicated-branches5.C c1c94fbed68712c556c47675075fab08 gcc/testsuite/g++.dg/warn/Wduplicated-branches6.C df34a3119747a72018c056305c89abd6 gcc/testsuite/g++.dg/warn/Wduplicated-branches7.C + b78135999b9fbdc92326bfae8b355202 gcc/testsuite/g++.dg/warn/Wduplicated-branches9.C 53e8ba692e810326b135e28115da516a gcc/testsuite/g++.dg/warn/Wduplicated-cond1.C aee46bcb7031162dcee9c8ebe1228c6f gcc/testsuite/g++.dg/warn/Wduplicated-cond2.C 3fd71ef4467ff2d96bedfb8624c9f6c9 gcc/testsuite/g++.dg/warn/Wduplicated-cond3.C *************** c935eb4f9165b002b3615d052e7ee8db gcc/te *** 27121,27127 **** --- 27179,27187 ---- d5e518a89029e53244731ceed8c64fc4 gcc/testsuite/g++.dg/warn/deprecated-16.C 0fb7e93661517b2d46da504d60c18ce0 gcc/testsuite/g++.dg/warn/deprecated-17.C 5ba17fcb74188f6bd8e6e540093b8cd8 gcc/testsuite/g++.dg/warn/deprecated-18.C + 85b34a6a77145e6e988a38ae6c2a48d2 gcc/testsuite/g++.dg/warn/deprecated-19.C 26bafcbe2a9f3729e0b0e2ff8ccf5317 gcc/testsuite/g++.dg/warn/deprecated-2.C + c63993ca8df065564f0d4ffb32339577 gcc/testsuite/g++.dg/warn/deprecated-20.C 482df2a6c06bdf9046c6729484298715 gcc/testsuite/g++.dg/warn/deprecated-3.C 98c2c2dc0644115f45902f826dc56a04 gcc/testsuite/g++.dg/warn/deprecated-4.C 9fb0087e50484de53d979d8e849be2eb gcc/testsuite/g++.dg/warn/deprecated-5.C *************** edc1a994e1246279f2c5c7c45650e061 gcc/te *** 27220,27225 **** --- 27280,27286 ---- 1ba5741dd0aa023aa23edc39041b235e gcc/testsuite/g++.dg/warn/pr108365.C adea0a023eba0c3c51b6a4894014d35a gcc/testsuite/g++.dg/warn/pr11159.C f257fca4d00c8c67aa2b9d6e43ee906f gcc/testsuite/g++.dg/warn/pr11492.C + b095255e81269c7739d80713d78edfb0 gcc/testsuite/g++.dg/warn/pr117825.C 5fab7f879534ef351718dc73d825b667 gcc/testsuite/g++.dg/warn/pr12242.C 5ea14e490362652b825c770f9d00d814 gcc/testsuite/g++.dg/warn/pr13358-2.C 5af7a1b2eded6ae8e6b38e3c1b5e15a6 gcc/testsuite/g++.dg/warn/pr13358-3.C *************** f3ce91773bd0b4a3127c481ccd50f20e gcc/te *** 30740,30745 **** --- 30801,30807 ---- 57a0aa7896383cbb0273342d58a4a7b5 gcc/testsuite/g++.target/aarch64/sve/max_1.C ab6c5e333d0a740ae5ecff69966813a2 gcc/testsuite/g++.target/aarch64/sve/min_1.C 6bb662ee32d75fad86cbbcc07aab9998 gcc/testsuite/g++.target/aarch64/sve/pr102252.C + a36c6629cdaa92f5a41aa0c862cf5a54 gcc/testsuite/g++.target/aarch64/sve/pr119610-sve.C 032fe0d5fa79aaf6c36c32fb19a50c00 gcc/testsuite/g++.target/aarch64/sve/pr96974.C 6c0e94c363caf9e62df35ea98b4918ed gcc/testsuite/g++.target/aarch64/sve/pr98177-1.C e64000c150bb204c31dca884ee33dd4f gcc/testsuite/g++.target/aarch64/sve/pr98177-2.C *************** fefb1ea34abe2e49510cd8293f8c14e5 gcc/te *** 30761,30766 **** --- 30823,30829 ---- bb7292912fa6d506586421d0df58412b gcc/testsuite/g++.target/arm/no_unique_address_2.C 4c06abe7b8d5bd183704907c3993392c gcc/testsuite/g++.target/arm/pr102842.C 5d0bfb5484f8db2f1a2556bb0ea6394b gcc/testsuite/g++.target/arm/pr103676.C + 98e5c3b96316f917c107a3470b80e1ac gcc/testsuite/g++.target/arm/pr115485.C 86ce099311b8a462979885c1f82c41db gcc/testsuite/g++.target/arm/pr81497.C c66ac2233f3efac56ec64b9294b3708d gcc/testsuite/g++.target/arm/pr95726.C 881bcc41183f756e0d7cbda13b2b51df gcc/testsuite/g++.target/arm/pr99593.C *************** bc255ba4628b94d5377f0ba915ad26da gcc/te *** 30820,30826 **** c3abd0fb44ca490064aaa6988814d40c gcc/testsuite/g++.target/i386/mv26.C 203c2fb05767e713a362682a2dcedfc7 gcc/testsuite/g++.target/i386/mv27.C 015182fced49b5ec2160104b1e1fcfd5 gcc/testsuite/g++.target/i386/mv28.C ! 3dc8383e8aa0e822e68ee82dc2cbbc5f gcc/testsuite/g++.target/i386/mv29.C bad9a677892adffe2c45653797aad55c gcc/testsuite/g++.target/i386/mv3.C 8e16cb4ef8b3ee3b728e21112c7331d1 gcc/testsuite/g++.target/i386/mv30.C 6c2437562ef96defbdcf21aa49f5676f gcc/testsuite/g++.target/i386/mv31.C --- 30883,30889 ---- c3abd0fb44ca490064aaa6988814d40c gcc/testsuite/g++.target/i386/mv26.C 203c2fb05767e713a362682a2dcedfc7 gcc/testsuite/g++.target/i386/mv27.C 015182fced49b5ec2160104b1e1fcfd5 gcc/testsuite/g++.target/i386/mv28.C ! f1dcd0f047238a664c71844662594d0b gcc/testsuite/g++.target/i386/mv29.C bad9a677892adffe2c45653797aad55c gcc/testsuite/g++.target/i386/mv3.C 8e16cb4ef8b3ee3b728e21112c7331d1 gcc/testsuite/g++.target/i386/mv30.C 6c2437562ef96defbdcf21aa49f5676f gcc/testsuite/g++.target/i386/mv31.C *************** e10a0652aff7df3b5d31aabc5b83fc4e gcc/te *** 30892,30897 **** --- 30955,30961 ---- 7086db1987eae6c4b80f5ef0dbadd48f gcc/testsuite/g++.target/i386/pr111497.C 51556317586878910157bab09d18703d gcc/testsuite/g++.target/i386/pr111822.C f0bd5d5c6a67d4e72ffa0abde025c525 gcc/testsuite/g++.target/i386/pr112443.C + 309d3ebda65ef0d79e21d0a9c0310055 gcc/testsuite/g++.target/i386/pr119689.C 55fb67abf6517f92b1a0240d2c06b5c5 gcc/testsuite/g++.target/i386/pr35513-1.C 14dde546e4eefec7aa6d1ac41261cb16 gcc/testsuite/g++.target/i386/pr35513-2.C 1c706f97b6d93c0124dc4a203c98f6d2 gcc/testsuite/g++.target/i386/pr57362.C *************** a873678a5188427c7ceb88e3a408ce84 gcc/te *** 30981,30986 **** --- 31045,31051 ---- bac7601eaf931ebd7c595a2dc9672d64 gcc/testsuite/g++.target/powerpc/pr102024.C 52ec25547d922533a11b2b87bda1ef47 gcc/testsuite/g++.target/powerpc/pr105325.C a786ad78bd3d3301483d3f57c15f4634 gcc/testsuite/g++.target/powerpc/pr105485.C + eb79d8fe9b8ec72032c23669461e1efd gcc/testsuite/g++.target/powerpc/pr106069.C ea50428d09d0e781698b21023398bfee gcc/testsuite/g++.target/powerpc/pr110741.C 8ca0dcb511ad4423506f8f334a6092e7 gcc/testsuite/g++.target/powerpc/pr111366.C 92cbd869a66e265db57a505d568038a0 gcc/testsuite/g++.target/powerpc/pr111367.C *************** ac37e529bda1269045c3681cc4b425dd gcc/te *** 31017,31022 **** --- 31082,31088 ---- 1f98b1d1757ebed2e4df3c91f91846f5 gcc/testsuite/g++.target/s390/pr102024-4.C f0a679d402cd83e81a6efa4bbb02d02b gcc/testsuite/g++.target/s390/pr102024-5.C f65e23ee2638d7bc7c063a2f41350d9c gcc/testsuite/g++.target/s390/pr102024-6.C + 377180e93d364db46b93992e870cdab7 gcc/testsuite/g++.target/s390/pr119834.C 63c9cacf807bdee09a1606a202373f30 gcc/testsuite/g++.target/s390/pr94704-1.C f536562eba9a9954ace3a616ac52f438 gcc/testsuite/g++.target/s390/pr94704-2.C 673a3b45283bd1b872f1b198781a14a3 gcc/testsuite/g++.target/s390/pr94704-3.C *************** c152b22273bc18a4c77712056ad155b2 gcc/te *** 33424,33429 **** --- 33490,33496 ---- 7b2e318b0268b72be90a65cf76db847a gcc/testsuite/gcc.c-torture/execute/20230630-2.c 4a01ae6027e3e54850f1b7a4cfd9e943 gcc/testsuite/gcc.c-torture/execute/20230630-3.c 88c62fc9ed04e0f727eb572abcccb0d2 gcc/testsuite/gcc.c-torture/execute/20230630-4.c + b1b4e62be38d27a57c83e464074430c1 gcc/testsuite/gcc.c-torture/execute/20241029-1.c 65f01ac7346bd4d47ed9c1ca94ab74ff gcc/testsuite/gcc.c-torture/execute/900409-1.c 5aefab4daab0bd29ecf2a389f3c44f40 gcc/testsuite/gcc.c-torture/execute/920202-1.c 74e2b57e4fb280900b2f9b169dd75b1c gcc/testsuite/gcc.c-torture/execute/920302-1.c *************** db337c00bedfc272ed5edbb6acffed7c gcc/te *** 34145,34150 **** --- 34212,34227 ---- e7bc1f52654c430d9ceb1acb868fbc20 gcc/testsuite/gcc.c-torture/execute/pr111331-3.c eefdaed8e6e57c688553667e395d78d3 gcc/testsuite/gcc.c-torture/execute/pr111408.c 9db3e649786fc47229bef9b14997489f gcc/testsuite/gcc.c-torture/execute/pr111422.c + 07f86784b33bd8594d929a8762bcc758 gcc/testsuite/gcc.c-torture/execute/pr111613.c + 255cd56658b86e1b37fc6003c864920b gcc/testsuite/gcc.c-torture/execute/pr113787.c + 3f27c8320e9cf2d7c2d28cff11e038e0 gcc/testsuite/gcc.c-torture/execute/pr114207.c + 70ba48592053a7f5813dc5b2438d1c9d gcc/testsuite/gcc.c-torture/execute/pr115033.c + c79311114bc2631215d25bfb45117788 gcc/testsuite/gcc.c-torture/execute/pr116799.c + d82dcc08e1babd7e06748195b06b0dc6 gcc/testsuite/gcc.c-torture/execute/pr117432.c + abc98cdd2ec724c17d58a00efc56816b gcc/testsuite/gcc.c-torture/execute/pr118623.c + 5802f1a3b7f07033d3e5c9e6bc333779 gcc/testsuite/gcc.c-torture/execute/pr118915.c + fd7185346c3b94c0a7f7afba7b6bc241 gcc/testsuite/gcc.c-torture/execute/pr119071.c + b7150a91a8e64c0a2f8d47a9f857fd6e gcc/testsuite/gcc.c-torture/execute/pr119291.c 7758cb727d75f4fc1c0e483d503de146 gcc/testsuite/gcc.c-torture/execute/pr15262-1.c 58dc249612dbc918d7fc4010e94deb8d gcc/testsuite/gcc.c-torture/execute/pr15262-2.c d9c36fc850771445c5e4b6ce6dae1a12 gcc/testsuite/gcc.c-torture/execute/pr15262.c *************** fa23f58fca5e1980d38cd26b6e3e332a gcc/te *** 36312,36319 **** --- 36389,36398 ---- 1a25dd9cb28d8417a3ce246587233c84 gcc/testsuite/gcc.dg/asan/pr106190.c c3b533151735c602f99cd3d2cb415cf8 gcc/testsuite/gcc.dg/asan/pr107317.c ea1638a3bd1b7f87abc2eda6d730213e gcc/testsuite/gcc.dg/asan/pr110027.c + c712bebc72e1dc5a56ae1f93009d40b0 gcc/testsuite/gcc.dg/asan/pr110676.c 335e527788f5fd39d280e244ac17b3ef gcc/testsuite/gcc.dg/asan/pr114956.c 7945c329a8682648ec766560d0d91934 gcc/testsuite/gcc.dg/asan/pr115172.c + c3e4c8b02647243ec96367bcfe4e9bc0 gcc/testsuite/gcc.dg/asan/pr119582.c a5e988481cd66b8acf6c610b847cb713 gcc/testsuite/gcc.dg/asan/pr56417.c 0c13e4008bb665f05b030eb42e43183f gcc/testsuite/gcc.dg/asan/pr63845.c 9a45b4bebab3901180dbe2a44efcd070 gcc/testsuite/gcc.dg/asan/pr64170.c *************** a0ac850750aaa6f8934dd8d86cad48b3 gcc/te *** 38670,38681 **** --- 38749,38762 ---- 9d75f75471d15ad9eab797c65fe24337 gcc/testsuite/gcc.dg/dfp/keywords-pedantic.c 5f9dce48038ce1ba660b96e948792422 gcc/testsuite/gcc.dg/dfp/keywords-reserved.c 440b3f562b43525babe2c96be973d1be gcc/testsuite/gcc.dg/dfp/operator-bitwise.c + 20f50855676ea9189776efb27ee8f2a2 gcc/testsuite/gcc.dg/dfp/pr102674.c b6f9108cd4878577de83d43be75185ce gcc/testsuite/gcc.dg/dfp/pr104510.c 440b561ad1d9037d4559c7011d636b7a gcc/testsuite/gcc.dg/dfp/pr104557.c 74ff23770b319829b7487e85a1ed72f6 gcc/testsuite/gcc.dg/dfp/pr108068.c d8629eb8e0c765b5a7daa583cb8eedad gcc/testsuite/gcc.dg/dfp/pr31344.c b59fd600db434af135f39c38e21e2d74 gcc/testsuite/gcc.dg/dfp/pr37435.c 17353eaf91a4f3959fa168324f86f6f5 gcc/testsuite/gcc.dg/dfp/pr41049.c + 38fafce1a4984b228edcdb784386e374 gcc/testsuite/gcc.dg/dfp/pr43374.c 8f20a249a1cf0ecc405e1799552e1d6f gcc/testsuite/gcc.dg/dfp/pr48204.c 8839751293dea7c31ee017e68d79c7a7 gcc/testsuite/gcc.dg/dfp/pr48928.c 59389f9a6a0db946009dbbe47a66608f gcc/testsuite/gcc.dg/dfp/pr52140.c *************** bbdc28908094ef1ce181532afaf1b2dc gcc/te *** 40374,40379 **** --- 40455,40461 ---- a6cddd3e3979aa3c54f4319f60df295b gcc/testsuite/gcc.dg/ipa/modref-1.c d183c6f1cbbc46bd9c8e5df2bbcd8795 gcc/testsuite/gcc.dg/ipa/modref-2.c e3225f0884da3b36b6309c89ccd143b7 gcc/testsuite/gcc.dg/ipa/modref-3.c + a06e20bfec7f7f19143678eb08edf720 gcc/testsuite/gcc.dg/ipa/modref-4.c 80f4453150e9ddcd8976703b7c6ee1f6 gcc/testsuite/gcc.dg/ipa/noclone-1.c 2f6a0c132f87682f7a7a3d21a8e51243 gcc/testsuite/gcc.dg/ipa/pr100600.c 5c69058d29f4a7ea7e25487222d82209 gcc/testsuite/gcc.dg/ipa/pr101066.c *************** d6d366e61e9493a8fc9ad14a2e6f9ba4 gcc/te *** 40395,40400 **** --- 40477,40484 ---- cf4edb1ce9b073657fc6da0e1310515b gcc/testsuite/gcc.dg/ipa/pr109318.c 6cadebd8b42bda8557c5814d0103a2fa gcc/testsuite/gcc.dg/ipa/pr112616.c b7a69609ea582386c302afd514d8e233 gcc/testsuite/gcc.dg/ipa/pr114247.c + fc7c9c751d59b444d0ab30c4d9029491 gcc/testsuite/gcc.dg/ipa/pr120044-1.c + 538e5a7542c72b7ea4e4375cbebde001 gcc/testsuite/gcc.dg/ipa/pr120044-2.c 40bd41302666d56c4edf7330db97920e gcc/testsuite/gcc.dg/ipa/pr42706.c e4887053c792f4f78b03804c148839ce gcc/testsuite/gcc.dg/ipa/pr45644.c 6e1b4f2c5d0c0d768778da8e3b7df828 gcc/testsuite/gcc.dg/ipa/pr48195.c *************** f67a44e9e2f963084509149bec7655af gcc/te *** 40857,40862 **** --- 40941,40948 ---- 833668f47a5741405cf53fc58d31d1bc gcc/testsuite/gcc.dg/lto/pr88077_1.c c51c424cae679b65a2dc52ea3ddc96d9 gcc/testsuite/gcc.dg/lto/pr88297_0.c 14664c531ea727ce3e6cd733560c6895 gcc/testsuite/gcc.dg/lto/pr88297_1.c + 0e4761398a1a807133de9d1dbb23f8dc gcc/testsuite/gcc.dg/lto/pr91299_0.c + 2fa66cdf16d22012d4837a0c72b33169 gcc/testsuite/gcc.dg/lto/pr91299_1.c 8333794e711e91fcca018cc86d41ea1e gcc/testsuite/gcc.dg/lto/pr91393_0.c 792aee8f66fa8c921ace23ab0bacbfa0 gcc/testsuite/gcc.dg/lto/pr93015_0.c 452562151ef3b606235a43b661fb5f32 gcc/testsuite/gcc.dg/lto/pr93384_0.c *************** cbe7e390158f186ae3fd0f808bea7563 gcc/te *** 41438,41443 **** --- 41524,41530 ---- 70303171ed7f5b2cba05e6b98daad2ab gcc/testsuite/gcc.dg/pr101384.c 566100ed369cb8ddbb77ca59ac7f4416 gcc/testsuite/gcc.dg/pr101403.c cf17d565e22770879e54b6d0b5f98c72 gcc/testsuite/gcc.dg/pr101419.c + 2d3f29a2cab8840cb09367ff4d489fae gcc/testsuite/gcc.dg/pr101478.c 51fa849c28379b9795b20cbcf5bd8067 gcc/testsuite/gcc.dg/pr101496.c 82ba8f6dfa7a7a8e6eb6d73d5c8df572 gcc/testsuite/gcc.dg/pr101497.c fea990856f92887377e1bb43b4bd09e3 gcc/testsuite/gcc.dg/pr101741.c *************** f97f1cf6ac420452092fc3fba4203574 gcc/te *** 41598,41603 **** --- 41685,41691 ---- e5517dc2a2e07c9b2472bb545cd5a722 gcc/testsuite/gcc.dg/pr112837.c 6b73a8d375ddff23d86f9f1c9377f381 gcc/testsuite/gcc.dg/pr112845.c 68812a8a18bdcb8c9b56b83823f8a853 gcc/testsuite/gcc.dg/pr113013.c + 1eee6a6a3094137236b099c0bc7604f7 gcc/testsuite/gcc.dg/pr113207.c da36c4c045a6839485d1209b636f2fa6 gcc/testsuite/gcc.dg/pr113262.c e68a7c7f2d1db31e0e0e0a23960975a7 gcc/testsuite/gcc.dg/pr113907-1.c 12ecf3bc0aab66a39903f50c4a6dfc66 gcc/testsuite/gcc.dg/pr114115.c *************** e99866ca9e56b885a0004e2f573a6158 gcc/te *** 41611,41617 **** --- 41699,41718 ---- 4f24f3d12a3963918c32e40afe158f0a gcc/testsuite/gcc.dg/pr114902.c e164a736918661d669864e3645da290c gcc/testsuite/gcc.dg/pr11492.c e76a4663621c8d450d2c9d229d63e033 gcc/testsuite/gcc.dg/pr115092.c + 58460c6512df7401ec50751a71e2c5b5 gcc/testsuite/gcc.dg/pr115646.c + 8a0ca2cbf65dafe6cccb9a0465069fcc gcc/testsuite/gcc.dg/pr116034.c + 7820d64b46e8082950940bc4a0bfba8c gcc/testsuite/gcc.dg/pr116290.c + 298938472467086a22ec44a01fb0ee8f gcc/testsuite/gcc.dg/pr116481.c + 3661cd7a3a7e0ed72337f96146acfa54 gcc/testsuite/gcc.dg/pr116850.c + af316e7c425bfdeaadea8998cbd27110 gcc/testsuite/gcc.dg/pr116891.c + 4de2a7a2ac95300f89928764d873895d gcc/testsuite/gcc.dg/pr117104.c + 22c935f2bff095783388f4e05eabe99b gcc/testsuite/gcc.dg/pr117254.c + 508b7efd3e428ac089a9b5def12ba01c gcc/testsuite/gcc.dg/pr117398.c + 6693dade68e2cac14ef3b85ed17c9a95 gcc/testsuite/gcc.dg/pr117745.c 3b83403729a3686d25552352bf0c4577 gcc/testsuite/gcc.dg/pr11864-1.c + 33c13391b7d0c5d156ce1488a8cece3f gcc/testsuite/gcc.dg/pr119071.c + 23b8c99f9e2dfda91a95f1195ab38bfd gcc/testsuite/gcc.dg/pr119183.c + 9444444b4f048eadd4b6a2d7592f5fca gcc/testsuite/gcc.dg/pr120480.c bc5ddfbbc46f4e0cce1629d1b58d3090 gcc/testsuite/gcc.dg/pr12603.c 72a2fca76cb69617ae36bab93c7ec0d7 gcc/testsuite/gcc.dg/pr12625-1.c 6f0ef61e5a12db5f11da839b2988c5e1 gcc/testsuite/gcc.dg/pr13519-1.c *************** dfb471a397851bdb52f7df883b650b86 gcc/te *** 44441,44447 **** 21ae8e4c97f9712921eba7fc818f95ac gcc/testsuite/gcc.dg/torture/builtin-explog-1.c d5c9ca0ff5b0b34e1fa874eadc3d6c3c gcc/testsuite/gcc.dg/torture/builtin-fp-int-inexact-c2x.c c52cf8304bc6fa5604bc97a203120619 gcc/testsuite/gcc.dg/torture/builtin-fp-int-inexact.c ! f17d1f5035ab6459558b499a77e14ecc gcc/testsuite/gcc.dg/torture/builtin-frexp-1.c b240a0ef7d00244042073b024cac7c9e gcc/testsuite/gcc.dg/torture/builtin-integral-1.c 4ce025382a7da5160143d92f4b87df45 gcc/testsuite/gcc.dg/torture/builtin-isinf_sign-1.c 87e32542dbc07d3d4d36b5c92fffba27 gcc/testsuite/gcc.dg/torture/builtin-ldexp-1.c --- 44542,44548 ---- 21ae8e4c97f9712921eba7fc818f95ac gcc/testsuite/gcc.dg/torture/builtin-explog-1.c d5c9ca0ff5b0b34e1fa874eadc3d6c3c gcc/testsuite/gcc.dg/torture/builtin-fp-int-inexact-c2x.c c52cf8304bc6fa5604bc97a203120619 gcc/testsuite/gcc.dg/torture/builtin-fp-int-inexact.c ! aed4b127d2ac5e4bf304bcc673996ebf gcc/testsuite/gcc.dg/torture/builtin-frexp-1.c b240a0ef7d00244042073b024cac7c9e gcc/testsuite/gcc.dg/torture/builtin-integral-1.c 4ce025382a7da5160143d92f4b87df45 gcc/testsuite/gcc.dg/torture/builtin-isinf_sign-1.c 87e32542dbc07d3d4d36b5c92fffba27 gcc/testsuite/gcc.dg/torture/builtin-ldexp-1.c *************** e289e3514153e0ffe8b5b086904f40c4 gcc/te *** 44731,44737 **** --- 44832,44857 ---- 5a3dd17b41272920e3804d1b42cba87e gcc/testsuite/gcc.dg/torture/pr111917.c 1e5a5be4efef1ee222e142fcbc25978e gcc/testsuite/gcc.dg/torture/pr112281-1.c 3acf5c04c64ba9b942f88c4d8bde666c gcc/testsuite/gcc.dg/torture/pr112281-2.c + 956dc9b1dc1c726c549e9e69ca1db5ec gcc/testsuite/gcc.dg/torture/pr112859.c + edb26d624826c2089120476194daef30 gcc/testsuite/gcc.dg/torture/pr114246.c 8ebd93b45204d340baa4a9798f5bcd62 gcc/testsuite/gcc.dg/torture/pr114672.c + b9fe62163204f0f9de8d47547473ce6c gcc/testsuite/gcc.dg/torture/pr115347.c + 55696235dc27ddb3d877bca135cf0b3e gcc/testsuite/gcc.dg/torture/pr115641.c + b9f75d112b5891dd319ae19e3779967f gcc/testsuite/gcc.dg/torture/pr116057.c + 78733925c03c093a5b9fb429087338ac gcc/testsuite/gcc.dg/torture/pr116412-1.c + 26feb828f8efabc996ee22e90cd17fc1 gcc/testsuite/gcc.dg/torture/pr116585.c + 59484ae831cab97471a148691d17d840 gcc/testsuite/gcc.dg/torture/pr116768.c + 7ff97033e93d5c0fd815ba8a91fcd00e gcc/testsuite/gcc.dg/torture/pr116922.c + d6608e03b8048545410e7c67f9a30d4a gcc/testsuite/gcc.dg/torture/pr117113.c + eed87995921a41d6f215168315f20d67 gcc/testsuite/gcc.dg/torture/pr117119.c + 6e7f6e2e418f4fdf187f07ac4ce3bafa gcc/testsuite/gcc.dg/torture/pr117243-1.c + 42c403cdb88958c3d40395d6ca302c82 gcc/testsuite/gcc.dg/torture/pr117243-2.c + 6ae50575ec63bfcc997168ba66e3cd75 gcc/testsuite/gcc.dg/torture/pr117417.c + 211f874eb690213e110852d5efe7da32 gcc/testsuite/gcc.dg/torture/pr117574-1.c + fbc66d37323062d4dfeea9f5f179a29e gcc/testsuite/gcc.dg/torture/pr117811.c + 673535a31d0d70358a6475962b4d71c2 gcc/testsuite/gcc.dg/torture/pr118476-1.c + d29f5dbd5ce72ebe101793547b043347 gcc/testsuite/gcc.dg/torture/pr118717.c + 4f00237a70e232a883a71b2c8d7c8f95 gcc/testsuite/gcc.dg/torture/pr118922-1.c ded4330fd1cd52783bd9b1761db038ef gcc/testsuite/gcc.dg/torture/pr16104-1.c fc265ee05da2f29f0e92804661cd1f28 gcc/testsuite/gcc.dg/torture/pr17526.c 01c583edb41b632b835aa892b9c1cb14 gcc/testsuite/gcc.dg/torture/pr17933-1.c *************** e3f1a326d63f28f3be9a8544a60505aa gcc/te *** 46499,46505 **** 9c82573f2711f01761f4bb230b3191e5 gcc/testsuite/gcc.dg/tree-ssa/ldist-33.c d5c8c7bee8816f98aede8ab1448f6689 gcc/testsuite/gcc.dg/tree-ssa/ldist-34.c ffd9d902fd127eef04e8bc7818f04da7 gcc/testsuite/gcc.dg/tree-ssa/ldist-35.c ! e5c7ff63681748294f115b0cd63bfb05 gcc/testsuite/gcc.dg/tree-ssa/ldist-36.c 39ce1d1e6f9138f3e7496314be545457 gcc/testsuite/gcc.dg/tree-ssa/ldist-37.c ffb4adebfee1a469b5b970ceca2b62d1 gcc/testsuite/gcc.dg/tree-ssa/ldist-38.c 7bdc0c7833fb91fb8d9e59f13d759a73 gcc/testsuite/gcc.dg/tree-ssa/ldist-4.c --- 46619,46625 ---- 9c82573f2711f01761f4bb230b3191e5 gcc/testsuite/gcc.dg/tree-ssa/ldist-33.c d5c8c7bee8816f98aede8ab1448f6689 gcc/testsuite/gcc.dg/tree-ssa/ldist-34.c ffd9d902fd127eef04e8bc7818f04da7 gcc/testsuite/gcc.dg/tree-ssa/ldist-35.c ! 426393b2d6b717d0b46325d18eefaea1 gcc/testsuite/gcc.dg/tree-ssa/ldist-36.c 39ce1d1e6f9138f3e7496314be545457 gcc/testsuite/gcc.dg/tree-ssa/ldist-37.c ffb4adebfee1a469b5b970ceca2b62d1 gcc/testsuite/gcc.dg/tree-ssa/ldist-38.c 7bdc0c7833fb91fb8d9e59f13d759a73 gcc/testsuite/gcc.dg/tree-ssa/ldist-4.c *************** c502141393b8f053f7454ee254898a9a gcc/te *** 46717,46723 **** --- 46837,46846 ---- 0b2312ef2558ac9fd9aad91d8afc7009 gcc/testsuite/gcc.dg/tree-ssa/pr107323.c ba0f756770b2c8c27b5698876e3038d6 gcc/testsuite/gcc.dg/tree-ssa/pr108137.c 486e83eb732ae374266e81bf0ad91d4c gcc/testsuite/gcc.dg/tree-ssa/pr108684-1.c + 3adb7e9f8a25b141deab6a826dbf4d2a gcc/testsuite/gcc.dg/tree-ssa/pr109934.c 30191e7f04d08f0b42092e36965a3c63 gcc/testsuite/gcc.dg/tree-ssa/pr111967.c + 8710d339fbc689e052900f47a175994e gcc/testsuite/gcc.dg/tree-ssa/pr114864.c + 5dd2285e0a64c83e08b6d68b6cd36eba gcc/testsuite/gcc.dg/tree-ssa/pr117142.c 78e6c5fe63f7305009c8a79840fe20dc gcc/testsuite/gcc.dg/tree-ssa/pr13146.c eab19e0c04884cd782c9879cbe292109 gcc/testsuite/gcc.dg/tree-ssa/pr14341.c 9945ed7002a5f7d4918e8ff5eb4cb647 gcc/testsuite/gcc.dg/tree-ssa/pr14490-1.c *************** e8ad1077cbbf867b677d6dbe00524406 gcc/te *** 47728,47733 **** --- 47851,47857 ---- 3fada5964c97d348ed7e7e1eb62f0512 gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-22.c 6a109e21502e5353e985b8e9180f3c79 gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-23.c 99cacb357948a00b34aa1d255c66558b gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-24.c + a3fc09fc73db236301044a5b2f7e7fea gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-25.c c0ab69fe1a4b916817bbafe5e5048c34 gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-3.c d00d2a078458d4fc876af7d2a29c241a gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-5.c 769aa5eb478537be389d55c410c46887 gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-6.c *************** e7f3d45d3b7be1d3f34c03fe14a64322 gcc/te *** 48733,48738 **** --- 48857,48868 ---- f2ad143cd940fa42deda153f442d29b2 gcc/testsuite/gcc.dg/vect/pr114027.c ae8b389a68778f9cfdd3436253d31b14 gcc/testsuite/gcc.dg/vect/pr114231.c a652091690348408aec894da3d82b15d gcc/testsuite/gcc.dg/vect/pr115192.c + d4499294f9334e38163cb0286c7b2483 gcc/testsuite/gcc.dg/vect/pr115669.c + 3617874dc8f0f764b079db5c7e0fa79b gcc/testsuite/gcc.dg/vect/pr116125.c + 663c319abe6475a06b3f4517706d0d00 gcc/testsuite/gcc.dg/vect/pr117307.c + 6fd30961e11a3501d3b6aacf53957805 gcc/testsuite/gcc.dg/vect/pr119057.c + 8312a9b4f3649f0390632c660109eb1d gcc/testsuite/gcc.dg/vect/pr119399.c + f5749a6330ea4377b859350a23760b4a gcc/testsuite/gcc.dg/vect/pr119534.c 42d48d2ecd5682545b12ac42f879a831 gcc/testsuite/gcc.dg/vect/pr16105.c 231c99dba9475fe09525bbf6f4374124 gcc/testsuite/gcc.dg/vect/pr18308.c 3aed50f38aa86c4915d6e4b3cef91287 gcc/testsuite/gcc.dg/vect/pr18400.c *************** ae513bfb2896c38de994944b104fb7c8 gcc/te *** 50505,50510 **** --- 50635,50642 ---- 8a6aed21d2622bf72389f22f09d8bd4b gcc/testsuite/gcc.target/aarch64/abs_2.c 1a7ccb40e3e56d330628a0d87661662b gcc/testsuite/gcc.target/aarch64/acle/acle.exp a545b8f7fc60af12576f85397e1733cb gcc/testsuite/gcc.target/aarch64/acle/armv8-r.c + d75448581ffe687b59d90766e852e7df gcc/testsuite/gcc.target/aarch64/acle/bf16_feature.c + 80f5f996bc3addf12ec6ed7a7a97d085 gcc/testsuite/gcc.target/aarch64/acle/bf16_sve_feature.c 339f7215861041bbe928186d86e2c7b7 gcc/testsuite/gcc.target/aarch64/acle/crc32b.c b3b451a8f938e2c0a24c2751eab2c62d gcc/testsuite/gcc.target/aarch64/acle/crc32cb.c ff79cdd1c6205d62ceab022024616fbc gcc/testsuite/gcc.target/aarch64/acle/crc32cd.c *************** cf2feda607251322b5205da4036fd1c4 gcc/te *** 53695,53701 **** 6d8bd2efb554f6d091fb8e33d61282ce gcc/testsuite/gcc.target/aarch64/sve/acle/asm/subr_u64.c c87493cb5df94025db4b916e3c76dbce gcc/testsuite/gcc.target/aarch64/sve/acle/asm/subr_u8.c d62014d4165619be9e66bb5968586984 gcc/testsuite/gcc.target/aarch64/sve/acle/asm/sudot_lane_s32.c ! abc1a5ce46a7ea8e1fbdd4a38900647c gcc/testsuite/gcc.target/aarch64/sve/acle/asm/sudot_s32.c 4aba6ed207e5eaeee50dd28f9ea0e6c8 gcc/testsuite/gcc.target/aarch64/sve/acle/asm/tbl_bf16.c d716b98f28d9b983243b29c17423c344 gcc/testsuite/gcc.target/aarch64/sve/acle/asm/tbl_f16.c 0fbc73f88771b326dd4bb35363badfcd gcc/testsuite/gcc.target/aarch64/sve/acle/asm/tbl_f32.c --- 53827,53833 ---- 6d8bd2efb554f6d091fb8e33d61282ce gcc/testsuite/gcc.target/aarch64/sve/acle/asm/subr_u64.c c87493cb5df94025db4b916e3c76dbce gcc/testsuite/gcc.target/aarch64/sve/acle/asm/subr_u8.c d62014d4165619be9e66bb5968586984 gcc/testsuite/gcc.target/aarch64/sve/acle/asm/sudot_lane_s32.c ! f313037b074c947edcfe07f61f5fbbc5 gcc/testsuite/gcc.target/aarch64/sve/acle/asm/sudot_s32.c 4aba6ed207e5eaeee50dd28f9ea0e6c8 gcc/testsuite/gcc.target/aarch64/sve/acle/asm/tbl_bf16.c d716b98f28d9b983243b29c17423c344 gcc/testsuite/gcc.target/aarch64/sve/acle/asm/tbl_f16.c 0fbc73f88771b326dd4bb35363badfcd gcc/testsuite/gcc.target/aarch64/sve/acle/asm/tbl_f32.c *************** f05f061869c6f335b6395f5250ec83ee gcc/te *** 54129,54134 **** --- 54261,54267 ---- 4e7a3ff45a72f35e2476f4e660886eb0 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpeq_1.c 60577eb222495e42c0d4e2d7e2ce19a3 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpeq_2.c 890d0907288d2b72f9ec70456e205a4c gcc/testsuite/gcc.target/aarch64/sve/acle/general/cmpeq_3.c + 493d587eaeaa014288091839539ed594 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cnot_1.c 8670785b5e7c8b75fb219f0ddae33190 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cntb_1.c 9e41721b4dcb606909b3efa814293f4e gcc/testsuite/gcc.target/aarch64/sve/acle/general/cntb_pat_1.c 60a6cb5f3583610557e9b4dde6cd5453 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cntd_pat_1.c *************** a60971180940fb9126dc3f2440073c3a gcc/te *** 54207,54216 **** de2f1d6ff8c05a5ea5ffb81b8ce61ce2 gcc/testsuite/gcc.target/aarch64/sve/acle/general/unoptimized_1.c 129d25d3f8de8545837b08910c736d81 gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_1.c 5dbffb9595fe745c3cdfebeeece83ee5 gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_10.c 2af690a7706f6a510d3d0b49d8bcbc92 gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_2.c 786ef1b1105a4d7d76e8259890eddb76 gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_3.c 32aacb55289afea049bef27ee3e43b32 gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_4.c ! b3ac885cdf7c809e6e3a99a873bb46db gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_5.c 5c753061bc4092a3fd420d4ea189dc5c gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_6.c 4252f061da5cf9319b8f1502028ab9d3 gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_7.c 3c67dda964fc05a59fcc4c706524e07f gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_8.c --- 54340,54351 ---- de2f1d6ff8c05a5ea5ffb81b8ce61ce2 gcc/testsuite/gcc.target/aarch64/sve/acle/general/unoptimized_1.c 129d25d3f8de8545837b08910c736d81 gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_1.c 5dbffb9595fe745c3cdfebeeece83ee5 gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_10.c + b32f166240692ad09eeb88e4c41a0584 gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_11.c + 3773293a3c03a36cfc6110e54ac5b251 gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_12.c 2af690a7706f6a510d3d0b49d8bcbc92 gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_2.c 786ef1b1105a4d7d76e8259890eddb76 gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_3.c 32aacb55289afea049bef27ee3e43b32 gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_4.c ! cedaad7f4429d55119291005bb785f5f gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_5.c 5c753061bc4092a3fd420d4ea189dc5c gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_6.c 4252f061da5cf9319b8f1502028ab9d3 gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_7.c 3c67dda964fc05a59fcc4c706524e07f gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_8.c *************** a1eb5ddb5902496d5253fa3260ba71e1 gcc/te *** 54917,54922 **** --- 55052,55058 ---- e63ee9a8151c9691caadc8fcc81bbf26 gcc/testsuite/gcc.target/aarch64/sve/pr108608-1.c fca208aba0269c8218d4736a10ac6a83 gcc/testsuite/gcc.target/aarch64/sve/pr109176.c bc4cb512648e75cde04a28680b1c4a89 gcc/testsuite/gcc.target/aarch64/sve/pr109505.c + 32ab14334cab1c6336c74f3dc7e201db gcc/testsuite/gcc.target/aarch64/sve/pr116238.c 7e2aaf0806edd37415079b5c2e48b66c gcc/testsuite/gcc.target/aarch64/sve/pr81003.c 00b752a6e175de8b1a300df08f275461 gcc/testsuite/gcc.target/aarch64/sve/pr87563.c c56eeba71ad463673a1bdb30e7a94863 gcc/testsuite/gcc.target/aarch64/sve/pr87815.c *************** d7ac99c012df73ffbde36998316bf1ef gcc/te *** 56226,56231 **** --- 56362,56368 ---- fc2eb8ac52faed5fba0a017b858d4ae4 gcc/testsuite/gcc.target/aarch64/tlsle_sizeadj_tiny_1.c 22ac2528ed143d2373bc7e340f2a5215 gcc/testsuite/gcc.target/aarch64/torture/aarch64-torture.exp 4036d83a59b4adcf9e8a4cf5a291d22e gcc/testsuite/gcc.target/aarch64/torture/pr111677.c + 8ba6cf5317762b2b89350d4f652efa53 gcc/testsuite/gcc.target/aarch64/torture/pr116564.c 5266ac107a73e3ee1d1f44e1cda7d9f2 gcc/testsuite/gcc.target/aarch64/torture/simd-abi-1.c 9c3416db2fc04c3f91b03ecae15e943e gcc/testsuite/gcc.target/aarch64/torture/simd-abi-10.c df55bfe2c1ce46074b19b4566cedeef4 gcc/testsuite/gcc.target/aarch64/torture/simd-abi-11.c *************** c4eec60b3306ebc857f91dd9f92ff8fe gcc/te *** 56458,56463 **** --- 56595,56601 ---- cda436a64900819743f9c85f6ef0caae gcc/testsuite/gcc.target/alpha/pr105209.c 29ae801d98cc199cb5dde311a9649e2c gcc/testsuite/gcc.target/alpha/pr106966.c d2f13118de8962e07bca23bc88ac4d1b gcc/testsuite/gcc.target/alpha/pr115297.c + 763b8b959a5cab5d1f688ad38f7bcd29 gcc/testsuite/gcc.target/alpha/pr115526.c dc5943b1dd495250e6dc8076b32c902c gcc/testsuite/gcc.target/alpha/pr19518.c f8467590e67b2b5f4718d571a9ba60c0 gcc/testsuite/gcc.target/alpha/pr22093.c b36471f8edbf2a11ce23359823ecc10b gcc/testsuite/gcc.target/alpha/pr24178.c *************** c9fa67c20fec9ef097315c2e0664eb2f gcc/te *** 59304,59309 **** --- 59442,59448 ---- 0e904d54afafee544aac46db74a0fb78 gcc/testsuite/gcc.target/arm/mve/intrinsics/vsetq_lane_s32.c def367f33eb6f2d3b377c08209d4e3ba gcc/testsuite/gcc.target/arm/mve/intrinsics/vsetq_lane_s64.c 8260100dce01c5f54338df06aed56da3 gcc/testsuite/gcc.target/arm/mve/intrinsics/vsetq_lane_s8.c + bfc6037993ab8de2e59e1fc18bd8c747 gcc/testsuite/gcc.target/arm/mve/intrinsics/vsetq_lane_su64.c 3aebb2229ee3c92f32168bc434c06dcc gcc/testsuite/gcc.target/arm/mve/intrinsics/vsetq_lane_u16.c b6849ec20ab5271453eb6a6910746ff2 gcc/testsuite/gcc.target/arm/mve/intrinsics/vsetq_lane_u32.c 770546f9f98bbba226ff4a00ebb7d508 gcc/testsuite/gcc.target/arm/mve/intrinsics/vsetq_lane_u64.c *************** b39d52db8b06b00a7c57fd2d7dd7bc0a gcc/te *** 60039,60045 **** 454ea9c4b205cc5970ef1f679c56ad7a gcc/testsuite/gcc.target/arm/simd/mve-vorn.c fcce8db5ec7e8bdb594b192422634626 gcc/testsuite/gcc.target/arm/simd/mve-vorr.c 8c135e895bc223508b6735896b11e21f gcc/testsuite/gcc.target/arm/simd/mve-vshl.c ! 436aabb7e19b94cd90c42d18d9ffd235 gcc/testsuite/gcc.target/arm/simd/mve-vshr.c 93474bc90e5156ad689799d6fb6a4511 gcc/testsuite/gcc.target/arm/simd/mve-vsub-scalar-1.c 6c75eaaec68dfb8c4f79555ce03a5fc5 gcc/testsuite/gcc.target/arm/simd/mve-vsub_1.c 1b47bf72d463778fb593a6c8e88de7bf gcc/testsuite/gcc.target/arm/simd/neon-compare-1.c --- 60178,60184 ---- 454ea9c4b205cc5970ef1f679c56ad7a gcc/testsuite/gcc.target/arm/simd/mve-vorn.c fcce8db5ec7e8bdb594b192422634626 gcc/testsuite/gcc.target/arm/simd/mve-vorr.c 8c135e895bc223508b6735896b11e21f gcc/testsuite/gcc.target/arm/simd/mve-vshl.c ! c45f1243ffe171add3b39b622433aff8 gcc/testsuite/gcc.target/arm/simd/mve-vshr.c 93474bc90e5156ad689799d6fb6a4511 gcc/testsuite/gcc.target/arm/simd/mve-vsub-scalar-1.c 6c75eaaec68dfb8c4f79555ce03a5fc5 gcc/testsuite/gcc.target/arm/simd/mve-vsub_1.c 1b47bf72d463778fb593a6c8e88de7bf gcc/testsuite/gcc.target/arm/simd/neon-compare-1.c *************** fcfc22b5becf29a31bc290457133738d gcc/te *** 60458,60463 **** --- 60597,60607 ---- da616058fed041fe8be91af9e560a517 gcc/testsuite/gcc.target/avr/torture/pr105753.c 112c41be69fc1500c61b78d58e88cb62 gcc/testsuite/gcc.target/avr/torture/pr109650-1.c 057f8a7fa6d90ee3ba242f26befaec45 gcc/testsuite/gcc.target/avr/torture/pr109650-2.c + c02c9b09a64e3c14adfe954730cf8f3c gcc/testsuite/gcc.target/avr/torture/pr119989-memx-1.c + 4075d89600bfef80102e75d0d4108ef3 gcc/testsuite/gcc.target/avr/torture/pr119989-memx-2.c + caa7b81fc83f2373b987ae3dec63aa32 gcc/testsuite/gcc.target/avr/torture/pr119989-memx-3.c + 9d65901f178212417bd03274e7a0ff1d gcc/testsuite/gcc.target/avr/torture/pr119989-memx-4.c + 51d04706ca0c4216d8d453fbe55f52ca gcc/testsuite/gcc.target/avr/torture/pr119989.h 0844a939ea2464d30cc8892c85b4aecc gcc/testsuite/gcc.target/avr/torture/pr39633.c 8fb17af722ee890b7fa08b5610cdb80e gcc/testsuite/gcc.target/avr/torture/pr41885.c 70b849f57ecf42299230b99b7734dd2d gcc/testsuite/gcc.target/avr/torture/pr51374-1.c *************** ab53af0eb6dbfe2791a8ac1bbaf0c11f gcc/te *** 60472,60478 **** --- 60616,60625 ---- 5f3be2dbb82f715c14a1a41fff447a60 gcc/testsuite/gcc.target/avr/torture/pr77326.c 4fbef28c5655476b160563b7732f35f0 gcc/testsuite/gcc.target/avr/torture/pr83729.c 3f60045ba7f9c20a87591727f9e0b7f1 gcc/testsuite/gcc.target/avr/torture/pr83801.c + cdd277ee16a82198dac193f2885f4cb3 gcc/testsuite/gcc.target/avr/torture/pr87376.c + 54e693530d5f4d0566b475b2eaa73cca gcc/testsuite/gcc.target/avr/torture/pr88236-pr115726.c 52eb2c2bb002e59b07281c8efa4702fb gcc/testsuite/gcc.target/avr/torture/pr92606.c + d41e40769fe3b38d9debfff43a083a18 gcc/testsuite/gcc.target/avr/torture/pr98762.c 21a45d34960ba9567b9f2483d22c843f gcc/testsuite/gcc.target/avr/torture/progmem-1.c 564c71a894aff68e98d5c4a6db2b47ae gcc/testsuite/gcc.target/avr/torture/progmem-1.cpp 126473a2f2a291f65eeb2dca66b500b2 gcc/testsuite/gcc.target/avr/torture/sat-hr-plus-minus.c *************** bce67b236520c561f93006d5bd66eea1 gcc/te *** 62409,62415 **** f647d36b7701e4997d1256eb0c4cb741 gcc/testsuite/gcc.target/i386/avx512bw-pr100267-d-2.c 6fdcf602650b181e914aaa03a2e18c3a gcc/testsuite/gcc.target/i386/avx512bw-pr100267-q-2.c 7f067774026be7c71e746d719f34e7be gcc/testsuite/gcc.target/i386/avx512bw-pr100267-w-2.c ! 71ac6a04534042bfa057ebce7bc266b4 gcc/testsuite/gcc.target/i386/avx512bw-pr103750-1.c 2589b43ccc82e972823c4c4f159c2244 gcc/testsuite/gcc.target/i386/avx512bw-pr103750-2.c 2d319ef27177a5dd5161f6c501d73c11 gcc/testsuite/gcc.target/i386/avx512bw-pr70329-1.c 2578aaea4945a191c1767c5b6ebde5b2 gcc/testsuite/gcc.target/i386/avx512bw-pr70329-2.c --- 62556,62562 ---- f647d36b7701e4997d1256eb0c4cb741 gcc/testsuite/gcc.target/i386/avx512bw-pr100267-d-2.c 6fdcf602650b181e914aaa03a2e18c3a gcc/testsuite/gcc.target/i386/avx512bw-pr100267-q-2.c 7f067774026be7c71e746d719f34e7be gcc/testsuite/gcc.target/i386/avx512bw-pr100267-w-2.c ! 5ee9ec69a8d0c12ad27334fa1ed9ab05 gcc/testsuite/gcc.target/i386/avx512bw-pr103750-1.c 2589b43ccc82e972823c4c4f159c2244 gcc/testsuite/gcc.target/i386/avx512bw-pr103750-2.c 2d319ef27177a5dd5161f6c501d73c11 gcc/testsuite/gcc.target/i386/avx512bw-pr70329-1.c 2578aaea4945a191c1767c5b6ebde5b2 gcc/testsuite/gcc.target/i386/avx512bw-pr70329-2.c *************** ddee045bf26d24bb3c8c4957af9831a0 gcc/te *** 62480,62485 **** --- 62627,62633 ---- 9e407045b53a21ae0d7c112ffb790d43 gcc/testsuite/gcc.target/i386/avx512bw-vpaddw-1.c 01f4adb01dc81937191efd641eeeb298 gcc/testsuite/gcc.target/i386/avx512bw-vpaddw-2.c 381ec3d170d13e670a7d82cb4b8f7d0d gcc/testsuite/gcc.target/i386/avx512bw-vpalignr-1.c + 167461ae051833f02dbe65e6c16defe8 gcc/testsuite/gcc.target/i386/avx512bw-vpalignr-1b.c ceeb85e9addcfe4b03eb11f284116f03 gcc/testsuite/gcc.target/i386/avx512bw-vpalignr-2.c c98c741ace98c244bd47dbae09219719 gcc/testsuite/gcc.target/i386/avx512bw-vpalignr-3.c 642ccfbc2b444966fb6f736f43a1365c gcc/testsuite/gcc.target/i386/avx512bw-vpalignr-4.c *************** d846c7209b5bac971f214f29ca3fd506 gcc/te *** 62776,62783 **** --- 62924,62933 ---- e44436f82377cc5b5cff6a5347fd450e gcc/testsuite/gcc.target/i386/avx512dq-vfpclassps-1.c b3fc381ca0059d17a2d9812d9231ff01 gcc/testsuite/gcc.target/i386/avx512dq-vfpclassps-2.c 315a3604df8b1e1c374a98f932da6925 gcc/testsuite/gcc.target/i386/avx512dq-vfpclasssd-1.c + 320c1383cbb8e4ce07f067792bb52fd4 gcc/testsuite/gcc.target/i386/avx512dq-vfpclasssd-1b.c 5cd4bb271105b6457a2a496768007256 gcc/testsuite/gcc.target/i386/avx512dq-vfpclasssd-2.c 8acc20767c397abf4448f2913287a865 gcc/testsuite/gcc.target/i386/avx512dq-vfpclassss-1.c + 7fc53c6d107e4e8b76a7a062a0e6ef7e gcc/testsuite/gcc.target/i386/avx512dq-vfpclassss-1b.c d2a9855a64040f30e43740f4abffd5eb gcc/testsuite/gcc.target/i386/avx512dq-vfpclassss-2.c 1fb9353e1dd69f5c4b4f8968fba855ff gcc/testsuite/gcc.target/i386/avx512dq-vinsert-1.c 9ef48524b5d1edfc6602e9a3e815a433 gcc/testsuite/gcc.target/i386/avx512dq-vinsertf32x8-1.c *************** f3ad87ac05bd79c4aae795b5c86f4c3c gcc/te *** 62819,62826 **** --- 62969,62978 ---- 256d6929daa33a4c5bcb3aaaf1eb5260 gcc/testsuite/gcc.target/i386/avx512dq-vreduceps-3.c 05e2e691a54d1d7d679200c87b52f5d9 gcc/testsuite/gcc.target/i386/avx512dq-vreduceps-4.c eb1182b1bc9929fffea30e9274753e93 gcc/testsuite/gcc.target/i386/avx512dq-vreducesd-1.c + f6c963a01ad7c80c01ff4cd13b04374c gcc/testsuite/gcc.target/i386/avx512dq-vreducesd-1b.c f93a614a15d204e65833d00faeae06bd gcc/testsuite/gcc.target/i386/avx512dq-vreducesd-2.c 20aed644a835776e37e1d5aba4103fa4 gcc/testsuite/gcc.target/i386/avx512dq-vreducess-1.c + 0b78547190f1fea2da9af7c5cf1ac4d1 gcc/testsuite/gcc.target/i386/avx512dq-vreducess-1b.c 73efe722ab3e8d69d28347b8d8df38ae gcc/testsuite/gcc.target/i386/avx512dq-vreducess-2.c 1b13c5919cffe7b16ec23ae099c1a222 gcc/testsuite/gcc.target/i386/avx512dq-vxorpd-1.c d2485d57c89b4736d55cf3ad043515d3 gcc/testsuite/gcc.target/i386/avx512dq-vxorpd-2.c *************** baf31fdbb66bd1db60ed18831c7eb2a8 gcc/te *** 64083,64088 **** --- 64235,64241 ---- c871215766439133615180b4861bbc02 gcc/testsuite/gcc.target/i386/avx512fp16-vfnmsubXXXsh-1b.c e5f342115c72c6f189324bbb8ba8498a gcc/testsuite/gcc.target/i386/avx512fp16-vfpclassph-1a.c 02d365e89418c102e31b90036e117273 gcc/testsuite/gcc.target/i386/avx512fp16-vfpclassph-1b.c + 1ef328cbfb02d1f2fd3e0e62d986ebfc gcc/testsuite/gcc.target/i386/avx512fp16-vfpclassph-1c.c 43f3189c0a0cc0109dba0b81ab99fb0a gcc/testsuite/gcc.target/i386/avx512fp16-vfpclasssh-1a.c 3e23e295b389d5fc7973bfc73cd8d235 gcc/testsuite/gcc.target/i386/avx512fp16-vfpclasssh-1b.c a3f1acec8cc23029e37e44877fc68d8f gcc/testsuite/gcc.target/i386/avx512fp16-vgetexpph-1a.c *************** df4c1c2e223dab18c858a16ca0d5bb83 gcc/te *** 64411,64416 **** --- 64564,64570 ---- 79c3a64519a5650ef8325a1e7ae43f77 gcc/testsuite/gcc.target/i386/avx512vl-valignd-1.c 2c099e2c99e2a3a8736f9a95748c0aa5 gcc/testsuite/gcc.target/i386/avx512vl-valignd-2.c 4a892693a270119b5c7d5360e4e5cdc8 gcc/testsuite/gcc.target/i386/avx512vl-valignq-1.c + a75775b26c58b3ceb1c73fecd52901f5 gcc/testsuite/gcc.target/i386/avx512vl-valignq-1b.c f706011a0cf678105b1949d4145c59b4 gcc/testsuite/gcc.target/i386/avx512vl-valignq-2.c f4ca20d06d9a8325947f96b09c244941 gcc/testsuite/gcc.target/i386/avx512vl-vandnpd-2.c 14a35041817996bfc5797b2be0b109e2 gcc/testsuite/gcc.target/i386/avx512vl-vandnps-2.c *************** b407509e91ada069c88bb25df10261f2 gcc/te *** 65155,65160 **** --- 65309,65315 ---- 89e5e49acc2dd5c296b6f32cc9af9e5e gcc/testsuite/gcc.target/i386/bmi-blsr-2.c be3fee1889ad65677a041f24f858b1cb gcc/testsuite/gcc.target/i386/bmi-blsr-2a.c 4b8229596d6eeaa03a4011846a02cd4a gcc/testsuite/gcc.target/i386/bmi-check.h + e7a531d7b228712b8efd31098ee9cdd4 gcc/testsuite/gcc.target/i386/bmi-pr116287.c 837bc321452d830cdca00be675a80d02 gcc/testsuite/gcc.target/i386/bmi-tzcnt-1.c bddf7c2fb14fca97f8ff604d99aa87eb gcc/testsuite/gcc.target/i386/bmi-tzcnt-1a.c d3a83e902d535bfb6c532e16d5b3622e gcc/testsuite/gcc.target/i386/bmi-tzcnt-2.c *************** eb6d296fc055f71af8d6286a76275c08 gcc/te *** 65185,65190 **** --- 65340,65346 ---- c7ce604b365a1dabeac828385fadac82 gcc/testsuite/gcc.target/i386/bmi2-pext32-1a.c 07f0339fdff4b3fe5bfd2ef2568cf1ff gcc/testsuite/gcc.target/i386/bmi2-pext64-1.c 80e1b157bf4698a4c063a051d260de86 gcc/testsuite/gcc.target/i386/bmi2-pext64-1a.c + 7bbc1a5c683010fceddd3ea5a04ee3a5 gcc/testsuite/gcc.target/i386/bmi2-pr116287.c b3c8283dbd8e5f9b716e300034584eb1 gcc/testsuite/gcc.target/i386/bmi2-rorx32-1.c 43e2ea585c6afa59c6fc24b1d5778b5f gcc/testsuite/gcc.target/i386/bmi2-rorx32-1a.c 715c6fdea5af863f17366b07b0976147 gcc/testsuite/gcc.target/i386/bmi2-rorx64-1.c *************** de96937d95fca09a8202692cb42b1b5c gcc/te *** 65445,65450 **** --- 65601,65607 ---- a977081749abfb4842b771248ebec575 gcc/testsuite/gcc.target/i386/fma-fmsubaddXX.c a2223c46858f0a78046f7081f1a8db8d gcc/testsuite/gcc.target/i386/fma-fnmaddXX.c 0eb820dcbdc8d469608686562368e957 gcc/testsuite/gcc.target/i386/fma-fnmsubXX.c + 39b6f4e4ca48937662b5a71ad89d9abf gcc/testsuite/gcc.target/i386/fma-pr116891.c 41d05944a41d2d54ba7f51df1beb87cc gcc/testsuite/gcc.target/i386/fma3-builtin-2.c fca446fb8db4eb130017e79f6967b7fc gcc/testsuite/gcc.target/i386/fma3-builtin.c 98b87707fe8556bf09594d5fcd30383e gcc/testsuite/gcc.target/i386/fma3-fma.c *************** c1320fd604803bc04257c984f1e3ba77 gcc/te *** 65523,65529 **** 3dd864a351a6115db6a5b2ea1ee16ece gcc/testsuite/gcc.target/i386/funcspec-3.c 5af0527c599bf95f77628d48b1beb0ec gcc/testsuite/gcc.target/i386/funcspec-4.c 7568c1249431aafb7f8e2610a1e4a35e gcc/testsuite/gcc.target/i386/funcspec-5.c ! 7d28cce9c7232b4c09252cda04b63b6a gcc/testsuite/gcc.target/i386/funcspec-56.inc 6886186deb869f2b04be36492c05b8aa gcc/testsuite/gcc.target/i386/funcspec-6.c 35655de5c9348f2a36254312a8d17908 gcc/testsuite/gcc.target/i386/funcspec-7.c 0ba9f1b7368ea580cabab541b451aea8 gcc/testsuite/gcc.target/i386/funcspec-8.c --- 65680,65686 ---- 3dd864a351a6115db6a5b2ea1ee16ece gcc/testsuite/gcc.target/i386/funcspec-3.c 5af0527c599bf95f77628d48b1beb0ec gcc/testsuite/gcc.target/i386/funcspec-4.c 7568c1249431aafb7f8e2610a1e4a35e gcc/testsuite/gcc.target/i386/funcspec-5.c ! ba5017af978d02e22147dec9d6bb43cd gcc/testsuite/gcc.target/i386/funcspec-56.inc 6886186deb869f2b04be36492c05b8aa gcc/testsuite/gcc.target/i386/funcspec-6.c 35655de5c9348f2a36254312a8d17908 gcc/testsuite/gcc.target/i386/funcspec-7.c 0ba9f1b7368ea580cabab541b451aea8 gcc/testsuite/gcc.target/i386/funcspec-8.c *************** ec64d74d91ed819f110fdc6f8f90197e gcc/te *** 65997,66003 **** 9f8568a66133d16283b57d8a97c3dc49 gcc/testsuite/gcc.target/i386/pie-copyrelocs-4.c f91cf99532e69c383485f6be3f62eb99 gcc/testsuite/gcc.target/i386/pie.c 5d062b099437fb64de565760ffa381a8 gcc/testsuite/gcc.target/i386/pieces-memcpy-1.c ! 159890d45cc96b5006c69f188375af79 gcc/testsuite/gcc.target/i386/pieces-memcpy-10.c c8299c32a2fde2871d46799e54ca9c20 gcc/testsuite/gcc.target/i386/pieces-memcpy-11.c 07e2e682ac676281588afe54520b14b5 gcc/testsuite/gcc.target/i386/pieces-memcpy-12.c cbaafd43310e10a7ba4ce687bafe06da gcc/testsuite/gcc.target/i386/pieces-memcpy-13.c --- 66154,66160 ---- 9f8568a66133d16283b57d8a97c3dc49 gcc/testsuite/gcc.target/i386/pie-copyrelocs-4.c f91cf99532e69c383485f6be3f62eb99 gcc/testsuite/gcc.target/i386/pie.c 5d062b099437fb64de565760ffa381a8 gcc/testsuite/gcc.target/i386/pieces-memcpy-1.c ! 23061cd512728bc930eeb98dcd240079 gcc/testsuite/gcc.target/i386/pieces-memcpy-10.c c8299c32a2fde2871d46799e54ca9c20 gcc/testsuite/gcc.target/i386/pieces-memcpy-11.c 07e2e682ac676281588afe54520b14b5 gcc/testsuite/gcc.target/i386/pieces-memcpy-12.c cbaafd43310e10a7ba4ce687bafe06da gcc/testsuite/gcc.target/i386/pieces-memcpy-13.c *************** b5f6fb3aaac27e15ae52d9111e60d98d gcc/te *** 66010,66019 **** 279c04d20615905ca5bf2f44eb5a231d gcc/testsuite/gcc.target/i386/pieces-memcpy-2.c 7e2d486487e1f536c226d8bc290fd8ad gcc/testsuite/gcc.target/i386/pieces-memcpy-20.c 2f4b551b9d6addea576cff08a8831f3f gcc/testsuite/gcc.target/i386/pieces-memcpy-21.c 2820c9b91ec98c38843764eea07d4b75 gcc/testsuite/gcc.target/i386/pieces-memcpy-3.c 698986063dd5ba005476ca849de14359 gcc/testsuite/gcc.target/i386/pieces-memcpy-4.c 5e90eca9009d511850fb8fc840c7e236 gcc/testsuite/gcc.target/i386/pieces-memcpy-5.c ! 592f55f6e3184576f7ecadf1df7171df gcc/testsuite/gcc.target/i386/pieces-memcpy-6.c e4e4d6519861d83a595eadd0756e3cf2 gcc/testsuite/gcc.target/i386/pieces-memcpy-7.c bb3f405fb2a00f93ade9f112f66a2ae2 gcc/testsuite/gcc.target/i386/pieces-memcpy-8.c 224b0424797e8741da92fc8c1b86afb3 gcc/testsuite/gcc.target/i386/pieces-memcpy-9.c --- 66167,66177 ---- 279c04d20615905ca5bf2f44eb5a231d gcc/testsuite/gcc.target/i386/pieces-memcpy-2.c 7e2d486487e1f536c226d8bc290fd8ad gcc/testsuite/gcc.target/i386/pieces-memcpy-20.c 2f4b551b9d6addea576cff08a8831f3f gcc/testsuite/gcc.target/i386/pieces-memcpy-21.c + 483ed3c0a5b3efe685343cb5dc87d54d gcc/testsuite/gcc.target/i386/pieces-memcpy-22.c 2820c9b91ec98c38843764eea07d4b75 gcc/testsuite/gcc.target/i386/pieces-memcpy-3.c 698986063dd5ba005476ca849de14359 gcc/testsuite/gcc.target/i386/pieces-memcpy-4.c 5e90eca9009d511850fb8fc840c7e236 gcc/testsuite/gcc.target/i386/pieces-memcpy-5.c ! 24f2ee2e996e237f6e102d9bc2cb8deb gcc/testsuite/gcc.target/i386/pieces-memcpy-6.c e4e4d6519861d83a595eadd0756e3cf2 gcc/testsuite/gcc.target/i386/pieces-memcpy-7.c bb3f405fb2a00f93ade9f112f66a2ae2 gcc/testsuite/gcc.target/i386/pieces-memcpy-8.c 224b0424797e8741da92fc8c1b86afb3 gcc/testsuite/gcc.target/i386/pieces-memcpy-9.c *************** dfdb563e4ff7bbe491b12bbbe647b9dc gcc/te *** 66048,66060 **** 181b017254dd31eb2223399402d99647 gcc/testsuite/gcc.target/i386/pieces-memset-35.c 1459df6a5e5bf8ce8f966ba8966bfddd gcc/testsuite/gcc.target/i386/pieces-memset-36.c 98520236020ae438a633156e10f18109 gcc/testsuite/gcc.target/i386/pieces-memset-37.c ! 71d7cb14af52878612fec7d2cc2dcdff gcc/testsuite/gcc.target/i386/pieces-memset-38.c 3c40d1cea3026e11bb928e9427e769ab gcc/testsuite/gcc.target/i386/pieces-memset-39.c b9528f9fe022aa90d7c7d9764f67ece4 gcc/testsuite/gcc.target/i386/pieces-memset-4.c ! e97806715f1d074e19f850beb7a46cf7 gcc/testsuite/gcc.target/i386/pieces-memset-40.c ! fa508fb4ea1f8f8b18cde0a830cf3953 gcc/testsuite/gcc.target/i386/pieces-memset-41.c ! ef978a20afb9412dabbe15a9b8dfb5b0 gcc/testsuite/gcc.target/i386/pieces-memset-42.c ! 36d97d09e24700e91c20a52767b17774 gcc/testsuite/gcc.target/i386/pieces-memset-43.c 2b47b7f82aeabc7a238642520819b3f0 gcc/testsuite/gcc.target/i386/pieces-memset-44.c f2f0e85f12be6d8c85584ef9e34e08ca gcc/testsuite/gcc.target/i386/pieces-memset-45.c f29f6d2af05e1f08f148f0eed162d860 gcc/testsuite/gcc.target/i386/pieces-memset-46.c --- 66206,66218 ---- 181b017254dd31eb2223399402d99647 gcc/testsuite/gcc.target/i386/pieces-memset-35.c 1459df6a5e5bf8ce8f966ba8966bfddd gcc/testsuite/gcc.target/i386/pieces-memset-36.c 98520236020ae438a633156e10f18109 gcc/testsuite/gcc.target/i386/pieces-memset-37.c ! aded7685d2737a1f9f9bfa29d142578b gcc/testsuite/gcc.target/i386/pieces-memset-38.c 3c40d1cea3026e11bb928e9427e769ab gcc/testsuite/gcc.target/i386/pieces-memset-39.c b9528f9fe022aa90d7c7d9764f67ece4 gcc/testsuite/gcc.target/i386/pieces-memset-4.c ! 5e61a688623c5bae3c58091373dada37 gcc/testsuite/gcc.target/i386/pieces-memset-40.c ! 32898a0a3b4f097526a33f5b752c0607 gcc/testsuite/gcc.target/i386/pieces-memset-41.c ! 8d0f7c4609b34ade3bbe7b6fcdd6636b gcc/testsuite/gcc.target/i386/pieces-memset-42.c ! 6a10741d846589134acea1c912c80293 gcc/testsuite/gcc.target/i386/pieces-memset-43.c 2b47b7f82aeabc7a238642520819b3f0 gcc/testsuite/gcc.target/i386/pieces-memset-44.c f2f0e85f12be6d8c85584ef9e34e08ca gcc/testsuite/gcc.target/i386/pieces-memset-45.c f29f6d2af05e1f08f148f0eed162d860 gcc/testsuite/gcc.target/i386/pieces-memset-46.c *************** f29f6d2af05e1f08f148f0eed162d860 gcc/te *** 66062,66073 **** fab4224ceed336ed6902793909c0c6c2 gcc/testsuite/gcc.target/i386/pieces-memset-48.c b6a5763cac2b72e43f0900c7fbca0740 gcc/testsuite/gcc.target/i386/pieces-memset-49.c e59e962761850423b307c01f720c8e84 gcc/testsuite/gcc.target/i386/pieces-memset-5.c 9a26520df010055f642c2ece0b8228da gcc/testsuite/gcc.target/i386/pieces-memset-6.c 965472deb34cf62f613f73701201f9b4 gcc/testsuite/gcc.target/i386/pieces-memset-7.c 7c2aa9a23dfc3f65dc77c8d3af0a6a3f gcc/testsuite/gcc.target/i386/pieces-memset-8.c 5a05b363e010e9b9a4fc05f362d42dae gcc/testsuite/gcc.target/i386/pieces-memset-9.c b1d366c21cfdcfacf9854ed6cbfd7bc3 gcc/testsuite/gcc.target/i386/pieces-strcpy-1.c ! 52e52549556117888f85f13d26ced39b gcc/testsuite/gcc.target/i386/pieces-strcpy-2.c 13d06bee88f2ccd2a16effe0c243e61e gcc/testsuite/gcc.target/i386/pow-1.c 08e64611506eb827fa5c5f614b29322b gcc/testsuite/gcc.target/i386/pr100066.c 59cbc0324755fe5398f1eeb23440ed0c gcc/testsuite/gcc.target/i386/pr100093.c --- 66220,66233 ---- fab4224ceed336ed6902793909c0c6c2 gcc/testsuite/gcc.target/i386/pieces-memset-48.c b6a5763cac2b72e43f0900c7fbca0740 gcc/testsuite/gcc.target/i386/pieces-memset-49.c e59e962761850423b307c01f720c8e84 gcc/testsuite/gcc.target/i386/pieces-memset-5.c + 587ca57e48d1c64f4cb91b6203512c99 gcc/testsuite/gcc.target/i386/pieces-memset-51.c 9a26520df010055f642c2ece0b8228da gcc/testsuite/gcc.target/i386/pieces-memset-6.c 965472deb34cf62f613f73701201f9b4 gcc/testsuite/gcc.target/i386/pieces-memset-7.c 7c2aa9a23dfc3f65dc77c8d3af0a6a3f gcc/testsuite/gcc.target/i386/pieces-memset-8.c 5a05b363e010e9b9a4fc05f362d42dae gcc/testsuite/gcc.target/i386/pieces-memset-9.c b1d366c21cfdcfacf9854ed6cbfd7bc3 gcc/testsuite/gcc.target/i386/pieces-strcpy-1.c ! cc22fd26fc6861d68ee19f474f5eb5a2 gcc/testsuite/gcc.target/i386/pieces-strcpy-2.c ! b0e41142465073730317837ceeca8c09 gcc/testsuite/gcc.target/i386/pieces-strcpy-3.c 13d06bee88f2ccd2a16effe0c243e61e gcc/testsuite/gcc.target/i386/pow-1.c 08e64611506eb827fa5c5f614b29322b gcc/testsuite/gcc.target/i386/pr100066.c 59cbc0324755fe5398f1eeb23440ed0c gcc/testsuite/gcc.target/i386/pr100093.c *************** d150e8020454e98754c7dabfd41ad2ea gcc/te *** 66376,66383 **** --- 66536,66561 ---- 2f2dbd2c371a9961cb21196f2ee6f88d gcc/testsuite/gcc.target/i386/pr113122-4.c 04b5ce89d67e35431c960a773e44688c gcc/testsuite/gcc.target/i386/pr113921.c f561e51e21b70027e9a545f161c78a39 gcc/testsuite/gcc.target/i386/pr114184.c + ae4ee357225c00ac286e183fee7b266a gcc/testsuite/gcc.target/i386/pr115568.c + 4c9bd5ab4032e6b8dbf245c84e59d76d gcc/testsuite/gcc.target/i386/pr115872.c + 667fbe7bd981494b067a94d4b7aa743c gcc/testsuite/gcc.target/i386/pr116043.c + 5d7ed648796e3bb1badb99e986fd299a gcc/testsuite/gcc.target/i386/pr116512.c + b032673fbd5ea0fa71ec43f67e37cd44 gcc/testsuite/gcc.target/i386/pr116621.c + 15bae7870bdfe5399b1490ea96088982 gcc/testsuite/gcc.target/i386/pr116839.c + 4fd839ad1866642d113d7c4f7474f89f gcc/testsuite/gcc.target/i386/pr116962.c + 873d8965ee038d36a40500e2a179c793 gcc/testsuite/gcc.target/i386/pr117116.c + bd129be2e771c24c9a0830b8a42bbd83 gcc/testsuite/gcc.target/i386/pr117159.c + 13f48febf4f30f9fae29d44fb617cc94 gcc/testsuite/gcc.target/i386/pr117240_avx.c + 056042626d89fadd97a896dd5693a5ae gcc/testsuite/gcc.target/i386/pr117240_avx512f.c + da692b8fe7fe8e3d33b45f3f919da356 gcc/testsuite/gcc.target/i386/pr117296.c + 917d3074e579c1fad9a86cf1657c1ab6 gcc/testsuite/gcc.target/i386/pr117318.c + d9c36e68265950d44ce781ce1be85bf6 gcc/testsuite/gcc.target/i386/pr117357.c + d354c62b8ff60efc0d5983bf81d1bfa4 gcc/testsuite/gcc.target/i386/pr117418-1.c + 60ce35a307c6c720d7d566058b4d7c52 gcc/testsuite/gcc.target/i386/pr117432.c + e12ace984bb5ee071207675ca43c7e58 gcc/testsuite/gcc.target/i386/pr118739.c 991b7f7f44e28179f98bb458fdb69ea6 gcc/testsuite/gcc.target/i386/pr11877-2.c e7f6a568e551d3786797d6f56294b949 gcc/testsuite/gcc.target/i386/pr11877.c + 61d1a6c7aba6d7071f54e24b6dc92da7 gcc/testsuite/gcc.target/i386/pr118776.c b03b1d817538a863277c823b5e4cdf75 gcc/testsuite/gcc.target/i386/pr12092-1.c f99f88a6e994ad6e55e065e41bc58f8f gcc/testsuite/gcc.target/i386/pr12329.c 8951a1fa31f2d45ef9eacfff6a733f77 gcc/testsuite/gcc.target/i386/pr13366.c *************** c8a2893ea0fde8d16222be9c58cb1f46 gcc/te *** 67188,67193 **** --- 67366,67373 ---- 7baa00da5b600cf9ac0059d740da1816 gcc/testsuite/gcc.target/i386/pr69454-2.c 4baed9b88fed94b3bd199c8235745c94 gcc/testsuite/gcc.target/i386/pr69459.c 05855004b849a72af06e7dcbc61536a0 gcc/testsuite/gcc.target/i386/pr69471-3.c + 20a9a210637f79017b23d7b676fe225c gcc/testsuite/gcc.target/i386/pr69482-1.c + 6b0891cd85b97e76852049638e4e042a gcc/testsuite/gcc.target/i386/pr69482-2.c 28bcee77a96d7f6cfe65409040fe5e10 gcc/testsuite/gcc.target/i386/pr69512.c 3e28b4ade390d7c7ac3afa2b0617487e gcc/testsuite/gcc.target/i386/pr69530.c 51f445507ac4ace5b56d6e38e816cc6d gcc/testsuite/gcc.target/i386/pr69551.c *************** b91162801f7d0d6af855bd692e22ab63 gcc/te *** 67694,67699 **** --- 67874,67880 ---- c7fbb8c42391916088505cea2847ff00 gcc/testsuite/gcc.target/i386/pr87918.c 4b54801016bc4b3cc228ac7dd70de407 gcc/testsuite/gcc.target/i386/pr87928.c 4fc2942c48d13b19282e746bb6deb0f5 gcc/testsuite/gcc.target/i386/pr87955.c + 888e51b46121c41e1f289e80df7c57ce gcc/testsuite/gcc.target/i386/pr87984.c ec61cb2764cd0d05b8fd416bac2b290b gcc/testsuite/gcc.target/i386/pr88033.c a720bfe0104feb1cfa40b8ab91dc5f05 gcc/testsuite/gcc.target/i386/pr88070.c b14b816d91744aa96c9da5bad9de427b gcc/testsuite/gcc.target/i386/pr88178.c *************** bcf0d6d51d39f674c2672181211f8783 gcc/te *** 68373,68378 **** --- 68554,68560 ---- 011989a32280bb1aa821f00e7f492898 gcc/testsuite/gcc.target/i386/sse-orps-1.c 9ac73bc009f43ea60db7fc10dec3ab01 gcc/testsuite/gcc.target/i386/sse-os-support.h dc6831587ee7762436a7ac070e187a5d gcc/testsuite/gcc.target/i386/sse-pr101007.c + d575c93e3a64abc3f18f4916f1fcd689 gcc/testsuite/gcc.target/i386/sse-pr116738.c 642da3797fdc5a430e7dffdf36d5a54d gcc/testsuite/gcc.target/i386/sse-rcpps-1.c 717722e6af4d66ee3202cb215f622945 gcc/testsuite/gcc.target/i386/sse-recip-vec.c 3f9ef1b15bd7ed1556ef4a6fc75b7a66 gcc/testsuite/gcc.target/i386/sse-recip.c *************** fc3a18821c52e48c29f54252053988ba gcc/te *** 68945,68950 **** --- 69127,69133 ---- 84b12afcb316a8ec7dce5bea1db67912 gcc/testsuite/gcc.target/i386/tbm-1.c b292dd3bc21c285ba5f3f1bcac0a5139 gcc/testsuite/gcc.target/i386/tbm-2.c 052ea02011f5031dc3a4171aed715a52 gcc/testsuite/gcc.target/i386/tbm-bextri-1.c + d463b6607b227bc8376b031954d58ffb gcc/testsuite/gcc.target/i386/tbm-pr116287.c 4edd7df3f7e7eae5b3e0d3be8a5068e4 gcc/testsuite/gcc.target/i386/testimm-1.c 7188c4d254bb0c4fb66e39b2c8e51711 gcc/testsuite/gcc.target/i386/testimm-10.c ac027496b6114a9f7eb014a0c4cf998a gcc/testsuite/gcc.target/i386/testimm-2.c *************** b94b02f54e2566541edbead974161cd8 gcc/te *** 71190,71195 **** --- 71373,71379 ---- 2f3b0bbee570abb68e2bf91b3f4ef43d gcc/testsuite/gcc.target/powerpc/mma-builtin-7.c 7ff80abf6e1bf3a4c80a83f649959643 gcc/testsuite/gcc.target/powerpc/mma-builtin-8.c 8b6d1c7065bb09caeaafe44d4931e70d gcc/testsuite/gcc.target/powerpc/mma-builtin-9.c + 24d225346acbd6a1813f58b8dde96931 gcc/testsuite/gcc.target/powerpc/mma-builtin-error.c 88617795d710b40cc25cbabe90e45e4e gcc/testsuite/gcc.target/powerpc/mma-double-test.c 57fc310b69598562cbec3535f97fd354 gcc/testsuite/gcc.target/powerpc/mma-single-test.c a271f35c38761fdbb749bf1bec83cfe4 gcc/testsuite/gcc.target/powerpc/mma-supported.c *************** bc8ea782345dbe874b74f42d43945922 gcc/te *** 71516,71521 **** --- 71700,71707 ---- 3d2856a72952743cfd2634473f23222c gcc/testsuite/gcc.target/powerpc/pr105991.c 1ab2f3b15230d62d1557536701b89524 gcc/testsuite/gcc.target/powerpc/pr106016.c 1717ad0418e192e7d5bbcdcc715baa9a gcc/testsuite/gcc.target/powerpc/pr106017.c + b7f505658e736391f1fb218bd7977b0f gcc/testsuite/gcc.target/powerpc/pr106069-1.c + c931d1d7ae559c7f1a38c2e40fb73784 gcc/testsuite/gcc.target/powerpc/pr106069-2.c 77039220fc5a52161837a12ea92d1ea3 gcc/testsuite/gcc.target/powerpc/pr106091.c 19c79cd734687058ce13a5486b78bd77 gcc/testsuite/gcc.target/powerpc/pr106322.c b89eb373488426e128fceff637542836 gcc/testsuite/gcc.target/powerpc/pr106736-1.c *************** d746d0fb9156720298fa3c2071023bbf gcc/te *** 71545,71550 **** --- 71731,71742 ---- c610c8d7cbb111b72025bba844602bd8 gcc/testsuite/gcc.target/powerpc/pr111380-1.c 68b71977f7a24a5a6b3cb45a7941649a gcc/testsuite/gcc.target/powerpc/pr111380-2.c b61eff89fa46bd55405a0700c83058dd gcc/testsuite/gcc.target/powerpc/pr113950.c + 12344387881dc07bc23f4a66e635ea56 gcc/testsuite/gcc.target/powerpc/pr114759-2.c + c2e6a1b23bf6293d877c7cdbc988b959 gcc/testsuite/gcc.target/powerpc/pr114759-3.c + edbd673b54dc453f6adb46e7d7b5d688 gcc/testsuite/gcc.target/powerpc/pr114846.c + 5e2462c89d1f070e8e6bd6ae6deaa4eb gcc/testsuite/gcc.target/powerpc/pr115355.c + d2a0d498fd73b9c4321c054d794a4050 gcc/testsuite/gcc.target/powerpc/pr115389.c + 68e7a002ed920723f1529e366afe30de gcc/testsuite/gcc.target/powerpc/pr116415.c c2f6d6cf82ef4931619d09e10a0a72aa gcc/testsuite/gcc.target/powerpc/pr16155.c 396ae287e72ecdda51bb3157818030a9 gcc/testsuite/gcc.target/powerpc/pr16286.c 198d8a69d2887e8fadcb050d90e21aa6 gcc/testsuite/gcc.target/powerpc/pr16458-1.c *************** c8159472599bdbc1920f30b21821761f gcc/te *** 71857,71862 **** --- 72049,72055 ---- 3cbcbf709dba0c7d2f3ee1bb86a4c1ab gcc/testsuite/gcc.target/powerpc/pr97142.c 18aa6c13663fc57c77c9258b01d06c8b gcc/testsuite/gcc.target/powerpc/pr97267.c 213beaa984952c5e9c8741ff42bef29f gcc/testsuite/gcc.target/powerpc/pr97360.c + 6f417fe4390c81ea54e3227afee2727a gcc/testsuite/gcc.target/powerpc/pr97367.c be1d7456a640bf70727b92bfa00019b7 gcc/testsuite/gcc.target/powerpc/pr98092.c adff3606ba35a019752b04f06365d9ae gcc/testsuite/gcc.target/powerpc/pr98872.c 16ccc7fd43a210703f804ed86b1bbe88 gcc/testsuite/gcc.target/powerpc/pr98914.c *************** b65b6b60679fe5fe589b83fa813950ac gcc/te *** 73263,73268 **** --- 73456,73463 ---- 7768189c94023d287d68251021ad2dee gcc/testsuite/gcc.target/s390/pr106355-2.c a69e5256407f09ac05e2e19ea14c9e15 gcc/testsuite/gcc.target/s390/pr106355-3.c 5680e7515cb52b85f38e10b48d5e6a75 gcc/testsuite/gcc.target/s390/pr106355.h + b3924bf1892d3c296907c61da351118a gcc/testsuite/gcc.target/s390/pr115860-1.c + e282b73f72ab6c2a629448cad8de65a7 gcc/testsuite/gcc.target/s390/pr118835.c 765307a040de72f2f4376b7068d68018 gcc/testsuite/gcc.target/s390/pr20927.c 85f31fb9b4b15529205376d3f6fa385c gcc/testsuite/gcc.target/s390/pr24624.c 7adacbd67601dc0845e556e5632cd718 gcc/testsuite/gcc.target/s390/pr27661.c *************** daf32d359b4f5080aef58859b29870b9 gcc/te *** 73421,73427 **** cd87621c97dea4b44990c53afb0e84f0 gcc/testsuite/gcc.target/s390/vector/fp-signedint-convert-1.c 7555086a7e981f40ab0a053876683cc4 gcc/testsuite/gcc.target/s390/vector/fp-unsignedint-convert-1.c 8a6c46e492362a7ae789676034c82a23 gcc/testsuite/gcc.target/s390/vector/int128-1.c ! cfd1d2dc2bb2e6e67cead63e9e5b6e04 gcc/testsuite/gcc.target/s390/vector/long-double-asm-abi.c 7b57f62cb279490843705e46351b77dd gcc/testsuite/gcc.target/s390/vector/long-double-asm-commutative.c d9717b93ea1bc6140ba0284c50adb76b gcc/testsuite/gcc.target/s390/vector/long-double-asm-earlyclobber.c e3dbf48af3006ce478179091e800da73 gcc/testsuite/gcc.target/s390/vector/long-double-asm-fprvrmem.c --- 73616,73622 ---- cd87621c97dea4b44990c53afb0e84f0 gcc/testsuite/gcc.target/s390/vector/fp-signedint-convert-1.c 7555086a7e981f40ab0a053876683cc4 gcc/testsuite/gcc.target/s390/vector/fp-unsignedint-convert-1.c 8a6c46e492362a7ae789676034c82a23 gcc/testsuite/gcc.target/s390/vector/int128-1.c ! 694840e6548b0c0deef3e89fd571892a gcc/testsuite/gcc.target/s390/vector/long-double-asm-abi.c 7b57f62cb279490843705e46351b77dd gcc/testsuite/gcc.target/s390/vector/long-double-asm-commutative.c d9717b93ea1bc6140ba0284c50adb76b gcc/testsuite/gcc.target/s390/vector/long-double-asm-earlyclobber.c e3dbf48af3006ce478179091e800da73 gcc/testsuite/gcc.target/s390/vector/long-double-asm-fprvrmem.c *************** a3bf933038b58e4d541e60748b47629b gcc/te *** 73456,73462 **** b1f6b9b6a5afaf7103d770ae87762260 gcc/testsuite/gcc.target/s390/vector/long-double-to-float.c 7894fd15c9ad66ed3bb637ac9fb4499d gcc/testsuite/gcc.target/s390/vector/long-double-to-i16.c 125443693bd86803a7d78e258a91f334 gcc/testsuite/gcc.target/s390/vector/long-double-to-i32.c ! e21d178b02e384164a81caf3ffee7b0b gcc/testsuite/gcc.target/s390/vector/long-double-to-i64.c 693a76edc110ca1f6149d64c15447588 gcc/testsuite/gcc.target/s390/vector/long-double-to-i8.c 83521187ebf9ff9a612ae879e97d69c9 gcc/testsuite/gcc.target/s390/vector/long-double-to-u16.c c2be2c1316a4a96cdd7687813bff0db1 gcc/testsuite/gcc.target/s390/vector/long-double-to-u32.c --- 73651,73657 ---- b1f6b9b6a5afaf7103d770ae87762260 gcc/testsuite/gcc.target/s390/vector/long-double-to-float.c 7894fd15c9ad66ed3bb637ac9fb4499d gcc/testsuite/gcc.target/s390/vector/long-double-to-i16.c 125443693bd86803a7d78e258a91f334 gcc/testsuite/gcc.target/s390/vector/long-double-to-i32.c ! 0eed6004b7bc93fde7e8183202dffa08 gcc/testsuite/gcc.target/s390/vector/long-double-to-i64.c 693a76edc110ca1f6149d64c15447588 gcc/testsuite/gcc.target/s390/vector/long-double-to-i8.c 83521187ebf9ff9a612ae879e97d69c9 gcc/testsuite/gcc.target/s390/vector/long-double-to-u16.c c2be2c1316a4a96cdd7687813bff0db1 gcc/testsuite/gcc.target/s390/vector/long-double-to-u32.c *************** c388e8e709c00e2cb14b83a7bcb1db96 gcc/te *** 73603,73608 **** --- 73798,73804 ---- 35e87e60957f9b00691107426abfa992 gcc/testsuite/gcc.target/s390/zvector/get-element-bswap-3.c 4abdf0afcb959d37baa8b81d5308c265 gcc/testsuite/gcc.target/s390/zvector/get-element-bswap-4.c 13199189797f1cfdb8952aba604e6159 gcc/testsuite/gcc.target/s390/zvector/imm-range-error-1.c + d1469ef79e7de046a5a0d7120bc3edf4 gcc/testsuite/gcc.target/s390/zvector/pr114676.c 7d0eb00954092ab19d710323c872dd2a gcc/testsuite/gcc.target/s390/zvector/pr79893.c 8bc7e55288af53eddbd5437d08f5f9a1 gcc/testsuite/gcc.target/s390/zvector/pr82317.c c5f2f4df3f7c11977663ad182d69c2a7 gcc/testsuite/gcc.target/s390/zvector/pr82322.c *************** f57bfa4edc494fecd4284a542f695d0f gcc/te *** 74740,74745 **** --- 74936,74945 ---- 37e2ca0f4e06cb14e92a710579518a60 gcc/testsuite/gdc.dg/debug/dwarf2/langdw2.d db93819c7b52f4f6ea4f42fed3e0a48a gcc/testsuite/gdc.dg/debug/dwarf2/langdw3.d 8527933fbf2d9fb7c82fd63435063168 gcc/testsuite/gdc.dg/debug/dwarf2/pr98067.d + b4f9c61a9b5b383751c01b4fe84cb747 gcc/testsuite/gdc.dg/debug/imports/m119817/a.d + 07b707a4e1481ec8da698665df0a25d9 gcc/testsuite/gdc.dg/debug/imports/m119817/b.d + bcf389e3992a960c831b1dafe53a539c gcc/testsuite/gdc.dg/debug/imports/m119817/package.d + 5a8822cd928a2d3538e6c92ad6d8ad3f gcc/testsuite/gdc.dg/debug/pr119817.d 0121ae6408f107a6bf6f915c24102bd3 gcc/testsuite/gdc.dg/debug/trivial.d 513a9ff1eab2fe60e403ca1f13490d25 gcc/testsuite/gdc.dg/dg.exp 143caa33650ff48f316c9f2da298fce3 gcc/testsuite/gdc.dg/extern-c++/extern-c++.exp *************** f0bb47c02bfbb905cf063586cccf248d gcc/te *** 74845,74854 **** --- 75045,75057 ---- 7124a74c780cc3de82649fa56120e037 gcc/testsuite/gdc.dg/pr110514d.d 65d0d00a4d68ddc7476ea00fc7bcf91a gcc/testsuite/gdc.dg/pr110712.d a5d08c3adb631046916a34188c9fa67d gcc/testsuite/gdc.dg/pr110959.d + ddd530df4f1d7e7128b4953096cd25ce gcc/testsuite/gdc.dg/pr111650.d 5bf4c18033711e862e1b35b2017684a3 gcc/testsuite/gdc.dg/pr112270.d a2d402e0596a4abb1dc6e25b11e9aa9c gcc/testsuite/gdc.dg/pr112285.d 83f6a6a53d8587bd4243109d22d0b9f5 gcc/testsuite/gdc.dg/pr112290.d 9b63f428c6cdc3f7abd69df6a3077880 gcc/testsuite/gdc.dg/pr113125.d + 204042c2eb4ac43dee360b7272aee369 gcc/testsuite/gdc.dg/pr116961.d + 0b4ca5d336606fc94e656b8731b0a78e gcc/testsuite/gdc.dg/pr119139.d d32aa8ed5ea10931be4ddb5bb9e863d8 gcc/testsuite/gdc.dg/pr89017.d 53fa8db94d4ca3fc9ba83769733dc0e7 gcc/testsuite/gdc.dg/pr89041.d 6c316b13f71ea31fcada56b58a41ebd1 gcc/testsuite/gdc.dg/pr89042a.d *************** a63f3b63c344065bc882c726d79ee3f1 gcc/te *** 78286,78291 **** --- 78489,78495 ---- b760c0e7d084ffeb0648627187c08bb7 gcc/testsuite/gdc.test/runnable/test23083.d 138e2256ce1c1f5109950477b38499c7 gcc/testsuite/gdc.test/runnable/test23181.d ed4925b273407fe3c1b1f148d9bb1dac gcc/testsuite/gdc.test/runnable/test23234.d + 320c8d02d889b47038ffa0c7a664676a gcc/testsuite/gdc.test/runnable/test23514.d 3d69f9a9a0381cb5e164fd3a019c94ae gcc/testsuite/gdc.test/runnable/test24.d 19afe194dcce9c253540c7831e8f23a2 gcc/testsuite/gdc.test/runnable/test27.d 907370082d6caa9ac241999ae9143c37 gcc/testsuite/gdc.test/runnable/test28.d *************** c9785c9fd5f854a6bb32eb226663d4a6 gcc/te *** 79879,79885 **** 52155afcdc7f61593bf6506ef7ca2348 gcc/testsuite/gfortran.dg/character_comparison_8.f90 e095a5844fa090e86a92405f5c0b0dba gcc/testsuite/gfortran.dg/character_comparison_9.f90 3c251099889c78e5e0c76fe96288838d gcc/testsuite/gfortran.dg/character_mismatch.f90 ! 9a59817952ffe39d8f72423786ec1e4b gcc/testsuite/gfortran.dg/character_workout_1.f90 89ddbaa606b83db4b331a67d0037b847 gcc/testsuite/gfortran.dg/character_workout_4.f90 50a996cd9c41e5c61f567b57a9d68a2d gcc/testsuite/gfortran.dg/charlen_01.f90 df26b34bc7ab97ed1f739b2ee67c8985 gcc/testsuite/gfortran.dg/charlen_02.f90 --- 80083,80089 ---- 52155afcdc7f61593bf6506ef7ca2348 gcc/testsuite/gfortran.dg/character_comparison_8.f90 e095a5844fa090e86a92405f5c0b0dba gcc/testsuite/gfortran.dg/character_comparison_9.f90 3c251099889c78e5e0c76fe96288838d gcc/testsuite/gfortran.dg/character_mismatch.f90 ! 28d44be730e9e79e92d600030871dcd8 gcc/testsuite/gfortran.dg/character_workout_1.f90 89ddbaa606b83db4b331a67d0037b847 gcc/testsuite/gfortran.dg/character_workout_4.f90 50a996cd9c41e5c61f567b57a9d68a2d gcc/testsuite/gfortran.dg/charlen_01.f90 df26b34bc7ab97ed1f739b2ee67c8985 gcc/testsuite/gfortran.dg/charlen_02.f90 *************** f8a4ca21ccf302214564ec0d59e8fd51 gcc/te *** 80402,80407 **** --- 80606,80612 ---- 6c5fde96cb793d7badc2635511fec23b gcc/testsuite/gfortran.dg/cray_pointers_10.f90 74dd2b09e2326c23ec50a90bf151d3b9 gcc/testsuite/gfortran.dg/cray_pointers_11.f90 14819713d383cb1fa792e93981cec2ad gcc/testsuite/gfortran.dg/cray_pointers_12.f90 + 1de3372d6065323b2d05753364b5310b gcc/testsuite/gfortran.dg/cray_pointers_13.f90 e973e5ebed82feb1ac5ff4990efdfe76 gcc/testsuite/gfortran.dg/cray_pointers_2.f90 49ea5999b0fbbd860fa0b8b1e6a01397 gcc/testsuite/gfortran.dg/cray_pointers_3.f90 c00f3a9d2f365b0dab03e2415fabbc16 gcc/testsuite/gfortran.dg/cray_pointers_4.f90 *************** b364b3ff21603caf412b448a464408d0 gcc/te *** 83580,83585 **** --- 83785,83791 ---- ff989302c0eaa3dd486cbb3c28260163 gcc/testsuite/gfortran.dg/operator_7.f90 42e0fc1830b7ed49ee54d17cf4cbdabd gcc/testsuite/gfortran.dg/operator_c1202.f90 22f7aca59da7d6e1f570808dbd33aea4 gcc/testsuite/gfortran.dg/optional_absent_1.f90 + 3051f2a57ae3b2d6b9734b75fe35f835 gcc/testsuite/gfortran.dg/optional_absent_13.f90 312210dc1ff1e05299f1119ee49985a6 gcc/testsuite/gfortran.dg/optional_absent_2.f90 4550d5bd4f2bf82443d2fabda1853aa1 gcc/testsuite/gfortran.dg/optional_absent_3.f90 7c0836bf69a838c108ff2372276a09d4 gcc/testsuite/gfortran.dg/optional_absent_4.f90 *************** a3ab8fbef738997039cfd45f350461a3 gcc/te *** 83774,83779 **** --- 83980,83986 ---- 77eca811eac1f80edb0f33c68ac0c4d3 gcc/testsuite/gfortran.dg/power_7.f90 457d6bb30d331f4d3250628bdae53dc3 gcc/testsuite/gfortran.dg/power_8.f90 e13b5dd50c332ea865cb6fabb5f79f29 gcc/testsuite/gfortran.dg/pr100154.f90 + e08828a7d864f8531a58aa25e1b58894 gcc/testsuite/gfortran.dg/pr100273.f90 fc0ae38e4fdc2d7761aba57181c97b51 gcc/testsuite/gfortran.dg/pr100551.f90 17f130e627232745d6279696b6984514 gcc/testsuite/gfortran.dg/pr100949.f90 3838974931fe610997470a0a7f2e3a97 gcc/testsuite/gfortran.dg/pr100950.f90 *************** ed294cde0b27b346f37fa7a32bf91ea7 gcc/te *** 83849,83857 **** --- 84056,84071 ---- 1836eed7a2cdfcdba4e590204735e288 gcc/testsuite/gfortran.dg/pr108502.f90 bb19038b0b7c42c6403475e34570ae3d gcc/testsuite/gfortran.dg/pr108527.f90 a367beafff806aa88b45192d28091201 gcc/testsuite/gfortran.dg/pr108529.f90 + 56971b3b5ba5a0aa6c2a3044027e0494 gcc/testsuite/gfortran.dg/pr108889.f90 + 1ba2d726e7fb19c75c89aeddd046ab55 gcc/testsuite/gfortran.dg/pr109345.f90 898c3ea8360d1452c5f815b15dc6f6f8 gcc/testsuite/gfortran.dg/pr110221.f 6176c5192c44068787a0e803e38dacbd gcc/testsuite/gfortran.dg/pr111880.f90 d3d77a4c149cf5358eb97935171795fb gcc/testsuite/gfortran.dg/pr114739.f90 + 9d60e354f12f632752ec6e7da4915d39 gcc/testsuite/gfortran.dg/pr117763.f90 + 8f53cbad5581d72a5d0420f900cee217 gcc/testsuite/gfortran.dg/pr120191_1.f90 + 4787146fc7e8109511f0d22d056e2127 gcc/testsuite/gfortran.dg/pr120191_2.f90 + 05457962d41eef6a41a3de889144d78a gcc/testsuite/gfortran.dg/pr120191_3.f90 + b1cb2c9a52574c2df5df49bd13ee7e5d gcc/testsuite/gfortran.dg/pr120196.f90 984f8307f36d56a0b48b5acce2dd5eb5 gcc/testsuite/gfortran.dg/pr12884.f 64075248b9d1bffd6f380bb4e2a6eae0 gcc/testsuite/gfortran.dg/pr15129.f90 e9cbd51db4e16292fc5dd1fead2e5a49 gcc/testsuite/gfortran.dg/pr15140.f90 *************** c41bc69547a048a19ccb1adc57ce3bca gcc/te *** 84314,84319 **** --- 84528,84534 ---- 6d593814cbde3b81eb21e9501a48bac2 gcc/testsuite/gfortran.dg/pr84565.f90 7cb3611bc701529711c1f596921afaa3 gcc/testsuite/gfortran.dg/pr84734.f90 a4758a568b5ef9b888cb911bc4cdd259 gcc/testsuite/gfortran.dg/pr84784.f90 + 41e0ad3a735d1f75c8f837590c9d8293 gcc/testsuite/gfortran.dg/pr84868.f90 cc82665e1d54c6a2d5a100788c474853 gcc/testsuite/gfortran.dg/pr84957.f90 42d21294436ebefdc995a697f0266fd9 gcc/testsuite/gfortran.dg/pr85082.f90 4355c9f07079d67c1134f6106f8fcb0b gcc/testsuite/gfortran.dg/pr85138_1.f90 *************** c3fb068a6513a1b586c18e7f98aee0e3 gcc/te *** 84835,84840 **** --- 85050,85056 ---- deda23d08864e8fd5de581142c84d0c3 gcc/testsuite/gfortran.dg/ptr_func_assign_3.f08 f19a3e696f77f97e6aa2d83addab4ac4 gcc/testsuite/gfortran.dg/ptr_func_assign_4.f08 8610f62acf79505ce9c955532780ae20 gcc/testsuite/gfortran.dg/ptr_func_assign_5.f08 + 34c911109f23bf944fad22240fbb32c4 gcc/testsuite/gfortran.dg/ptr_func_assign_6.f08 1bdd54ec3c3cda30429d4442e8a439e5 gcc/testsuite/gfortran.dg/public_private_module.f90 f8e80e36d7b5c3c5e55ab57d88d798e6 gcc/testsuite/gfortran.dg/public_private_module_10.f90 53bfb4bd5468c34fc1b1a819ebc75855 gcc/testsuite/gfortran.dg/public_private_module_2.f90 *************** c8b0d6393a41cf9eb55a5d2e1b706da5 gcc/te *** 85332,85337 **** --- 85548,85554 ---- b049a93bb885fff9b901963c525f8f7a gcc/testsuite/gfortran.dg/string_array_constructor_1.f90 13d6f88aeeff911702e36d2e3dc09715 gcc/testsuite/gfortran.dg/string_array_constructor_2.f90 c42a30583403fb080a182c51bf903430 gcc/testsuite/gfortran.dg/string_array_constructor_3.f90 + d21fdcf13cb627285fde4b89858f0a2c gcc/testsuite/gfortran.dg/string_array_constructor_4.f90 31ce36c8c330d44a992ca049d1676a77 gcc/testsuite/gfortran.dg/string_assign_1.f90 6c2109b0fba944cce6055da135dd7fc7 gcc/testsuite/gfortran.dg/string_assign_2.f90 2b6e51ff41746a997a9d452462485739 gcc/testsuite/gfortran.dg/string_compare_1.f90 *************** e67a4a11f35c66e08fb4bb3279634a7a gcc/te *** 85753,85758 **** --- 85970,85976 ---- 6fac87544cba607bd825cef815200556 gcc/testsuite/gfortran.dg/use_rename_1.f90 308a35fc4732b520bfd71e20221425a5 gcc/testsuite/gfortran.dg/use_rename_10.f90 52e1f158e101567519db0f087abec0ea gcc/testsuite/gfortran.dg/use_rename_11.f90 + 70a2a320617593688637c5dd834680a9 gcc/testsuite/gfortran.dg/use_rename_13.f90 7047ce88a57d708d3d2c2ac3c3ca337e gcc/testsuite/gfortran.dg/use_rename_2.f90 56d36b08080e432e1860759131695014 gcc/testsuite/gfortran.dg/use_rename_3.f90 4c6c9f47b5091f92496b13e280371057 gcc/testsuite/gfortran.dg/use_rename_4.f90 *************** da098733ad0c559d77d5e016d5cc3120 gcc/te *** 87618,87623 **** --- 87836,87842 ---- b0752d6fc68f640a84237fcef9762258 gcc/testsuite/gnat.dg/machine_attr1.adb 2ae11fd4a1acf9b36a65534e58e92abb gcc/testsuite/gnat.dg/machine_attr1.ads cc1ed6ae65ad5b0d5af3f2f3767e091e gcc/testsuite/gnat.dg/machine_code1.adb + d3f7e556abc113803210eb76117456b0 gcc/testsuite/gnat.dg/matrix1.adb ebbd44798662a03d43697c3bec8dc4b4 gcc/testsuite/gnat.dg/max_align.adb edfa22639b0fb30d009fbc732d8cecad gcc/testsuite/gnat.dg/max_size.adb cffc6067b6c163f5c2e06406b2632c70 gcc/testsuite/gnat.dg/max_size_pkg.ads *************** abe14a1ac8ff19714a07b9e460b5fa25 gcc/te *** 88266,88271 **** --- 88485,88491 ---- 8a35e508f92ae8cfc2bf7f553c3a11da gcc/testsuite/gnat.dg/specs/array5_pkg1.ads 65f73b5444cd39e6751236739aa9ae10 gcc/testsuite/gnat.dg/specs/array5_pkg2-g.ads 0b740b5110495d8d3401e65ea953524e gcc/testsuite/gnat.dg/specs/array5_pkg2.ads + bfb26e1cdacb2ba2f03eb976978bb43f gcc/testsuite/gnat.dg/specs/array7.ads 18531dc960411dab820aa7279791f03a gcc/testsuite/gnat.dg/specs/array_no_def_init.ads 2d9efbd53366881b4d205fa4d00c2cc9 gcc/testsuite/gnat.dg/specs/atomic1.ads 483b6cbd58c1c8ac9dacb4ab3aac99bb gcc/testsuite/gnat.dg/specs/atomic2.ads *************** bc790bd930f8c4f971b8268bdda83659 gcc/te *** 88316,88321 **** --- 88536,88544 ---- 085a1214c06b4e9495c47b56f30e6cd3 gcc/testsuite/gnat.dg/specs/formal_type.ads b605c919a473b8d6808dd232aa7eaf49 gcc/testsuite/gnat.dg/specs/gen_interface.ads 4830454a8335e61b1876284f60de9782 gcc/testsuite/gnat.dg/specs/gen_interface_p.ads + 84bbd54b835597ff50d8d9c0c1ed6128 gcc/testsuite/gnat.dg/specs/generic_inst2-child1.ads + acb50fb5dcaeadfaa1d06f3a291ad5ac gcc/testsuite/gnat.dg/specs/generic_inst2-child2.ads + 26c02326292bb6ec71f4f8278f140bff gcc/testsuite/gnat.dg/specs/generic_inst2.ads 484402f090540a3714934de7a830cc2f gcc/testsuite/gnat.dg/specs/genericppc.ads 5fadbbff25531c82473d756d722cd174 gcc/testsuite/gnat.dg/specs/gnati.ads f0f859863b2bb6251359cf35dc6ffbf5 gcc/testsuite/gnat.dg/specs/iface_eq_test-child.ads *************** a3c51194521aeaec30746bcd09540ded gcc/te *** 91115,91121 **** fe565ed92d0666a7a8344d516a0fc123 gcc/testsuite/lib/scanwpaipa.exp cbf733ca1a40fb4aabb15514b6bb6bd9 gcc/testsuite/lib/target-libpath.exp aa367b5d414f9485192ae52d35e25660 gcc/testsuite/lib/target-supports-dg.exp ! f445a820a5c463439decaacfe3d072e4 gcc/testsuite/lib/target-supports.exp 3b5645e1702774baa233a5e5076a70ad gcc/testsuite/lib/target-utils.exp 4632a9469eaaac6463c128b7895d3813 gcc/testsuite/lib/timeout-dg.exp 01d2447cc2594c0de781959c09d306fa gcc/testsuite/lib/timeout.exp --- 91338,91344 ---- fe565ed92d0666a7a8344d516a0fc123 gcc/testsuite/lib/scanwpaipa.exp cbf733ca1a40fb4aabb15514b6bb6bd9 gcc/testsuite/lib/target-libpath.exp aa367b5d414f9485192ae52d35e25660 gcc/testsuite/lib/target-supports-dg.exp ! 6ffaaf521785658dee7e9f67ebbe7310 gcc/testsuite/lib/target-supports.exp 3b5645e1702774baa233a5e5076a70ad gcc/testsuite/lib/target-utils.exp 4632a9469eaaac6463c128b7895d3813 gcc/testsuite/lib/timeout-dg.exp 01d2447cc2594c0de781959c09d306fa gcc/testsuite/lib/timeout.exp *************** a1093b7b82e90c0dd6456268aa31621d gcc/tr *** 92170,92185 **** cabad81a3b1ae37ee86359e588d98084 gcc/trans-mem.h b6cd8503e8e729887a888e71c4c83388 gcc/tree-affine.cc d706f275e815b64b84a5d17ace94dfe1 gcc/tree-affine.h ! e193da775481c3e0f0f53f8b068842f8 gcc/tree-call-cdce.cc b157b4e7044f8a4b50066404351184e9 gcc/tree-cfg.cc 5e264bf7338d9355becf920736f480a0 gcc/tree-cfg.h 72f00c7f7591ce4a752bef21fe1956d3 gcc/tree-cfgcleanup.cc 807a86834fad748a2be8d13d39cde258 gcc/tree-cfgcleanup.h ! 45976a7b0f8b677cfc8aba8470270dc1 gcc/tree-chrec.cc a2daa87c3a6e418c66574ac39c4b15e0 gcc/tree-chrec.h 2be27b22e3169b45888e9b65dabe685b gcc/tree-complex.cc df961ddd006ed4d7ac5a75e47f26773d gcc/tree-core.h ! 19c2217edbc8fb256bc9c9dd528898da gcc/tree-data-ref.cc a949c26e25237c08b9ccd6fe9b8b9bc5 gcc/tree-data-ref.h 2b823bfa5d526de1e9c434480c0ec1a1 gcc/tree-dfa.cc 0b6bc9f4562b6d4d959636f818032072 gcc/tree-dfa.h --- 92393,92408 ---- cabad81a3b1ae37ee86359e588d98084 gcc/trans-mem.h b6cd8503e8e729887a888e71c4c83388 gcc/tree-affine.cc d706f275e815b64b84a5d17ace94dfe1 gcc/tree-affine.h ! 12c05871c6fdf9fb0feb66cf73d41d99 gcc/tree-call-cdce.cc b157b4e7044f8a4b50066404351184e9 gcc/tree-cfg.cc 5e264bf7338d9355becf920736f480a0 gcc/tree-cfg.h 72f00c7f7591ce4a752bef21fe1956d3 gcc/tree-cfgcleanup.cc 807a86834fad748a2be8d13d39cde258 gcc/tree-cfgcleanup.h ! 19dea979c4fcc9a219fd85a7231f8a29 gcc/tree-chrec.cc a2daa87c3a6e418c66574ac39c4b15e0 gcc/tree-chrec.h 2be27b22e3169b45888e9b65dabe685b gcc/tree-complex.cc df961ddd006ed4d7ac5a75e47f26773d gcc/tree-core.h ! b9d6d832d9935d581721a4923c5da75b gcc/tree-data-ref.cc a949c26e25237c08b9ccd6fe9b8b9bc5 gcc/tree-data-ref.h 2b823bfa5d526de1e9c434480c0ec1a1 gcc/tree-dfa.cc 0b6bc9f4562b6d4d959636f818032072 gcc/tree-dfa.h *************** a949c26e25237c08b9ccd6fe9b8b9bc5 gcc/tr *** 92188,92194 **** 2ff390cffec4ce4eef19e05125c9946f gcc/tree-diagnostic.h 2e70e020a97c25728029c911e1919869 gcc/tree-dump.cc 25db3aa3376f8948cba551f5b4567cc1 gcc/tree-dump.h ! 8430fffa14b68eacf1bafde16d833508 gcc/tree-eh.cc e35c2d4712dafbb07acf21e1b9026b1f gcc/tree-eh.h 34e742d0ff51ce5aad7049bb9eb7e26e gcc/tree-emutls.cc 7c2944ef15a9a1f9fb4edc1838e43cd4 gcc/tree-hash-traits.h --- 92411,92417 ---- 2ff390cffec4ce4eef19e05125c9946f gcc/tree-diagnostic.h 2e70e020a97c25728029c911e1919869 gcc/tree-dump.cc 25db3aa3376f8948cba551f5b4567cc1 gcc/tree-dump.h ! e216dfe1bd737f8b5d1ec962aadf0157 gcc/tree-eh.cc e35c2d4712dafbb07acf21e1b9026b1f gcc/tree-eh.h 34e742d0ff51ce5aad7049bb9eb7e26e gcc/tree-emutls.cc 7c2944ef15a9a1f9fb4edc1838e43cd4 gcc/tree-hash-traits.h *************** f755ad1bab755167011c5bfecdd6769a gcc/tr *** 92201,92207 **** 322b9d77ac824db5c790f3c3b67ace47 gcc/tree-into-ssa.h d9f8288dc44be70602329547ca0e049b gcc/tree-iterator.cc 2b518733b893d8a6df3880d3907c179c gcc/tree-iterator.h ! ecf1528a02ce3abefdc62d66de01444c gcc/tree-loop-distribution.cc 688e3e148ea8903672d38101ae6fe6b8 gcc/tree-nested.cc 69c73b03308d3ca47af9e15c750ba7e8 gcc/tree-nested.h 242fbbf3b18e8eecaca863253b01cb78 gcc/tree-nrv.cc --- 92424,92430 ---- 322b9d77ac824db5c790f3c3b67ace47 gcc/tree-into-ssa.h d9f8288dc44be70602329547ca0e049b gcc/tree-iterator.cc 2b518733b893d8a6df3880d3907c179c gcc/tree-iterator.h ! fd168da8d3ccba8c6646cfc533acafa5 gcc/tree-loop-distribution.cc 688e3e148ea8903672d38101ae6fe6b8 gcc/tree-nested.cc 69c73b03308d3ca47af9e15c750ba7e8 gcc/tree-nested.h 242fbbf3b18e8eecaca863253b01cb78 gcc/tree-nrv.cc *************** bee23ec1af17a7d796af14ca70f8dc46 gcc/tr *** 92220,92255 **** 946fb99ef28d9b8456c053492adf3d3f gcc/tree-profile.cc d3f86577bf5d45cdd84ea0e9e35dc52e gcc/tree-scalar-evolution.cc f5e09b2dd6f2fef9f16a58b4cd348400 gcc/tree-scalar-evolution.h ! e934b1c86118e1814be6e8a8ac39b135 gcc/tree-sra.cc 22ad2a6946f74c4f2e7665952622d9d0 gcc/tree-sra.h a4f99ae3557e1161cd896d23217b56a4 gcc/tree-ssa-address.cc 4233bdbcb0d4183c9631eebafa6f4820 gcc/tree-ssa-address.h 5daf63c693503c3da59da196d885d1e6 gcc/tree-ssa-alias-compare.h ! 00863b99be56c3e8bd536dc74bdb5411 gcc/tree-ssa-alias.cc 9693c083b57172a5de1c03311467b54f gcc/tree-ssa-alias.h ! a0cea7e64f6a07c2f3ad60bcc122e610 gcc/tree-ssa-ccp.cc 038e40c57d9c925b2f2ab27ce65aec68 gcc/tree-ssa-ccp.h d0589077e360719205f673fa28e27473 gcc/tree-ssa-coalesce.cc 7df6905ad76540fc0ba6958ce894a5a4 gcc/tree-ssa-coalesce.h b5611be2889ac60f8358352f44be0eac gcc/tree-ssa-copy.cc 600ccda4f9fe22cfd78b024002a018a7 gcc/tree-ssa-dce.cc d9087990e3ccbe29be4cb2d6fbcd0d6b gcc/tree-ssa-dce.h ! 38e1cf32b4e25aa2758552af48728c9f gcc/tree-ssa-dom.cc f163bc3e9903da9f8045d8369ae0a861 gcc/tree-ssa-dom.h ! 9e92b12de18963b66bd682029be71aea gcc/tree-ssa-dse.cc 195877f983e0a31af6302aed94fa678f gcc/tree-ssa-dse.h ! 2f7eb6688251cdb496e80893d05208fe gcc/tree-ssa-forwprop.cc fa6f9132426613883a9a158014b2a7ea gcc/tree-ssa-ifcombine.cc 2583b0542c537376d7d4e52a3a3ce910 gcc/tree-ssa-live.cc 1d67651fbc8ab600f45126f148f4c12b gcc/tree-ssa-live.h b584536fc99eb576420b3ef5e3780c49 gcc/tree-ssa-loop-ch.cc 7bb09dec4a6ae87dd19896ba77ac4b4b gcc/tree-ssa-loop-im.cc 595f63705e53fd8387b90a8ee3692ef5 gcc/tree-ssa-loop-ivcanon.cc ! 7c0b4c9c9a41e57bdc77ff9cfb33b9bb gcc/tree-ssa-loop-ivopts.cc 3f30c52cd6fd7f965316dafa58373681 gcc/tree-ssa-loop-ivopts.h ef807a1da16d0fd13015b7232cea5f9f gcc/tree-ssa-loop-manip.cc d8ad877acd553ebd0bd25b5694a3faff gcc/tree-ssa-loop-manip.h ! ee6dcea06f13f2e4ffeef5eb7dca0dbb gcc/tree-ssa-loop-niter.cc 7846c6b4a5c247d1cbdae546020ad25f gcc/tree-ssa-loop-niter.h 508555a8a882dcaee120afeeada6f95d gcc/tree-ssa-loop-prefetch.cc 757d0efec651140b554d079e79fd5977 gcc/tree-ssa-loop-split.cc --- 92443,92478 ---- 946fb99ef28d9b8456c053492adf3d3f gcc/tree-profile.cc d3f86577bf5d45cdd84ea0e9e35dc52e gcc/tree-scalar-evolution.cc f5e09b2dd6f2fef9f16a58b4cd348400 gcc/tree-scalar-evolution.h ! e9fae9939f9a5d14b26478a649025c7f gcc/tree-sra.cc 22ad2a6946f74c4f2e7665952622d9d0 gcc/tree-sra.h a4f99ae3557e1161cd896d23217b56a4 gcc/tree-ssa-address.cc 4233bdbcb0d4183c9631eebafa6f4820 gcc/tree-ssa-address.h 5daf63c693503c3da59da196d885d1e6 gcc/tree-ssa-alias-compare.h ! dc0aa437d25ec8ade9764d659b50b101 gcc/tree-ssa-alias.cc 9693c083b57172a5de1c03311467b54f gcc/tree-ssa-alias.h ! 23fb697a5ea55d90dd0c107ea0e9fda7 gcc/tree-ssa-ccp.cc 038e40c57d9c925b2f2ab27ce65aec68 gcc/tree-ssa-ccp.h d0589077e360719205f673fa28e27473 gcc/tree-ssa-coalesce.cc 7df6905ad76540fc0ba6958ce894a5a4 gcc/tree-ssa-coalesce.h b5611be2889ac60f8358352f44be0eac gcc/tree-ssa-copy.cc 600ccda4f9fe22cfd78b024002a018a7 gcc/tree-ssa-dce.cc d9087990e3ccbe29be4cb2d6fbcd0d6b gcc/tree-ssa-dce.h ! 6a2887a077e63977df87a57c0d8ad12b gcc/tree-ssa-dom.cc f163bc3e9903da9f8045d8369ae0a861 gcc/tree-ssa-dom.h ! f9cc18973c8771a0395d574e80490210 gcc/tree-ssa-dse.cc 195877f983e0a31af6302aed94fa678f gcc/tree-ssa-dse.h ! cf9d9f7f06398e7dba1ff23357f34d39 gcc/tree-ssa-forwprop.cc fa6f9132426613883a9a158014b2a7ea gcc/tree-ssa-ifcombine.cc 2583b0542c537376d7d4e52a3a3ce910 gcc/tree-ssa-live.cc 1d67651fbc8ab600f45126f148f4c12b gcc/tree-ssa-live.h b584536fc99eb576420b3ef5e3780c49 gcc/tree-ssa-loop-ch.cc 7bb09dec4a6ae87dd19896ba77ac4b4b gcc/tree-ssa-loop-im.cc 595f63705e53fd8387b90a8ee3692ef5 gcc/tree-ssa-loop-ivcanon.cc ! 619f876cbbdc3e115b71de7162f9e2cd gcc/tree-ssa-loop-ivopts.cc 3f30c52cd6fd7f965316dafa58373681 gcc/tree-ssa-loop-ivopts.h ef807a1da16d0fd13015b7232cea5f9f gcc/tree-ssa-loop-manip.cc d8ad877acd553ebd0bd25b5694a3faff gcc/tree-ssa-loop-manip.h ! 53abac22df377a79626194f0b540d1f9 gcc/tree-ssa-loop-niter.cc 7846c6b4a5c247d1cbdae546020ad25f gcc/tree-ssa-loop-niter.h 508555a8a882dcaee120afeeada6f95d gcc/tree-ssa-loop-prefetch.cc 757d0efec651140b554d079e79fd5977 gcc/tree-ssa-loop-split.cc *************** fd8e7ab6072c9318249e544a02ca3d0d gcc/tr *** 92260,92280 **** f0db024320e40ac1ac8d450e8be90f02 gcc/tree-ssa-math-opts.h 99fc0aa9825a52457c111c1df6c54358 gcc/tree-ssa-operands.cc 45c8305b030ec69139d01c326f9a1133 gcc/tree-ssa-operands.h ! 7729ecf4fe5c29c2a3c0d87f651e42fe gcc/tree-ssa-phiopt.cc 35e3309df2c090d12494914f49fc1e1e gcc/tree-ssa-phiprop.cc f9e799527e96fb43c96edcf03ebb6a85 gcc/tree-ssa-pre.cc 3a55ddfc911130111194d8f209761e03 gcc/tree-ssa-propagate.cc 7e14602488f8f1e7e754422dd9731b01 gcc/tree-ssa-propagate.h ! 6e8f74fdfb4c39b9b305ee8ade1dfa2a gcc/tree-ssa-reassoc.cc a2d407f6fd4aa95d7eb7ad8a17b81af4 gcc/tree-ssa-reassoc.h ! 5a5f1e71f87f5ab41730b4c7fe0651bb gcc/tree-ssa-sccvn.cc 9b971767e8b1b24cc98c426f1f399ed8 gcc/tree-ssa-sccvn.h 648524d5c619edb0acece29c53601b89 gcc/tree-ssa-scopedtables.cc 9da7a798aaf58ceb04c796be96a5bdc8 gcc/tree-ssa-scopedtables.h ! 1a01f1b2d173ce0bd6dc265a99316950 gcc/tree-ssa-sink.cc 181e1424785cbf0e1a240820e7712120 gcc/tree-ssa-strlen.cc c3601488e1adeaebe82eec4348f3568d gcc/tree-ssa-strlen.h ! 162b5602b917c115869606301bf8da9f gcc/tree-ssa-structalias.cc 2f25bfc0dc9f8ec66fc417c5c22d0f92 gcc/tree-ssa-tail-merge.cc 7599bc99d54acc459659d85b787faee8 gcc/tree-ssa-ter.cc 08299e87c1517c92eb914373542d3cc8 gcc/tree-ssa-ter.h --- 92483,92503 ---- f0db024320e40ac1ac8d450e8be90f02 gcc/tree-ssa-math-opts.h 99fc0aa9825a52457c111c1df6c54358 gcc/tree-ssa-operands.cc 45c8305b030ec69139d01c326f9a1133 gcc/tree-ssa-operands.h ! 53bf223f25a16d225efb9badebdd829f gcc/tree-ssa-phiopt.cc 35e3309df2c090d12494914f49fc1e1e gcc/tree-ssa-phiprop.cc f9e799527e96fb43c96edcf03ebb6a85 gcc/tree-ssa-pre.cc 3a55ddfc911130111194d8f209761e03 gcc/tree-ssa-propagate.cc 7e14602488f8f1e7e754422dd9731b01 gcc/tree-ssa-propagate.h ! 30c8e120738cd1323f3346540e6c0152 gcc/tree-ssa-reassoc.cc a2d407f6fd4aa95d7eb7ad8a17b81af4 gcc/tree-ssa-reassoc.h ! 94d480a90769ae06baaf9c814ab5ec48 gcc/tree-ssa-sccvn.cc 9b971767e8b1b24cc98c426f1f399ed8 gcc/tree-ssa-sccvn.h 648524d5c619edb0acece29c53601b89 gcc/tree-ssa-scopedtables.cc 9da7a798aaf58ceb04c796be96a5bdc8 gcc/tree-ssa-scopedtables.h ! 7da4b07cc599f3942f40cce66b260851 gcc/tree-ssa-sink.cc 181e1424785cbf0e1a240820e7712120 gcc/tree-ssa-strlen.cc c3601488e1adeaebe82eec4348f3568d gcc/tree-ssa-strlen.h ! d87e26b4a22b320de5d010a97bd1f841 gcc/tree-ssa-structalias.cc 2f25bfc0dc9f8ec66fc417c5c22d0f92 gcc/tree-ssa-tail-merge.cc 7599bc99d54acc459659d85b787faee8 gcc/tree-ssa-ter.cc 08299e87c1517c92eb914373542d3cc8 gcc/tree-ssa-ter.h *************** f74ec8bee7ed7504fbe5b21a035e2ec3 gcc/tr *** 92285,92291 **** 5cbd06b4671b9d3a386ae0b3b1899ff0 gcc/tree-ssa-threadupdate.h 87d4c13c047088a0266b3ff765ee429e gcc/tree-ssa-uncprop.cc 7ed817cf5846d767d8b96f9e60bc058a gcc/tree-ssa-uninit.cc ! e325a4a3353d342488995f82d5e0483b gcc/tree-ssa.cc 8c68b1470d74209ca93348eaff68f563 gcc/tree-ssa.h 1e5a5a5e038804c8ae08600e168b502d gcc/tree-ssanames.cc 5f0afaa1eeaac0ca2f771408bdaf5c9d gcc/tree-ssanames.h --- 92508,92514 ---- 5cbd06b4671b9d3a386ae0b3b1899ff0 gcc/tree-ssa-threadupdate.h 87d4c13c047088a0266b3ff765ee429e gcc/tree-ssa-uncprop.cc 7ed817cf5846d767d8b96f9e60bc058a gcc/tree-ssa-uninit.cc ! cd37e9f69941cb1dd2e5fc55eee9da06 gcc/tree-ssa.cc 8c68b1470d74209ca93348eaff68f563 gcc/tree-ssa.h 1e5a5a5e038804c8ae08600e168b502d gcc/tree-ssanames.cc 5f0afaa1eeaac0ca2f771408bdaf5c9d gcc/tree-ssanames.h *************** aafcaaf57b1b41ce694f51f37fe1dd93 gcc/tr *** 92298,92318 **** 9fe812d705ac88f473d91d7ced8745df gcc/tree-switch-conversion.cc f9949ff32a719d47d731381154dd534c gcc/tree-switch-conversion.h 1a726f178c55eac3224071963ee9bb3a gcc/tree-tailcall.cc ! d4a4a21135fb985aa91937e6ba4037fa gcc/tree-vect-data-refs.cc ! d1fc9b6c5543afd25e87854bb3508f49 gcc/tree-vect-generic.cc d77cf2655cb870786e919f02d9b07f1e gcc/tree-vect-loop-manip.cc ! 7f5964b7413afc7d27c4bfb9eefe326c gcc/tree-vect-loop.cc afdadaa3e7ffae199ce4c4aecbbd98ff gcc/tree-vect-patterns.cc db19be1249cd94d158a20e2be7032249 gcc/tree-vect-slp-patterns.cc ! af6d455d103dc8f9c23ea1f8576825f1 gcc/tree-vect-slp.cc ! c2e7775bf7fd48f0f6b753bb6888f305 gcc/tree-vect-stmts.cc 17da0c4ee2c405d67d63509bd85f801c gcc/tree-vector-builder.cc 81e7b3c9a18c29b53f3f017109c91f6f gcc/tree-vector-builder.h 541c768983210e5d6b69b9ceeaf40e4b gcc/tree-vectorizer.cc 5a1d9b1a4fd93a1dc9773d46eaa80403 gcc/tree-vectorizer.h 89443f1b171fee24a2d36f7d1af2b315 gcc/tree-vrp.cc 9cb72e4782bdb3fb2fb9a04498598bf1 gcc/tree-vrp.h ! 894f26dfce9d0188302e02f92fa3164d gcc/tree.cc 45808a76997a44962fa135c3a7de1ff8 gcc/tree.def 637a29beea44508096255de7a58c6860 gcc/tree.h 789a781bb4a16a840a4d12b33e5e41aa gcc/treestruct.def --- 92521,92541 ---- 9fe812d705ac88f473d91d7ced8745df gcc/tree-switch-conversion.cc f9949ff32a719d47d731381154dd534c gcc/tree-switch-conversion.h 1a726f178c55eac3224071963ee9bb3a gcc/tree-tailcall.cc ! ada2479c712ee086a44bac5c0bb3a852 gcc/tree-vect-data-refs.cc ! 15f9b3fd42e4f233ab0ddea8719251f3 gcc/tree-vect-generic.cc d77cf2655cb870786e919f02d9b07f1e gcc/tree-vect-loop-manip.cc ! 4ab34dd9315ac11dede17962910ae94c gcc/tree-vect-loop.cc afdadaa3e7ffae199ce4c4aecbbd98ff gcc/tree-vect-patterns.cc db19be1249cd94d158a20e2be7032249 gcc/tree-vect-slp-patterns.cc ! 302e5e573ace17cf911460468236ea24 gcc/tree-vect-slp.cc ! aa7cf3967c4e6eb4291da65a014706b1 gcc/tree-vect-stmts.cc 17da0c4ee2c405d67d63509bd85f801c gcc/tree-vector-builder.cc 81e7b3c9a18c29b53f3f017109c91f6f gcc/tree-vector-builder.h 541c768983210e5d6b69b9ceeaf40e4b gcc/tree-vectorizer.cc 5a1d9b1a4fd93a1dc9773d46eaa80403 gcc/tree-vectorizer.h 89443f1b171fee24a2d36f7d1af2b315 gcc/tree-vrp.cc 9cb72e4782bdb3fb2fb9a04498598bf1 gcc/tree-vrp.h ! b659624dfa422b088fce720daa435eea gcc/tree.cc 45808a76997a44962fa135c3a7de1ff8 gcc/tree.def 637a29beea44508096255de7a58c6860 gcc/tree.h 789a781bb4a16a840a4d12b33e5e41aa gcc/treestruct.def *************** d338ccdbfad0f64ecbdd1b67c8277705 gcc/va *** 92336,92347 **** 36a906b07ce327d75362368644961a60 gcc/value-query.h bc26a3485cb0a269944b49b2427ca012 gcc/value-range-equiv.cc b6d9efd1a637bb7e7bb66614921055be gcc/value-range-equiv.h ! 9ec3280a012fbd643f8fbbee8f79eeca gcc/value-range.cc 69b2679c0b53e16d632831390c411b40 gcc/value-range.h 10e20613642a5a9dfe658f7b7bee260b gcc/value-relation.cc 8e00a37814d00e977bd4878c88c6b9f0 gcc/value-relation.h 93e740653e6cec3f6c4610b2fdee225a gcc/var-tracking.cc ! 45bbba7f424b4970f2ccf2ec51d8d13e gcc/varasm.cc 8d61ef065460d6dd2c76f09bed5abdfa gcc/varasm.h fded5307f938c647643e0c2583d58779 gcc/varpool.cc b027979c03d820b6ac30b5ae30e840ff gcc/vec-perm-indices.cc --- 92559,92570 ---- 36a906b07ce327d75362368644961a60 gcc/value-query.h bc26a3485cb0a269944b49b2427ca012 gcc/value-range-equiv.cc b6d9efd1a637bb7e7bb66614921055be gcc/value-range-equiv.h ! 8f8a177309acb8ce06ecad6363793805 gcc/value-range.cc 69b2679c0b53e16d632831390c411b40 gcc/value-range.h 10e20613642a5a9dfe658f7b7bee260b gcc/value-relation.cc 8e00a37814d00e977bd4878c88c6b9f0 gcc/value-relation.h 93e740653e6cec3f6c4610b2fdee225a gcc/var-tracking.cc ! f87d2589a5a27f0de65479d2c1776ad1 gcc/varasm.cc 8d61ef065460d6dd2c76f09bed5abdfa gcc/varasm.h fded5307f938c647643e0c2583d58779 gcc/varpool.cc b027979c03d820b6ac30b5ae30e840ff gcc/vec-perm-indices.cc *************** c23e0d9f34d809996e9151c8608f703f libada *** 92477,92483 **** c851e0f50ad5e334f1cdf3b8c0bae3e2 libada/configure 7eed03bb14fc3b93e0ca88cd5bdac93d libada/configure.ac 46d3fe6da7a771cc2d5420c4137a6861 libatomic/.gitignore ! b8879210d6f82e559202de7fd69b8a8e libatomic/ChangeLog 21f5e5567f586aa064e67dac9e843ed4 libatomic/Makefile.am 8f480fdd121c7e44c048fec76c598b1f libatomic/Makefile.in 04a8eb275561484cf0d6f8c459a38177 libatomic/acinclude.m4 --- 92700,92706 ---- c851e0f50ad5e334f1cdf3b8c0bae3e2 libada/configure 7eed03bb14fc3b93e0ca88cd5bdac93d libada/configure.ac 46d3fe6da7a771cc2d5420c4137a6861 libatomic/.gitignore ! a7a8902c4c7ca35d5a581b94bc53b742 libatomic/ChangeLog 21f5e5567f586aa064e67dac9e843ed4 libatomic/Makefile.am 8f480fdd121c7e44c048fec76c598b1f libatomic/Makefile.in 04a8eb275561484cf0d6f8c459a38177 libatomic/acinclude.m4 *************** d00903d83ee36612295da93aa67615f8 libato *** 92494,92504 **** ef4e81861bd67443d83d7191338a1ca9 libatomic/config/linux/arm/load_n.c d27e0c8119c16d2f8df89f1d92f8244c libatomic/config/linux/arm/store_n.c cf49fce1f1deab0447bcc10681e0a5bf libatomic/config/mingw/host-config.h ! f74a97c64676d9c70c8fa18bf098663a libatomic/config/mingw/lock.c d625c1b7d1832a18fe30ffa767a439c6 libatomic/config/nvptx/host-config.h 14d98705c3c9646ace69bf0ece39df86 libatomic/config/nvptx/lock.c 872ed5850c2201837008ffaf58c8f5d6 libatomic/config/posix/host-config.h ! f55b04d5b2ae08487d085c85b72d8bf7 libatomic/config/posix/lock.c d04f86e742ddfedb71fb4a3d0ceede39 libatomic/config/powerpc/host-config.h 2685c416d9d43704346760a27582ebcc libatomic/config/rtems/host-config.h ad2d20b998e3fcbbd3e3a20240b92690 libatomic/config/rtems/lock.c --- 92717,92727 ---- ef4e81861bd67443d83d7191338a1ca9 libatomic/config/linux/arm/load_n.c d27e0c8119c16d2f8df89f1d92f8244c libatomic/config/linux/arm/store_n.c cf49fce1f1deab0447bcc10681e0a5bf libatomic/config/mingw/host-config.h ! e96d0cb322b9be904f9f62abb74aa55a libatomic/config/mingw/lock.c d625c1b7d1832a18fe30ffa767a439c6 libatomic/config/nvptx/host-config.h 14d98705c3c9646ace69bf0ece39df86 libatomic/config/nvptx/lock.c 872ed5850c2201837008ffaf58c8f5d6 libatomic/config/posix/host-config.h ! c00361e736472ad9b026031e1e1401df libatomic/config/posix/lock.c d04f86e742ddfedb71fb4a3d0ceede39 libatomic/config/powerpc/host-config.h 2685c416d9d43704346760a27582ebcc libatomic/config/rtems/host-config.h ad2d20b998e3fcbbd3e3a20240b92690 libatomic/config/rtems/lock.c *************** aec59abbc470dda1bfe630dbb0bbd627 libffi *** 92838,92843 **** --- 93061,93067 ---- dbd21d77c2acf20037c7e2e16de7a70c libffi/configure.ac b2dbb88c38d08a37b89fc9ed08e79538 libffi/configure.host bad91ff01547ce79fe537211f4763ac0 libffi/doc/Makefile.am + aa80c390acbb9137366229096a1c3845 libffi/doc/libffi.info db28be3951c18d6db6e90f7e612bc67b libffi/doc/libffi.texi 0c1453cd8505c0c665c9194ef9d7f529 libffi/doc/version.texi ea125d6ff0b3d20372a1556f82ca6a05 libffi/fficonfig.h.in *************** a3eb5dee2788fe0a6c42502ba658eddd libffi *** 93212,93220 **** 0f3c94e520870e194cf525de7ec404dc libffi/testsuite/libffi.go/ffitest.h 6cfb66c1c00023abb2c2276d85f16e77 libffi/testsuite/libffi.go/go.exp 189dc193fd0e627a2d55b2e84871edc5 libffi/testsuite/libffi.go/static-chain.h ! 3eb7727faf9f7249a3063a384399c770 libgcc/ChangeLog e4f6419fde8efa2cce0df95a75d7ff0f libgcc/Makefile.in ! 06d0f213cc7b7c2113bd1144c6b540cc libgcc/config.host 312fccd8251056a36e26bad71f9cfaa2 libgcc/config.in 72a922a69d4ebc17df642dac3bba79c7 libgcc/config/aarch64/aarch64-unwind.h 63ef63f968be856e19a3ac335fb7c645 libgcc/config/aarch64/crtfastmath.c --- 93436,93444 ---- 0f3c94e520870e194cf525de7ec404dc libffi/testsuite/libffi.go/ffitest.h 6cfb66c1c00023abb2c2276d85f16e77 libffi/testsuite/libffi.go/go.exp 189dc193fd0e627a2d55b2e84871edc5 libffi/testsuite/libffi.go/static-chain.h ! d8b6dae4ce4e5ef8ba5559025030f7e4 libgcc/ChangeLog e4f6419fde8efa2cce0df95a75d7ff0f libgcc/Makefile.in ! d02ccee833dc5eb37e4d02e2fd77358d libgcc/config.host 312fccd8251056a36e26bad71f9cfaa2 libgcc/config.in 72a922a69d4ebc17df642dac3bba79c7 libgcc/config/aarch64/aarch64-unwind.h 63ef63f968be856e19a3ac335fb7c645 libgcc/config/aarch64/crtfastmath.c *************** f7d079de49740a9b78907a3d673d7233 libgcc *** 93340,93346 **** 2e213af1dd13f68b1515d6340fcb540b libgcc/config/avr/lib1funcs.S 622f81485f02d0eac2caaafa7d3a2fd1 libgcc/config/avr/lib2-object.mk 8d7abef73a8c40e4840ea410d4b4ac9b libgcc/config/avr/lib2funcs.c ! 2a73ae67f5c7021af1aa6e8f63375628 libgcc/config/avr/libf7/ChangeLog a2d046f165da6bb14e927d322fc2d5f4 libgcc/config/avr/libf7/asm-defs.h 0b54a2cbfebb93a4e1bddfa3600d6f0b libgcc/config/avr/libf7/f7-renames.h 2effcc1c274d5f459695fb6d7d330053 libgcc/config/avr/libf7/f7-wraps.h --- 93564,93570 ---- 2e213af1dd13f68b1515d6340fcb540b libgcc/config/avr/lib1funcs.S 622f81485f02d0eac2caaafa7d3a2fd1 libgcc/config/avr/lib2-object.mk 8d7abef73a8c40e4840ea410d4b4ac9b libgcc/config/avr/lib2funcs.c ! e0756655f06cc1d52fe4c70a8c555fe6 libgcc/config/avr/libf7/ChangeLog a2d046f165da6bb14e927d322fc2d5f4 libgcc/config/avr/libf7/asm-defs.h 0b54a2cbfebb93a4e1bddfa3600d6f0b libgcc/config/avr/libf7/f7-renames.h 2effcc1c274d5f459695fb6d7d330053 libgcc/config/avr/libf7/f7-wraps.h *************** a4fb890339e45be0d3595d7e27665a67 libgcc *** 93353,93359 **** 9e2660f882f79c124c85b8732a55464e libgcc/config/avr/libf7/libf7-common.mk 89bdf85b85b7719b781bd239bbf53606 libgcc/config/avr/libf7/libf7-const.def 3cc1eb81c98c5373281b90186181f4f3 libgcc/config/avr/libf7/libf7-constdef.h ! 984130f6f824dc1ad11221397250acf9 libgcc/config/avr/libf7/libf7.c d08db7b445998cee32eb93b1f367c543 libgcc/config/avr/libf7/libf7.h d8d51231243f1139dbb6a828e2340c67 libgcc/config/avr/libf7/t-libf7 bf9360cfc14e0b0129af5560893f374e libgcc/config/avr/libf7/t-libf7-math --- 93577,93583 ---- 9e2660f882f79c124c85b8732a55464e libgcc/config/avr/libf7/libf7-common.mk 89bdf85b85b7719b781bd239bbf53606 libgcc/config/avr/libf7/libf7-const.def 3cc1eb81c98c5373281b90186181f4f3 libgcc/config/avr/libf7/libf7-constdef.h ! 402d2b459f18c33b71f8d883e14ba6e9 libgcc/config/avr/libf7/libf7.c d08db7b445998cee32eb93b1f367c543 libgcc/config/avr/libf7/libf7.h d8d51231243f1139dbb6a828e2340c67 libgcc/config/avr/libf7/t-libf7 bf9360cfc14e0b0129af5560893f374e libgcc/config/avr/libf7/t-libf7-math *************** c648b3441acf03960443d5a3d1b7e4d7 libgcc *** 93580,93586 **** c6afe173595c17ffb20e9c76a90f5158 libgcc/config/i386/t-crtstuff 9bd719f83d655207581528ab5e7b7354 libgcc/config/i386/t-cygming a56b9c84f7b8c5427982b9c1ac4d0268 libgcc/config/i386/t-cygwin ! ab24e8c90feb5a86f9ff59988a9bcc43 libgcc/config/i386/t-darwin 2005c91878a4a69d60c9418077eefa97 libgcc/config/i386/t-dlldir 0a87d076e42adda36ab55bbaaac59649 libgcc/config/i386/t-dlldir-x 68adad1226ee1737a6a8d12b84a63297 libgcc/config/i386/t-dragonfly --- 93804,93810 ---- c6afe173595c17ffb20e9c76a90f5158 libgcc/config/i386/t-crtstuff 9bd719f83d655207581528ab5e7b7354 libgcc/config/i386/t-cygming a56b9c84f7b8c5427982b9c1ac4d0268 libgcc/config/i386/t-cygwin ! e831a13e330d0eb6ffa779c755d5fe3d libgcc/config/i386/t-darwin 2005c91878a4a69d60c9418077eefa97 libgcc/config/i386/t-dlldir 0a87d076e42adda36ab55bbaaac59649 libgcc/config/i386/t-dlldir-x 68adad1226ee1737a6a8d12b84a63297 libgcc/config/i386/t-dragonfly *************** ef5f555272a97762f8c82ca5ded1309b libgcc *** 94347,94353 **** 4ff53a9503f56f5d317b07553260d3a7 libgcc/config/rs6000/sol-cn.S 3fa6bf8673b3a7fa2278aeb2fe1824f4 libgcc/config/rs6000/t-aix-cxa 0d6637a7e112c021e7ce371918c7659c libgcc/config/rs6000/t-crtstuff ! b780b81d7bccdf7af090dbcd3e639dd1 libgcc/config/rs6000/t-darwin a8ea28c94f3264c3602a98b4728fed82 libgcc/config/rs6000/t-darwin-ehs a0014912b4b08cfbe887d9945460e370 libgcc/config/rs6000/t-darwin64 0a9cfdafc9d4256f7917796fac8dd8a1 libgcc/config/rs6000/t-e500v1-fp --- 94571,94577 ---- 4ff53a9503f56f5d317b07553260d3a7 libgcc/config/rs6000/sol-cn.S 3fa6bf8673b3a7fa2278aeb2fe1824f4 libgcc/config/rs6000/t-aix-cxa 0d6637a7e112c021e7ce371918c7659c libgcc/config/rs6000/t-crtstuff ! bc91baf0523c8475334ca80d6ff265c4 libgcc/config/rs6000/t-darwin a8ea28c94f3264c3602a98b4728fed82 libgcc/config/rs6000/t-darwin-ehs a0014912b4b08cfbe887d9945460e370 libgcc/config/rs6000/t-darwin64 0a9cfdafc9d4256f7917796fac8dd8a1 libgcc/config/rs6000/t-e500v1-fp *************** f199b38114ce849b77b38bd475d72cff libgcc *** 94446,94451 **** --- 94670,94676 ---- 060a49bb5c4a53a2125123d4cbd571de libgcc/config/t-crtstuff-pic fc8b2970727885119792967fb3344fda libgcc/config/t-darwin f699f9e7159ba2c6033406086c5c8299 libgcc/config/t-darwin-ehs + 1b055dd68e433300709a246c1b88d25b libgcc/config/t-darwin-libgccs1 5f05c653ae1e197bae3fc3fc5ca1e59d libgcc/config/t-darwin-min-1 d8138086c2f686d6fb17804f19019954 libgcc/config/t-darwin-min-5 830793a6b0d554dc6c4495bc27a0c9e3 libgcc/config/t-darwin-min-8 *************** f25d8ab44bd78e25e4101be2782fdc8a libgcc *** 94710,94716 **** 86516254f518009cebca3f82cd990254 libgcc/vtv_end_preinit.c 351c41e966ff8e80444fb57c161e7957 libgcc/vtv_start.c 0ae6a250e17c98a856aae28baba71d88 libgcc/vtv_start_preinit.c ! c16cf9b4a0680ac6e9e0d8d891a0e3f7 libgfortran/ChangeLog 9aca36338382e5b4b730e7779170b24d libgfortran/ChangeLog-2002 80d3edc880c2da0b7a2beec2e2c4f774 libgfortran/ChangeLog-2003 9f0239429993a5e64ed793eb6c55a5c1 libgfortran/ChangeLog-2004 --- 94935,94941 ---- 86516254f518009cebca3f82cd990254 libgcc/vtv_end_preinit.c 351c41e966ff8e80444fb57c161e7957 libgcc/vtv_start.c 0ae6a250e17c98a856aae28baba71d88 libgcc/vtv_start_preinit.c ! 9779ba248228594dc8989e7a111d3230 libgfortran/ChangeLog 9aca36338382e5b4b730e7779170b24d libgfortran/ChangeLog-2002 80d3edc880c2da0b7a2beec2e2c4f774 libgfortran/ChangeLog-2003 9f0239429993a5e64ed793eb6c55a5c1 libgfortran/ChangeLog-2004 *************** b889e2825973f08b6ce755cd4325d33a libgfo *** 95041,95048 **** c3a569c7bca558f1eaa8116a2c98ba1a libgfortran/generated/findloc1_r8.c 8f879c65798a0336c40196462b16ae36 libgfortran/generated/findloc1_s1.c ccb6f93fc94866ab2d1c206317631078 libgfortran/generated/findloc1_s4.c ! ee3ff4a793ca326fa5729c3c0a117527 libgfortran/generated/findloc2_s1.c ! 84d8665af288e783c8f6d2a28c0865e3 libgfortran/generated/findloc2_s4.c b175d994534b268fee0f8a58a53ea6d5 libgfortran/generated/iall_i1.c 40f3aa381214bffe8007abde8c591817 libgfortran/generated/iall_i16.c 4d424ffb433f699dfad7890811529bd9 libgfortran/generated/iall_i2.c --- 95266,95273 ---- c3a569c7bca558f1eaa8116a2c98ba1a libgfortran/generated/findloc1_r8.c 8f879c65798a0336c40196462b16ae36 libgfortran/generated/findloc1_s1.c ccb6f93fc94866ab2d1c206317631078 libgfortran/generated/findloc1_s4.c ! 491ff06964b7120acee9f47180ee8c87 libgfortran/generated/findloc2_s1.c ! 1bd7904dd66defdcce7b1e3afcbd82f8 libgfortran/generated/findloc2_s4.c b175d994534b268fee0f8a58a53ea6d5 libgfortran/generated/iall_i1.c 40f3aa381214bffe8007abde8c591817 libgfortran/generated/iall_i16.c 4d424ffb433f699dfad7890811529bd9 libgfortran/generated/iall_i2.c *************** ff581d5a57e9fa1aba38583558957a13 libgfo *** 95167,95174 **** b270ef642dc1f3a0b365bfd88b075a32 libgfortran/generated/maxloc1_16_r17.c 6265af287e28c1924adb51ca1a95872f libgfortran/generated/maxloc1_16_r4.c 07da8412027513e6a42f8832b18907d7 libgfortran/generated/maxloc1_16_r8.c ! fc20a4eb8271fb80cd56cf5135c6b90b libgfortran/generated/maxloc1_16_s1.c ! 7b16163b674874273332e9a89749b1cb libgfortran/generated/maxloc1_16_s4.c 880dcb1b9a42d205dacb0dd0bf916e12 libgfortran/generated/maxloc1_4_i1.c e05d25f0074be2012161b02ccc8fdc57 libgfortran/generated/maxloc1_4_i16.c 4057de0edf4f1c508882b9def5056fbd libgfortran/generated/maxloc1_4_i2.c --- 95392,95399 ---- b270ef642dc1f3a0b365bfd88b075a32 libgfortran/generated/maxloc1_16_r17.c 6265af287e28c1924adb51ca1a95872f libgfortran/generated/maxloc1_16_r4.c 07da8412027513e6a42f8832b18907d7 libgfortran/generated/maxloc1_16_r8.c ! b9fb776c5815cbddd7f5391e2b1ea958 libgfortran/generated/maxloc1_16_s1.c ! 0c22cdb4549a91b0536ab71f1b162f8f libgfortran/generated/maxloc1_16_s4.c 880dcb1b9a42d205dacb0dd0bf916e12 libgfortran/generated/maxloc1_4_i1.c e05d25f0074be2012161b02ccc8fdc57 libgfortran/generated/maxloc1_4_i16.c 4057de0edf4f1c508882b9def5056fbd libgfortran/generated/maxloc1_4_i2.c *************** a46971f93d3aa3a073579f79c6a68a14 libgfo *** 95179,95186 **** 59a3d7d1239e8bc4a12dd3f60d8ea1ea libgfortran/generated/maxloc1_4_r17.c 189f9d11a8aad07c835dcde01a03fe08 libgfortran/generated/maxloc1_4_r4.c f1f5bbf41ca3a0f12d75e08096fdbc2b libgfortran/generated/maxloc1_4_r8.c ! 61556fa37040fe69291366631a401e92 libgfortran/generated/maxloc1_4_s1.c ! a4f267f117332845dd99c309c9f6a479 libgfortran/generated/maxloc1_4_s4.c 928fbaf793f3d91e88f173c56940fde2 libgfortran/generated/maxloc1_8_i1.c f66bb625d9676e71a9b09043aabb65c9 libgfortran/generated/maxloc1_8_i16.c 8e3a433837cf4dbe042b890668881823 libgfortran/generated/maxloc1_8_i2.c --- 95404,95411 ---- 59a3d7d1239e8bc4a12dd3f60d8ea1ea libgfortran/generated/maxloc1_4_r17.c 189f9d11a8aad07c835dcde01a03fe08 libgfortran/generated/maxloc1_4_r4.c f1f5bbf41ca3a0f12d75e08096fdbc2b libgfortran/generated/maxloc1_4_r8.c ! 0b5bde2f952c6ef45ae921c445da00ea libgfortran/generated/maxloc1_4_s1.c ! 95d11ec77372cd26598c55d98cb11b4a libgfortran/generated/maxloc1_4_s4.c 928fbaf793f3d91e88f173c56940fde2 libgfortran/generated/maxloc1_8_i1.c f66bb625d9676e71a9b09043aabb65c9 libgfortran/generated/maxloc1_8_i16.c 8e3a433837cf4dbe042b890668881823 libgfortran/generated/maxloc1_8_i2.c *************** f66bb625d9676e71a9b09043aabb65c9 libgfo *** 95191,95204 **** 9c76e2248512c1e8753c8a62276f103e libgfortran/generated/maxloc1_8_r17.c 044a833c2095793536e8bbf5479b7836 libgfortran/generated/maxloc1_8_r4.c edba4f971fc680d16b1649a81c56a80f libgfortran/generated/maxloc1_8_r8.c ! f3f0d61f79898773c50703bafe5af2de libgfortran/generated/maxloc1_8_s1.c ! 240863dac6a589cecfe75a6784736a3c libgfortran/generated/maxloc1_8_s4.c ! f5ddaa0d3c8d53f6f13e04405e994ecf libgfortran/generated/maxloc2_16_s1.c ! 5e25dc3d8f28373dc2f64e4c0ec65c6a libgfortran/generated/maxloc2_16_s4.c ! faf98c771f31dd6173a482b02cd412de libgfortran/generated/maxloc2_4_s1.c ! c2ef85345d4e3d41e27a0f8b1f5e3052 libgfortran/generated/maxloc2_4_s4.c ! 377c0ca39a55561510c489dded3e32b4 libgfortran/generated/maxloc2_8_s1.c ! 1e59175eb6ae804b5c7b27bc8794d6cf libgfortran/generated/maxloc2_8_s4.c bbab3934a3bd9ad75df531fa64b48e35 libgfortran/generated/maxval0_s1.c 3db68e9dd88046335b899e2fd42854a2 libgfortran/generated/maxval0_s4.c 8dc7a135da85fff6661edaa8212f3ac4 libgfortran/generated/maxval1_s1.c --- 95416,95429 ---- 9c76e2248512c1e8753c8a62276f103e libgfortran/generated/maxloc1_8_r17.c 044a833c2095793536e8bbf5479b7836 libgfortran/generated/maxloc1_8_r4.c edba4f971fc680d16b1649a81c56a80f libgfortran/generated/maxloc1_8_r8.c ! 7318c61e3cd3b306b20a71c36ad6a38d libgfortran/generated/maxloc1_8_s1.c ! 8233d59527f94ba305e19995776c3a91 libgfortran/generated/maxloc1_8_s4.c ! e45c14494ff020d4d0fbec75cc4a2d50 libgfortran/generated/maxloc2_16_s1.c ! b3627ba10e2c7864ff033b1377f6b5eb libgfortran/generated/maxloc2_16_s4.c ! 903d3eb1fb1c3bfda5ed69a400816261 libgfortran/generated/maxloc2_4_s1.c ! c537750101969e57dcdc324fdd64d242 libgfortran/generated/maxloc2_4_s4.c ! 196eecfe637444230ffc3008a08a0b15 libgfortran/generated/maxloc2_8_s1.c ! b2df52af264077b72e238c50127fe3dc libgfortran/generated/maxloc2_8_s4.c bbab3934a3bd9ad75df531fa64b48e35 libgfortran/generated/maxval0_s1.c 3db68e9dd88046335b899e2fd42854a2 libgfortran/generated/maxval0_s4.c 8dc7a135da85fff6661edaa8212f3ac4 libgfortran/generated/maxval1_s1.c *************** b22201c1c02184e430f6cc63cdea7930 libgfo *** 95259,95266 **** b998f4524053840b1511dd46b980460b libgfortran/generated/minloc1_16_r17.c cfc3900e4407c1a6dbeb59457ccf9b26 libgfortran/generated/minloc1_16_r4.c 6fff87ff4ad484aaafb7a0b03820ae9a libgfortran/generated/minloc1_16_r8.c ! f1507c403904a3006e396976c1f548e9 libgfortran/generated/minloc1_16_s1.c ! 1cc537e0737594bdacc0ebc026fd728f libgfortran/generated/minloc1_16_s4.c af95a0741472502ccdf4b14eca650731 libgfortran/generated/minloc1_4_i1.c 581599880a5e18018df7096a48139382 libgfortran/generated/minloc1_4_i16.c 95c95c6f9e0fe402ed18e86957c67122 libgfortran/generated/minloc1_4_i2.c --- 95484,95491 ---- b998f4524053840b1511dd46b980460b libgfortran/generated/minloc1_16_r17.c cfc3900e4407c1a6dbeb59457ccf9b26 libgfortran/generated/minloc1_16_r4.c 6fff87ff4ad484aaafb7a0b03820ae9a libgfortran/generated/minloc1_16_r8.c ! eb8489a7ff574c2d28d8adbdb70538af libgfortran/generated/minloc1_16_s1.c ! 4d911e6ba7f983f939767065b028a082 libgfortran/generated/minloc1_16_s4.c af95a0741472502ccdf4b14eca650731 libgfortran/generated/minloc1_4_i1.c 581599880a5e18018df7096a48139382 libgfortran/generated/minloc1_4_i16.c 95c95c6f9e0fe402ed18e86957c67122 libgfortran/generated/minloc1_4_i2.c *************** dfb3426d440965537fa04f7aa01e98b5 libgfo *** 95271,95278 **** 2a1c2a9ed28efbb8fcfbfb029dca760e libgfortran/generated/minloc1_4_r17.c b270a875debcdd163bb085b62880aca5 libgfortran/generated/minloc1_4_r4.c 54e1d4b9176df78523ad908d887f59f4 libgfortran/generated/minloc1_4_r8.c ! b2663ccaff98ff0d7fe2281ca0b7dd87 libgfortran/generated/minloc1_4_s1.c ! 6de7e34163906ce22ccba2157c5b45fb libgfortran/generated/minloc1_4_s4.c f03d419e3b14b99669f176bb5489e0ba libgfortran/generated/minloc1_8_i1.c 2df54b1d5e6abf03ba6a9057b787adee libgfortran/generated/minloc1_8_i16.c 57a1ebef875d7297f203230dc6a362f3 libgfortran/generated/minloc1_8_i2.c --- 95496,95503 ---- 2a1c2a9ed28efbb8fcfbfb029dca760e libgfortran/generated/minloc1_4_r17.c b270a875debcdd163bb085b62880aca5 libgfortran/generated/minloc1_4_r4.c 54e1d4b9176df78523ad908d887f59f4 libgfortran/generated/minloc1_4_r8.c ! d5b1e2c3ba404ebfa4e1b58ac517d952 libgfortran/generated/minloc1_4_s1.c ! 752deec7cb556002f8feb26eb25a4fe9 libgfortran/generated/minloc1_4_s4.c f03d419e3b14b99669f176bb5489e0ba libgfortran/generated/minloc1_8_i1.c 2df54b1d5e6abf03ba6a9057b787adee libgfortran/generated/minloc1_8_i16.c 57a1ebef875d7297f203230dc6a362f3 libgfortran/generated/minloc1_8_i2.c *************** e0f3b9d1e4595628fc767088c18ff678 libgfo *** 95283,95296 **** 1022bde09145492293a0f6d85691bed4 libgfortran/generated/minloc1_8_r17.c 097a1720c8ad5611e8007d8c2fe4f5f4 libgfortran/generated/minloc1_8_r4.c 724c3577ebbb6981ff52d5107070850c libgfortran/generated/minloc1_8_r8.c ! 19d066969b1767551df155353497444e libgfortran/generated/minloc1_8_s1.c ! 95f11ef80cbb94767365e5eb16000d0a libgfortran/generated/minloc1_8_s4.c ! ec8e5eb3cbb1ec2e0f866b0cf98ca60d libgfortran/generated/minloc2_16_s1.c ! c4262c4fb85df43e1da1d7d593b9f937 libgfortran/generated/minloc2_16_s4.c ! d35502f79efb0ca7a8c0c962aa8110b1 libgfortran/generated/minloc2_4_s1.c ! 9aa255208a799aea0104b31543f3abc6 libgfortran/generated/minloc2_4_s4.c ! 8e0e1599fd3613b25c96be39c402ebac libgfortran/generated/minloc2_8_s1.c ! 718e7e26fd3b1bc3578daaae7b2cc6b6 libgfortran/generated/minloc2_8_s4.c bc1cd858c461d4b934ceaf97ce60113e libgfortran/generated/minval0_s1.c 42bc79a21c2cc68116584f2e3fd38e55 libgfortran/generated/minval0_s4.c cbe49b64dd6a5c52f3d4f1ec0e38727c libgfortran/generated/minval1_s1.c --- 95508,95521 ---- 1022bde09145492293a0f6d85691bed4 libgfortran/generated/minloc1_8_r17.c 097a1720c8ad5611e8007d8c2fe4f5f4 libgfortran/generated/minloc1_8_r4.c 724c3577ebbb6981ff52d5107070850c libgfortran/generated/minloc1_8_r8.c ! d8d58d81028928f075cb6a9a81bcb235 libgfortran/generated/minloc1_8_s1.c ! 39c9ff7ed5d831c7db44cfbfb89598b5 libgfortran/generated/minloc1_8_s4.c ! ef55a37fc4530c4f1e5784d02ae2b129 libgfortran/generated/minloc2_16_s1.c ! cbffcfa57c0350a61388f1066f06aa2f libgfortran/generated/minloc2_16_s4.c ! 64c23e3ad2653d149948859d1d3d06d0 libgfortran/generated/minloc2_4_s1.c ! 4493cc2d6ad89df96be17f569b916f67 libgfortran/generated/minloc2_4_s4.c ! e19475a153981945528078050aec7012 libgfortran/generated/minloc2_8_s1.c ! e81e09ad0c544edb0c1dad295032f9ee libgfortran/generated/minloc2_8_s4.c bc1cd858c461d4b934ceaf97ce60113e libgfortran/generated/minval0_s1.c 42bc79a21c2cc68116584f2e3fd38e55 libgfortran/generated/minval0_s4.c cbe49b64dd6a5c52f3d4f1ec0e38727c libgfortran/generated/minval1_s1.c *************** c9d3acabcb2a3d7e0b3b1d593f94970e libgfo *** 95563,95574 **** 6168aaeac8454fc4554b6c3cd3b2544a libgfortran/m4/iany.m4 dc31c3dc230a3473d5aec5fc55dcee49 libgfortran/m4/ifindloc0.m4 f68d50561c3fad876e6e9c1cd90cbd74 libgfortran/m4/ifindloc1.m4 ! 2d09599f11ac5a7c824cafe2082ab158 libgfortran/m4/ifindloc2.m4 143daeeed4d4e1baa17753b51ddd88be libgfortran/m4/iforeach-s.m4 ef77f0d18ce645146e5155d85730a2dc libgfortran/m4/iforeach-s2.m4 8bbbce69fc532a405b1b88c79c2ef47b libgfortran/m4/iforeach.m4 d41d8cd98f00b204e9800998ecf8427e libgfortran/m4/ifunc.m4 ! 89b98ba2db8ff2252ed184a6c20b8f31 libgfortran/m4/ifunction-s.m4 1603b9dcffb8d8436da0598e622783a9 libgfortran/m4/ifunction-s2.m4 3cbecd5d114cf344efea0d4754437c7a libgfortran/m4/ifunction.m4 86a682dafdbffea255a15ff37710c93a libgfortran/m4/ifunction_logical.m4 --- 95788,95799 ---- 6168aaeac8454fc4554b6c3cd3b2544a libgfortran/m4/iany.m4 dc31c3dc230a3473d5aec5fc55dcee49 libgfortran/m4/ifindloc0.m4 f68d50561c3fad876e6e9c1cd90cbd74 libgfortran/m4/ifindloc1.m4 ! 7e6310567df61c2044f93fc3ef8a45bd libgfortran/m4/ifindloc2.m4 143daeeed4d4e1baa17753b51ddd88be libgfortran/m4/iforeach-s.m4 ef77f0d18ce645146e5155d85730a2dc libgfortran/m4/iforeach-s2.m4 8bbbce69fc532a405b1b88c79c2ef47b libgfortran/m4/iforeach.m4 d41d8cd98f00b204e9800998ecf8427e libgfortran/m4/ifunc.m4 ! 315f45e021310f13fe6461d79608ac6d libgfortran/m4/ifunction-s.m4 1603b9dcffb8d8436da0598e622783a9 libgfortran/m4/ifunction-s2.m4 3cbecd5d114cf344efea0d4754437c7a libgfortran/m4/ifunction.m4 86a682dafdbffea255a15ff37710c93a libgfortran/m4/ifunction_logical.m4 *************** e4a84727dfdbf2df5cdea47355d79d5b libgfo *** 95584,95590 **** dfcc08f7c2feba73f8a326b85141632a libgfortran/m4/maxloc0s.m4 6a16013e23ae0dd3816d6d43574e0699 libgfortran/m4/maxloc1.m4 d0fa96ff91abe776e8e3c69178e2cbc5 libgfortran/m4/maxloc1s.m4 ! 26edbaa33a08f4ee52adbe41516a4234 libgfortran/m4/maxloc2s.m4 8bd4079ef43eb701caae9c44b03b5326 libgfortran/m4/maxval.m4 d436fa250176f0da93aa9856fc6fa7f6 libgfortran/m4/maxval0s.m4 d2b5ef55b012352c861701270720c8fd libgfortran/m4/maxval1s.m4 --- 95809,95815 ---- dfcc08f7c2feba73f8a326b85141632a libgfortran/m4/maxloc0s.m4 6a16013e23ae0dd3816d6d43574e0699 libgfortran/m4/maxloc1.m4 d0fa96ff91abe776e8e3c69178e2cbc5 libgfortran/m4/maxloc1s.m4 ! 39cc751c1b07f43721b9c9213b50d5b6 libgfortran/m4/maxloc2s.m4 8bd4079ef43eb701caae9c44b03b5326 libgfortran/m4/maxval.m4 d436fa250176f0da93aa9856fc6fa7f6 libgfortran/m4/maxval0s.m4 d2b5ef55b012352c861701270720c8fd libgfortran/m4/maxval1s.m4 *************** c1ddf3b84bb52049490b00026554146c libgfo *** 95592,95598 **** 624f4ef8021ae8611de415ffc98aef57 libgfortran/m4/minloc0s.m4 f429963a5772147d9a21c5e5b5a0b6b4 libgfortran/m4/minloc1.m4 d2d1889874d22bf60328946074435d56 libgfortran/m4/minloc1s.m4 ! 65975b2b3a5877f643008af268f821d3 libgfortran/m4/minloc2s.m4 352bcdfe8ebe3b30c46d6a94ec99ee8c libgfortran/m4/minval.m4 34c3cfc84bcf7148f1f51aa62eaf2997 libgfortran/m4/minval0s.m4 8a3e03bd89763c569abccf7fc8322a18 libgfortran/m4/minval1s.m4 --- 95817,95823 ---- 624f4ef8021ae8611de415ffc98aef57 libgfortran/m4/minloc0s.m4 f429963a5772147d9a21c5e5b5a0b6b4 libgfortran/m4/minloc1.m4 d2d1889874d22bf60328946074435d56 libgfortran/m4/minloc1s.m4 ! c1853e459b494a950eac8ad2074068e1 libgfortran/m4/minloc2s.m4 352bcdfe8ebe3b30c46d6a94ec99ee8c libgfortran/m4/minval.m4 34c3cfc84bcf7148f1f51aa62eaf2997 libgfortran/m4/minval0s.m4 8a3e03bd89763c569abccf7fc8322a18 libgfortran/m4/minval1s.m4 *************** dcdcea9380167bc0fc31fbcc9ae7cd70 libgo/ *** 97393,97406 **** 1e4c9666f505813e54ed2b3d4056d2f8 libgo/go/crypto/tls/example_test.go 6c121e7342c13fdc786312f66d8dbb99 libgo/go/crypto/tls/generate_cert.go 92c22ddf04bfc1134e9ce858e4fe63d1 libgo/go/crypto/tls/handshake_client.go ! b1c3932241580b99b951fae0edb61fd8 libgo/go/crypto/tls/handshake_client_test.go 0427ef397843c02f3be96cfacd0f14a3 libgo/go/crypto/tls/handshake_client_tls13.go 46b69f2680156d5e71cb8c6ae2343e94 libgo/go/crypto/tls/handshake_messages.go 0945ccb0c15b2deb95d8ca2b33b0ea54 libgo/go/crypto/tls/handshake_messages_test.go 5acf20b462aafc7a101527ee55f5c865 libgo/go/crypto/tls/handshake_server.go ! 2b8b5b21bf0ce23f0cc1267b74babf93 libgo/go/crypto/tls/handshake_server_test.go 4de3e07cdf2105cfcbfc08e792804987 libgo/go/crypto/tls/handshake_server_tls13.go ! b064ac2d0b92b42852f6ecd68366b46d libgo/go/crypto/tls/handshake_test.go 9a32a638fe102dd2d9c10bdc7fea9e5e libgo/go/crypto/tls/handshake_unix_test.go a7f68e8d2ee39cb8a707a0e0eba8ca47 libgo/go/crypto/tls/key_agreement.go aa7a95034a03be2806fa57040be5dc21 libgo/go/crypto/tls/key_schedule.go --- 97618,97631 ---- 1e4c9666f505813e54ed2b3d4056d2f8 libgo/go/crypto/tls/example_test.go 6c121e7342c13fdc786312f66d8dbb99 libgo/go/crypto/tls/generate_cert.go 92c22ddf04bfc1134e9ce858e4fe63d1 libgo/go/crypto/tls/handshake_client.go ! f76251738608d414afc6c3f485ba35a8 libgo/go/crypto/tls/handshake_client_test.go 0427ef397843c02f3be96cfacd0f14a3 libgo/go/crypto/tls/handshake_client_tls13.go 46b69f2680156d5e71cb8c6ae2343e94 libgo/go/crypto/tls/handshake_messages.go 0945ccb0c15b2deb95d8ca2b33b0ea54 libgo/go/crypto/tls/handshake_messages_test.go 5acf20b462aafc7a101527ee55f5c865 libgo/go/crypto/tls/handshake_server.go ! 20c613e2c2699d3c223d49f0ca1b8984 libgo/go/crypto/tls/handshake_server_test.go 4de3e07cdf2105cfcbfc08e792804987 libgo/go/crypto/tls/handshake_server_tls13.go ! 6a407d52ecada2de1da0168e7271f0c0 libgo/go/crypto/tls/handshake_test.go 9a32a638fe102dd2d9c10bdc7fea9e5e libgo/go/crypto/tls/handshake_unix_test.go a7f68e8d2ee39cb8a707a0e0eba8ca47 libgo/go/crypto/tls/key_agreement.go aa7a95034a03be2806fa57040be5dc21 libgo/go/crypto/tls/key_schedule.go *************** d6a3256a046d57feca0ff021235c9ede libgo/ *** 97531,97537 **** e2ec9bd8f6f42c104c048bb324bf00d7 libgo/go/crypto/tls/testdata/example-key.pem e0281d4b0d8067540dc185550b995938 libgo/go/crypto/tls/ticket.go fb39d36797992586f3178188718b0c36 libgo/go/crypto/tls/tls.go ! 7f2c0871f5c00a0aeaa3fad129d50796 libgo/go/crypto/tls/tls_test.go fee50745a618969de6971115cea99c5b libgo/go/crypto/x509/cert_pool.go 6ba0dbba8fd8e3ffecd7972e85cfdc83 libgo/go/crypto/x509/hybrid_pool_test.go 7fc12e96e70223731b3f6723c759bcee libgo/go/crypto/x509/name_constraints_test.go --- 97756,97762 ---- e2ec9bd8f6f42c104c048bb324bf00d7 libgo/go/crypto/tls/testdata/example-key.pem e0281d4b0d8067540dc185550b995938 libgo/go/crypto/tls/ticket.go fb39d36797992586f3178188718b0c36 libgo/go/crypto/tls/tls.go ! bdd3816b98bd07ab38ad8cfdfc5ac82b libgo/go/crypto/tls/tls_test.go fee50745a618969de6971115cea99c5b libgo/go/crypto/x509/cert_pool.go 6ba0dbba8fd8e3ffecd7972e85cfdc83 libgo/go/crypto/x509/hybrid_pool_test.go 7fc12e96e70223731b3f6723c759bcee libgo/go/crypto/x509/name_constraints_test.go *************** e3e86019491a40bd4f45424d7ce11037 libgo/ *** 101126,101132 **** c5574d106d35be5d94e80301b0855ada libgo/testsuite/libgo-test-support.exp.in bf162aa572f7b96b25dbd2b027845d32 libgo/testsuite/libgo.testmain/testmain.exp cc9d2a0e34e31ba866a8caf9f46f48f3 libgomp/.gitattributes ! ce779ed17e1ef55271eae347116bdbd2 libgomp/ChangeLog 0d55aa862aee66efdc5f8d62c94ff8fb libgomp/ChangeLog.graphite 4c820cf0c4f1fd83f68890608487f44e libgomp/Makefile.am b557677faddb5cc7d23f0e8f8a5bb0a6 libgomp/Makefile.in --- 101351,101357 ---- c5574d106d35be5d94e80301b0855ada libgo/testsuite/libgo-test-support.exp.in bf162aa572f7b96b25dbd2b027845d32 libgo/testsuite/libgo.testmain/testmain.exp cc9d2a0e34e31ba866a8caf9f46f48f3 libgomp/.gitattributes ! 5ae8220197984a7a6e1b4d87ede6c4c2 libgomp/ChangeLog 0d55aa862aee66efdc5f8d62c94ff8fb libgomp/ChangeLog.graphite 4c820cf0c4f1fd83f68890608487f44e libgomp/Makefile.am b557677faddb5cc7d23f0e8f8a5bb0a6 libgomp/Makefile.in *************** b4b3ff9a2527e499cebeb7b48c150ff6 libgom *** 101258,101264 **** 8f1e6e4f0cf98dcffb1c147b18838798 libgomp/libgomp-plugin.c 335a7094586075334b6a9d0faa6ebe7d libgomp/libgomp-plugin.h dcc9017cedae0d22507f9f4ce4f87621 libgomp/libgomp.h ! 66605f980fda8e4618a404069b8692c7 libgomp/libgomp.info c767351b8d4fa4dfa3fbdb2b50c8ab3e libgomp/libgomp.map 8b2aa50aecad82171348a6918309afd6 libgomp/libgomp.spec.in b5a7cd5e5d03f5bbca766d5cca4219e9 libgomp/libgomp.texi --- 101483,101489 ---- 8f1e6e4f0cf98dcffb1c147b18838798 libgomp/libgomp-plugin.c 335a7094586075334b6a9d0faa6ebe7d libgomp/libgomp-plugin.h dcc9017cedae0d22507f9f4ce4f87621 libgomp/libgomp.h ! bc1003569ddb2c8a8656d63255855a4b libgomp/libgomp.info c767351b8d4fa4dfa3fbdb2b50c8ab3e libgomp/libgomp.map 8b2aa50aecad82171348a6918309afd6 libgomp/libgomp.spec.in b5a7cd5e5d03f5bbca766d5cca4219e9 libgomp/libgomp.texi *************** ac9e80c7d1eb2f0ec65ce5a9226fb1d2 libgom *** 103215,103221 **** 1c3ea6cf8b3fdbaaca48eede6a78b377 libgomp/testsuite/libgomp.oacc-fortran/private-atomic-1-worker.f90 a2a630debffe26086dcf2269428bc680 libgomp/testsuite/libgomp.oacc-fortran/private-variables.f90 08b06d21055c0ae650695af3186e447b libgomp/testsuite/libgomp.oacc-fortran/privatized-ref-1.f95 ! 952cf19c9f437fe5bca60825d6e099a0 libgomp/testsuite/libgomp.oacc-fortran/privatized-ref-2.f90 c8960b2d870263545f61c78baeb03c7b libgomp/testsuite/libgomp.oacc-fortran/pset-1.f90 0094f0ea35e805d38b98b9fc1df88e12 libgomp/testsuite/libgomp.oacc-fortran/reduction-1.f90 97e65050d6226da060e95c2fb1985e9d libgomp/testsuite/libgomp.oacc-fortran/reduction-2.f90 --- 103440,103446 ---- 1c3ea6cf8b3fdbaaca48eede6a78b377 libgomp/testsuite/libgomp.oacc-fortran/private-atomic-1-worker.f90 a2a630debffe26086dcf2269428bc680 libgomp/testsuite/libgomp.oacc-fortran/private-variables.f90 08b06d21055c0ae650695af3186e447b libgomp/testsuite/libgomp.oacc-fortran/privatized-ref-1.f95 ! 5159beb3fbb6cd285c66163c06346478 libgomp/testsuite/libgomp.oacc-fortran/privatized-ref-2.f90 c8960b2d870263545f61c78baeb03c7b libgomp/testsuite/libgomp.oacc-fortran/pset-1.f90 0094f0ea35e805d38b98b9fc1df88e12 libgomp/testsuite/libgomp.oacc-fortran/reduction-1.f90 97e65050d6226da060e95c2fb1985e9d libgomp/testsuite/libgomp.oacc-fortran/reduction-2.f90 *************** e8a3245c095430c8ef2413afe2ee4c48 libgom *** 103247,103253 **** 6093e9d697987434cc9d843eba99b2f5 libgomp/work.c 99c2e5e712b990ee07be10f53e41f3fb libiberty/.gitignore a916467b91076e631dd8edb7424769c7 libiberty/COPYING.LIB ! bb8cf2c731de0ee49d5fbd98c147c468 libiberty/ChangeLog 347c31392973de6a4872d540c1718dc1 libiberty/ChangeLog.jit 73876271d63c0a1714fd605cb5898efa libiberty/Makefile.in c68dbf7834af4281ebd84caa3fd54680 libiberty/README --- 103472,103478 ---- 6093e9d697987434cc9d843eba99b2f5 libgomp/work.c 99c2e5e712b990ee07be10f53e41f3fb libiberty/.gitignore a916467b91076e631dd8edb7424769c7 libiberty/COPYING.LIB ! bf9c4a746d9e2cc6f93fd2d94cad0e26 libiberty/ChangeLog 347c31392973de6a4872d540c1718dc1 libiberty/ChangeLog.jit 73876271d63c0a1714fd605cb5898efa libiberty/Makefile.in c68dbf7834af4281ebd84caa3fd54680 libiberty/README *************** ed24fd55759858859e8feb2a33bdc7c7 libibe *** 103355,103361 **** 284bb7a096480b355b75c337086220a2 libiberty/sigsetmask.c 11cc73d71970e5461632e45ff27a3e5e libiberty/simple-object-coff.c 3d357f010f0064e322ba47b4a0f19ccd libiberty/simple-object-common.h ! a2473ab822d5d4c9e6b8deec974adf92 libiberty/simple-object-elf.c 08f858c0c13698d2ed88970324c062b3 libiberty/simple-object-mach-o.c 6d35a3a532f8174e879592ff4f5fa2e7 libiberty/simple-object-xcoff.c e383eb44fa28c6bed26aac5759bdf336 libiberty/simple-object.c --- 103580,103586 ---- 284bb7a096480b355b75c337086220a2 libiberty/sigsetmask.c 11cc73d71970e5461632e45ff27a3e5e libiberty/simple-object-coff.c 3d357f010f0064e322ba47b4a0f19ccd libiberty/simple-object-common.h ! 8932c678a724938775d47c7e64fcade1 libiberty/simple-object-elf.c 08f858c0c13698d2ed88970324c062b3 libiberty/simple-object-mach-o.c 6d35a3a532f8174e879592ff4f5fa2e7 libiberty/simple-object-xcoff.c e383eb44fa28c6bed26aac5759bdf336 libiberty/simple-object.c *************** fd380f0eaa4841b1f8185e3d4f8b1ff1 libitm *** 103472,103478 **** 01980d1244f27e09b91b774c38e34bf0 libitm/dispatch.h 6191540cdd3efc4f19822744c765842c libitm/eh_cpp.cc b9157df74e562da678e0ad3e8eb5d1dc libitm/libitm.h ! 7132ebbadb76578c67b390aef07e9d43 libitm/libitm.info 0c43820b921ecdbe9d98f068100e716a libitm/libitm.map ea467d7117853d139bb288ab75261139 libitm/libitm.spec.in 88925f6e4d09e1e09839f2b5b5ae1bf6 libitm/libitm.texi --- 103697,103703 ---- 01980d1244f27e09b91b774c38e34bf0 libitm/dispatch.h 6191540cdd3efc4f19822744c765842c libitm/eh_cpp.cc b9157df74e562da678e0ad3e8eb5d1dc libitm/libitm.h ! d3032fc198e2100f4f07a0e0715c52eb libitm/libitm.info 0c43820b921ecdbe9d98f068100e716a libitm/libitm.map ea467d7117853d139bb288ab75261139 libitm/libitm.spec.in 88925f6e4d09e1e09839f2b5b5ae1bf6 libitm/libitm.texi *************** d3ca33295a3a7d8dce98defab11dd626 libpho *** 104506,104512 **** 0a20e31851bfeb7af5c833abe63b3ba1 libphobos/testsuite/libphobos.unittest/unittest.exp bf9a9859c3d5e0581c756501aefba7b9 libphobos/testsuite/testsuite_flags.in a916467b91076e631dd8edb7424769c7 libquadmath/COPYING.LIB ! 22232001f6c99303e8d9eff8388ca7bf libquadmath/ChangeLog 4696eddf264dd090e144b4849b0a6d91 libquadmath/Makefile.am 644a78a01d94abe28b364eaa21142d82 libquadmath/Makefile.in d9afbc1f1e04c7e461265ff9323cc6f4 libquadmath/acinclude.m4 --- 104731,104737 ---- 0a20e31851bfeb7af5c833abe63b3ba1 libphobos/testsuite/libphobos.unittest/unittest.exp bf9a9859c3d5e0581c756501aefba7b9 libphobos/testsuite/testsuite_flags.in a916467b91076e631dd8edb7424769c7 libquadmath/COPYING.LIB ! 04b8325204262ac0a395ef7ffc001ef6 libquadmath/ChangeLog 4696eddf264dd090e144b4849b0a6d91 libquadmath/Makefile.am 644a78a01d94abe28b364eaa21142d82 libquadmath/Makefile.in d9afbc1f1e04c7e461265ff9323cc6f4 libquadmath/acinclude.m4 *************** d9afbc1f1e04c7e461265ff9323cc6f4 libqua *** 104514,104520 **** cf5a7864ff15ab4dd1604e0f6fe4e501 libquadmath/config.h.in 29f1dc1d4d1b2c2dde209fe86503326b libquadmath/configure 06e51379889d00dc467f2a2d496fa0a7 libquadmath/configure.ac ! f33b7afbc989c830c805e3906f49f823 libquadmath/libquadmath.info b19dc24b5767bb9f3e4d7b3bb50f9f47 libquadmath/libquadmath.texi 77280bb7ee423875e03d9c0d34527df6 libquadmath/libtool-version 452fee0ef153d65eb7413a5103c63a23 libquadmath/math/acoshq.c --- 104739,104745 ---- cf5a7864ff15ab4dd1604e0f6fe4e501 libquadmath/config.h.in 29f1dc1d4d1b2c2dde209fe86503326b libquadmath/configure 06e51379889d00dc467f2a2d496fa0a7 libquadmath/configure.ac ! ad2f49008e837f007286d54545656dcc libquadmath/libquadmath.info b19dc24b5767bb9f3e4d7b3bb50f9f47 libquadmath/libquadmath.texi 77280bb7ee423875e03d9c0d34527df6 libquadmath/libtool-version 452fee0ef153d65eb7413a5103c63a23 libquadmath/math/acoshq.c *************** afdc9f496616fa82df7f0fe745c94715 libqua *** 104554,104560 **** a79c69584ad8588015499b21237806e0 libquadmath/math/erfq.c 33862b23bd6abcc57d8827fdc4186def libquadmath/math/exp2q.c 1548eb0dd3f9e6732da4a7fe975e29b8 libquadmath/math/expm1q.c ! e5817a6317e56b7de35ef78dd3f9aedc libquadmath/math/expq.c 0aeade4d60bd21701f9e751a4cea9acc libquadmath/math/expq_table.h 64ad2fc9b59a6759c6b929e0ac39ab85 libquadmath/math/fabsq.c b70fca866938cc819de3e4006b0c4b63 libquadmath/math/fdimq.c --- 104779,104785 ---- a79c69584ad8588015499b21237806e0 libquadmath/math/erfq.c 33862b23bd6abcc57d8827fdc4186def libquadmath/math/exp2q.c 1548eb0dd3f9e6732da4a7fe975e29b8 libquadmath/math/expm1q.c ! cc79ca17cc585ecf1d9971ad99e91bad libquadmath/math/expq.c 0aeade4d60bd21701f9e751a4cea9acc libquadmath/math/expq_table.h 64ad2fc9b59a6759c6b929e0ac39ab85 libquadmath/math/fabsq.c b70fca866938cc819de3e4006b0c4b63 libquadmath/math/fdimq.c *************** b7cf7ac9dd30a51c9de8919a232874a4 libssp *** 105146,105152 **** b81de192dda77932887ae66cf31cdd9e libssp/strncpy-chk.c 5c71217c6b2a9d406fbc27d0fc6e8042 libssp/vsnprintf-chk.c caf814994c08b81abae4688b582bcaf4 libssp/vsprintf-chk.c ! b0f94faa585f575db7e4da71ad9544ac libstdc++-v3/ChangeLog 7aa6c40440a44fcf5ec94c066160c2f8 libstdc++-v3/ChangeLog-1998 7aff86600b6a1ed3fa87305075a92db0 libstdc++-v3/ChangeLog-1999 a6f28e8fc9bb07696a9e068b439a3a87 libstdc++-v3/ChangeLog-2000 --- 105371,105377 ---- b81de192dda77932887ae66cf31cdd9e libssp/strncpy-chk.c 5c71217c6b2a9d406fbc27d0fc6e8042 libssp/vsnprintf-chk.c caf814994c08b81abae4688b582bcaf4 libssp/vsprintf-chk.c ! 70714e3a329c6628059bb4a7dbe4363b libstdc++-v3/ChangeLog 7aa6c40440a44fcf5ec94c066160c2f8 libstdc++-v3/ChangeLog-1998 7aff86600b6a1ed3fa87305075a92db0 libstdc++-v3/ChangeLog-1999 a6f28e8fc9bb07696a9e068b439a3a87 libstdc++-v3/ChangeLog-2000 *************** a8f4290dba5b481ad426148a03c75dd0 libstd *** 105176,105182 **** f372af73db4ac0ad88e43199e1f29e08 libstdc++-v3/README 53146b59a99fb6a2e1b6850d5b76bdf2 libstdc++-v3/acinclude.m4 734c1cbc8791fbceb09b49c5d07d6966 libstdc++-v3/aclocal.m4 ! 5c576390e1b3345bb87af431246c8203 libstdc++-v3/config.h.in b321f08c525a980d5443810305bb4463 libstdc++-v3/config/abi/compatibility.h 1e503159ee7333dd5a3f9df292325d11 libstdc++-v3/config/abi/post/aarch64-linux-gnu/baseline_symbols.txt 730569c0ef38f6e6322b3c4ac65253ce libstdc++-v3/config/abi/post/alpha-linux-gnu/baseline_symbols.txt --- 105401,105407 ---- f372af73db4ac0ad88e43199e1f29e08 libstdc++-v3/README 53146b59a99fb6a2e1b6850d5b76bdf2 libstdc++-v3/acinclude.m4 734c1cbc8791fbceb09b49c5d07d6966 libstdc++-v3/aclocal.m4 ! 49322748d3fd427aa529bf85a6bee30e libstdc++-v3/config.h.in b321f08c525a980d5443810305bb4463 libstdc++-v3/config/abi/compatibility.h 1e503159ee7333dd5a3f9df292325d11 libstdc++-v3/config/abi/post/aarch64-linux-gnu/baseline_symbols.txt 730569c0ef38f6e6322b3c4ac65253ce libstdc++-v3/config/abi/post/alpha-linux-gnu/baseline_symbols.txt *************** b01f8da8f4373070847fe317fe8a546e libstd *** 105213,105219 **** 5b1437b6511efce579bf1da38fbf09e4 libstdc++-v3/config/allocator/malloc_allocator_base.h 3c43333b0e1372330d7f702387d162e2 libstdc++-v3/config/allocator/new_allocator_base.h dfce7276b58a154b2bc5e32da0857f53 libstdc++-v3/config/cpu/aarch64/opt/bits/opt_random.h ! ad78f8ccc8fa9d36e3fc3263e3339664 libstdc++-v3/config/cpu/aarch64/opt/ext/opt_random.h 350ddc20b89951f58a8a3d3fdf5c81eb libstdc++-v3/config/cpu/arm/cpu_defines.h f9af62f198176a5d26a4a86a0e193513 libstdc++-v3/config/cpu/arm/cxxabi_tweaks.h 266ad51a6746ccb33911a163130edc52 libstdc++-v3/config/cpu/cris/atomic_word.h --- 105438,105444 ---- 5b1437b6511efce579bf1da38fbf09e4 libstdc++-v3/config/allocator/malloc_allocator_base.h 3c43333b0e1372330d7f702387d162e2 libstdc++-v3/config/allocator/new_allocator_base.h dfce7276b58a154b2bc5e32da0857f53 libstdc++-v3/config/cpu/aarch64/opt/bits/opt_random.h ! 406d534a015ca971d5eca0526a4c4fd5 libstdc++-v3/config/cpu/aarch64/opt/ext/opt_random.h 350ddc20b89951f58a8a3d3fdf5c81eb libstdc++-v3/config/cpu/arm/cpu_defines.h f9af62f198176a5d26a4a86a0e193513 libstdc++-v3/config/cpu/arm/cxxabi_tweaks.h 266ad51a6746ccb33911a163130edc52 libstdc++-v3/config/cpu/cris/atomic_word.h *************** dc921efb4ef4ecc542a99fd9d527291c libstd *** 105229,105235 **** 931f8c1cbcad18bc14f13abb08939983 libstdc++-v3/config/cpu/i386/atomicity.h fcc15ae77a67ff213eba4cd4621e0b20 libstdc++-v3/config/cpu/i486/atomicity.h 926ba4b8455c31d3be5ce75d240029d9 libstdc++-v3/config/cpu/i486/opt/bits/opt_random.h ! a780b5a0bfe17f4d8aa7f1e93758516e libstdc++-v3/config/cpu/i486/opt/ext/opt_random.h a3c2eb1ba564b0d6216d7cedf0485645 libstdc++-v3/config/cpu/m68k/atomicity.h 92434f0f934aa4721185120ece27a79b libstdc++-v3/config/cpu/microblaze/cpu_defines.h a26caf1cbae7ec64ae4fbb6f805c0a43 libstdc++-v3/config/cpu/powerpc/cpu_defines.h --- 105454,105460 ---- 931f8c1cbcad18bc14f13abb08939983 libstdc++-v3/config/cpu/i386/atomicity.h fcc15ae77a67ff213eba4cd4621e0b20 libstdc++-v3/config/cpu/i486/atomicity.h 926ba4b8455c31d3be5ce75d240029d9 libstdc++-v3/config/cpu/i486/opt/bits/opt_random.h ! fec5648938e52b10c78d969654588f28 libstdc++-v3/config/cpu/i486/opt/ext/opt_random.h a3c2eb1ba564b0d6216d7cedf0485645 libstdc++-v3/config/cpu/m68k/atomicity.h 92434f0f934aa4721185120ece27a79b libstdc++-v3/config/cpu/microblaze/cpu_defines.h a26caf1cbae7ec64ae4fbb6f805c0a43 libstdc++-v3/config/cpu/powerpc/cpu_defines.h *************** b32b29daa3ac6240ae38f37366b0d4da libstd *** 105364,105371 **** 78d15556a78885c1221dbb429fd77a08 libstdc++-v3/config/os/vxworks/ctype_configure_char.cc 11c759cf4b750f149bca3052e251404d libstdc++-v3/config/os/vxworks/ctype_inline.h a58306525e8e9363101bf5738db96b46 libstdc++-v3/config/os/vxworks/os_defines.h ! 1d922554a4058f8b3dce8a0b82db0587 libstdc++-v3/configure ! 7a5999cfe631e9eabe5b5318b97da7f1 libstdc++-v3/configure.ac 6f48d91af78c16e62f258e7bedec5125 libstdc++-v3/configure.host 584164974df7c169b96d93356371b4a7 libstdc++-v3/crossconfig.m4 894b6a88368e88c0d19c47645d774272 libstdc++-v3/doc/Makefile.am --- 105589,105596 ---- 78d15556a78885c1221dbb429fd77a08 libstdc++-v3/config/os/vxworks/ctype_configure_char.cc 11c759cf4b750f149bca3052e251404d libstdc++-v3/config/os/vxworks/ctype_inline.h a58306525e8e9363101bf5738db96b46 libstdc++-v3/config/os/vxworks/os_defines.h ! 1a0dcb6925e62f1a0d52a4decbfc8a71 libstdc++-v3/configure ! f79d891f6e15f27909b97dfea5fac2d1 libstdc++-v3/configure.ac 6f48d91af78c16e62f258e7bedec5125 libstdc++-v3/configure.host 584164974df7c169b96d93356371b4a7 libstdc++-v3/crossconfig.m4 894b6a88368e88c0d19c47645d774272 libstdc++-v3/doc/Makefile.am *************** afb8b693720cc1c47324b843de9ab041 libstd *** 105380,105386 **** c68ff21babfa14f20b98e36a2c808418 libstdc++-v3/doc/html/api.html 08920438eea18325b4bfdf979379ff66 libstdc++-v3/doc/html/bk02.html 47886ba7da131bf3cbf81a27cada5f6f libstdc++-v3/doc/html/bk03.html ! a75d614dcfc1b2374bccc626e2464c94 libstdc++-v3/doc/html/faq.html 1ae70f0bf94464b036515d333fff8ab2 libstdc++-v3/doc/html/images/confdeps.png d7f63b43e9f4c39cf71de7585de522ee libstdc++-v3/doc/html/images/pbds_balls_and_bins.png 22eedc841676a98f8ae8b95131ac4d7e libstdc++-v3/doc/html/images/pbds_binary_priority_queue_int_push.png --- 105605,105611 ---- c68ff21babfa14f20b98e36a2c808418 libstdc++-v3/doc/html/api.html 08920438eea18325b4bfdf979379ff66 libstdc++-v3/doc/html/bk02.html 47886ba7da131bf3cbf81a27cada5f6f libstdc++-v3/doc/html/bk03.html ! 1a0a9b3cf2f3302b331a07125a64bdaa libstdc++-v3/doc/html/faq.html 1ae70f0bf94464b036515d333fff8ab2 libstdc++-v3/doc/html/images/confdeps.png d7f63b43e9f4c39cf71de7585de522ee libstdc++-v3/doc/html/images/pbds_balls_and_bins.png 22eedc841676a98f8ae8b95131ac4d7e libstdc++-v3/doc/html/images/pbds_binary_priority_queue_int_push.png *************** d588d1650d08cdbff4e809d0890cc498 libstd *** 105479,105485 **** cc3700f2fde50987f186f23abf98a7b1 libstdc++-v3/doc/html/manual/concept_checking.html f3a54a6315d716742603d33f454f2c19 libstdc++-v3/doc/html/manual/concurrency.html e1fadad9f19b599d57938ddef7e014f1 libstdc++-v3/doc/html/manual/configure.html ! af4e79b9e55fd023eeb0459df34a4a82 libstdc++-v3/doc/html/manual/containers.html c7e40c1085e414b3b4d5896db4013205 libstdc++-v3/doc/html/manual/containers_and_c.html f71d3ed5d8c1753572ba02518e3744a9 libstdc++-v3/doc/html/manual/debug.html 1bd34529d162b6f3a08d5f2ea4943c6a libstdc++-v3/doc/html/manual/debug_mode.html --- 105704,105710 ---- cc3700f2fde50987f186f23abf98a7b1 libstdc++-v3/doc/html/manual/concept_checking.html f3a54a6315d716742603d33f454f2c19 libstdc++-v3/doc/html/manual/concurrency.html e1fadad9f19b599d57938ddef7e014f1 libstdc++-v3/doc/html/manual/configure.html ! 5328918ec42768cddb06c3e97ef4530c libstdc++-v3/doc/html/manual/containers.html c7e40c1085e414b3b4d5896db4013205 libstdc++-v3/doc/html/manual/containers_and_c.html f71d3ed5d8c1753572ba02518e3744a9 libstdc++-v3/doc/html/manual/debug.html 1bd34529d162b6f3a08d5f2ea4943c6a libstdc++-v3/doc/html/manual/debug_mode.html *************** afcc2751dae09e088abc1e3175cb94cc libstd *** 105499,105507 **** 3946985aede4994e9743b0f8d71b41ba libstdc++-v3/doc/html/manual/ext_demangling.html 05003e71d54cfdfd4c8291489f8ffa07 libstdc++-v3/doc/html/manual/ext_io.html 44f8ef8b093904d418755d0e32d700b7 libstdc++-v3/doc/html/manual/ext_iterators.html ! 8f3bd86e04d263ad87cc258c289aae6d libstdc++-v3/doc/html/manual/ext_numerics.html 6d380acac52eb8c888a54068e44b16ac libstdc++-v3/doc/html/manual/ext_preface.html ! 5632eb8ef681cd35b41be7eb7a3d7a98 libstdc++-v3/doc/html/manual/ext_sgi.html 9b34310c7cb7faa4373ee6683678c457 libstdc++-v3/doc/html/manual/ext_utilities.html 9e255046a8ef2903114374ed06403045 libstdc++-v3/doc/html/manual/extensions.html 792387063cb26c7711919085d56706c2 libstdc++-v3/doc/html/manual/facets.html --- 105724,105732 ---- 3946985aede4994e9743b0f8d71b41ba libstdc++-v3/doc/html/manual/ext_demangling.html 05003e71d54cfdfd4c8291489f8ffa07 libstdc++-v3/doc/html/manual/ext_io.html 44f8ef8b093904d418755d0e32d700b7 libstdc++-v3/doc/html/manual/ext_iterators.html ! ffd5e74a40bbf6623b8ccf687eb584d8 libstdc++-v3/doc/html/manual/ext_numerics.html 6d380acac52eb8c888a54068e44b16ac libstdc++-v3/doc/html/manual/ext_preface.html ! 6889f243ab6934ae5f80ea7fa9c69dbf libstdc++-v3/doc/html/manual/ext_sgi.html 9b34310c7cb7faa4373ee6683678c457 libstdc++-v3/doc/html/manual/ext_utilities.html 9e255046a8ef2903114374ed06403045 libstdc++-v3/doc/html/manual/extensions.html 792387063cb26c7711919085d56706c2 libstdc++-v3/doc/html/manual/facets.html *************** ffceba0f3c20f451f9753c101c0fa634 libstd *** 105546,105552 **** 01c6fb78afa342def6da44376b90a890 libstdc++-v3/doc/html/manual/source_code_style.html f875f3f4cddfe4fee6aff2308ccb4563 libstdc++-v3/doc/html/manual/source_design_notes.html 391422dd4f4cdbd4d764a952a0f345e6 libstdc++-v3/doc/html/manual/source_organization.html ! 6265ce69985e68cb8528e53039f5c9de libstdc++-v3/doc/html/manual/status.html ea0c531c09fa230f346f8ba700961e4a libstdc++-v3/doc/html/manual/std_contents.html dbb5f81a9e8864374fbb835eaa4e8b0d libstdc++-v3/doc/html/manual/streambufs.html 47e6a6ef4752e7c7e3ecb2a4948a7514 libstdc++-v3/doc/html/manual/strings.html --- 105771,105777 ---- 01c6fb78afa342def6da44376b90a890 libstdc++-v3/doc/html/manual/source_code_style.html f875f3f4cddfe4fee6aff2308ccb4563 libstdc++-v3/doc/html/manual/source_design_notes.html 391422dd4f4cdbd4d764a952a0f345e6 libstdc++-v3/doc/html/manual/source_organization.html ! 3117cfd1f8e64b632dca7ea0ceab3fa9 libstdc++-v3/doc/html/manual/status.html ea0c531c09fa230f346f8ba700961e4a libstdc++-v3/doc/html/manual/std_contents.html dbb5f81a9e8864374fbb835eaa4e8b0d libstdc++-v3/doc/html/manual/streambufs.html 47e6a6ef4752e7c7e3ecb2a4948a7514 libstdc++-v3/doc/html/manual/strings.html *************** fcdceeabf3a95117ea22e93a0354e564 libstd *** 105557,105576 **** c39b927efcec5ac84139c1490c8ef320 libstdc++-v3/doc/html/manual/traits.html 530b96535baacfe35df2e65f9dfe7efc libstdc++-v3/doc/html/manual/unordered_associative.html 493e51f601322aeac551a55654678e1a libstdc++-v3/doc/html/manual/using.html ! a98d94ba8ccfb620e98ebfe01192e61e libstdc++-v3/doc/html/manual/using_concurrency.html 79fb9de4a4c89a913a76e1828500499d libstdc++-v3/doc/html/manual/using_dual_abi.html 4868e3591133577974ca85a537dbd8a0 libstdc++-v3/doc/html/manual/using_dynamic_or_shared.html b9abf80a75c223a9423b212d20240602 libstdc++-v3/doc/html/manual/using_exceptions.html 8fc6625206a4feba33ced5fa38ab3af8 libstdc++-v3/doc/html/manual/using_headers.html fd48645b226b9c86440c0600f65ab59d libstdc++-v3/doc/html/manual/using_macros.html ccc3b1a320ccc49a977c80546610195b libstdc++-v3/doc/html/manual/using_namespaces.html ! d881fcffb799c09a28d8174ccb1326a2 libstdc++-v3/doc/html/manual/utilities.html ccbc0492a648982f2dc225595bdbc567 libstdc++-v3/doc/xml/api.xml e1775a73c7dd9e58d002cffb39192faa libstdc++-v3/doc/xml/authors.xml 5906074c27c57c65b220c35bbcb2c5ec libstdc++-v3/doc/xml/book.txml 44d3a92b83abfb18efac80519c79b44c libstdc++-v3/doc/xml/chapter.txml 011b8e6a5442e4dc08f02e7295b644a3 libstdc++-v3/doc/xml/class.txml ! 4e6a47132fecfe86bbc1dd045cbbd42b libstdc++-v3/doc/xml/faq.xml ea77580f7e81e2c49aea3f425c01ee2b libstdc++-v3/doc/xml/gnu/fdl-1.3.xml 56bb32e9ab9358834c5f8eca2cd0e969 libstdc++-v3/doc/xml/gnu/gpl-3.0.xml 18a6390297702ec8fd75cbcc525d2005 libstdc++-v3/doc/xml/images/confdeps.dot --- 105782,105801 ---- c39b927efcec5ac84139c1490c8ef320 libstdc++-v3/doc/html/manual/traits.html 530b96535baacfe35df2e65f9dfe7efc libstdc++-v3/doc/html/manual/unordered_associative.html 493e51f601322aeac551a55654678e1a libstdc++-v3/doc/html/manual/using.html ! 08121b7fa3846487302afa82afc9d571 libstdc++-v3/doc/html/manual/using_concurrency.html 79fb9de4a4c89a913a76e1828500499d libstdc++-v3/doc/html/manual/using_dual_abi.html 4868e3591133577974ca85a537dbd8a0 libstdc++-v3/doc/html/manual/using_dynamic_or_shared.html b9abf80a75c223a9423b212d20240602 libstdc++-v3/doc/html/manual/using_exceptions.html 8fc6625206a4feba33ced5fa38ab3af8 libstdc++-v3/doc/html/manual/using_headers.html fd48645b226b9c86440c0600f65ab59d libstdc++-v3/doc/html/manual/using_macros.html ccc3b1a320ccc49a977c80546610195b libstdc++-v3/doc/html/manual/using_namespaces.html ! 13c8dfb643338ee235bfc84a29e5d3f2 libstdc++-v3/doc/html/manual/utilities.html ccbc0492a648982f2dc225595bdbc567 libstdc++-v3/doc/xml/api.xml e1775a73c7dd9e58d002cffb39192faa libstdc++-v3/doc/xml/authors.xml 5906074c27c57c65b220c35bbcb2c5ec libstdc++-v3/doc/xml/book.txml 44d3a92b83abfb18efac80519c79b44c libstdc++-v3/doc/xml/chapter.txml 011b8e6a5442e4dc08f02e7295b644a3 libstdc++-v3/doc/xml/class.txml ! 2a1ded5506bfe084056e2e7524c0c94a libstdc++-v3/doc/xml/faq.xml ea77580f7e81e2c49aea3f425c01ee2b libstdc++-v3/doc/xml/gnu/fdl-1.3.xml 56bb32e9ab9358834c5f8eca2cd0e969 libstdc++-v3/doc/xml/gnu/gpl-3.0.xml 18a6390297702ec8fd75cbcc525d2005 libstdc++-v3/doc/xml/images/confdeps.dot *************** e184d827d7fb559037041e81118936cb libstd *** 105765,105778 **** af3361d0d0af961859ec0346c38ac8c8 libstdc++-v3/doc/xml/manual/concurrency.xml 86f27306f8b76aebd69ea92641fd2c94 libstdc++-v3/doc/xml/manual/concurrency_extensions.xml 553d4d98030b907a6eda291624e1094e libstdc++-v3/doc/xml/manual/configure.xml ! b7a892b2e432f52274c482549c3264a2 libstdc++-v3/doc/xml/manual/containers.xml 18a1ebf5d656fe7bf648dd0489546d33 libstdc++-v3/doc/xml/manual/ctype.xml 1ef2d3bb759e6f6de762e1c79ff08030 libstdc++-v3/doc/xml/manual/debug.xml c7064e3c477845a150f6e575e6babf6e libstdc++-v3/doc/xml/manual/debug_mode.xml f320f25003678cca910f09ba54c923fc libstdc++-v3/doc/xml/manual/diagnostics.xml 561ce4bba87e35c92c47d95599ca9d9b libstdc++-v3/doc/xml/manual/documentation_hacking.xml a2116aae732dc28139ce0b6ce1ae8d70 libstdc++-v3/doc/xml/manual/evolution.xml ! 137276d6eb0bbaf6563b8319770dc747 libstdc++-v3/doc/xml/manual/extensions.xml 7f1864c7f3c3b2bfde84b7086be97ca7 libstdc++-v3/doc/xml/manual/internals.xml 4ea0fb8db18e25304b15e44203e758ed libstdc++-v3/doc/xml/manual/intro.xml 93c3158fe28bdfbbf03dd039cc4e79a2 libstdc++-v3/doc/xml/manual/io.xml --- 105990,106003 ---- af3361d0d0af961859ec0346c38ac8c8 libstdc++-v3/doc/xml/manual/concurrency.xml 86f27306f8b76aebd69ea92641fd2c94 libstdc++-v3/doc/xml/manual/concurrency_extensions.xml 553d4d98030b907a6eda291624e1094e libstdc++-v3/doc/xml/manual/configure.xml ! c0187d7913b62d23fb5d007390fedea4 libstdc++-v3/doc/xml/manual/containers.xml 18a1ebf5d656fe7bf648dd0489546d33 libstdc++-v3/doc/xml/manual/ctype.xml 1ef2d3bb759e6f6de762e1c79ff08030 libstdc++-v3/doc/xml/manual/debug.xml c7064e3c477845a150f6e575e6babf6e libstdc++-v3/doc/xml/manual/debug_mode.xml f320f25003678cca910f09ba54c923fc libstdc++-v3/doc/xml/manual/diagnostics.xml 561ce4bba87e35c92c47d95599ca9d9b libstdc++-v3/doc/xml/manual/documentation_hacking.xml a2116aae732dc28139ce0b6ce1ae8d70 libstdc++-v3/doc/xml/manual/evolution.xml ! 67af344d7431e801f80bd0939e41fa09 libstdc++-v3/doc/xml/manual/extensions.xml 7f1864c7f3c3b2bfde84b7086be97ca7 libstdc++-v3/doc/xml/manual/internals.xml 4ea0fb8db18e25304b15e44203e758ed libstdc++-v3/doc/xml/manual/intro.xml 93c3158fe28bdfbbf03dd039cc4e79a2 libstdc++-v3/doc/xml/manual/io.xml *************** d766137e6e226eaf2c354f95fd9c7274 libstd *** 105788,105809 **** f25986e96331b9ee671b4fe62ab33a1c libstdc++-v3/doc/xml/manual/prerequisites.xml cec5c5415c371a664adb0490e2571c3c libstdc++-v3/doc/xml/manual/shared_ptr.xml d7f222c42325cd44eadad2c59eef7e6f libstdc++-v3/doc/xml/manual/spine.xml ! 3a11d8e8ab3c584eff4a1db8c89ebb6c libstdc++-v3/doc/xml/manual/status_cxx1998.xml ! 018d0862c809a2964987fff1cc9fed32 libstdc++-v3/doc/xml/manual/status_cxx2011.xml ! 2a26b112e48c210818293fa1236d6a77 libstdc++-v3/doc/xml/manual/status_cxx2014.xml ! 009950fad0ee8a5fe2658c2a4eb9de1f libstdc++-v3/doc/xml/manual/status_cxx2017.xml ! e4c232569684bb777069868dc10f1144 libstdc++-v3/doc/xml/manual/status_cxx2020.xml ! 0c81b681c42b9213a5b7b6368df3e5f3 libstdc++-v3/doc/xml/manual/status_cxx2023.xml e12241b98a6c1e835b7b1d1bb31761ca libstdc++-v3/doc/xml/manual/status_cxxis29124.xml ! 7ab71114868b2646704eea5f5e7b1006 libstdc++-v3/doc/xml/manual/status_cxxtr1.xml ! f12dd94d3ab272a7ed475798c7ce8a2d libstdc++-v3/doc/xml/manual/status_cxxtr24733.xml 49334f70b9df9a3f9b81e04a418e8066 libstdc++-v3/doc/xml/manual/strings.xml 2b80feb1b53a8d0895a292620ec430b2 libstdc++-v3/doc/xml/manual/support.xml 97018a0f4a315121c5252972bbb47f4d libstdc++-v3/doc/xml/manual/test.xml e2e099be3dd6a4b7a940a7232635ee2c libstdc++-v3/doc/xml/manual/test_policy_data_structures.xml ! a8210fcc91ba532f4b5de20f748cdd8d libstdc++-v3/doc/xml/manual/using.xml 30ec356feba73e85c6cef4c27dbb372e libstdc++-v3/doc/xml/manual/using_exceptions.xml ! 74a5acaa32b3d223bd413c1bb5b69ac6 libstdc++-v3/doc/xml/manual/utilities.xml bea338f191a4667e20c7800cc6e08c93 libstdc++-v3/doc/xml/spine.xml bd966b4a0df6f2a84f9770525581d45c libstdc++-v3/doc/xsl/customization.xsl.in 42d14268f2b16c54a6bc2f71538a838c libstdc++-v3/fragment.am --- 106013,106034 ---- f25986e96331b9ee671b4fe62ab33a1c libstdc++-v3/doc/xml/manual/prerequisites.xml cec5c5415c371a664adb0490e2571c3c libstdc++-v3/doc/xml/manual/shared_ptr.xml d7f222c42325cd44eadad2c59eef7e6f libstdc++-v3/doc/xml/manual/spine.xml ! dfddeb072a857b23220905dc82ab41e4 libstdc++-v3/doc/xml/manual/status_cxx1998.xml ! 27a9da30ecb72f02b4a7349cb3bc8fcd libstdc++-v3/doc/xml/manual/status_cxx2011.xml ! ea122e78dd9d5d888b6c7706032c83a8 libstdc++-v3/doc/xml/manual/status_cxx2014.xml ! b74c9a3c5b7f7cdf215a964c89c7d87d libstdc++-v3/doc/xml/manual/status_cxx2017.xml ! 7fe08f7f019d22d9939d8247ab0ab921 libstdc++-v3/doc/xml/manual/status_cxx2020.xml ! 2fba0fbb40a1dca9d146e6e994c908cb libstdc++-v3/doc/xml/manual/status_cxx2023.xml e12241b98a6c1e835b7b1d1bb31761ca libstdc++-v3/doc/xml/manual/status_cxxis29124.xml ! edfafad7d8796eff25d382078ceeeb90 libstdc++-v3/doc/xml/manual/status_cxxtr1.xml ! bd4df8965f56149a25e0d51872906bba libstdc++-v3/doc/xml/manual/status_cxxtr24733.xml 49334f70b9df9a3f9b81e04a418e8066 libstdc++-v3/doc/xml/manual/strings.xml 2b80feb1b53a8d0895a292620ec430b2 libstdc++-v3/doc/xml/manual/support.xml 97018a0f4a315121c5252972bbb47f4d libstdc++-v3/doc/xml/manual/test.xml e2e099be3dd6a4b7a940a7232635ee2c libstdc++-v3/doc/xml/manual/test_policy_data_structures.xml ! af27d1d0a854b4644dc8a223740650cf libstdc++-v3/doc/xml/manual/using.xml 30ec356feba73e85c6cef4c27dbb372e libstdc++-v3/doc/xml/manual/using_exceptions.xml ! b820e3490221bb85cbf6bcdde0aa8150 libstdc++-v3/doc/xml/manual/utilities.xml bea338f191a4667e20c7800cc6e08c93 libstdc++-v3/doc/xml/spine.xml bd966b4a0df6f2a84f9770525581d45c libstdc++-v3/doc/xsl/customization.xsl.in 42d14268f2b16c54a6bc2f71538a838c libstdc++-v3/fragment.am *************** e87dd399a9a3274bd93b51404f64d0bf libstd *** 105821,105851 **** 7217663cbd5e0a5e2111f3fec04713c8 libstdc++-v3/include/bits/align.h d3293889955e929d58e1f028de6cf29e libstdc++-v3/include/bits/alloc_traits.h 6c08ea97cd0ca641b7c6a4e7a687cd0e libstdc++-v3/include/bits/allocated_ptr.h ! 7362644b2dafeb066cea713bcb177b3f libstdc++-v3/include/bits/allocator.h 55027045dee573f454c97fe82d8a6947 libstdc++-v3/include/bits/atomic_base.h 7d8c351bca946a7fab5426d823e9989f libstdc++-v3/include/bits/atomic_futex.h 2bc333d129d557e353930e14487d1089 libstdc++-v3/include/bits/atomic_timed_wait.h 6d4afbc0d502087a5e1d9be679beaf84 libstdc++-v3/include/bits/atomic_wait.h 1e7a7ec7b70380fec2fae7859f444a62 libstdc++-v3/include/bits/basic_ios.h 5138e57b1c4bb47b788cf001a00d5e83 libstdc++-v3/include/bits/basic_ios.tcc ! 855ed4c5516f043899142200fbe87e6d libstdc++-v3/include/bits/basic_string.h e389499c773300716ed61afb7807e81e libstdc++-v3/include/bits/basic_string.tcc 29b717115b885d97e144509c7987d132 libstdc++-v3/include/bits/boost_concept_check.h b812f02d862ef0991e7444eeb075e24b libstdc++-v3/include/bits/c++0x_warning.h 8ec1bbae0da273ee03ccd9422ac9eaa9 libstdc++-v3/include/bits/c++config a263a3f3602f70203473b672d17c8a72 libstdc++-v3/include/bits/char_traits.h 1e60fddeaaeb6880b640941bee6ce9ea libstdc++-v3/include/bits/charconv.h ! 4a85035bd13609f152e96c57bda26cd9 libstdc++-v3/include/bits/chrono.h 3e9cf75ed9ed37659eac8d4ff38d8f97 libstdc++-v3/include/bits/codecvt.h 07d6e1893b90a983d593ee7fb21310ed libstdc++-v3/include/bits/concept_check.h ! dc4f7a9bf49f92b36f90bb74df54e3e8 libstdc++-v3/include/bits/cow_string.h ! 834baaab8c868bfccd5bf4fd671ff55b libstdc++-v3/include/bits/cpp_type_traits.h ! eedc4c8df05c6edc00d2429148559730 libstdc++-v3/include/bits/deque.tcc e2975f99f1320ed7aea974ab28e63548 libstdc++-v3/include/bits/enable_special_members.h 5b841f3a77d290016be71c2ec593e5ee libstdc++-v3/include/bits/erase_if.h df585b647bf64527d75a18d706b9c354 libstdc++-v3/include/bits/forward_list.h 6a9e63a5a5b9d8d66230e7498a13a8ac libstdc++-v3/include/bits/forward_list.tcc ! 376a9c72a01c6351fdb3ea876ab1d7fc libstdc++-v3/include/bits/fs_dir.h c754907ea8fca8ebfbbd704b0a111dd0 libstdc++-v3/include/bits/fs_fwd.h 24187ccfba5ea82f6400131a7949b9df libstdc++-v3/include/bits/fs_ops.h b8ff50c36c207a47bb5f4c1209b3ee00 libstdc++-v3/include/bits/fs_path.h --- 106046,106076 ---- 7217663cbd5e0a5e2111f3fec04713c8 libstdc++-v3/include/bits/align.h d3293889955e929d58e1f028de6cf29e libstdc++-v3/include/bits/alloc_traits.h 6c08ea97cd0ca641b7c6a4e7a687cd0e libstdc++-v3/include/bits/allocated_ptr.h ! c84fd1fe2cc7fb9152e0fb271477d53f libstdc++-v3/include/bits/allocator.h 55027045dee573f454c97fe82d8a6947 libstdc++-v3/include/bits/atomic_base.h 7d8c351bca946a7fab5426d823e9989f libstdc++-v3/include/bits/atomic_futex.h 2bc333d129d557e353930e14487d1089 libstdc++-v3/include/bits/atomic_timed_wait.h 6d4afbc0d502087a5e1d9be679beaf84 libstdc++-v3/include/bits/atomic_wait.h 1e7a7ec7b70380fec2fae7859f444a62 libstdc++-v3/include/bits/basic_ios.h 5138e57b1c4bb47b788cf001a00d5e83 libstdc++-v3/include/bits/basic_ios.tcc ! e59f777a6c6acd8421710df13f6b773c libstdc++-v3/include/bits/basic_string.h e389499c773300716ed61afb7807e81e libstdc++-v3/include/bits/basic_string.tcc 29b717115b885d97e144509c7987d132 libstdc++-v3/include/bits/boost_concept_check.h b812f02d862ef0991e7444eeb075e24b libstdc++-v3/include/bits/c++0x_warning.h 8ec1bbae0da273ee03ccd9422ac9eaa9 libstdc++-v3/include/bits/c++config a263a3f3602f70203473b672d17c8a72 libstdc++-v3/include/bits/char_traits.h 1e60fddeaaeb6880b640941bee6ce9ea libstdc++-v3/include/bits/charconv.h ! cb3ba7b7676281a21e856e4c7109a306 libstdc++-v3/include/bits/chrono.h 3e9cf75ed9ed37659eac8d4ff38d8f97 libstdc++-v3/include/bits/codecvt.h 07d6e1893b90a983d593ee7fb21310ed libstdc++-v3/include/bits/concept_check.h ! 6c21142cb2b179e5977a0d7b8bff9b90 libstdc++-v3/include/bits/cow_string.h ! f563d173ddcdd2fc8b3cf2cc21f0006b libstdc++-v3/include/bits/cpp_type_traits.h ! f42c8ada43c53953fda8768721912892 libstdc++-v3/include/bits/deque.tcc e2975f99f1320ed7aea974ab28e63548 libstdc++-v3/include/bits/enable_special_members.h 5b841f3a77d290016be71c2ec593e5ee libstdc++-v3/include/bits/erase_if.h df585b647bf64527d75a18d706b9c354 libstdc++-v3/include/bits/forward_list.h 6a9e63a5a5b9d8d66230e7498a13a8ac libstdc++-v3/include/bits/forward_list.tcc ! 067e6f3775954c1d2ddac52cf8277d8d libstdc++-v3/include/bits/fs_dir.h c754907ea8fca8ebfbbd704b0a111dd0 libstdc++-v3/include/bits/fs_fwd.h 24187ccfba5ea82f6400131a7949b9df libstdc++-v3/include/bits/fs_ops.h b8ff50c36c207a47bb5f4c1209b3ee00 libstdc++-v3/include/bits/fs_path.h *************** a93916f72be5983f50e58dcf45bebc66 libstd *** 105893,105899 **** a45a0035a2ea36833ccd76f01c3674ca libstdc++-v3/include/bits/ranges_base.h 82c550495df206d72b5fd7655144052f libstdc++-v3/include/bits/ranges_cmp.h 154dfd0c70357290b292fa1de3b6b20d libstdc++-v3/include/bits/ranges_uninitialized.h ! f64c8eee99550f162748196f92025465 libstdc++-v3/include/bits/ranges_util.h 7134478b2d6962986c8f55feda96f290 libstdc++-v3/include/bits/refwrap.h b3d1d1fb010cbdbdf16a3356bb857104 libstdc++-v3/include/bits/regex.h afdda3aa1dbf0e29afa3e1195f5b261f libstdc++-v3/include/bits/regex.tcc --- 106118,106124 ---- a45a0035a2ea36833ccd76f01c3674ca libstdc++-v3/include/bits/ranges_base.h 82c550495df206d72b5fd7655144052f libstdc++-v3/include/bits/ranges_cmp.h 154dfd0c70357290b292fa1de3b6b20d libstdc++-v3/include/bits/ranges_uninitialized.h ! 8edb8d3835cb10e1d7238cd4f533b7fd libstdc++-v3/include/bits/ranges_util.h 7134478b2d6962986c8f55feda96f290 libstdc++-v3/include/bits/refwrap.h b3d1d1fb010cbdbdf16a3356bb857104 libstdc++-v3/include/bits/regex.h afdda3aa1dbf0e29afa3e1195f5b261f libstdc++-v3/include/bits/regex.tcc *************** b8ca4407175edde886c753e9218e35f7 libstd *** 105920,105931 **** 64d1fbbc59f75721c436b611254c743a libstdc++-v3/include/bits/std_thread.h 093480d0a62d296a1ca12faa241c4e2d libstdc++-v3/include/bits/stl_algo.h f52c1e15d6ceb9fae0fb0afe04ef4eb5 libstdc++-v3/include/bits/stl_algobase.h ! 2286695ca0fa1999d0f31443691a93d5 libstdc++-v3/include/bits/stl_bvector.h 1880b4f432a7cb200d74a3a48081e770 libstdc++-v3/include/bits/stl_construct.h 3dc1cd32df14abc94da494258ef5ae60 libstdc++-v3/include/bits/stl_deque.h 63fc7573f04ccb8f515906b34e2fa890 libstdc++-v3/include/bits/stl_function.h 6af963f90d2b295e1816b415f43c6e38 libstdc++-v3/include/bits/stl_heap.h ! 34eec5e02920df4df648cc26609789e9 libstdc++-v3/include/bits/stl_iterator.h 38b2a8b62aa295bca5f77a15903f4deb libstdc++-v3/include/bits/stl_iterator_base_funcs.h bce36b604a747a8f3a8ce8c38a7ac225 libstdc++-v3/include/bits/stl_iterator_base_types.h 73516b0fa035db1e298f5594effbdd24 libstdc++-v3/include/bits/stl_list.h --- 106145,106156 ---- 64d1fbbc59f75721c436b611254c743a libstdc++-v3/include/bits/std_thread.h 093480d0a62d296a1ca12faa241c4e2d libstdc++-v3/include/bits/stl_algo.h f52c1e15d6ceb9fae0fb0afe04ef4eb5 libstdc++-v3/include/bits/stl_algobase.h ! a5e92f31a0158e0ac367212640a5365c libstdc++-v3/include/bits/stl_bvector.h 1880b4f432a7cb200d74a3a48081e770 libstdc++-v3/include/bits/stl_construct.h 3dc1cd32df14abc94da494258ef5ae60 libstdc++-v3/include/bits/stl_deque.h 63fc7573f04ccb8f515906b34e2fa890 libstdc++-v3/include/bits/stl_function.h 6af963f90d2b295e1816b415f43c6e38 libstdc++-v3/include/bits/stl_heap.h ! 53f1f0a21b7a9c9ea5723f5d75fb1b32 libstdc++-v3/include/bits/stl_iterator.h 38b2a8b62aa295bca5f77a15903f4deb libstdc++-v3/include/bits/stl_iterator_base_funcs.h bce36b604a747a8f3a8ce8c38a7ac225 libstdc++-v3/include/bits/stl_iterator_base_types.h 73516b0fa035db1e298f5594effbdd24 libstdc++-v3/include/bits/stl_list.h *************** fe9061931e58eb13610622c957ad8bfe libstd *** 105942,105948 **** 1b1faa88b3cc0d6a85478ff95f6ecfe3 libstdc++-v3/include/bits/stl_tempbuf.h b0f070805933485a32b6dcd875ddf57b libstdc++-v3/include/bits/stl_tree.h 896cdab3151745d4496c63e8ebf4a4d4 libstdc++-v3/include/bits/stl_uninitialized.h ! 859577cb28ce25a2a0926b0cacd04970 libstdc++-v3/include/bits/stl_vector.h 865f635f62f4671aab4c1aa924218fe4 libstdc++-v3/include/bits/stream_iterator.h b0fcb882a7290e08ca43e14029ec35de libstdc++-v3/include/bits/streambuf.tcc 0bc57a4d1e53acce822697a7a2af289e libstdc++-v3/include/bits/streambuf_iterator.h --- 106167,106173 ---- 1b1faa88b3cc0d6a85478ff95f6ecfe3 libstdc++-v3/include/bits/stl_tempbuf.h b0f070805933485a32b6dcd875ddf57b libstdc++-v3/include/bits/stl_tree.h 896cdab3151745d4496c63e8ebf4a4d4 libstdc++-v3/include/bits/stl_uninitialized.h ! a16bbd0cb0bc9097f2d3b020e45e2a66 libstdc++-v3/include/bits/stl_vector.h 865f635f62f4671aab4c1aa924218fe4 libstdc++-v3/include/bits/stream_iterator.h b0fcb882a7290e08ca43e14029ec35de libstdc++-v3/include/bits/streambuf.tcc 0bc57a4d1e53acce822697a7a2af289e libstdc++-v3/include/bits/streambuf_iterator.h *************** b0fcb882a7290e08ca43e14029ec35de libstd *** 105961,105967 **** d1794ea86712506af9ad861dfbec9f9b libstdc++-v3/include/bits/valarray_array.h 39a6066d7b092ff20a6731264df6ca7e libstdc++-v3/include/bits/valarray_array.tcc 8c5f5a94b6e365602535c6de12c20595 libstdc++-v3/include/bits/valarray_before.h ! 15920b3621f2db919e9855184c6b0f6e libstdc++-v3/include/bits/vector.tcc 0775201d7ebadd93516a35c9004f0c37 libstdc++-v3/include/c/cassert 58cfd36e35d71475b967d7abe4ab0866 libstdc++-v3/include/c/cctype 2d0cb93589c640886a6d6df21d26cfc1 libstdc++-v3/include/c/cerrno --- 106186,106192 ---- d1794ea86712506af9ad861dfbec9f9b libstdc++-v3/include/bits/valarray_array.h 39a6066d7b092ff20a6731264df6ca7e libstdc++-v3/include/bits/valarray_array.tcc 8c5f5a94b6e365602535c6de12c20595 libstdc++-v3/include/bits/valarray_before.h ! 4bbf7c950b038e0322952de8d9f09b3b libstdc++-v3/include/bits/vector.tcc 0775201d7ebadd93516a35c9004f0c37 libstdc++-v3/include/c/cassert 58cfd36e35d71475b967d7abe4ab0866 libstdc++-v3/include/c/cctype 2d0cb93589c640886a6d6df21d26cfc1 libstdc++-v3/include/c/cerrno *************** a14c9b34103c0dfcabf33d32bb27cfd4 libstd *** 105995,106001 **** c24f5dfa5117af877db1109b2083979c libstdc++-v3/include/c_compatibility/setjmp.h 0a9406c30f2d22947ee03ade629eaddf libstdc++-v3/include/c_compatibility/signal.h 3a3cdac09cc64f488a51501161aae762 libstdc++-v3/include/c_compatibility/stdarg.h ! 0357bf0f700fc5d113d9b75e44ef7f50 libstdc++-v3/include/c_compatibility/stdatomic.h 61825ec1880611b0c5247f84841de162 libstdc++-v3/include/c_compatibility/stdbool.h a43c73a6fc0b41ad32a1911efbfa66c0 libstdc++-v3/include/c_compatibility/stddef.h 4c9867ae5cab639decffabb4628c28f8 libstdc++-v3/include/c_compatibility/stdint.h --- 106220,106226 ---- c24f5dfa5117af877db1109b2083979c libstdc++-v3/include/c_compatibility/setjmp.h 0a9406c30f2d22947ee03ade629eaddf libstdc++-v3/include/c_compatibility/signal.h 3a3cdac09cc64f488a51501161aae762 libstdc++-v3/include/c_compatibility/stdarg.h ! 0bad5da76e01eae1afaa9e5634313135 libstdc++-v3/include/c_compatibility/stdatomic.h 61825ec1880611b0c5247f84841de162 libstdc++-v3/include/c_compatibility/stdbool.h a43c73a6fc0b41ad32a1911efbfa66c0 libstdc++-v3/include/c_compatibility/stddef.h 4c9867ae5cab639decffabb4628c28f8 libstdc++-v3/include/c_compatibility/stdint.h *************** d5923cd604a1bcf708b50bc3510067ce libstd *** 106060,106066 **** 891f4b03a9d40c2b16d756043e4fcc6a libstdc++-v3/include/debug/formatter.h 0917dd7d63843863fcf7c020c87fe90d libstdc++-v3/include/debug/forward_list 53abc1b1108b12f79878f6a922b2cbfa libstdc++-v3/include/debug/functions.h ! 9ff1feece89554410c0cedc20b16e12c libstdc++-v3/include/debug/helper_functions.h f7885b345d1b9850b5398dfe5edb52af libstdc++-v3/include/debug/list 8b86fb24b26db0419f2fab1b10923c1d libstdc++-v3/include/debug/macros.h 7ec475183d161c06ce935b463882aa8e libstdc++-v3/include/debug/map --- 106285,106291 ---- 891f4b03a9d40c2b16d756043e4fcc6a libstdc++-v3/include/debug/formatter.h 0917dd7d63843863fcf7c020c87fe90d libstdc++-v3/include/debug/forward_list 53abc1b1108b12f79878f6a922b2cbfa libstdc++-v3/include/debug/functions.h ! feaa8348bcb909c625c554df3c776e3e libstdc++-v3/include/debug/helper_functions.h f7885b345d1b9850b5398dfe5edb52af libstdc++-v3/include/debug/list 8b86fb24b26db0419f2fab1b10923c1d libstdc++-v3/include/debug/macros.h 7ec475183d161c06ce935b463882aa8e libstdc++-v3/include/debug/map *************** f79062269672eb2b6195fcad7034e18b libstd *** 106098,106113 **** 85b50cb8925a5dcaa808980b5cb0d8f7 libstdc++-v3/include/experimental/bits/net.h b32e2888ec293d596ddfe98726a78cc7 libstdc++-v3/include/experimental/bits/numeric_traits.h 1d457f0e71c47e01d107c0ca8609019c libstdc++-v3/include/experimental/bits/shared_ptr.h ! 450e7e8272e831846c3e0de925774bab libstdc++-v3/include/experimental/bits/simd.h ! 8c77adb8c96e9ebdd51a5cb3e6f07a31 libstdc++-v3/include/experimental/bits/simd_builtin.h 1dcdb4880687a585b7a4eefae780875e libstdc++-v3/include/experimental/bits/simd_converter.h 966744e4a1d8afd63e630bd369285aeb libstdc++-v3/include/experimental/bits/simd_detail.h ! 45d83d46e5f5e353d6fcb6ed6091c97c libstdc++-v3/include/experimental/bits/simd_fixed_size.h 58d3b8e199b58221b53bc3637d2bb375 libstdc++-v3/include/experimental/bits/simd_math.h afe187f0ebc655339d9517eea4162676 libstdc++-v3/include/experimental/bits/simd_neon.h 07871da9889f814398693690143f99fd libstdc++-v3/include/experimental/bits/simd_ppc.h c63aee3fd930f615492d6e5b011c787e libstdc++-v3/include/experimental/bits/simd_scalar.h ! 54752d71b8804634e166d27c0c4a7c75 libstdc++-v3/include/experimental/bits/simd_x86.h 50722f04d8752d1fa4618f77cc80ed2f libstdc++-v3/include/experimental/bits/simd_x86_conversions.h e1be8e54aaec8a34e1f682da217a9550 libstdc++-v3/include/experimental/bits/string_view.tcc b17463914bf45d86c8b27f74d4738c10 libstdc++-v3/include/experimental/buffer --- 106323,106338 ---- 85b50cb8925a5dcaa808980b5cb0d8f7 libstdc++-v3/include/experimental/bits/net.h b32e2888ec293d596ddfe98726a78cc7 libstdc++-v3/include/experimental/bits/numeric_traits.h 1d457f0e71c47e01d107c0ca8609019c libstdc++-v3/include/experimental/bits/shared_ptr.h ! 7335bd32abf997eaebf644f8613724fb libstdc++-v3/include/experimental/bits/simd.h ! 95781361b4f97109c332fc6fae8c584d libstdc++-v3/include/experimental/bits/simd_builtin.h 1dcdb4880687a585b7a4eefae780875e libstdc++-v3/include/experimental/bits/simd_converter.h 966744e4a1d8afd63e630bd369285aeb libstdc++-v3/include/experimental/bits/simd_detail.h ! b6fdd1d43271c77d0f1275fa67ffa062 libstdc++-v3/include/experimental/bits/simd_fixed_size.h 58d3b8e199b58221b53bc3637d2bb375 libstdc++-v3/include/experimental/bits/simd_math.h afe187f0ebc655339d9517eea4162676 libstdc++-v3/include/experimental/bits/simd_neon.h 07871da9889f814398693690143f99fd libstdc++-v3/include/experimental/bits/simd_ppc.h c63aee3fd930f615492d6e5b011c787e libstdc++-v3/include/experimental/bits/simd_scalar.h ! e9bdde02db6197fa9f45bb6fb854de22 libstdc++-v3/include/experimental/bits/simd_x86.h 50722f04d8752d1fa4618f77cc80ed2f libstdc++-v3/include/experimental/bits/simd_x86_conversions.h e1be8e54aaec8a34e1f682da217a9550 libstdc++-v3/include/experimental/bits/string_view.tcc b17463914bf45d86c8b27f74d4738c10 libstdc++-v3/include/experimental/buffer *************** b156f0d597a2edae1a06e54aba071e41 libstd *** 106501,106507 **** 16ecbf48b313f47955487be8fe668037 libstdc++-v3/include/pstl/utils.h 072481f1e7d96b55385089405f535dd4 libstdc++-v3/include/std/algorithm 570dea393806af64e854327a07eae25a libstdc++-v3/include/std/any ! 19fa1e5331913fa2d824b26a04dfe055 libstdc++-v3/include/std/array 8be7bfd2354d786e2db174572c492cdb libstdc++-v3/include/std/atomic 0d3eb7ccdf0eef93cb681ca20d943870 libstdc++-v3/include/std/barrier 6c4a00cca741ccc69d90f2c62c4bed21 libstdc++-v3/include/std/bit --- 106726,106732 ---- 16ecbf48b313f47955487be8fe668037 libstdc++-v3/include/pstl/utils.h 072481f1e7d96b55385089405f535dd4 libstdc++-v3/include/std/algorithm 570dea393806af64e854327a07eae25a libstdc++-v3/include/std/any ! b900fbcebf49fdf1340c227beb279d0f libstdc++-v3/include/std/array 8be7bfd2354d786e2db174572c492cdb libstdc++-v3/include/std/atomic 0d3eb7ccdf0eef93cb681ca20d943870 libstdc++-v3/include/std/barrier 6c4a00cca741ccc69d90f2c62c4bed21 libstdc++-v3/include/std/bit *************** ecf2b56fde660beef255e7f04613957a libstd *** 106549,106555 **** 45dc0825469e66239592e3a77a3a80dc libstdc++-v3/include/std/set f06d5e0bd8ba76c953f6e66286be4872 libstdc++-v3/include/std/shared_mutex 88a3179695d69d9d5efe8967df5bb8c1 libstdc++-v3/include/std/source_location ! 692e0b2c06c5d19ac5338d286eb7e5d7 libstdc++-v3/include/std/span 4a9df1750ad06d95e86ac71ebda2e80f libstdc++-v3/include/std/spanstream f20be19b07cc107b37bbac605920911c libstdc++-v3/include/std/sstream ddbf2edbc47249f513d1ec2ef82db9b7 libstdc++-v3/include/std/stack --- 106774,106780 ---- 45dc0825469e66239592e3a77a3a80dc libstdc++-v3/include/std/set f06d5e0bd8ba76c953f6e66286be4872 libstdc++-v3/include/std/shared_mutex 88a3179695d69d9d5efe8967df5bb8c1 libstdc++-v3/include/std/source_location ! 30d7f0f79432bbd0f7abad72127fa729 libstdc++-v3/include/std/span 4a9df1750ad06d95e86ac71ebda2e80f libstdc++-v3/include/std/spanstream f20be19b07cc107b37bbac605920911c libstdc++-v3/include/std/sstream ddbf2edbc47249f513d1ec2ef82db9b7 libstdc++-v3/include/std/stack *************** ddbf2edbc47249f513d1ec2ef82db9b7 libstd *** 106558,106564 **** bca91ec547ac22052499a8fdbf54402f libstdc++-v3/include/std/stop_token 41d10501d4e6f65d267f4b3f86edf933 libstdc++-v3/include/std/streambuf 2050db70d23bce24c0db23f72bb7a5a4 libstdc++-v3/include/std/string ! 2db3ca10419d4457aecb783199bde07b libstdc++-v3/include/std/string_view 53595cdde4367db32fddc133626bd091 libstdc++-v3/include/std/syncstream 6059edfe8f0b4e7014488d6627bfbcf9 libstdc++-v3/include/std/system_error 2bcb7b3da31da2e6a5dba342215915fb libstdc++-v3/include/std/thread --- 106783,106789 ---- bca91ec547ac22052499a8fdbf54402f libstdc++-v3/include/std/stop_token 41d10501d4e6f65d267f4b3f86edf933 libstdc++-v3/include/std/streambuf 2050db70d23bce24c0db23f72bb7a5a4 libstdc++-v3/include/std/string ! 29aba166e42a3f39f5528bca39f05982 libstdc++-v3/include/std/string_view 53595cdde4367db32fddc133626bd091 libstdc++-v3/include/std/syncstream 6059edfe8f0b4e7014488d6627bfbcf9 libstdc++-v3/include/std/system_error 2bcb7b3da31da2e6a5dba342215915fb libstdc++-v3/include/std/thread *************** bcfe58b0268a24fe16eef99703b24f90 libstd *** 106568,106575 **** bcde64de884a6ef8713ae1ef3d01c974 libstdc++-v3/include/std/unordered_map 70ee03c1644aafe0cc882e9a3211d3d1 libstdc++-v3/include/std/unordered_set c0c9dccc846622406eef9f083e4f4ad5 libstdc++-v3/include/std/utility ! 543899a002d82719328274e29ff5f9ee libstdc++-v3/include/std/valarray ! caa250d69587be3268588e4efad09e80 libstdc++-v3/include/std/variant 3a32d802d4e23e09e723dfe0459079e5 libstdc++-v3/include/std/vector 07f27972c4ac72fa1bc271f88f049b4a libstdc++-v3/include/std/version 315a0c0dcb63f40cf8755bfeedce3f87 libstdc++-v3/include/tr1/array --- 106793,106800 ---- bcde64de884a6ef8713ae1ef3d01c974 libstdc++-v3/include/std/unordered_map 70ee03c1644aafe0cc882e9a3211d3d1 libstdc++-v3/include/std/unordered_set c0c9dccc846622406eef9f083e4f4ad5 libstdc++-v3/include/std/utility ! 923ca796932d10b585c8a6b05c069662 libstdc++-v3/include/std/valarray ! 4c193e64dc35bacb65243c92f832fc56 libstdc++-v3/include/std/variant 3a32d802d4e23e09e723dfe0459079e5 libstdc++-v3/include/std/vector 07f27972c4ac72fa1bc271f88f049b4a libstdc++-v3/include/std/version 315a0c0dcb63f40cf8755bfeedce3f87 libstdc++-v3/include/tr1/array *************** c930d4036922201099619257d25a2245 libstd *** 106636,106643 **** 064789c496f0f70ebb4edbc0b7e4a666 libstdc++-v3/include/tr1/wctype.h 27d05cea5b02463850117b8476f2ec42 libstdc++-v3/include/tr2/bool_set 917d83e0b0ee35850a1a637a3eee75c9 libstdc++-v3/include/tr2/bool_set.tcc ! ccdc152be32111912551bd0294ae6989 libstdc++-v3/include/tr2/dynamic_bitset ! 4384700c62cb70a7774717710cac4c07 libstdc++-v3/include/tr2/dynamic_bitset.tcc 88ca2da6dd5700f0e05d5f58e8fa62ef libstdc++-v3/include/tr2/ratio 632570c5614f68ebbbf25e6b74a12da2 libstdc++-v3/include/tr2/type_traits fa9622f8938011481224bfc47d3e2a92 libstdc++-v3/libsupc++/Makefile.am --- 106861,106868 ---- 064789c496f0f70ebb4edbc0b7e4a666 libstdc++-v3/include/tr1/wctype.h 27d05cea5b02463850117b8476f2ec42 libstdc++-v3/include/tr2/bool_set 917d83e0b0ee35850a1a637a3eee75c9 libstdc++-v3/include/tr2/bool_set.tcc ! 7afd408d1aa4514a28919786984d1451 libstdc++-v3/include/tr2/dynamic_bitset ! ec3fd1a0c5622ebd18ae513716920c6c libstdc++-v3/include/tr2/dynamic_bitset.tcc 88ca2da6dd5700f0e05d5f58e8fa62ef libstdc++-v3/include/tr2/ratio 632570c5614f68ebbbf25e6b74a12da2 libstdc++-v3/include/tr2/type_traits fa9622f8938011481224bfc47d3e2a92 libstdc++-v3/libsupc++/Makefile.am *************** c8cbca9ae8196cdff7586f9cd8784702 libstd *** 106737,106743 **** 99337a5a9c6351ae321ba8645b3981f0 libstdc++-v3/python/hook.in 68b329da9893e34099c7d8ad5cb9c940 libstdc++-v3/python/libstdcxx/__init__.py 9b4aa298a5559f01a31b4252b2ca34c7 libstdc++-v3/python/libstdcxx/v6/__init__.py ! 34607b768d02c4b46cc8afbacad73cf4 libstdc++-v3/python/libstdcxx/v6/printers.py 8a9fcedb67937bbba12d6701291dfb00 libstdc++-v3/python/libstdcxx/v6/xmethods.py cdac7363b91e7d57b85f7b560f62f033 libstdc++-v3/scripts/check_compile a4c1d51bba293cee2307fc7f9dd090f7 libstdc++-v3/scripts/check_performance --- 106962,106968 ---- 99337a5a9c6351ae321ba8645b3981f0 libstdc++-v3/python/hook.in 68b329da9893e34099c7d8ad5cb9c940 libstdc++-v3/python/libstdcxx/__init__.py 9b4aa298a5559f01a31b4252b2ca34c7 libstdc++-v3/python/libstdcxx/v6/__init__.py ! 6522a9d93ff3987078a2082d50162a0a libstdc++-v3/python/libstdcxx/v6/printers.py 8a9fcedb67937bbba12d6701291dfb00 libstdc++-v3/python/libstdcxx/v6/xmethods.py cdac7363b91e7d57b85f7b560f62f033 libstdc++-v3/scripts/check_compile a4c1d51bba293cee2307fc7f9dd090f7 libstdc++-v3/scripts/check_performance *************** e49fcbe6ea0d466f8e355e164552e4fb libstd *** 106756,106762 **** 8d7c6422b9a681072fab2a5dd93ad0c8 libstdc++-v3/src/Makefile.in ea4ab687ad1c540c0e58988377b4f365 libstdc++-v3/src/c++11/Makefile.am 95cc73e35f558a3d999320fbf7b7b58c libstdc++-v3/src/c++11/Makefile.in ! 4afad50e36b2bfef56fb3189f112ee46 libstdc++-v3/src/c++11/assert_fail.cc c914b3a82977dc07700477f8af234283 libstdc++-v3/src/c++11/chrono.cc 5ff7c7e87f5b8aef1a3dafd4292a4782 libstdc++-v3/src/c++11/codecvt.cc 6f4d4569f8ec67d46c6dcf972c0d8937 libstdc++-v3/src/c++11/compatibility-atomic-c++0x.cc --- 106981,106987 ---- 8d7c6422b9a681072fab2a5dd93ad0c8 libstdc++-v3/src/Makefile.in ea4ab687ad1c540c0e58988377b4f365 libstdc++-v3/src/c++11/Makefile.am 95cc73e35f558a3d999320fbf7b7b58c libstdc++-v3/src/c++11/Makefile.in ! a8301e209641b5926e6d480e14114cad libstdc++-v3/src/c++11/assert_fail.cc c914b3a82977dc07700477f8af234283 libstdc++-v3/src/c++11/chrono.cc 5ff7c7e87f5b8aef1a3dafd4292a4782 libstdc++-v3/src/c++11/codecvt.cc 6f4d4569f8ec67d46c6dcf972c0d8937 libstdc++-v3/src/c++11/compatibility-atomic-c++0x.cc *************** bccfdaafbb95c858e37317d0863bce04 libstd *** 106833,106839 **** f755cc51c53f4702fa47e78a06db4bef libstdc++-v3/src/c++17/floating_from_chars.cc 73812a0c249f1a107c6747054f47134b libstdc++-v3/src/c++17/floating_to_chars.cc bb0739a0b76ea0dfca5442362e727905 libstdc++-v3/src/c++17/fs_dir.cc ! 2aa4875b25b628b8f9327916444ba936 libstdc++-v3/src/c++17/fs_ops.cc 3763d05c842e72fb442d10bcd2333274 libstdc++-v3/src/c++17/fs_path.cc 5ae56ccd7ecc861799378737bab31926 libstdc++-v3/src/c++17/memory_resource.cc f986a48e2efed103402262a2315d1784 libstdc++-v3/src/c++17/ostream-inst.cc --- 107058,107064 ---- f755cc51c53f4702fa47e78a06db4bef libstdc++-v3/src/c++17/floating_from_chars.cc 73812a0c249f1a107c6747054f47134b libstdc++-v3/src/c++17/floating_to_chars.cc bb0739a0b76ea0dfca5442362e727905 libstdc++-v3/src/c++17/fs_dir.cc ! d80eac3af3f988f1346f0f85941f6fda libstdc++-v3/src/c++17/fs_ops.cc 3763d05c842e72fb442d10bcd2333274 libstdc++-v3/src/c++17/fs_path.cc 5ae56ccd7ecc861799378737bab31926 libstdc++-v3/src/c++17/memory_resource.cc f986a48e2efed103402262a2315d1784 libstdc++-v3/src/c++17/ostream-inst.cc *************** c829300d08f7d2c634a4496a70adb0db libstd *** 106877,106883 **** f4cb33993065f30cebe657441e1ba98b libstdc++-v3/src/c++98/ios_init.cc 1bdea41f382e85b0d5631deac79b2ea6 libstdc++-v3/src/c++98/ios_locale.cc 67cdf2af2758b592e8a50d7355c92338 libstdc++-v3/src/c++98/istream-string.cc ! ea1d3cba52f54695f9a41bed98515c50 libstdc++-v3/src/c++98/istream.cc de3a3d0c5c9a6c342709a687fcbcab02 libstdc++-v3/src/c++98/list-aux-2.cc 139acef23be0650b05bc4081d1b23af0 libstdc++-v3/src/c++98/list-aux.cc 6a672c8f7a1968b710a0fa2cbdd99c2d libstdc++-v3/src/c++98/list.cc --- 107102,107108 ---- f4cb33993065f30cebe657441e1ba98b libstdc++-v3/src/c++98/ios_init.cc 1bdea41f382e85b0d5631deac79b2ea6 libstdc++-v3/src/c++98/ios_locale.cc 67cdf2af2758b592e8a50d7355c92338 libstdc++-v3/src/c++98/istream-string.cc ! f8f39de163e49678b06423712c3d4537 libstdc++-v3/src/c++98/istream.cc de3a3d0c5c9a6c342709a687fcbcab02 libstdc++-v3/src/c++98/list-aux-2.cc 139acef23be0650b05bc4081d1b23af0 libstdc++-v3/src/c++98/list-aux.cc 6a672c8f7a1968b710a0fa2cbdd99c2d libstdc++-v3/src/c++98/list.cc *************** ae78d4e1f061aaf6556908dc649baabd libstd *** 107584,107590 **** 1ef204a969d3f470c0de434d5a42dd20 libstdc++-v3/testsuite/20_util/integer_comparisons/less_neg.cc d40d281f67bbddfd8ee3afa09db84194 libstdc++-v3/testsuite/20_util/integer_comparisons/not_equal.cc cff204fedb508acd88251e570815bd1e libstdc++-v3/testsuite/20_util/integer_comparisons/not_equal_neg.cc ! 01419816e55df10955ea47006b7fd41b libstdc++-v3/testsuite/20_util/integer_sequence/112473.cc 77217a1a0be9e8752b771ab62615174e libstdc++-v3/testsuite/20_util/integer_sequence/intseq.cc b299881c5f8a46c9954c9cfffbb15437 libstdc++-v3/testsuite/20_util/integer_sequence/pr111357.cc 159d3fde83605a05000ed1adee3483a5 libstdc++-v3/testsuite/20_util/integer_sequence/requirements/typedefs.cc --- 107809,107815 ---- 1ef204a969d3f470c0de434d5a42dd20 libstdc++-v3/testsuite/20_util/integer_comparisons/less_neg.cc d40d281f67bbddfd8ee3afa09db84194 libstdc++-v3/testsuite/20_util/integer_comparisons/not_equal.cc cff204fedb508acd88251e570815bd1e libstdc++-v3/testsuite/20_util/integer_comparisons/not_equal_neg.cc ! 7355b0813ebc7993824c3879b4a4e286 libstdc++-v3/testsuite/20_util/integer_sequence/112473.cc 77217a1a0be9e8752b771ab62615174e libstdc++-v3/testsuite/20_util/integer_sequence/intseq.cc b299881c5f8a46c9954c9cfffbb15437 libstdc++-v3/testsuite/20_util/integer_sequence/pr111357.cc 159d3fde83605a05000ed1adee3483a5 libstdc++-v3/testsuite/20_util/integer_sequence/requirements/typedefs.cc *************** dcf10d9e855e20e92e46d88ca040e36d libstd *** 108298,108303 **** --- 108523,108529 ---- c7473dbb10cdab8a93de0d093bb119f7 libstdc++-v3/testsuite/20_util/synchronized_pool_resource/release.cc aa35850cde8fcc4bedc08728c6612f5e libstdc++-v3/testsuite/20_util/synchronized_pool_resource/release_single.cc 422a35f8718904e2992ed392e4f4bd8f libstdc++-v3/testsuite/20_util/system_clock/1.cc + e35adc34ffc9e022a7b41fe2c88640fb libstdc++-v3/testsuite/20_util/system_clock/99832.cc c814424b516f2825477da064e56a56d4 libstdc++-v3/testsuite/20_util/system_clock/constexpr_data.cc cf43ed6314eed0ae331439c216f6fbfb libstdc++-v3/testsuite/20_util/temporary_buffer.cc 0d8a874b4f75bd08eb0ffda0e2a22243 libstdc++-v3/testsuite/20_util/time_point/1.cc *************** b7e19f90b8f12244a1a69e4a464ed93e libstd *** 108561,108566 **** --- 108787,108793 ---- 1853adc2a4cbfc16a08921ed39eaf00e libstdc++-v3/testsuite/21_strings/basic_string/40160.cc 69bf974154f0966b52cb5f54aa8f45fc libstdc++-v3/testsuite/21_strings/basic_string/56166.cc f60a4e9a0c842a326ed685b20dc20d06 libstdc++-v3/testsuite/21_strings/basic_string/79162.cc + 6248db4fb7f9c3f83628abf0ac9a21f7 libstdc++-v3/testsuite/21_strings/basic_string/allocator/116641.cc 9e066b35185191ac526612a564b6490e libstdc++-v3/testsuite/21_strings/basic_string/allocator/71964.cc 144f0c8d5b2378811a85bf9b8a201878 libstdc++-v3/testsuite/21_strings/basic_string/allocator/char/copy.cc d22c0140436e7ce7f30ea817d5f56cef libstdc++-v3/testsuite/21_strings/basic_string/allocator/char/copy_assign.cc *************** b585a1bbf03dd84e79127526e05b6b7a libstd *** 108959,108965 **** f93ec43aa4dd8a420a7ece2440e0666b libstdc++-v3/testsuite/21_strings/c_strings/wchar_t/2.cc 22bfc5ed265e4143ba00dd09c45ce88e libstdc++-v3/testsuite/21_strings/c_strings/wchar_t/24559.cc 2ec63f6752702d324bcea6556ae1bfe5 libstdc++-v3/testsuite/21_strings/c_strings/wchar_t/3_neg.cc ! 82d6b4f00580779800e341ec6c9ffaea libstdc++-v3/testsuite/21_strings/char_traits/requirements/113200.cc 2b5c3fe3f4e29007d663c0c64a31ec6b libstdc++-v3/testsuite/21_strings/char_traits/requirements/char/1.cc 6ba9605ad5b8901d814b619f3e486a3c libstdc++-v3/testsuite/21_strings/char_traits/requirements/char/57704.cc 6ca3d966dbea1443e11d0455e8b8a6bd libstdc++-v3/testsuite/21_strings/char_traits/requirements/char/65049.cc --- 109186,109192 ---- f93ec43aa4dd8a420a7ece2440e0666b libstdc++-v3/testsuite/21_strings/c_strings/wchar_t/2.cc 22bfc5ed265e4143ba00dd09c45ce88e libstdc++-v3/testsuite/21_strings/c_strings/wchar_t/24559.cc 2ec63f6752702d324bcea6556ae1bfe5 libstdc++-v3/testsuite/21_strings/c_strings/wchar_t/3_neg.cc ! ff1a0cc128c3057b55bd8bac27c27d78 libstdc++-v3/testsuite/21_strings/char_traits/requirements/113200.cc 2b5c3fe3f4e29007d663c0c64a31ec6b libstdc++-v3/testsuite/21_strings/char_traits/requirements/char/1.cc 6ba9605ad5b8901d814b619f3e486a3c libstdc++-v3/testsuite/21_strings/char_traits/requirements/char/57704.cc 6ca3d966dbea1443e11d0455e8b8a6bd libstdc++-v3/testsuite/21_strings/char_traits/requirements/char/65049.cc *************** f724468861a772e87c74f0ddacebee25 libstd *** 109627,109632 **** --- 109854,109860 ---- 6ac7672f30751a081ffd4422b6a2f0ad libstdc++-v3/testsuite/23_containers/array/capacity/empty.cc d3b8ae48846783b68b0c7b15bb586428 libstdc++-v3/testsuite/23_containers/array/capacity/max_size.cc 2694b0aaee0471f587239599be5ee088 libstdc++-v3/testsuite/23_containers/array/capacity/size.cc + f171d6452750aeee17d87967ee1cb642 libstdc++-v3/testsuite/23_containers/array/comparison_operators/106212.cc decf036187e6c677bddc30f9564e05b8 libstdc++-v3/testsuite/23_containers/array/comparison_operators/96851.cc 65932f4ec195f18eda1ea4235219ed57 libstdc++-v3/testsuite/23_containers/array/comparison_operators/constexpr.cc 2440c8a5bc138688b549692220a7e202 libstdc++-v3/testsuite/23_containers/array/comparison_operators/equal.cc *************** f3045ecf6b8921fc4cdc9c92900777f3 libstd *** 109787,109792 **** --- 110015,110021 ---- 9cb03b2c2a58dc50adc5127073eff022 libstdc++-v3/testsuite/23_containers/deque/modifiers/erase/50529.cc 7016dc32ffe50486f2bd365aa940d99f libstdc++-v3/testsuite/23_containers/deque/modifiers/erase/54577.cc 4870658537a3453d3831b00d7527d5d0 libstdc++-v3/testsuite/23_containers/deque/modifiers/erase/moveable.cc + bba735cdd63b156bce7cabf7cc2f280d libstdc++-v3/testsuite/23_containers/deque/modifiers/insert/118035.cc 6ae31c27e5908cfa2d1f4c740096099b libstdc++-v3/testsuite/23_containers/deque/modifiers/insert/const_iterator.cc 3b9aa5a32bf67ab0042008fa6d8cc68d libstdc++-v3/testsuite/23_containers/deque/modifiers/moveable.cc e8e166780f9b869b522a72016eef838a libstdc++-v3/testsuite/23_containers/deque/modifiers/push_back/49836.cc *************** bf862897203f922e23e6e6f7c34eb488 libstd *** 110447,110452 **** --- 110676,110682 ---- d37b503527aad4f5ca7893f408e04af0 libstdc++-v3/testsuite/23_containers/set/requirements/typedefs.cc f14c16459ad476e5964d3cef75748e25 libstdc++-v3/testsuite/23_containers/span/1.cc 62d71e263b54ca463af9228fd31a5f0f libstdc++-v3/testsuite/23_containers/span/101411.cc + 514a582127ec8ba0d75d3b689192b0b6 libstdc++-v3/testsuite/23_containers/span/117966.cc 75cfae1e2074f67939bd49cbd8b223f6 libstdc++-v3/testsuite/23_containers/span/2.cc cd56d2fbbac10823b34a63ab0afe0ae1 libstdc++-v3/testsuite/23_containers/span/back_assert_neg.cc 1715719f54d0cc8f96ee1d973758a9e0 libstdc++-v3/testsuite/23_containers/span/back_neg.cc *************** c5326c872629b70a6cac112d7191eaaa libstd *** 110995,111000 **** --- 111225,111231 ---- e6b13a470d7dc09b7377ba8490051b14 libstdc++-v3/testsuite/23_containers/vector/check_construct_destroy.cc 254e5ffa57a194c950dae265767fb789 libstdc++-v3/testsuite/23_containers/vector/cmp_c++20.cc 85bdfc0576269a0e5205993301109c71 libstdc++-v3/testsuite/23_containers/vector/cons/1.cc + c0f1f9158e1bb05e7c104325fb5ba28c libstdc++-v3/testsuite/23_containers/vector/cons/113841.cc 0a4c77f92fc3554026c38402a8698d27 libstdc++-v3/testsuite/23_containers/vector/cons/2.cc c66f9d033f7bdf121d5453fe8cdd24be libstdc++-v3/testsuite/23_containers/vector/cons/3.cc f4b56cf638525a4ae9b58fb23cdcd034 libstdc++-v3/testsuite/23_containers/vector/cons/4.cc *************** e85db7b279acdaac26a1dae23871747d libstd *** 111082,111087 **** --- 111313,111319 ---- d3e8515cac11f17d145d9d537da55aa4 libstdc++-v3/testsuite/23_containers/vector/modifiers/erase/54577.cc 31fc16343e678883cb12ad2b313c0847 libstdc++-v3/testsuite/23_containers/vector/modifiers/erase/moveable.cc 5c0108d280236dc6d7131c2da10e469b libstdc++-v3/testsuite/23_containers/vector/modifiers/insert/1.cc + 4efef42f0cfbeb752b2c967583ca4237 libstdc++-v3/testsuite/23_containers/vector/modifiers/insert/117983.cc 4ba5b22123f0fd1701b6ece1a1f834ed libstdc++-v3/testsuite/23_containers/vector/modifiers/insert/58148.cc 81831c18183d31a96836cb1f31a0c9b5 libstdc++-v3/testsuite/23_containers/vector/modifiers/insert/aliasing.cc 85200afbea4686707963cab8e5a5abe8 libstdc++-v3/testsuite/23_containers/vector/modifiers/insert/const_iterator.cc *************** bf573abd4c405eefa9505bf4b62f8e90 libstd *** 111209,111214 **** --- 111441,111447 ---- 52901cbcedd4ef40a871a6dc2ebb67a0 libstdc++-v3/testsuite/24_iterators/move_iterator/input_iterator.cc baaa1bcb430e3ccb9640b3f1b0d826e6 libstdc++-v3/testsuite/24_iterators/move_iterator/lwg3390.cc 6c53301bf1243bf6ad110feba548e85d libstdc++-v3/testsuite/24_iterators/move_iterator/lwg3391.cc + e74ad32767276ebf45617ab912639d2b libstdc++-v3/testsuite/24_iterators/move_iterator/lwg3736.cc ff641ab002d07a9f0b9a43f9c70cf93a libstdc++-v3/testsuite/24_iterators/move_iterator/move_only.cc 73d58e3cbae9543e1eeb43f9d31428f7 libstdc++-v3/testsuite/24_iterators/move_iterator/p2520r0.cc 8a513df7ba82ad77cfd26c0adf5e4619 libstdc++-v3/testsuite/24_iterators/move_iterator/rel_ops_c++20.cc *************** e9930b44233507ccddf2b50440579c55 libstd *** 111601,111607 **** 0340568de491299dc209b19d24097878 libstdc++-v3/testsuite/25_algorithms/lexicographical_compare/requirements/explicit_instantiation/pod.cc b84123300f318db795b4127821d5ceef libstdc++-v3/testsuite/25_algorithms/lexicographical_compare/uchar.cc 2bfaa67426aa29acae3e6aef04e0478e libstdc++-v3/testsuite/25_algorithms/lexicographical_compare_three_way/1.cc ! fda158d264fd98a45243c1135a92fa52 libstdc++-v3/testsuite/25_algorithms/lexicographical_compare_three_way/113960.cc b581325610de818749534c0d46aa3ce1 libstdc++-v3/testsuite/25_algorithms/lexicographical_compare_three_way/constexpr.cc d8ab00fb36581eefbd51c9ce173c1dc2 libstdc++-v3/testsuite/25_algorithms/lower_bound/1.cc 3a4f9b5436955304a5ea1cf3d186618f libstdc++-v3/testsuite/25_algorithms/lower_bound/2.cc --- 111834,111840 ---- 0340568de491299dc209b19d24097878 libstdc++-v3/testsuite/25_algorithms/lexicographical_compare/requirements/explicit_instantiation/pod.cc b84123300f318db795b4127821d5ceef libstdc++-v3/testsuite/25_algorithms/lexicographical_compare/uchar.cc 2bfaa67426aa29acae3e6aef04e0478e libstdc++-v3/testsuite/25_algorithms/lexicographical_compare_three_way/1.cc ! 92571708f62e7c1033836b36c001aae1 libstdc++-v3/testsuite/25_algorithms/lexicographical_compare_three_way/113960.cc b581325610de818749534c0d46aa3ce1 libstdc++-v3/testsuite/25_algorithms/lexicographical_compare_three_way/constexpr.cc d8ab00fb36581eefbd51c9ce173c1dc2 libstdc++-v3/testsuite/25_algorithms/lower_bound/1.cc 3a4f9b5436955304a5ea1cf3d186618f libstdc++-v3/testsuite/25_algorithms/lower_bound/2.cc *************** d9b47f0a1cc6d4fbadbff8d6b15e1708 libstd *** 112531,112536 **** --- 112764,112770 ---- a4789a9fb7704ece09c857b419d7c0fe libstdc++-v3/testsuite/26_numerics/valarray/83860.cc e37b57e7615a344895d3ce5944dfa7d6 libstdc++-v3/testsuite/26_numerics/valarray/87641.cc e1a4872345d98ae74d7ba8742ebf9932 libstdc++-v3/testsuite/26_numerics/valarray/95592.cc + 660f003ff214d812c5b64389a98e24fa libstdc++-v3/testsuite/26_numerics/valarray/99117.cc 3cdc2530ed2058558cae975cd481912b libstdc++-v3/testsuite/26_numerics/valarray/algo.cc 3e191d68e11822f58de5e4bd15365ca5 libstdc++-v3/testsuite/26_numerics/valarray/binary_closure.cc a4a7b850b2356ad923a0898c81bcb239 libstdc++-v3/testsuite/26_numerics/valarray/const_bracket.cc *************** c3e0991bdd71fd2c2fc091aaa454b743 libstd *** 112933,112938 **** --- 113167,113173 ---- bff997dc13d8e0bbabbf63a087098b0b libstdc++-v3/testsuite/27_io/basic_istream/ignore/char/3.cc 9c4a8a6588461168df80f31452fa392d libstdc++-v3/testsuite/27_io/basic_istream/ignore/char/6360.cc b5f88e5d0a6600e74ba726ef4eb27e72 libstdc++-v3/testsuite/27_io/basic_istream/ignore/char/7220.cc + e0b8c86bd25f4fc4a5f4baa02e810d07 libstdc++-v3/testsuite/27_io/basic_istream/ignore/char/93672.cc 2a024ff1c296c904b85f285ac826cc79 libstdc++-v3/testsuite/27_io/basic_istream/ignore/char/94749.cc 169112297bc6ba76ed6caf20136188ba libstdc++-v3/testsuite/27_io/basic_istream/ignore/char/96161.cc e623029e31578132e49e8e076eca5813 libstdc++-v3/testsuite/27_io/basic_istream/ignore/wchar_t/1.cc *************** e623029e31578132e49e8e076eca5813 libstd *** 112940,112945 **** --- 113175,113181 ---- b97f42a704ce0534d8e35dc6de7e13ef libstdc++-v3/testsuite/27_io/basic_istream/ignore/wchar_t/3.cc f3756e770f9b4dac9e6dff48f000c6a5 libstdc++-v3/testsuite/27_io/basic_istream/ignore/wchar_t/6360.cc cad33c950b4df50ff45b8247683e9f78 libstdc++-v3/testsuite/27_io/basic_istream/ignore/wchar_t/7220.cc + b970ffcefa492a97a5e8206924debd61 libstdc++-v3/testsuite/27_io/basic_istream/ignore/wchar_t/93672.cc cebed542a6e388fce6923fd9f0a25ce7 libstdc++-v3/testsuite/27_io/basic_istream/ignore/wchar_t/94749.cc 8cac0d93c3cbea4dedfecf43c3d542dd libstdc++-v3/testsuite/27_io/basic_istream/ignore/wchar_t/96161.cc c30a496857a9155183b65b2c178db05c libstdc++-v3/testsuite/27_io/basic_istream/peek/char/1.cc *************** c428626c422fb88386fe757096872b03 libstd *** 113382,113387 **** --- 113618,113624 ---- 672bb0d85f1d113d39b89335fa803865 libstdc++-v3/testsuite/27_io/filesystem/iterators/caching.cc 217108d8c5d7ce9f47af17889236cbeb libstdc++-v3/testsuite/27_io/filesystem/iterators/directory_iterator.cc d75cd276368c0b1c8203756ff611b3d6 libstdc++-v3/testsuite/27_io/filesystem/iterators/error_reporting.cc + 0e9098cdf2940ba66dfb21dc2150f62f libstdc++-v3/testsuite/27_io/filesystem/iterators/lwg3480.cc c45fc7189824b4a01ce3d6ad049d44d4 libstdc++-v3/testsuite/27_io/filesystem/iterators/lwg3719.cc 4563a721efa1a4d8061706a3d9d89f62 libstdc++-v3/testsuite/27_io/filesystem/iterators/pop.cc 459ce1752484ea23279e87e8433553d3 libstdc++-v3/testsuite/27_io/filesystem/iterators/recursion_pending.cc *************** cdebc11a8923fb6de3f03ea63cf74941 libstd *** 113955,113960 **** --- 114192,114198 ---- 55376992b20694d181d3725445caa52d libstdc++-v3/testsuite/29_atomics/headers/atomic/types_std_c++20_neg.cc f23dfe29146108b528effe24f525589a libstdc++-v3/testsuite/29_atomics/headers/atomic/types_std_c++2a.cc 6e292417e714715b424197cf8c799dcc libstdc++-v3/testsuite/29_atomics/headers/atomic/types_std_c++2a_neg.cc + 660dcc78afd7c69bc2712a52dc1d0dae libstdc++-v3/testsuite/29_atomics/headers/stdatomic.h/115807.cc 8f793a0a8dcd336f7edd48cf780787d8 libstdc++-v3/testsuite/29_atomics/headers/stdatomic.h/c_compat.cc 662bfa6fa4113393d487978b4c67cf6f libstdc++-v3/testsuite/29_atomics/headers/stdatomic.h/version.cc 5b1af9fe172aee7236f683fc11c916e0 libstdc++-v3/testsuite/30_threads/async/106695.cc *************** d6f0083479e5097ec27151965ff89e5d libstd *** 114762,114767 **** --- 115000,115007 ---- 03e8f51d7ef48b8a37325dad25e551ed libstdc++-v3/testsuite/experimental/simd/pr109261_constexpr_simd.cc 40516291f4d97883db23570b8f0c38a0 libstdc++-v3/testsuite/experimental/simd/pr109822_cast_functions.cc 4abe9d75da280cd5bcef090bd6898210 libstdc++-v3/testsuite/experimental/simd/pr114803_vecbuiltin_cvt.cc + 1c1b2c7973008ec3c4e64f42293c9612 libstdc++-v3/testsuite/experimental/simd/pr114958.cc + 8321e9c97cfe9622f4b70a13cf623661 libstdc++-v3/testsuite/experimental/simd/pr115454_find_last_set.cc febb06982704a772da61d7b14e5795ee libstdc++-v3/testsuite/experimental/simd/standard_abi_usable.cc 8456d329f682f25f869aac367480356e libstdc++-v3/testsuite/experimental/simd/standard_abi_usable_2.cc 59bc95299ad0d5ce1b19ecb4358e5c43 libstdc++-v3/testsuite/experimental/simd/tests/abs.cc *************** ff9341d3fc8d634252dfa6144b245bcf libstd *** 115575,115580 **** --- 115815,115821 ---- c0552f16fe9d194ae45c8eafce38e26f libstdc++-v3/testsuite/std/ranges/subrange/lwg3282_neg.cc 942db2f7873fbb64579dd1ed6140a816 libstdc++-v3/testsuite/std/ranges/subrange/lwg3286.cc a2978a38c494f041e027f77c6e9c0d5e libstdc++-v3/testsuite/std/ranges/subrange/lwg3433.cc + 5114b5e62452a6782ad6fc37b16551a9 libstdc++-v3/testsuite/std/ranges/subrange/lwg3589.cc 2aabb4959bdc1057ac43a22d64e78f0d libstdc++-v3/testsuite/std/ranges/subrange/sizeof.cc dd2f854e294a8fd03899c90ff2def40c libstdc++-v3/testsuite/std/ranges/subrange/tuple_like.cc 9d24631451b9b2ca3eb84bcb5faa72b3 libstdc++-v3/testsuite/std/ranges/view.cc *************** afe90a21fe8f6c5a2a97cbe9fc1ae49a libstd *** 115587,115593 **** 11a1b0b0dc2f0bf45b2b9a7608bff871 libstdc++-v3/testsuite/std/time/make12/1.cc dbc4514c5003ed2d1442d0676cbc4a02 libstdc++-v3/testsuite/std/time/make24/1.cc f7b3c80c4e116dab00e6313d95ec8615 libstdc++-v3/testsuite/std/time/month/1.cc ! b7a5373ed0797aa495f69436f1939726 libstdc++-v3/testsuite/std/time/month/2.cc e012fe1eb95d2291f6ad6c8c5f1fe041 libstdc++-v3/testsuite/std/time/month_day/1.cc 7f2aefa66b33b12663b816445f8e994a libstdc++-v3/testsuite/std/time/month_day_last/1.cc dbb34b617244c645fd9bc32dcfb84663 libstdc++-v3/testsuite/std/time/month_weekday/1.cc --- 115828,115834 ---- 11a1b0b0dc2f0bf45b2b9a7608bff871 libstdc++-v3/testsuite/std/time/make12/1.cc dbc4514c5003ed2d1442d0676cbc4a02 libstdc++-v3/testsuite/std/time/make24/1.cc f7b3c80c4e116dab00e6313d95ec8615 libstdc++-v3/testsuite/std/time/month/1.cc ! c436cc081f7ce78c695aa66a485a69d7 libstdc++-v3/testsuite/std/time/month/2.cc e012fe1eb95d2291f6ad6c8c5f1fe041 libstdc++-v3/testsuite/std/time/month_day/1.cc 7f2aefa66b33b12663b816445f8e994a libstdc++-v3/testsuite/std/time/month_day_last/1.cc dbb34b617244c645fd9bc32dcfb84663 libstdc++-v3/testsuite/std/time/month_weekday/1.cc *************** cd3f90e806f2979c466207907984351b libstd *** 115595,115601 **** 75e70bdabe3c07e0218b303a1f3ecf37 libstdc++-v3/testsuite/std/time/syn_c++20.cc 95fc10e252443f22e4022a1a82715453 libstdc++-v3/testsuite/std/time/traits/is_clock.cc 9c3ec11094d0ce79885b65560b53d78e libstdc++-v3/testsuite/std/time/weekday/1.cc ! d6cb5f0804c9bd14e047294d47decf33 libstdc++-v3/testsuite/std/time/weekday/2.cc 07a6c4c70bcfd13350693a1ad65f00fa libstdc++-v3/testsuite/std/time/weekday_indexed/1.cc f9bb2332633525b6b855cb92aee40380 libstdc++-v3/testsuite/std/time/weekday_last/1.cc feca06bff9fab60b776db8b63e94508f libstdc++-v3/testsuite/std/time/year/1.cc --- 115836,115842 ---- 75e70bdabe3c07e0218b303a1f3ecf37 libstdc++-v3/testsuite/std/time/syn_c++20.cc 95fc10e252443f22e4022a1a82715453 libstdc++-v3/testsuite/std/time/traits/is_clock.cc 9c3ec11094d0ce79885b65560b53d78e libstdc++-v3/testsuite/std/time/weekday/1.cc ! ae87ba632eaa4d14220b7cf69c9056f7 libstdc++-v3/testsuite/std/time/weekday/2.cc 07a6c4c70bcfd13350693a1ad65f00fa libstdc++-v3/testsuite/std/time/weekday_indexed/1.cc f9bb2332633525b6b855cb92aee40380 libstdc++-v3/testsuite/std/time/weekday_last/1.cc feca06bff9fab60b776db8b63e94508f libstdc++-v3/testsuite/std/time/year/1.cc *************** b226566903adec5f02e8ec7c2fc70785 libstd *** 116205,116210 **** --- 116446,116452 ---- 85793974afc61df8fbe6e2f4592d068c libstdc++-v3/testsuite/tr2/dynamic_bitset/cons.cc 25335d256c3d74b842a21bf0d1b44df3 libstdc++-v3/testsuite/tr2/dynamic_bitset/copy.cc f11ef991bc17262fc656f24489ad5bc2 libstdc++-v3/testsuite/tr2/dynamic_bitset/move.cc + bb455cd7974df6cd892858b5c801e9eb libstdc++-v3/testsuite/tr2/dynamic_bitset/pr115399.cc 2b4a18798ec59ec0ccb42b1b6dfeda0a libstdc++-v3/testsuite/tr2/dynamic_bitset/pr58729.cc 03f730c3136672f8cd1226742b5abe63 libstdc++-v3/testsuite/tr2/dynamic_bitset/pr87784.cc e3b7410ecb9a7c465b9bb748d97e0a49 libstdc++-v3/testsuite/tr2/dynamic_bitset/pr92059.cc *************** b1dbe55b9edd1c63e213a5d77d4daa77 libstd *** 116308,116314 **** b6512138575fef873fceae65f127e888 libstdc++-v3/testsuite/util/testsuite_abi.h 890a2ba99fd019bde86026b30a2431e6 libstdc++-v3/testsuite/util/testsuite_abi_check.cc 6e266b277968cb27c93329a4b5ba47de libstdc++-v3/testsuite/util/testsuite_allocator.cc ! aa37b1c51691a6e5b257ed5b3883c3bd libstdc++-v3/testsuite/util/testsuite_allocator.h 73cbff69a4a3732bb760848ce25110bf libstdc++-v3/testsuite/util/testsuite_api.h 5ed09a09458ce0f5233885ea4ff0c00a libstdc++-v3/testsuite/util/testsuite_character.cc 27d746bda1ad2167a2f4b476782ac174 libstdc++-v3/testsuite/util/testsuite_character.h --- 116550,116556 ---- b6512138575fef873fceae65f127e888 libstdc++-v3/testsuite/util/testsuite_abi.h 890a2ba99fd019bde86026b30a2431e6 libstdc++-v3/testsuite/util/testsuite_abi_check.cc 6e266b277968cb27c93329a4b5ba47de libstdc++-v3/testsuite/util/testsuite_allocator.cc ! 853c6a7c203b6908be6bb6478dc2f1a8 libstdc++-v3/testsuite/util/testsuite_allocator.h 73cbff69a4a3732bb760848ce25110bf libstdc++-v3/testsuite/util/testsuite_api.h 5ed09a09458ce0f5233885ea4ff0c00a libstdc++-v3/testsuite/util/testsuite_character.cc 27d746bda1ad2167a2f4b476782ac174 libstdc++-v3/testsuite/util/testsuite_character.h diff -Nrcpad gcc-12.4.0/NEWS gcc-12.5.0-RC-20250704/NEWS *** gcc-12.4.0/NEWS Thu Jun 20 08:11:22 2024 --- gcc-12.5.0-RC-20250704/NEWS Fri Jul 4 07:25:35 2025 *************** see ONEWS. *** 6,11 **** --- 6,12 ---- ====================================================================== http://gcc.gnu.org/gcc-12/index.html + GCC 12 Release Series Jun 20, 2024 *************** References *** 84,89 **** --- 85,91 ---- 19. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-12/changes.html + GCC 12 Release Series Changes, New Features, and Fixes *************** Caveats *** 128,140 **** supports the bitmap, mt, and pool arguments. Those configurations had been broken for some time. * D: Building and bootstrapping GDC, the D compiler, now requires a ! working GDC compiler (GCC version 9.1 or later) and D runtime ! library, libphobos, as the D front end is written in D. On some ! targets, libphobos isn't enabled by default, but compiles and works ! if --enable-libphobos is used. Other targets may require a more ! recent minimum version of GCC to bootstrap. Specifics are ! documented for affected targets in the [6]manual for installing ! GCC. * Fortran: OpenMP code using the omp_lib.h include file can no longer be compiled with -std=f95 but now requires at least -std=f2003. Alternatively, use the omp_lib module, which still supports --- 130,141 ---- supports the bitmap, mt, and pool arguments. Those configurations had been broken for some time. * D: Building and bootstrapping GDC, the D compiler, now requires a ! working GDC (GCC version 9.1 or later) and D runtime library, ! libphobos, as the D front end is written in D. On some targets, ! libphobos isn't enabled by default, but compiles and works if ! --enable-libphobos is used. Other targets may require a more recent ! version of GCC to bootstrap. Specifics are documented for affected ! targets in the [6]Installing GCC manual. * Fortran: OpenMP code using the omp_lib.h include file can no longer be compiled with -std=f95 but now requires at least -std=f2003. Alternatively, use the omp_lib module, which still supports *************** Caveats *** 158,178 **** * The optimization level -Ofast now implies -fno-semantic-interposition. ! General Improvements * Vectorization is enabled at -O2 which is now equivalent to what would have been -O2 -ftree-vectorize -fvect-cost-model=very-cheap in the past. Note that the default vectorizer cost model has been changed; it used to behave as if -fvect-cost-model=cheap had been specified. ! * GCC now supports the [7]ShadowCallStack sanitizer, which can be enabled using the command-line option ! [8]-fsanitize=shadow-call-stack. This sanitizer currently only works on AArch64 targets and it requires an environment in which all code has been compiled with -ffixed-r18. Its primary initial user is the Linux kernel. ! New Languages and Language specific improvements * OpenMP + OpenMP 5.0 support has been extended: The close map modifier --- 159,179 ---- * The optimization level -Ofast now implies -fno-semantic-interposition. ! [7]General Improvements * Vectorization is enabled at -O2 which is now equivalent to what would have been -O2 -ftree-vectorize -fvect-cost-model=very-cheap in the past. Note that the default vectorizer cost model has been changed; it used to behave as if -fvect-cost-model=cheap had been specified. ! * GCC now supports the [8]ShadowCallStack sanitizer, which can be enabled using the command-line option ! [9]-fsanitize=shadow-call-stack. This sanitizer currently only works on AArch64 targets and it requires an environment in which all code has been compiled with -ffixed-r18. Its primary initial user is the Linux kernel. ! [10]New Languages and Language specific improvements * OpenMP + OpenMP 5.0 support has been extended: The close map modifier *************** New Languages and Language specific impr *** 197,223 **** the memory-allocation routines added for Fortran and extended for C/C++ in OpenMP 5.1. In Fortran code, strictly structured blocks can be used. ! + The [9]OpenMP Implementation Status can be found in the libgomp manual. ! * Version 2.6 of the [10]OpenACC specification continues to be maintained and improved in the C, C++ and Fortran compilers. See ! the [11]implementation status section on the OpenACC wiki page and ! the [12]run-time library documentation for further information. In addition to general performance tuning and bug fixing, new features include: ! + OpenACC worker parallelism for [13]AMD GPUs (already for a ! long time supported for [14]Nvidia GPUs). + Data privatization/sharing at the OpenACC gang level. + Considerable improvements for the experimental OpenACC ! 'kernels' decomposition ([15]--param openacc-kernels=decompose). ! + A new warning flag [16]-Wopenacc-parallelism to warn about potentially suboptimal choices related to OpenACC parallelism. * The offload target code generation for OpenMP and OpenACC can now ! be better adjusted using the new [17]-foffload-options= flag and ! the pre-existing but now documented [18]-foffload= flag. ! Ada * Ada 2022 + Added the -gnat2022 flag to indicate strict Ada 2022 --- 198,224 ---- the memory-allocation routines added for Fortran and extended for C/C++ in OpenMP 5.1. In Fortran code, strictly structured blocks can be used. ! + The [11]OpenMP Implementation Status can be found in the libgomp manual. ! * Version 2.6 of the [12]OpenACC specification continues to be maintained and improved in the C, C++ and Fortran compilers. See ! the [13]implementation status section on the OpenACC wiki page and ! the [14]run-time library documentation for further information. In addition to general performance tuning and bug fixing, new features include: ! + OpenACC worker parallelism for [15]AMD GPUs (already for a ! long time supported for [16]Nvidia GPUs). + Data privatization/sharing at the OpenACC gang level. + Considerable improvements for the experimental OpenACC ! 'kernels' decomposition ([17]--param openacc-kernels=decompose). ! + A new warning flag [18]-Wopenacc-parallelism to warn about potentially suboptimal choices related to OpenACC parallelism. * The offload target code generation for OpenMP and OpenACC can now ! be better adjusted using the new [19]-foffload-options= flag and ! the pre-existing but now documented [20]-foffload= flag. ! [21]Ada * Ada 2022 + Added the -gnat2022 flag to indicate strict Ada 2022 *************** function Multiply (S1, S2 : Sign) return *** 270,278 **** improved. Memory pools have also seen some minor enhancements. * Improvements to embedded-RTOS targets such as RTEMS, VxWorks and QNX. Older targets were removed or cleaned. ! * Added some [19]hardening features. ! C family * Support for __builtin_shufflevector compatible with the clang language extension was added. --- 271,279 ---- improved. Memory pools have also seen some minor enhancements. * Improvements to embedded-RTOS targets such as RTEMS, VxWorks and QNX. Older targets were removed or cleaned. ! * Added some [22]hardening features. ! [23]C family * Support for __builtin_shufflevector compatible with the clang language extension was added. *************** function Multiply (S1, S2 : Sign) return *** 282,301 **** * Support for __builtin_dynamic_object_size compatible with the clang language extension was added. * New warnings: ! + [20]-Wbidi-chars warns about potentially misleading UTF-8 bidirectional control characters. The default is ! -Wbidi-chars=unpaired ([21]PR103026) ! + [22]-Warray-compare warns about comparisons between two ! operands of array type ([23]PR97573) * Enhancements to existing warnings: ! + [24]-Wattributes has been extended so that it's possible to use -Wno-attributes=ns::attr or -Wno-attributes=ns:: to suppress warnings about unknown scoped attributes (in C++11 and C2X). Similarly, #pragma GCC diagnostic ignored_attributes "vendor::attr" can be used to achieve the same effect ! ([25]PR101940) ! C * Some new features from the upcoming C2X revision of the ISO C standard are supported with -std=c2x and -std=gnu2x. Some of these --- 283,302 ---- * Support for __builtin_dynamic_object_size compatible with the clang language extension was added. * New warnings: ! + [24]-Wbidi-chars warns about potentially misleading UTF-8 bidirectional control characters. The default is ! -Wbidi-chars=unpaired ([25]PR103026) ! + [26]-Warray-compare warns about comparisons between two ! operands of array type ([27]PR97573) * Enhancements to existing warnings: ! + [28]-Wattributes has been extended so that it's possible to use -Wno-attributes=ns::attr or -Wno-attributes=ns:: to suppress warnings about unknown scoped attributes (in C++11 and C2X). Similarly, #pragma GCC diagnostic ignored_attributes "vendor::attr" can be used to achieve the same effect ! ([29]PR101940) ! [30]C * Some new features from the upcoming C2X revision of the ISO C standard are supported with -std=c2x and -std=gnu2x. Some of these *************** function Multiply (S1, S2 : Sign) return *** 307,347 **** + Digit separators (as in C++) are supported for C2X. + The #elifdef and #elifndef preprocessing directives are now supported. ! + The printf and scanf format checking with [26]-Wformat now supports the %b format specified by C2X for binary integers, and the %B format recommended by C2X for printf. ! C++ * Several C++23 features have been implemented: ! + [27]P1938R3, if consteval ([28]PR100974) ! + [29]P0849R8, auto(x): decay-copy in the language ! ([30]PR103049) ! + [31]P2242R3, Non-literal variables (and labels and gotos) in ! constexpr functions ([32]PR102612) ! + [33]P2334R1, Support for preprocessing directives elifdef and ! elifndef ([34]PR102616) ! + [35]P2360R0, Extend init-statement to allow alias-declaration ! ([36]PR102617) ! + [37]P2128R6, Multidimensional subscript operator ! + [38]DR 2397, auto specifier for pointers and references to ! arrays ([39]PR100975) * Several C++ Defect Reports have been resolved, e.g.: ! + [40]DR 960, Covariant functions and lvalue/rvalue references ! + [41]DR 1227, Mixing immediate and non-immediate contexts in deduction failure ! + [42]DR 1315, Restrictions on non-type template arguments in partial specializations ! + [43]DR 2082, Referring to parameters in unevaluated operands of default arguments ! + [44]DR 2351, void{} ! + [45]DR 2374, Overly permissive specification of enum direct-list-initialization ! + [46]DR 2397, auto specifier for pointers and references to arrays ! + [47]DR 2446, Questionable type-dependency of concept-ids * New command-line option -fimplicit-constexpr can be used to make ! inline functions implicitly constexpr ([48]git) * New command-line option -ffold-simple-inlines can be used to fold calls to certain trivial inline functions (currently std::move, std::forward, std::addressof and std::as_const). In contrast to --- 308,348 ---- + Digit separators (as in C++) are supported for C2X. + The #elifdef and #elifndef preprocessing directives are now supported. ! + The printf and scanf format checking with [31]-Wformat now supports the %b format specified by C2X for binary integers, and the %B format recommended by C2X for printf. ! [32]C++ * Several C++23 features have been implemented: ! + [33]P1938R3, if consteval ([34]PR100974) ! + [35]P0849R8, auto(x): decay-copy in the language ! ([36]PR103049) ! + [37]P2242R3, Non-literal variables (and labels and gotos) in ! constexpr functions ([38]PR102612) ! + [39]P2334R1, Support for preprocessing directives elifdef and ! elifndef ([40]PR102616) ! + [41]P2360R0, Extend init-statement to allow alias-declaration ! ([42]PR102617) ! + [43]P2128R6, Multidimensional subscript operator ! + [44]DR 2397, auto specifier for pointers and references to ! arrays ([45]PR100975) * Several C++ Defect Reports have been resolved, e.g.: ! + [46]DR 960, Covariant functions and lvalue/rvalue references ! + [47]DR 1227, Mixing immediate and non-immediate contexts in deduction failure ! + [48]DR 1315, Restrictions on non-type template arguments in partial specializations ! + [49]DR 2082, Referring to parameters in unevaluated operands of default arguments ! + [50]DR 2351, void{} ! + [51]DR 2374, Overly permissive specification of enum direct-list-initialization ! + [52]DR 2397, auto specifier for pointers and references to arrays ! + [53]DR 2446, Questionable type-dependency of concept-ids * New command-line option -fimplicit-constexpr can be used to make ! inline functions implicitly constexpr ([54]git) * New command-line option -ffold-simple-inlines can be used to fold calls to certain trivial inline functions (currently std::move, std::forward, std::addressof and std::as_const). In contrast to *************** function Multiply (S1, S2 : Sign) return *** 351,410 **** the fundamental operations from which they're defined (e.g. std::move versus static_cast). This flag is enabled by default when -fno-inline is not active. ! * Deduction guides can be declared at class scope ([49]PR79501) ! * [50]-Wuninitialized warns about using uninitialized variables in ! member initializer lists ([51]PR19808) ! * [52]-Wint-in-bool-context is now disabled when instantiating a ! template ([53]git) * Stricter checking of attributes on friend declarations: if a friend declaration has an attribute, that declaration must be a definition. Moreover, a C++11 attribute cannot appear in the middle ! of the decl-specifier-seq. ([54]PR99032) * New warning options for C++ language mismatches: -Wc++11-extensions, -Wc++14-extensions, -Wc++17-extensions, -Wc++20-extensions, and -Wc++23-extensions. They are enabled by default and can be used to control existing pedwarns about occurrences of new C++ constructs in code using an old C++ standard dialect. ! * New warning [55]-Wmissing-requires warns about missing requires ! ([56]git) * The existing std::is_constant_evaluated in if warning was extended ! to warn in more cases ([57]PR100995) ! * [58]-Waddress has been enhanced so that it now warns about, for instance, comparing the address of a nonstatic member function to ! null ([59]PR102103) * Errors about narrowing are no longer hidden if they occur in system headers ! * Ordered comparison of null pointers is now rejected ([60]PR99701) ! * Anonymous structs with bases are now rejected ([61]git) * The compiler rejects taking the address of an immediate member ! function ([62]PR102753) * The compiler has support for C++20 __cpp_lib_is_pointer_interconvertible and __cpp_lib_is_layout_compatible to help the C++ library implement ! [63]P0466, Layout-compatibility and Pointer-interconvertibility ! Traits ([64]PR101539) * Memory usage of constraint subsumption has been improved ! ([65]PR100828) * constinit thread_local variables are optimized better ! ([66]PR101786) * Support for C++17 std::hardware_destructive_interference_size was ! added, along with the [67]-Winterference-size warning ([68]git) ! * Many bugs in the CTAD handling have been fixed ([69]PR101344, ! [70]PR101883, [71]PR89062, [72]PR101233, [73]PR88252, [74]PR86439, ! [75]PR98832, [76]PR102933 ...) * Two-stage name lookup for dependent operator expressions has been ! corrected ([77]PR51577) * Several issues with constrained variable templates have been fixed ! ([78]PR98486) * The compiler performs less instantiating when doing speculative ! constant evaluation ([79]git) * Various diagnostic improvements; e.g., a more precise caret location for pointer-to-member expressions * The new -fconstexpr-fp-except flag allows IEC559 floating point exceptions in constant-expressions. ! Runtime Library (libstdc++) * Improved experimental C++20 support, including: + std::vector, std::basic_string, std::optional, and --- 352,411 ---- the fundamental operations from which they're defined (e.g. std::move versus static_cast). This flag is enabled by default when -fno-inline is not active. ! * Deduction guides can be declared at class scope ([55]PR79501) ! * [56]-Wuninitialized warns about using uninitialized variables in ! member initializer lists ([57]PR19808) ! * [58]-Wint-in-bool-context is now disabled when instantiating a ! template ([59]git) * Stricter checking of attributes on friend declarations: if a friend declaration has an attribute, that declaration must be a definition. Moreover, a C++11 attribute cannot appear in the middle ! of the decl-specifier-seq. ([60]PR99032) * New warning options for C++ language mismatches: -Wc++11-extensions, -Wc++14-extensions, -Wc++17-extensions, -Wc++20-extensions, and -Wc++23-extensions. They are enabled by default and can be used to control existing pedwarns about occurrences of new C++ constructs in code using an old C++ standard dialect. ! * New warning [61]-Wmissing-requires warns about missing requires ! ([62]git) * The existing std::is_constant_evaluated in if warning was extended ! to warn in more cases ([63]PR100995) ! * [64]-Waddress has been enhanced so that it now warns about, for instance, comparing the address of a nonstatic member function to ! null ([65]PR102103) * Errors about narrowing are no longer hidden if they occur in system headers ! * Ordered comparison of null pointers is now rejected ([66]PR99701) ! * Anonymous structs with bases are now rejected ([67]git) * The compiler rejects taking the address of an immediate member ! function ([68]PR102753) * The compiler has support for C++20 __cpp_lib_is_pointer_interconvertible and __cpp_lib_is_layout_compatible to help the C++ library implement ! [69]P0466, Layout-compatibility and Pointer-interconvertibility ! Traits ([70]PR101539) * Memory usage of constraint subsumption has been improved ! ([71]PR100828) * constinit thread_local variables are optimized better ! ([72]PR101786) * Support for C++17 std::hardware_destructive_interference_size was ! added, along with the [73]-Winterference-size warning ([74]git) ! * Many bugs in the CTAD handling have been fixed ([75]PR101344, ! [76]PR101883, [77]PR89062, [78]PR101233, [79]PR88252, [80]PR86439, ! [81]PR98832, [82]PR102933 ...) * Two-stage name lookup for dependent operator expressions has been ! corrected ([83]PR51577) * Several issues with constrained variable templates have been fixed ! ([84]PR98486) * The compiler performs less instantiating when doing speculative ! constant evaluation ([85]git) * Various diagnostic improvements; e.g., a more precise caret location for pointer-to-member expressions * The new -fconstexpr-fp-except flag allows IEC559 floating point exceptions in constant-expressions. ! [86]Runtime Library (libstdc++) * Improved experimental C++20 support, including: + std::vector, std::basic_string, std::optional, and *************** function Multiply (S1, S2 : Sign) return *** 425,444 **** + std::invoke_r + constexpr std::type_info::operator== ! D * New features: + Support for the D programming language has been updated to version 2.100.1 of the language and run-time library. Full changelog for this release and previous releases can be found ! on the [80]dlang.org website. + On supported targets, the __traits(compiles) expression can now be used to determine whether a target-specific built-in is ! available without error during CTFE ([81]PR101127). + Functions annotated with pragma(inline, true) are now compiled ! into every module where they are used from ([82]PR106563). + Partial support for directly importing C99 sources into a D ! compilation ([83]ImportC) has been added to the language. A notable missing feature is support for preprocessing C imports, which can be worked around by preprocessing all C sources used for importing ahead of time. --- 426,445 ---- + std::invoke_r + constexpr std::type_info::operator== ! [87]D * New features: + Support for the D programming language has been updated to version 2.100.1 of the language and run-time library. Full changelog for this release and previous releases can be found ! on the [88]dlang.org website. + On supported targets, the __traits(compiles) expression can now be used to determine whether a target-specific built-in is ! available without error during CTFE ([89]PR101127). + Functions annotated with pragma(inline, true) are now compiled ! into every module where they are used from ([90]PR106563). + Partial support for directly importing C99 sources into a D ! compilation ([91]ImportC) has been added to the language. A notable missing feature is support for preprocessing C imports, which can be worked around by preprocessing all C sources used for importing ahead of time. *************** function Multiply (S1, S2 : Sign) return *** 469,475 **** switches have been renamed to -fpreview=dip25 and -fpreview=dip1000. ! Fortran * WG5/N1942, "TS 29113 Further Interoperability of Fortran with C", is now fully supported. In addition to implementing previously --- 470,476 ---- switches have been renamed to -fpreview=dip25 and -fpreview=dip1000. ! [92]Fortran * WG5/N1942, "TS 29113 Further Interoperability of Fortran with C", is now fully supported. In addition to implementing previously *************** function Multiply (S1, S2 : Sign) return *** 488,531 **** -fconvert option, the CONVERT specifier of the OPEN statement and the GFORTRAN_CONVERT_UNIT environment variable. ! Go * GCC 12 provides a complete implementation of the Go 1.18 user packages. * Although Go 1.18 includes support for generic programming, that support is not yet available in GCC. ! libgccjit * The libgccjit API gained 30 new entry points: + 17 new "reflection" entry points for querying functions and ! types ([84]LIBGCCJIT_ABI_16) ! + [85]gcc_jit_lvalue_set_tls_model for supporting thread-local ! variables ([86]LIBGCCJIT_ABI_17) ! + [87]gcc_jit_lvalue_set_link_section for setting the link section of global variables, analogous to ! [88]__attribute__((section(".section"))) ! ([89]LIBGCCJIT_ABI_18) + 4 new entry points for initializing global variables and ! creating constructors for rvalues ([90]LIBGCCJIT_ABI_19) + Support for sized integer types, including 128-bit integers ! and helper functions for such types ([91]LIBGCCJIT_ABI_20) ! + [92]gcc_jit_context_new_bitcast for reinterpreting the bits of ! an rvalue as a different type ([93]LIBGCCJIT_ABI_21) ! + [94]gcc_jit_lvalue_set_register_name for setting a specific ! register for a variable ([95]LIBGCCJIT_ABI_22) ! + [96]gcc_jit_context_set_bool_print_errors_to_stderr ! ([97]LIBGCCJIT_ABI_23) + 2 new entry points for setting the alignment of a variable ! ([98]LIBGCCJIT_ABI_24) * libgccjit has gained support for the use of various atomic builtins ! ([99]PR96066, [100]PR96067) ! * [101]gcc_jit_context_new_cast is now able to handle truncation and ! extension between different integer types ([102]PR95498) ! New Targets and Target Specific Improvements ! AArch64 & arm * Newer revisions of the Arm Architecture are supported as arguments to the -march option: armv8.7-a, armv8.8-a, armv9-a. --- 489,532 ---- -fconvert option, the CONVERT specifier of the OPEN statement and the GFORTRAN_CONVERT_UNIT environment variable. ! [93]Go * GCC 12 provides a complete implementation of the Go 1.18 user packages. * Although Go 1.18 includes support for generic programming, that support is not yet available in GCC. ! [94]libgccjit * The libgccjit API gained 30 new entry points: + 17 new "reflection" entry points for querying functions and ! types ([95]LIBGCCJIT_ABI_16) ! + [96]gcc_jit_lvalue_set_tls_model for supporting thread-local ! variables ([97]LIBGCCJIT_ABI_17) ! + [98]gcc_jit_lvalue_set_link_section for setting the link section of global variables, analogous to ! [99]__attribute__((section(".section"))) ! ([100]LIBGCCJIT_ABI_18) + 4 new entry points for initializing global variables and ! creating constructors for rvalues ([101]LIBGCCJIT_ABI_19) + Support for sized integer types, including 128-bit integers ! and helper functions for such types ([102]LIBGCCJIT_ABI_20) ! + [103]gcc_jit_context_new_bitcast for reinterpreting the bits ! of an rvalue as a different type ([104]LIBGCCJIT_ABI_21) ! + [105]gcc_jit_lvalue_set_register_name for setting a specific ! register for a variable ([106]LIBGCCJIT_ABI_22) ! + [107]gcc_jit_context_set_bool_print_errors_to_stderr ! ([108]LIBGCCJIT_ABI_23) + 2 new entry points for setting the alignment of a variable ! ([109]LIBGCCJIT_ABI_24) * libgccjit has gained support for the use of various atomic builtins ! ([110]PR96066, [111]PR96067) ! * [112]gcc_jit_context_new_cast is now able to handle truncation and ! extension between different integer types ([113]PR95498) ! [114]New Targets and Target Specific Improvements ! [115]AArch64 & arm * Newer revisions of the Arm Architecture are supported as arguments to the -march option: armv8.7-a, armv8.8-a, armv9-a. *************** New Targets and Target Specific Improvem *** 535,541 **** dot-product operations, taking advantage of instructions in the Advanced SIMD (AArch64/AArch32) and SVE (AArch64) instruction sets. ! AArch64 * A number of new CPUs are supported through the -mcpu and -mtune options (GCC identifiers in parentheses). --- 536,542 ---- dot-product operations, taking advantage of instructions in the Advanced SIMD (AArch64/AArch32) and SVE (AArch64) instruction sets. ! [116]AArch64 * A number of new CPUs are supported through the -mcpu and -mtune options (GCC identifiers in parentheses). *************** New Targets and Target Specific Improvem *** 543,549 **** + Arm Cortex-A710 (cortex-a710). + Arm Cortex-X2 (cortex-x2). * The 64-byte atomic load/store intrinsics to accelerator memory from ! the [103]2020 Arm Architecture extensions are supported through the +ls64 option extension. * Initial code generation support is supported for hardware instructions used to accelerate the memcpy,memmove and memset --- 544,550 ---- + Arm Cortex-A710 (cortex-a710). + Arm Cortex-X2 (cortex-x2). * The 64-byte atomic load/store intrinsics to accelerator memory from ! the [117]2020 Arm Architecture extensions are supported through the +ls64 option extension. * Initial code generation support is supported for hardware instructions used to accelerate the memcpy,memmove and memset *************** New Targets and Target Specific Improvem *** 556,562 **** cores that have a total vector bandwidth of 512 bits. Please refer to the documentation for more details. ! AMD Radeon (GCN) * Debug experience with ROCGDB has been improved. * Support for the type __int128_t/integer(kind=16) was added. --- 557,563 ---- cores that have a total vector bandwidth of 512 bits. Please refer to the documentation for more details. ! [118]AMD Radeon (GCN) * Debug experience with ROCGDB has been improved. * Support for the type __int128_t/integer(kind=16) was added. *************** New Targets and Target Specific Improvem *** 566,572 **** wavefronts in total, per CU). Additionally, the number of used wavefronts and workgroups was tuned for performance. ! arm * Support is added for accessing the stack canary value via the TLS register through the -fstack-protector-guard=tls and --- 567,573 ---- wavefronts in total, per CU). Additionally, the number of used wavefronts and workgroups was tuned for performance. ! [119]arm * Support is added for accessing the stack canary value via the TLS register through the -fstack-protector-guard=tls and *************** New Targets and Target Specific Improvem *** 574,586 **** Linux kernel development. Please refer to the documentation for more details. ! BPF * Support for CO-RE (compile-once, run-everywhere) has been added to the BPF back end. CO-RE allows to compile portable BPF programs that are able to run among different versions of the Linux kernel. ! IA-32/x86-64 * New ISA extension support for Intel AVX512-FP16 was added. AVX512-FP16 intrinsics are available via the -mavx512fp16 compiler --- 575,587 ---- Linux kernel development. Please refer to the documentation for more details. ! [120]BPF * Support for CO-RE (compile-once, run-everywhere) has been added to the BPF back end. CO-RE allows to compile portable BPF programs that are able to run among different versions of the Linux kernel. ! [121]IA-32/x86-64 * New ISA extension support for Intel AVX512-FP16 was added. AVX512-FP16 intrinsics are available via the -mavx512fp16 compiler *************** New Targets and Target Specific Improvem *** 597,603 **** function symbols when the new -mno-direct-extern-access command-line option is specified. ! LoongArch * Support for the LoongArch architecture instruction set has been added. --- 598,604 ---- function symbols when the new -mno-direct-extern-access command-line option is specified. ! [122]LoongArch * Support for the LoongArch architecture instruction set has been added. *************** New Targets and Target Specific Improvem *** 607,613 **** + Loongson LA464 core (la464). + LoongArch 64-bit generic core (loongarch64). ! MIPS * The ABI passing arguments containing zero-width fields (for example, C/C++ zero-width bit-fields, GNU C/C++ zero-length arrays, --- 608,614 ---- + Loongson LA464 core (la464). + LoongArch 64-bit generic core (loongarch64). ! [123]MIPS * The ABI passing arguments containing zero-width fields (for example, C/C++ zero-width bit-fields, GNU C/C++ zero-length arrays, *************** New Targets and Target Specific Improvem *** 623,629 **** through 11. GCC 12 on MIPS will report such incompatibilities as an inform unless -Wno-psabi is used. ! NVPTX * The -march flag has been added. The -misa flag is now considered an alias of the -march flag. --- 624,630 ---- through 11. GCC 12 on MIPS will report such incompatibilities as an inform unless -Wno-psabi is used. ! [124]NVPTX * The -march flag has been added. The -misa flag is now considered an alias of the -march flag. *************** New Targets and Target Specific Improvem *** 649,661 **** predefined macros allows code to check the PTX ISA version being targeted by the compiler. ! PowerPC / PowerPC64 / RS6000 * The internal implementation of Power's target-specific built-in functions has been rewritten to be easier and less error-prone to maintain. Every attempt has been made to ensure that the new behavior matches the old behavior, but inevitably some bugs can be ! expected. Please [104]report any problems. * The built-in functions __builtin_get_texasr, __builtin_get_texasru, __builtin_get_tfhar, __builtin_get_tfiar, __builtin_set_texasr, __builtin_set_texasru, __builtin_set_tfhar, and __builtin_set_tfiar --- 650,662 ---- predefined macros allows code to check the PTX ISA version being targeted by the compiler. ! [125]PowerPC / PowerPC64 / RS6000 * The internal implementation of Power's target-specific built-in functions has been rewritten to be easier and less error-prone to maintain. Every attempt has been made to ensure that the new behavior matches the old behavior, but inevitably some bugs can be ! expected. Please [126]report any problems. * The built-in functions __builtin_get_texasr, __builtin_get_texasru, __builtin_get_tfhar, __builtin_get_tfiar, __builtin_set_texasr, __builtin_set_texasru, __builtin_set_tfhar, and __builtin_set_tfiar *************** New Targets and Target Specific Improvem *** 667,682 **** now behave as documented. On prior releases, these built-in functions had incorrect semantics on little-endian targets. ! PRU ! * The [105]__regio_symbol variable qualifier has been added. It allows easier access in C programs to the __R30 and __R31 CPU I/O registers. ! RISC-V ! * Default ISA spec version was bump to 20191213, more detail see this ! [106]announcement * New ISA extension support for zba, zbb, zbc, zbs was added. * New ISA extension support for vector and scalar crypto was added, only support architecture testing macro and -march= parsing. --- 668,683 ---- now behave as documented. On prior releases, these built-in functions had incorrect semantics on little-endian targets. ! [127]PRU ! * The [128]__regio_symbol variable qualifier has been added. It allows easier access in C programs to the __R30 and __R31 CPU I/O registers. ! [129]RISC-V ! * The default ISA spec version was bumped to 20191213; see [130]this ! announcement for details. * New ISA extension support for zba, zbb, zbc, zbs was added. * New ISA extension support for vector and scalar crypto was added, only support architecture testing macro and -march= parsing. *************** New Targets and Target Specific Improvem *** 686,734 **** Distributions that have out-of-tree workarounds for -latomic should check their ABIs again. ! Operating Systems ! Improvements to Static Analyzer * The analyzer has gained a ! [107]-Wanalyzer-use-of-uninitialized-value warning, similar to ! [108]-Wuninitialized and [109]-Wmaybe-uninitialized, but based on ! an interprocedural path-sensitive analysis ([110]PR95006). Such warnings are not disabled by the new ! [111]-ftrivial-auto-var-init (see below), as the latter is considered a mitigation option. ! * [112]-Wanalyzer-write-to-const and ! [113]-Wanalyzer-write-to-string-literal will now check for ! [114]__attribute__ ((access, ....)) on calls to externally-defined functions, and complain about read-only regions pointed to by arguments marked with a write_only or read_write attribute ! ([115]PR104793). * The analyzer's "taint" mode, activated by ! [116]-fanalyzer-checker=taint (in addition to [117]-fanalyzer), has gained four new taint-based warnings: ! + [118]-Wanalyzer-tainted-allocation-size for e.g. attacker-controlled malloc and alloca, ! + [119]-Wanalyzer-tainted-divisor for detecting where an attacker can inject a divide-by-zero, ! + [120]-Wanalyzer-tainted-offset for attacker-controlled pointer offsets, ! + [121]-Wanalyzer-tainted-size for attacker-controlled values being used as a size parameter to calls to memset or to ! functions marked with [122]__attribute__ ((access, ....)). ! The existing [123]-Wanalyzer-tainted-array-index has been reworded to talk about "attacker-controlled" rather than "tainted" values, for consistency with the new warnings. ! A new [124]__attribute__ ((tainted_args)) has been added to the C and C++ front ends, usable on functions, and on function pointer callback fields in structs. The analyzer's taint mode will treat all parameters and buffers pointed to by parameters of such functions as being attacker-controlled, such as for annotating system calls in an operating system kernel as being an "attack surface". ! * The analyzer now respects [125]__attribute__((const)): it will treat such functions as returning the same value when given the ! same inputs ([126]PR104434), and as having no side effects ! ([127]PR104576). * The analyzer is now able to split its analysis into multiple execution paths in places where there isn't a split in the control flow graph. For example, it now handles realloc calls by splitting --- 687,735 ---- Distributions that have out-of-tree workarounds for -latomic should check their ABIs again. ! [131]Operating Systems ! [132]Improvements to Static Analyzer * The analyzer has gained a ! [133]-Wanalyzer-use-of-uninitialized-value warning, similar to ! [134]-Wuninitialized and [135]-Wmaybe-uninitialized, but based on ! an interprocedural path-sensitive analysis ([136]PR95006). Such warnings are not disabled by the new ! [137]-ftrivial-auto-var-init (see below), as the latter is considered a mitigation option. ! * [138]-Wanalyzer-write-to-const and ! [139]-Wanalyzer-write-to-string-literal will now check for ! [140]__attribute__ ((access, ....)) on calls to externally-defined functions, and complain about read-only regions pointed to by arguments marked with a write_only or read_write attribute ! ([141]PR104793). * The analyzer's "taint" mode, activated by ! [142]-fanalyzer-checker=taint (in addition to [143]-fanalyzer), has gained four new taint-based warnings: ! + [144]-Wanalyzer-tainted-allocation-size for e.g. attacker-controlled malloc and alloca, ! + [145]-Wanalyzer-tainted-divisor for detecting where an attacker can inject a divide-by-zero, ! + [146]-Wanalyzer-tainted-offset for attacker-controlled pointer offsets, ! + [147]-Wanalyzer-tainted-size for attacker-controlled values being used as a size parameter to calls to memset or to ! functions marked with [148]__attribute__ ((access, ....)). ! The existing [149]-Wanalyzer-tainted-array-index has been reworded to talk about "attacker-controlled" rather than "tainted" values, for consistency with the new warnings. ! A new [150]__attribute__ ((tainted_args)) has been added to the C and C++ front ends, usable on functions, and on function pointer callback fields in structs. The analyzer's taint mode will treat all parameters and buffers pointed to by parameters of such functions as being attacker-controlled, such as for annotating system calls in an operating system kernel as being an "attack surface". ! * The analyzer now respects [151]__attribute__((const)): it will treat such functions as returning the same value when given the ! same inputs ([152]PR104434), and as having no side effects ! ([153]PR104576). * The analyzer is now able to split its analysis into multiple execution paths in places where there isn't a split in the control flow graph. For example, it now handles realloc calls by splitting *************** Improvements to Static Analyzer *** 741,761 **** to track calls through function pointers. * The analyzer now makes the assumption that if we know PTR is non-NULL, then (PTR + OFFSET) is also non-NULL. This isn't strictly ! true, but eliminates false positives in practice ([128]PR101962). * The analyzer has gained some initial support for inline assembler code. This is extremely limited, and is purely to help suppress false positives when analyzing the Linux kernel, which makes heavy ! use of inline assembler ([129]PR101570). * The way the analyzer tracks the state of memory along an execution path has been improved in various ways for GCC 12: + An optimization for representing bulk updates to memory (e.g. zero fills) has been removed as it never worked well. In GCC 12 it has been replaced with a simpler and more accurate ! approach, eliminating many false positives ([130]PR95006). + Various optimizations have been added, speeding up the analysis on a particularly problematic source file from 4 ! minutes down to 17 seconds ([131]PR104943, [132]PR104954, and ! [133]PR104955). + The analyzer now tracks the sizes of dynamically-allocated regions, both on the heap (via malloc etc) and stack (via alloca), though none of the analyzer warnings make use of this --- 742,762 ---- to track calls through function pointers. * The analyzer now makes the assumption that if we know PTR is non-NULL, then (PTR + OFFSET) is also non-NULL. This isn't strictly ! true, but eliminates false positives in practice ([154]PR101962). * The analyzer has gained some initial support for inline assembler code. This is extremely limited, and is purely to help suppress false positives when analyzing the Linux kernel, which makes heavy ! use of inline assembler ([155]PR101570). * The way the analyzer tracks the state of memory along an execution path has been improved in various ways for GCC 12: + An optimization for representing bulk updates to memory (e.g. zero fills) has been removed as it never worked well. In GCC 12 it has been replaced with a simpler and more accurate ! approach, eliminating many false positives ([156]PR95006). + Various optimizations have been added, speeding up the analysis on a particularly problematic source file from 4 ! minutes down to 17 seconds ([157]PR104943, [158]PR104954, and ! [159]PR104955). + The analyzer now tracks the sizes of dynamically-allocated regions, both on the heap (via malloc etc) and stack (via alloca), though none of the analyzer warnings make use of this *************** Improvements to Static Analyzer *** 765,789 **** Other significant improvements ! Eliminating uninitialized variables ! * GCC can now [134]initialize all stack variables implicitly, including padding. This is intended to eliminate all classes of uninitialized stack variable flaws. Lack of explicit initialization ! will still warn when [135]-Wuninitialized is active. For best debugging, use of the new command-line option ! [136]-ftrivial-auto-var-init=pattern can be used to fill variables with a repeated 0xFE pattern, which tends to illuminate many bugs (e.g. pointers receive invalid addresses, sizes and indices are very large). For best production results, the new command-line ! option [137]-ftrivial-auto-var-init=zero can be used to fill variables with 0x00, which tends to provide a safer state for bugs (e.g. pointers are NULL, strings are NUL filled, and sizes and indices are 0). ! Debugging formats ! * GCC can now generate debugging information in [138]CTF, a lightweight debugging format that provides information about C types and the association between functions and data symbols and types. This format is designed to be embedded in ELF files and to --- 766,790 ---- Other significant improvements ! [160]Eliminating uninitialized variables ! * GCC can now [161]initialize all stack variables implicitly, including padding. This is intended to eliminate all classes of uninitialized stack variable flaws. Lack of explicit initialization ! will still warn when [162]-Wuninitialized is active. For best debugging, use of the new command-line option ! [163]-ftrivial-auto-var-init=pattern can be used to fill variables with a repeated 0xFE pattern, which tends to illuminate many bugs (e.g. pointers receive invalid addresses, sizes and indices are very large). For best production results, the new command-line ! option [164]-ftrivial-auto-var-init=zero can be used to fill variables with 0x00, which tends to provide a safer state for bugs (e.g. pointers are NULL, strings are NUL filled, and sizes and indices are 0). ! [165]Debugging formats ! * GCC can now generate debugging information in [166]CTF, a lightweight debugging format that provides information about C types and the association between functions and data symbols and types. This format is designed to be embedded in ELF files and to *************** Other significant improvements *** 794,809 **** The compiler can generate BTF for any target, when enabled with the command-line option -gbtf ! GCC 12.1 ! This is the [139]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 12.1 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! GCC 12.2 ! This is the [140]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 12.2 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). --- 795,810 ---- The compiler can generate BTF for any target, when enabled with the command-line option -gbtf ! [167]GCC 12.1 ! This is the [168]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 12.1 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! [169]GCC 12.2 ! This is the [170]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 12.2 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). *************** GCC 12.2 *** 817,823 **** all optimization levels but -O0 and -Og. The old behavior can be obtained by explicitly passing -mcheck-zero-division to GCC. ! GCC 12.3 Target Specific Changes --- 818,824 ---- all optimization levels but -O0 and -Og. The old behavior can be obtained by explicitly passing -mcheck-zero-division to GCC. ! [171]GCC 12.3 Target Specific Changes *************** GCC 12.3 *** 827,858 **** -march=znver4. The switch makes GCC consider using 512-bit vectors when auto-vectorizing. ! This is the [141]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 12.3 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! GCC 12.4 ! This is the [142]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 12.4 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). For questions related to the use of GCC, please consult these web ! pages and the [143]GCC manuals. If that fails, the ! [144]gcc-help@gcc.gnu.org mailing list might help. Comments on these web pages and the development of GCC are welcome on our developer ! list at [145]gcc@gcc.gnu.org. All of [146]our lists have public archives. ! Copyright (C) [147]Free Software Foundation, Inc. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! These pages are [148]maintained by the GCC team. Last modified ! 2024-06-20. References --- 828,859 ---- -march=znver4. The switch makes GCC consider using 512-bit vectors when auto-vectorizing. ! This is the [172]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 12.3 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! [173]GCC 12.4 ! This is the [174]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 12.4 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). For questions related to the use of GCC, please consult these web ! pages and the [175]GCC manuals. If that fails, the ! [176]gcc-help@gcc.gnu.org mailing list might help. Comments on these web pages and the development of GCC are welcome on our developer ! list at [177]gcc@gcc.gnu.org. All of [178]our lists have public archives. ! Copyright (C) [179]Free Software Foundation, Inc. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! These pages are [180]maintained by the GCC team. Last modified ! 2025-01-31. References *************** References *** 862,1033 **** 4. https://gcc.gnu.org/PR42217 5. https://gcc.gnu.org/gcc-12/changes.html#mips_zero_width_fields 6. https://gcc.gnu.org/install/specific.html ! 7. https://clang.llvm.org/docs/ShadowCallStack.html ! 8. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Instrumentation-Options.html#index-fsanitize_003dshadow-call-stack ! 9. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/libgomp/OpenMP-Implementation-Status.html ! 10. https://www.openacc.org/ ! 11. https://gcc.gnu.org/wiki/OpenACC/Implementation Status#status-12 ! 12. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/libgomp/Enabling-OpenACC.html ! 13. https://gcc.gnu.org/gcc-12/changes.html#amdgcn ! 14. https://gcc.gnu.org/gcc-12/changes.html#nvptx ! 15. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Optimize-Options.html#index-param ! 16. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wopenacc-parallelism ! 17. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/C-Dialect-Options.html#index-foffload-options ! 18. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/C-Dialect-Options.html#index-foffload ! 19. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gnat_rm/Security-Hardening-Features.html#Security-Hardening-Features ! 20. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wbidi-chars ! 21. https://gcc.gnu.org/PR103026 ! 22. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Warray-compare ! 23. https://gcc.gnu.org/PR97573 ! 24. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wattributes ! 25. https://gcc.gnu.org/PR101940 ! 26. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wformat ! 27. https://wg21.link/p1938 ! 28. https://gcc.gnu.org/PR100974 ! 29. https://wg21.link/p0849 ! 30. https://gcc.gnu.org/PR103049 ! 31. https://wg21.link/p2242 ! 32. https://gcc.gnu.org/PR102612 ! 33. https://wg21.link/p2334 ! 34. https://gcc.gnu.org/PR102616 ! 35. https://wg21.link/p2360 ! 36. https://gcc.gnu.org/PR102617 ! 37. https://wg21.link/p2128 ! 38. https://wg21.link/cwg2397 ! 39. https://gcc.gnu.org/PR100975 ! 40. https://wg21.link/cwg960 ! 41. https://wg21.link/cwg1227 ! 42. https://wg21.link/cwg1315 ! 43. https://wg21.link/cwg2082 ! 44. https://wg21.link/cwg2351 ! 45. https://wg21.link/cwg2374 ! 46. https://wg21.link/cwg2397 ! 47. https://wg21.link/cwg2446 ! 48. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=87c2080b ! 49. https://gcc.gnu.org/PR79501 ! 50. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wuninitialized ! 51. https://gcc.gnu.org/PR19808 ! 52. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wint-in-bool-context ! 53. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=3a2b12bc ! 54. https://gcc.gnu.org/PR99032 ! 55. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wmissing-requires ! 56. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=e18e56c7 ! 57. https://gcc.gnu.org/PR100995 ! 58. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Waddress ! 59. https://gcc.gnu.org/PR102103 ! 60. https://gcc.gnu.org/PR99701 ! 61. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=3ead06c1 ! 62. https://gcc.gnu.org/PR102753 ! 63. https://wg21.link/p0466 ! 64. https://gcc.gnu.org/PR101539 ! 65. https://gcc.gnu.org/PR100828 ! 66. https://gcc.gnu.org/PR101786 ! 67. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Winterference-size ! 68. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=76b75018 ! 69. https://gcc.gnu.org/PR101344 ! 70. https://gcc.gnu.org/PR101883 ! 71. https://gcc.gnu.org/PR89062 ! 72. https://gcc.gnu.org/PR101233 ! 73. https://gcc.gnu.org/PR88252 ! 74. https://gcc.gnu.org/PR86439 ! 75. https://gcc.gnu.org/PR98832 ! 76. https://gcc.gnu.org/PR102933 ! 77. https://gcc.gnu.org/PR51577 ! 78. https://gcc.gnu.org/PR98486 ! 79. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=1595fe44 ! 80. https://dlang.org/changelog/2.100.1.html ! 81. https://gcc.gnu.org/PR101127 ! 82. https://gcc.gnu.org/PR106563 ! 83. https://dlang.org/spec/importc.html ! 84. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-16 ! 85. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/expressions.html#c.gcc_jit_lvalue_set_tls_model ! 86. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-17 ! 87. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/expressions.html#c.gcc_jit_lvalue_set_link_section ! 88. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Common-Variable-Attributes.html#index-section-variable-attribute ! 89. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-18 ! 90. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-19 ! 91. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-20 ! 92. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/expressions.html#c.gcc_jit_context_new_bitcast ! 93. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-21 ! 94. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/expressions.html#c.gcc_jit_lvalue_set_register_name ! 95. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-22 ! 96. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/contexts.html#c.gcc_jit_context_set_bool_print_errors_to_stderr ! 97. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-23 ! 98. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-24 ! 99. https://gcc.gnu.org/PR96066 ! 100. https://gcc.gnu.org/PR96067 ! 101. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/expressions.html#c.gcc_jit_context_new_cast ! 102. https://gcc.gnu.org/PR95498 ! 103. https://community.arm.com/arm-community-blogs/b/architectures-and-processors-blog/posts/arm-a-profile-architecture-developments-2020 ! 104. https://gcc.gnu.org/bugs/ ! 105. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Named-Address-Spaces.html#PRU-Named-Address-Spaces ! 106. https://groups.google.com/a/groups.riscv.org/g/sw-dev/c/aE1ZeHHCYf4 ! 107. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-use-of-uninitialized-value ! 108. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wuninitialized ! 109. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wmaybe-uninitialized ! 110. https://gcc.gnu.org/PR95006 ! 111. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Optimize-Options.html#index-ftrivial-auto-var-init ! 112. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-write-to-const ! 113. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-write-to-string-literal ! 114. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Common-Function-Attributes.html ! 115. https://gcc.gnu.org/PR104793 ! 116. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-fanalyzer-checker ! 117. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-fanalyzer ! 118. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-allocation-size ! 119. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-divisor ! 120. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-offset ! 121. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-size ! 122. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Common-Function-Attributes.html ! 123. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-array-index ! 124. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Common-Function-Attributes.html#index-tainted_005fargs-function-attribute ! 125. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Common-Function-Attributes.html#index-const-function-attribute ! 126. https://gcc.gnu.org/PR104434 ! 127. https://gcc.gnu.org/PR104576 ! 128. https://gcc.gnu.org/PR101962 ! 129. https://gcc.gnu.org/PR101570 ! 130. https://gcc.gnu.org/PR95006 ! 131. https://gcc.gnu.org/PR104943 ! 132. https://gcc.gnu.org/PR104954 ! 133. https://gcc.gnu.org/PR104955 ! 134. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Optimize-Options.html#index-ftrivial-auto-var-init ! 135. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wuninitialized ! 136. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Optimize-Options.html#index-ftrivial-auto-var-init 137. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Optimize-Options.html#index-ftrivial-auto-var-init ! 138. https://ctfstd.org/ ! 139. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=12.0 ! 140. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=12.2 ! 141. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=12.3 ! 142. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=12.4 ! 143. https://gcc.gnu.org/onlinedocs/ ! 144. mailto:gcc-help@gcc.gnu.org ! 145. mailto:gcc@gcc.gnu.org ! 146. https://gcc.gnu.org/lists.html ! 147. https://www.fsf.org/ ! 148. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-11/index.html GCC 11 Release Series ! May 29, 2023 ! The GCC developers are pleased to announce the release of GCC 11.4. This release is a bug-fix release, containing fixes for regressions in ! GCC 11.3 relative to previous releases of GCC. Release History GCC 11.4 ! May 29, 2023 ([1]changes, [2]documentation) GCC 11.3 ! April 21, 2022 ([3]changes, [4]documentation) GCC 11.2 ! July 28, 2021 ([5]changes, [6]documentation) GCC 11.1 ! April 27, 2021 ([7]changes, [8]documentation) References and Acknowledgements --- 863,1070 ---- 4. https://gcc.gnu.org/PR42217 5. https://gcc.gnu.org/gcc-12/changes.html#mips_zero_width_fields 6. https://gcc.gnu.org/install/specific.html ! 7. https://gcc.gnu.org/gcc-12/changes.html#general ! 8. https://clang.llvm.org/docs/ShadowCallStack.html ! 9. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Instrumentation-Options.html#index-fsanitize_003dshadow-call-stack ! 10. https://gcc.gnu.org/gcc-12/changes.html#languages ! 11. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/libgomp/OpenMP-Implementation-Status.html ! 12. https://www.openacc.org/ ! 13. https://gcc.gnu.org/wiki/OpenACC/Implementation%20Status#status-12 ! 14. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/libgomp/Enabling-OpenACC.html ! 15. https://gcc.gnu.org/gcc-12/changes.html#amdgcn ! 16. https://gcc.gnu.org/gcc-12/changes.html#nvptx ! 17. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Optimize-Options.html#index-param ! 18. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wopenacc-parallelism ! 19. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/C-Dialect-Options.html#index-foffload-options ! 20. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/C-Dialect-Options.html#index-foffload ! 21. https://gcc.gnu.org/gcc-12/changes.html#ada ! 22. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gnat_rm/Security-Hardening-Features.html#Security-Hardening-Features ! 23. https://gcc.gnu.org/gcc-12/changes.html#c-family ! 24. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wbidi-chars ! 25. https://gcc.gnu.org/PR103026 ! 26. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Warray-compare ! 27. https://gcc.gnu.org/PR97573 ! 28. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wattributes ! 29. https://gcc.gnu.org/PR101940 ! 30. https://gcc.gnu.org/gcc-12/changes.html#c ! 31. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wformat ! 32. https://gcc.gnu.org/gcc-12/changes.html#cxx ! 33. https://wg21.link/p1938 ! 34. https://gcc.gnu.org/PR100974 ! 35. https://wg21.link/p0849 ! 36. https://gcc.gnu.org/PR103049 ! 37. https://wg21.link/p2242 ! 38. https://gcc.gnu.org/PR102612 ! 39. https://wg21.link/p2334 ! 40. https://gcc.gnu.org/PR102616 ! 41. https://wg21.link/p2360 ! 42. https://gcc.gnu.org/PR102617 ! 43. https://wg21.link/p2128 ! 44. https://wg21.link/cwg2397 ! 45. https://gcc.gnu.org/PR100975 ! 46. https://wg21.link/cwg960 ! 47. https://wg21.link/cwg1227 ! 48. https://wg21.link/cwg1315 ! 49. https://wg21.link/cwg2082 ! 50. https://wg21.link/cwg2351 ! 51. https://wg21.link/cwg2374 ! 52. https://wg21.link/cwg2397 ! 53. https://wg21.link/cwg2446 ! 54. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=87c2080b ! 55. https://gcc.gnu.org/PR79501 ! 56. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wuninitialized ! 57. https://gcc.gnu.org/PR19808 ! 58. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wint-in-bool-context ! 59. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=3a2b12bc ! 60. https://gcc.gnu.org/PR99032 ! 61. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wmissing-requires ! 62. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=e18e56c7 ! 63. https://gcc.gnu.org/PR100995 ! 64. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Waddress ! 65. https://gcc.gnu.org/PR102103 ! 66. https://gcc.gnu.org/PR99701 ! 67. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=3ead06c1 ! 68. https://gcc.gnu.org/PR102753 ! 69. https://wg21.link/p0466 ! 70. https://gcc.gnu.org/PR101539 ! 71. https://gcc.gnu.org/PR100828 ! 72. https://gcc.gnu.org/PR101786 ! 73. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Winterference-size ! 74. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=76b75018 ! 75. https://gcc.gnu.org/PR101344 ! 76. https://gcc.gnu.org/PR101883 ! 77. https://gcc.gnu.org/PR89062 ! 78. https://gcc.gnu.org/PR101233 ! 79. https://gcc.gnu.org/PR88252 ! 80. https://gcc.gnu.org/PR86439 ! 81. https://gcc.gnu.org/PR98832 ! 82. https://gcc.gnu.org/PR102933 ! 83. https://gcc.gnu.org/PR51577 ! 84. https://gcc.gnu.org/PR98486 ! 85. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=1595fe44 ! 86. https://gcc.gnu.org/gcc-12/changes.html#libstdcxx ! 87. https://gcc.gnu.org/gcc-12/changes.html#d ! 88. https://dlang.org/changelog/2.100.1.html ! 89. https://gcc.gnu.org/PR101127 ! 90. https://gcc.gnu.org/PR106563 ! 91. https://dlang.org/spec/importc.html ! 92. https://gcc.gnu.org/gcc-12/changes.html#fortran ! 93. https://gcc.gnu.org/gcc-12/changes.html#go ! 94. https://gcc.gnu.org/gcc-12/changes.html#jit ! 95. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-16 ! 96. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/expressions.html#c.gcc_jit_lvalue_set_tls_model ! 97. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-17 ! 98. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/expressions.html#c.gcc_jit_lvalue_set_link_section ! 99. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Common-Variable-Attributes.html#index-section-variable-attribute ! 100. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-18 ! 101. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-19 ! 102. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-20 ! 103. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/expressions.html#c.gcc_jit_context_new_bitcast ! 104. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-21 ! 105. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/expressions.html#c.gcc_jit_lvalue_set_register_name ! 106. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-22 ! 107. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/contexts.html#c.gcc_jit_context_set_bool_print_errors_to_stderr ! 108. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-23 ! 109. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/compatibility.html#libgccjit-abi-24 ! 110. https://gcc.gnu.org/PR96066 ! 111. https://gcc.gnu.org/PR96067 ! 112. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/jit/topics/expressions.html#c.gcc_jit_context_new_cast ! 113. https://gcc.gnu.org/PR95498 ! 114. https://gcc.gnu.org/gcc-12/changes.html#targets ! 115. https://gcc.gnu.org/gcc-12/changes.html#arm-targets ! 116. https://gcc.gnu.org/gcc-12/changes.html#aarch64 ! 117. https://community.arm.com/arm-community-blogs/b/architectures-and-processors-blog/posts/arm-a-profile-architecture-developments-2020 ! 118. https://gcc.gnu.org/gcc-12/changes.html#amdgcn ! 119. https://gcc.gnu.org/gcc-12/changes.html#arm ! 120. https://gcc.gnu.org/gcc-12/changes.html#bpf ! 121. https://gcc.gnu.org/gcc-12/changes.html#x86 ! 122. https://gcc.gnu.org/gcc-12/changes.html#loongarch ! 123. https://gcc.gnu.org/gcc-12/changes.html#mips ! 124. https://gcc.gnu.org/gcc-12/changes.html#nvptx ! 125. https://gcc.gnu.org/gcc-12/changes.html#powerpc ! 126. https://gcc.gnu.org/bugs/ ! 127. https://gcc.gnu.org/gcc-12/changes.html#pru ! 128. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Named-Address-Spaces.html#PRU-Named-Address-Spaces ! 129. https://gcc.gnu.org/gcc-12/changes.html#riscv ! 130. https://groups.google.com/a/groups.riscv.org/g/sw-dev/c/aE1ZeHHCYf4 ! 131. https://gcc.gnu.org/gcc-12/changes.html#os ! 132. https://gcc.gnu.org/gcc-12/changes.html#analyzer ! 133. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-use-of-uninitialized-value ! 134. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wuninitialized ! 135. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wmaybe-uninitialized ! 136. https://gcc.gnu.org/PR95006 137. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Optimize-Options.html#index-ftrivial-auto-var-init ! 138. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-write-to-const ! 139. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-write-to-string-literal ! 140. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Common-Function-Attributes.html ! 141. https://gcc.gnu.org/PR104793 ! 142. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-fanalyzer-checker ! 143. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-fanalyzer ! 144. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-allocation-size ! 145. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-divisor ! 146. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-offset ! 147. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-size ! 148. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Common-Function-Attributes.html ! 149. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-array-index ! 150. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Common-Function-Attributes.html#index-tainted_005fargs-function-attribute ! 151. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Common-Function-Attributes.html#index-const-function-attribute ! 152. https://gcc.gnu.org/PR104434 ! 153. https://gcc.gnu.org/PR104576 ! 154. https://gcc.gnu.org/PR101962 ! 155. https://gcc.gnu.org/PR101570 ! 156. https://gcc.gnu.org/PR95006 ! 157. https://gcc.gnu.org/PR104943 ! 158. https://gcc.gnu.org/PR104954 ! 159. https://gcc.gnu.org/PR104955 ! 160. https://gcc.gnu.org/gcc-12/changes.html#uninitialized ! 161. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Optimize-Options.html#index-ftrivial-auto-var-init ! 162. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Warning-Options.html#index-Wuninitialized ! 163. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Optimize-Options.html#index-ftrivial-auto-var-init ! 164. https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gcc/Optimize-Options.html#index-ftrivial-auto-var-init ! 165. https://gcc.gnu.org/gcc-12/changes.html#debug ! 166. https://ctfstd.org/ ! 167. https://gcc.gnu.org/gcc-12/changes.html#12.1 ! 168. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=12.0 ! 169. https://gcc.gnu.org/gcc-12/changes.html#12.2 ! 170. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=12.2 ! 171. https://gcc.gnu.org/gcc-12/changes.html#12.3 ! 172. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=12.3 ! 173. https://gcc.gnu.org/gcc-12/changes.html#12.4 ! 174. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=12.4 ! 175. https://gcc.gnu.org/onlinedocs/ ! 176. mailto:gcc-help@gcc.gnu.org ! 177. mailto:gcc@gcc.gnu.org ! 178. https://gcc.gnu.org/lists.html ! 179. https://www.fsf.org/ ! 180. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-11/index.html + GCC 11 Release Series ! July 19, 2024 ! The GCC developers are pleased to announce the release of GCC 11.5. This release is a bug-fix release, containing fixes for regressions in ! GCC 11.4 relative to previous releases of GCC. Release History + GCC 11.5 + July 19, 2024 ([1]changes, [2]documentation) + GCC 11.4 ! May 29, 2023 ([3]changes, [4]documentation) GCC 11.3 ! April 21, 2022 ([5]changes, [6]documentation) GCC 11.2 ! July 28, 2021 ([7]changes, [8]documentation) GCC 11.1 ! April 27, 2021 ([9]changes, [10]documentation) References and Acknowledgements *************** References and Acknowledgements *** 1037,1089 **** The GCC developers would like to thank the numerous people that have contributed new features, improvements, bug fixes, and other changes as ! well as test results to GCC. This [9]amazing group of volunteers is what makes GCC successful. ! For additional information about GCC please refer to the [10]GCC ! project web site or contact the [11]GCC development mailing list. ! To obtain GCC please use [12]our mirror sites or [13]our version control system. For questions related to the use of GCC, please consult these web ! pages and the [14]GCC manuals. If that fails, the ! [15]gcc-help@gcc.gnu.org mailing list might help. Comments on these web pages and the development of GCC are welcome on our developer ! list at [16]gcc@gcc.gnu.org. All of [17]our lists have public archives. ! Copyright (C) [18]Free Software Foundation, Inc. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! These pages are [19]maintained by the GCC team. Last modified ! 2024-05-30. References 1. https://gcc.gnu.org/gcc-11/changes.html ! 2. https://gcc.gnu.org/onlinedocs/11.4.0/ 3. https://gcc.gnu.org/gcc-11/changes.html ! 4. https://gcc.gnu.org/onlinedocs/11.3.0/ 5. https://gcc.gnu.org/gcc-11/changes.html ! 6. https://gcc.gnu.org/onlinedocs/11.2.0/ 7. https://gcc.gnu.org/gcc-11/changes.html ! 8. https://gcc.gnu.org/onlinedocs/11.1.0/ ! 9. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Contributors.html ! 10. https://gcc.gnu.org/index.html ! 11. mailto:gcc@gcc.gnu.org ! 12. https://gcc.gnu.org/mirrors.html ! 13. https://gcc.gnu.org/git.html ! 14. https://gcc.gnu.org/onlinedocs/ ! 15. mailto:gcc-help@gcc.gnu.org ! 16. mailto:gcc@gcc.gnu.org ! 17. https://gcc.gnu.org/lists.html ! 18. https://www.fsf.org/ ! 19. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-11/changes.html GCC 11 Release Series Changes, New Features, and Fixes --- 1074,1129 ---- The GCC developers would like to thank the numerous people that have contributed new features, improvements, bug fixes, and other changes as ! well as test results to GCC. This [11]amazing group of volunteers is what makes GCC successful. ! For additional information about GCC please refer to the [12]GCC ! project web site or contact the [13]GCC development mailing list. ! To obtain GCC please use [14]our mirror sites or [15]our version control system. For questions related to the use of GCC, please consult these web ! pages and the [16]GCC manuals. If that fails, the ! [17]gcc-help@gcc.gnu.org mailing list might help. Comments on these web pages and the development of GCC are welcome on our developer ! list at [18]gcc@gcc.gnu.org. All of [19]our lists have public archives. ! Copyright (C) [20]Free Software Foundation, Inc. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! These pages are [21]maintained by the GCC team. Last modified ! 2024-07-19. References 1. https://gcc.gnu.org/gcc-11/changes.html ! 2. https://gcc.gnu.org/onlinedocs/11.5.0/ 3. https://gcc.gnu.org/gcc-11/changes.html ! 4. https://gcc.gnu.org/onlinedocs/11.4.0/ 5. https://gcc.gnu.org/gcc-11/changes.html ! 6. https://gcc.gnu.org/onlinedocs/11.3.0/ 7. https://gcc.gnu.org/gcc-11/changes.html ! 8. https://gcc.gnu.org/onlinedocs/11.2.0/ ! 9. https://gcc.gnu.org/gcc-11/changes.html ! 10. https://gcc.gnu.org/onlinedocs/11.1.0/ ! 11. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Contributors.html ! 12. https://gcc.gnu.org/index.html ! 13. mailto:gcc@gcc.gnu.org ! 14. https://gcc.gnu.org/mirrors.html ! 15. https://gcc.gnu.org/git.html ! 16. https://gcc.gnu.org/onlinedocs/ ! 17. mailto:gcc-help@gcc.gnu.org ! 18. mailto:gcc@gcc.gnu.org ! 19. https://gcc.gnu.org/lists.html ! 20. https://www.fsf.org/ ! 21. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-11/changes.html + GCC 11 Release Series Changes, New Features, and Fixes *************** Caveats *** 1120,1129 **** * Some short options of the gcov tool have been renamed: -i to -j and -j to -H. ! General Improvements ! * [5]ThreadSanitizer improvements to support alternative runtimes and ! environments. The [6]Linux Kernel Concurrency Sanitizer (KCSAN) is now supported. + Add --param tsan-distinguish-volatile to optionally emit instrumentation distinguishing volatile accesses. --- 1160,1169 ---- * Some short options of the gcov tool have been renamed: -i to -j and -j to -H. ! [5]General Improvements ! * [6]ThreadSanitizer improvements to support alternative runtimes and ! environments. The [7]Linux Kernel Concurrency Sanitizer (KCSAN) is now supported. + Add --param tsan-distinguish-volatile to optionally emit instrumentation distinguishing volatile accesses. *************** General Improvements *** 1136,1152 **** and + multicolumn characters (requiring more than one column to display in a monospace font) ! For example, the character π ("GREEK SMALL LETTER PI (U+03C0)") occupies one column, and its UTF-8 encoding requires two bytes; the ! character 🙂 ("SLIGHTLY SMILING FACE (U+1F642)") occupies two ! columns, and its UTF-8 encoding requires four bytes. In GCC 11 the column numbers default to being column numbers, respecting multi-column characters. The old behavior can be ! restored using a new option [7]-fdiagnostics-column-unit=byte. ! There is also a new option [8]-fdiagnostics-column-origin=, allowing the pre-existing default of the left-hand column being column 1 to be overridden if desired (e.g. for 0-based columns). ! The output of [9]-fdiagnostics-format=json has been extended to supply both byte counts and column numbers for all source locations. Additionally, in previous releases of GCC, tab characters in the --- 1176,1192 ---- and + multicolumn characters (requiring more than one column to display in a monospace font) ! For example, the character p ("GREEK SMALL LETTER PI (U+03C0)") occupies one column, and its UTF-8 encoding requires two bytes; the ! character 🙂 ("SLIGHTLY SMILING FACE (U+1F642)") occupies ! two columns, and its UTF-8 encoding requires four bytes. In GCC 11 the column numbers default to being column numbers, respecting multi-column characters. The old behavior can be ! restored using a new option [8]-fdiagnostics-column-unit=byte. ! There is also a new option [9]-fdiagnostics-column-origin=, allowing the pre-existing default of the left-hand column being column 1 to be overridden if desired (e.g. for 0-based columns). ! The output of [10]-fdiagnostics-format=json has been extended to supply both byte counts and column numbers for all source locations. Additionally, in previous releases of GCC, tab characters in the *************** General Improvements *** 1154,1173 **** prefixed with whitespace or line number information, leading to misalignments in the resulting output when compared with the actual source. Tab characters are now printed as an appropriate number of ! spaces, using the [10]-ftabstop option (which defaults to 8 spaces per tab stop). ! * Introduce [11]Hardware-assisted AddressSanitizer support. This sanitizer currently only works for the AArch64 target. It helps ! debug address problems similarly to [12]AddressSanitizer but is based on partial hardware assistance and provides probabilistic ! protection to use less RAM at run time. [13]Hardware-assisted AddressSanitizer is not production-ready for user space, and is provided mainly for use compiling the Linux Kernel. To use this sanitizer the command line arguments are: + -fsanitize=hwaddress to instrument userspace code. + -fsanitize=kernel-hwaddress to instrument kernel code. * For targets that produce DWARF debugging information GCC now ! defaults to [14]DWARF version 5 (with the exception of VxWorks and Darwin/Mac OS X which default to version 2 and AIX which defaults to version 4). This can produce up to 25% more compact debug information compared to earlier versions. --- 1194,1213 ---- prefixed with whitespace or line number information, leading to misalignments in the resulting output when compared with the actual source. Tab characters are now printed as an appropriate number of ! spaces, using the [11]-ftabstop option (which defaults to 8 spaces per tab stop). ! * Introduce [12]Hardware-assisted AddressSanitizer support. This sanitizer currently only works for the AArch64 target. It helps ! debug address problems similarly to [13]AddressSanitizer but is based on partial hardware assistance and provides probabilistic ! protection to use less RAM at run time. [14]Hardware-assisted AddressSanitizer is not production-ready for user space, and is provided mainly for use compiling the Linux Kernel. To use this sanitizer the command line arguments are: + -fsanitize=hwaddress to instrument userspace code. + -fsanitize=kernel-hwaddress to instrument kernel code. * For targets that produce DWARF debugging information GCC now ! defaults to [15]DWARF version 5 (with the exception of VxWorks and Darwin/Mac OS X which default to version 2 and AIX which defaults to version 4). This can produce up to 25% more compact debug information compared to earlier versions. *************** General Improvements *** 1203,1215 **** This statement can be transformed into a switch statement and then expanded into a bit-test. * New command-line options: ! + [15]-fbit-tests, enabled by default, can be used to enable or disable switch expansion using bit-tests. * Inter-procedural optimization improvements: + A new IPA-modref pass was added to track side effects of function calls and improve precision of points-to-analysis. ! The pass can be controlled by the [16]-fipa-modref option. ! + The identical code folding pass (controlled by [17]-fipa-icf) was significantly improved to increase the number of unified functions and to reduce compile-time memory use. + IPA-CP (Interprocedural constant propagation) heuristics --- 1243,1255 ---- This statement can be transformed into a switch statement and then expanded into a bit-test. * New command-line options: ! + [16]-fbit-tests, enabled by default, can be used to enable or disable switch expansion using bit-tests. * Inter-procedural optimization improvements: + A new IPA-modref pass was added to track side effects of function calls and improve precision of points-to-analysis. ! The pass can be controlled by the [17]-fipa-modref option. ! + The identical code folding pass (controlled by [18]-fipa-icf) was significantly improved to increase the number of unified functions and to reduce compile-time memory use. + IPA-CP (Interprocedural constant propagation) heuristics *************** General Improvements *** 1222,1236 **** + Memory allocation of the linking stage was improved to reduce peak memory use. * Profile driven optimization improvements: ! + Using [18]-fprofile-values, was improved by tracking more target values for e.g. indirect calls. + GCOV data file format outputs smaller files by representing zero counters in a more compact way. ! New Languages and Language specific improvements * GCC 11 adds support for non-rectangular loop nests in OpenMP ! constructs and the allocator routines of [19]OpenMP 5.0, including initial allocate clause support in C/C++. The OMP_TARGET_OFFLOAD environment variable and the active-levels routines are now supported. For C/C++, the declare variant and map support has been --- 1262,1276 ---- + Memory allocation of the linking stage was improved to reduce peak memory use. * Profile driven optimization improvements: ! + Using [19]-fprofile-values, was improved by tracking more target values for e.g. indirect calls. + GCOV data file format outputs smaller files by representing zero counters in a more compact way. ! [20]New Languages and Language specific improvements * GCC 11 adds support for non-rectangular loop nests in OpenMP ! constructs and the allocator routines of [21]OpenMP 5.0, including initial allocate clause support in C/C++. The OMP_TARGET_OFFLOAD environment variable and the active-levels routines are now supported. For C/C++, the declare variant and map support has been *************** New Languages and Language specific impr *** 1242,1290 **** extensions of OpenMP 5.0, if clause with simd and cancel modifiers, target data without map clause, and limited support for the requires construct. ! * Version 2.6 of the [20]OpenACC specification continues to be maintained and improved in the C, C++ and Fortran compilers. See ! the [21]implementation status section on the OpenACC wiki page and ! the [22]run-time library documentation for further information. ! C family * New attributes: ! + The [23]no_stack_protector attribute has been added to mark functions which should not be instrumented with stack protection (-fstack-protector). ! + The existing [24]malloc attribute has been extended so that it can be used to identify allocator/deallocator API pairs. A ! pair of new [25]-Wmismatched-dealloc and ! [26]-Wmismatched-new-delete warnings will complain about ! mismatched calls, and [27]-Wfree-nonheap-object about deallocation calls with pointers not obtained from allocation functions. Additionally, the static analyzer will use these attributes when checking for leaks, double-frees, use-after-frees, and similar issues. * New warnings: ! + [28]-Wmismatched-dealloc, enabled by default, warns about calls to deallocation functions with pointers returned from mismatched allocation functions. ! + [29]-Wsizeof-array-div, enabled by -Wall, warns about divisions of two sizeof operators when the first one is applied to an array and the divisor does not equal the size of the array element. ! + [30]-Wstringop-overread, enabled by default, warns about calls to string functions reading past the end of the arrays passed to them as arguments. In prior GCC releases most instances of his warning are diagnosed by -Wstringop-overflow. ! + [31]-Wtsan, enabled by default, warns about unsupported features in ThreadSanitizer (currently std::atomic_thread_fence). * Enhancements to existing warnings: ! + [32]-Wfree-nonheap-object detects many more instances of calls to deallocation functions with pointers not returned from a dynamic memory allocation function. ! + [33]-Wmaybe-uninitialized diagnoses passing pointers or references to uninitialized memory to functions taking const-qualified arguments. ! + [34]-Wuninitialized detects reads from uninitialized dynamically allocated memory. * For ELF targets that support the GNU or FreeBSD OSABIs, the used attribute will now save the symbol declaration it is applied to --- 1282,1330 ---- extensions of OpenMP 5.0, if clause with simd and cancel modifiers, target data without map clause, and limited support for the requires construct. ! * Version 2.6 of the [22]OpenACC specification continues to be maintained and improved in the C, C++ and Fortran compilers. See ! the [23]implementation status section on the OpenACC wiki page and ! the [24]run-time library documentation for further information. ! [25]C family * New attributes: ! + The [26]no_stack_protector attribute has been added to mark functions which should not be instrumented with stack protection (-fstack-protector). ! + The existing [27]malloc attribute has been extended so that it can be used to identify allocator/deallocator API pairs. A ! pair of new [28]-Wmismatched-dealloc and ! [29]-Wmismatched-new-delete warnings will complain about ! mismatched calls, and [30]-Wfree-nonheap-object about deallocation calls with pointers not obtained from allocation functions. Additionally, the static analyzer will use these attributes when checking for leaks, double-frees, use-after-frees, and similar issues. * New warnings: ! + [31]-Wmismatched-dealloc, enabled by default, warns about calls to deallocation functions with pointers returned from mismatched allocation functions. ! + [32]-Wsizeof-array-div, enabled by -Wall, warns about divisions of two sizeof operators when the first one is applied to an array and the divisor does not equal the size of the array element. ! + [33]-Wstringop-overread, enabled by default, warns about calls to string functions reading past the end of the arrays passed to them as arguments. In prior GCC releases most instances of his warning are diagnosed by -Wstringop-overflow. ! + [34]-Wtsan, enabled by default, warns about unsupported features in ThreadSanitizer (currently std::atomic_thread_fence). * Enhancements to existing warnings: ! + [35]-Wfree-nonheap-object detects many more instances of calls to deallocation functions with pointers not returned from a dynamic memory allocation function. ! + [36]-Wmaybe-uninitialized diagnoses passing pointers or references to uninitialized memory to functions taking const-qualified arguments. ! + [37]-Wuninitialized detects reads from uninitialized dynamically allocated memory. * For ELF targets that support the GNU or FreeBSD OSABIs, the used attribute will now save the symbol declaration it is applied to *************** New Languages and Language specific impr *** 1295,1301 **** sections. This functionality requires Binutils version 2.36 or later. ! C * Several new features from the upcoming C2X revision of the ISO C standard are supported with -std=c2x and -std=gnu2x. Some of these --- 1335,1341 ---- sections. This functionality requires Binutils version 2.36 or later. ! [38]C * Several new features from the upcoming C2X revision of the ISO C standard are supported with -std=c2x and -std=gnu2x. Some of these *************** New Languages and Language specific impr *** 1323,1340 **** + Labels may appear before declarations and at the end of a compound statement. * New warnings: ! + [35]-Warray-parameter, enabled by -Wall, warns about redeclarations of functions with ordinary array arguments declared using inconsistent forms. The warning also enables the detection of the likely out of bounds accesses in calls to such functions with smaller arrays. ! + [36]-Wvla-parameter, enabled by -Wall, warns redeclarations of functions with variable length array arguments declared using inconsistent forms or with mismatched bounds. The warning also enables the detection of the likely out of bounds accesses in calls to such functions with smaller arrays. ! C++ * The default mode has been changed to -std=gnu++17. * Several C++20 features have been implemented: --- 1363,1380 ---- + Labels may appear before declarations and at the end of a compound statement. * New warnings: ! + [39]-Warray-parameter, enabled by -Wall, warns about redeclarations of functions with ordinary array arguments declared using inconsistent forms. The warning also enables the detection of the likely out of bounds accesses in calls to such functions with smaller arrays. ! + [40]-Wvla-parameter, enabled by -Wall, warns redeclarations of functions with variable length array arguments declared using inconsistent forms or with mismatched bounds. The warning also enables the detection of the likely out of bounds accesses in calls to such functions with smaller arrays. ! [41]C++ * The default mode has been changed to -std=gnu++17. * Several C++20 features have been implemented: *************** New Languages and Language specific impr *** 1348,1359 **** + P1009R2, Array size deduction in new-expressions + P1099R5, using enum + Modules, Requires -fmodules-ts and some aspects are ! incomplete. Refer to [37]C++ 20 Status * The C++ front end has experimental support for some of the upcoming C++23 draft features with the -std=c++23, -std=gnu++23, -std=c++2b or -std=gnu++2b flags, including + P0330R8, Literal Suffix for (signed) size_t. ! For a full list of new features, see [38]the C++ status page. * Several C++ Defect Reports have been resolved, e.g.: + DR 625, Use of auto as a template-argument + DR 1512, Pointer comparison vs qualification conversions --- 1388,1399 ---- + P1009R2, Array size deduction in new-expressions + P1099R5, using enum + Modules, Requires -fmodules-ts and some aspects are ! incomplete. Refer to [42]C++ 20 Status * The C++ front end has experimental support for some of the upcoming C++23 draft features with the -std=c++23, -std=gnu++23, -std=c++2b or -std=gnu++2b flags, including + P0330R8, Literal Suffix for (signed) size_t. ! For a full list of new features, see [43]the C++ status page. * Several C++ Defect Reports have been resolved, e.g.: + DR 625, Use of auto as a template-argument + DR 1512, Pointer comparison vs qualification conversions *************** New Languages and Language specific impr *** 1366,1408 **** + DR 2303, Partial ordering and recursive variadic inheritance + DR 2369, Ordering between constraints and substitution + DR 2450, braced-init-list as a template-argument ! * G++ now performs better access checking in templates ([39]PR41437). * reinterpret_casts in constexpr evaluation are now checked more ! completely ([40]PR95307). * The diagnostic for static_assert has been improved: the compiler now shows the expression including its template arguments (if there were any), and can point to the failing clause if the condition ! comprised of any logical AND operators ([41]PR97518). * New warnings: ! + [42]-Wctad-maybe-unsupported, disabled by default, warns about performing class template argument deduction on a type with no deduction guides. ! + [43]-Wrange-loop-construct, enabled by -Wall, warns when a range-based for-loop is creating unnecessary and expensive copies. ! + [44]-Wdeprecated-enum-enum-conversion, enabled by default in C++20, warns about deprecated arithmetic conversions on operands of enumeration types, as outlined in [depr.arith.conv.enum]. ! + [45]-Wdeprecated-enum-float-conversion, enabled by default in C++20, warns about deprecated arithmetic conversions on operands where one is of enumeration type and the other is of a floating-point type, as outlined in [depr.arith.conv.enum]. ! + [46]-Wmismatched-new-delete, enabled by -Wall, warns about calls to C++ operator delete with pointers returned from mismatched forms of operator new or from other mismatched allocation functions. ! + [47]-Wvexing-parse, enabled by default, warns about the most vexing parse rule: the cases when a declaration looks like a variable definition, but the C++ language requires it to be interpreted as a function declaration. * Enhancements to existing warnings: ! + [48]-Wnonnull considers the implicit this argument of every C++ nonstatic member function to have been implicitly declared with attribute nonnull and triggers warnings for calls where the pointer is null. ! Runtime Library (libstdc++) * Improved C++17 support, including: + std::from_chars and std::to_chars for floating-point types. --- 1406,1448 ---- + DR 2303, Partial ordering and recursive variadic inheritance + DR 2369, Ordering between constraints and substitution + DR 2450, braced-init-list as a template-argument ! * G++ now performs better access checking in templates ([44]PR41437). * reinterpret_casts in constexpr evaluation are now checked more ! completely ([45]PR95307). * The diagnostic for static_assert has been improved: the compiler now shows the expression including its template arguments (if there were any), and can point to the failing clause if the condition ! comprised of any logical AND operators ([46]PR97518). * New warnings: ! + [47]-Wctad-maybe-unsupported, disabled by default, warns about performing class template argument deduction on a type with no deduction guides. ! + [48]-Wrange-loop-construct, enabled by -Wall, warns when a range-based for-loop is creating unnecessary and expensive copies. ! + [49]-Wdeprecated-enum-enum-conversion, enabled by default in C++20, warns about deprecated arithmetic conversions on operands of enumeration types, as outlined in [depr.arith.conv.enum]. ! + [50]-Wdeprecated-enum-float-conversion, enabled by default in C++20, warns about deprecated arithmetic conversions on operands where one is of enumeration type and the other is of a floating-point type, as outlined in [depr.arith.conv.enum]. ! + [51]-Wmismatched-new-delete, enabled by -Wall, warns about calls to C++ operator delete with pointers returned from mismatched forms of operator new or from other mismatched allocation functions. ! + [52]-Wvexing-parse, enabled by default, warns about the most vexing parse rule: the cases when a declaration looks like a variable definition, but the C++ language requires it to be interpreted as a function declaration. * Enhancements to existing warnings: ! + [53]-Wnonnull considers the implicit this argument of every C++ nonstatic member function to have been implicitly declared with attribute nonnull and triggers warnings for calls where the pointer is null. ! [54]Runtime Library (libstdc++) * Improved C++17 support, including: + std::from_chars and std::to_chars for floating-point types. *************** New Languages and Language specific impr *** 1423,1429 **** Parallelism 2 TS, thanks to Matthias Kretz. * Faster std::uniform_int_distribution, thanks to Daniel Lemire. ! D * New features: + A new bottom type typeof(*null) has been added to represent --- 1463,1469 ---- Parallelism 2 TS, thanks to Matthias Kretz. * Faster std::uniform_int_distribution, thanks to Daniel Lemire. ! [55]D * New features: + A new bottom type typeof(*null) has been added to represent *************** New Languages and Language specific impr *** 1545,1574 **** + The -fweak compiler switch has been removed, as it existed only for testing. ! Fortran * Added DEPRECATED to !GCC$'s attributes directive. ! Go * GCC 11 provides a complete implementation of the Go 1.16.3 user packages. ! libgccjit ! * libgccjit was marked as merely "Alpha" quality when [49]originally ! added in GCC 5. Given that we have maintained [50]API and ABI compatibility since then and it is in use by various projects, we have removed that caveat. * libgccjit can now be built for MinGW * The libgccjit API gained 10 new entry points: ! + [51]gcc_jit_global_set_initializer ! + 9 entrypoints for [52]directly embedding asm statements into a compile, analogous to inline asm in the C front end ! New Targets and Target Specific Improvements ! AArch64 & arm * A number of new CPUs are supported through arguments to the -mcpu and -mtune options in both the arm and aarch64 back ends (GCC --- 1585,1614 ---- + The -fweak compiler switch has been removed, as it existed only for testing. ! [56]Fortran * Added DEPRECATED to !GCC$'s attributes directive. ! [57]Go * GCC 11 provides a complete implementation of the Go 1.16.3 user packages. ! [58]libgccjit ! * libgccjit was marked as merely "Alpha" quality when [59]originally ! added in GCC 5. Given that we have maintained [60]API and ABI compatibility since then and it is in use by various projects, we have removed that caveat. * libgccjit can now be built for MinGW * The libgccjit API gained 10 new entry points: ! + [61]gcc_jit_global_set_initializer ! + 9 entrypoints for [62]directly embedding asm statements into a compile, analogous to inline asm in the C front end ! [63]New Targets and Target Specific Improvements ! [64]AArch64 & arm * A number of new CPUs are supported through arguments to the -mcpu and -mtune options in both the arm and aarch64 back ends (GCC *************** New Targets and Target Specific Improvem *** 1585,1591 **** in the Armv8.3-a (AArch64/AArch32), SVE (AArch64), SVE2 (AArch64) and MVE (AArch32 M-profile) instruction sets. ! AArch64 * In addition to the above, the following AArch64-only CPUs are now supported: --- 1625,1631 ---- in the Armv8.3-a (AArch64/AArch32), SVE (AArch64), SVE2 (AArch64) and MVE (AArch32 M-profile) instruction sets. ! [65]AArch64 * In addition to the above, the following AArch64-only CPUs are now supported: *************** New Targets and Target Specific Improvem *** 1593,1610 **** + Arm Cortex-R82 (cortex-r82). * The AArch64 Armv8-R architecture is now supported through the -march=armv8-r option. ! * Mitigation against the [53]Straight-line Speculation vulnerability is supported with the -mharden-sls= option. Please refer to the documentation for usage instructions. * The availability of Advanced SIMD intrinsics available through the arm_neon.h header is improved and GCC 11 supports the full set of intrinsics defined by ACLE Q3 2020. ! AMD Radeon (GCN) * Initial support for gfx908 GPUs has been added. ! arm * Initial auto-vectorization is now available when targeting the MVE instruction set. --- 1633,1650 ---- + Arm Cortex-R82 (cortex-r82). * The AArch64 Armv8-R architecture is now supported through the -march=armv8-r option. ! * Mitigation against the [66]Straight-line Speculation vulnerability is supported with the -mharden-sls= option. Please refer to the documentation for usage instructions. * The availability of Advanced SIMD intrinsics available through the arm_neon.h header is improved and GCC 11 supports the full set of intrinsics defined by ACLE Q3 2020. ! [67]AMD Radeon (GCN) * Initial support for gfx908 GPUs has been added. ! [68]arm * Initial auto-vectorization is now available when targeting the MVE instruction set. *************** New Targets and Target Specific Improvem *** 1614,1620 **** +nomve.fp to control generation of MVE and MVE floating-point instructions. ! IA-32/x86-64 * New ISA extension support for Intel TSXLDTRK was added to GCC. TSXLDTRK intrinsics are available via the -mtsxldtrk compiler --- 1654,1660 ---- +nomve.fp to control generation of MVE and MVE floating-point instructions. ! [69]IA-32/x86-64 * New ISA extension support for Intel TSXLDTRK was added to GCC. TSXLDTRK intrinsics are available via the -mtsxldtrk compiler *************** New Targets and Target Specific Improvem *** 1652,1658 **** * GCC now supports micro-architecture levels defined in the x86-64 psABI via -march=x86-64-v2, -march=x86-64-v3 and -march=x86-64-v4. ! Nios II * The options -mcustom-insn=N no longer produce compiler warnings if the custom instruction is not generated due to missing optimization --- 1692,1698 ---- * GCC now supports micro-architecture levels defined in the x86-64 psABI via -march=x86-64-v2, -march=x86-64-v3 and -march=x86-64-v4. ! [70]Nios II * The options -mcustom-insn=N no longer produce compiler warnings if the custom instruction is not generated due to missing optimization *************** New Targets and Target Specific Improvem *** 1663,1669 **** custom instructions supported by the Nios II Floating Point Hardware 2 Component. ! NVPTX * The -misa default has changed from sm_30 to sm_35. * The -m32 compiler switch has been removed. --- 1703,1709 ---- custom instructions supported by the Nios II Floating Point Hardware 2 Component. ! [71]NVPTX * The -misa default has changed from sm_30 to sm_35. * The -m32 compiler switch has been removed. *************** New Targets and Target Specific Improvem *** 1671,1677 **** it accepted -msoft-stack-reserve-local. It now accepts -msoft-stack-reserve-local=. ! S/390, System z, IBM Z Systems * The behavior when compiling with -fexcess-precision=standard (e.g., implied by -std=c99) on s390(x) targets can now be controlled at --- 1711,1717 ---- it accepted -msoft-stack-reserve-local. It now accepts -msoft-stack-reserve-local=. ! [72]S/390, System z, IBM Z Systems * The behavior when compiling with -fexcess-precision=standard (e.g., implied by -std=c99) on s390(x) targets can now be controlled at *************** New Targets and Target Specific Improvem *** 1683,1689 **** builds and cross compiles that have target libc headers, GCC will by default match the definition of float_t in the installed glibc. ! RISC-V * Support address sanitizer for RISC-V. * Support big-endian for RISC-V, thanks to Marcus Comstedt. --- 1723,1729 ---- builds and cross compiles that have target libc headers, GCC will by default match the definition of float_t in the installed glibc. ! [73]RISC-V * Support address sanitizer for RISC-V. * Support big-endian for RISC-V, thanks to Marcus Comstedt. *************** New Targets and Target Specific Improvem *** 1710,1718 **** * Introduce shorten_memrefs optimization, which reduces the code size for memory access, thanks to Craig Blackmore. ! Operating Systems ! AIX * GCC for AIX can be built as a 64-bit application and the runtime is built as FAT libraries containing both 32-bit and 64-bit objects. --- 1750,1758 ---- * Introduce shorten_memrefs optimization, which reduces the code size for memory access, thanks to Craig Blackmore. ! [74]Operating Systems ! [75]AIX * GCC for AIX can be built as a 64-bit application and the runtime is built as FAT libraries containing both 32-bit and 64-bit objects. *************** Operating Systems *** 1721,1730 **** * Use thread-safe access in ctype. * Link with libc128.a when long-double-128 enabled. ! Improvements to Static Analyzer * The implementation of how program state is tracked within ! [54]-fanalyzer has been completely rewritten for GCC 11, fixing numerous bugs, and allowing for the analyzer to scale to larger C source files. * The analysis of allocations and deallocations has been generalized --- 1761,1770 ---- * Use thread-safe access in ctype. * Link with libc128.a when long-double-128 enabled. ! [76]Improvements to Static Analyzer * The implementation of how program state is tracked within ! [77]-fanalyzer has been completely rewritten for GCC 11, fixing numerous bugs, and allowing for the analyzer to scale to larger C source files. * The analysis of allocations and deallocations has been generalized *************** Improvements to Static Analyzer *** 1732,1790 **** + As preliminary work towards eventually supporting C++, the malloc/free checking will also check new/delete and new[]/delete[]. However, C++ is not yet properly supported by ! [55]-fanalyzer (for example, exception-handling is unimplemented). ! + As noted above, the existing [56]malloc attribute has been extended so that it can be used to identify allocator/deallocator API pairs. The analyzer will use these attributes when checking for leaks, double-frees, use-after-frees, and similar issues. ! + A new [57]-Wanalyzer-mismatching-deallocation warning has been added, covering such mismatches as using scalar delete rather vector delete[]. * The analyzer has gained warnings ! [58]-Wanalyzer-shift-count-negative, ! [59]-Wanalyzer-shift-count-overflow, [60]-Wanalyzer-write-to-const, ! and [61]-Wanalyzer-write-to-string-literal, all enabled by default ! when [62]-fanalyzer is enabled. * The analyzer can now be extended by GCC plugins, allowing for domain-specific path-sensitive warnings. An example of using a ! [63]GCC plugin to check for misuses of CPython's global interpreter lock can be seen in the test suite * The analyzer has gained new debugging options ! [64]-fdump-analyzer-json and [65]-fno-analyzer-feasibility. Other significant improvements * GCC has gained a new environment variable ! [66]GCC_EXTRA_DIAGNOSTIC_OUTPUT which can be used by IDEs to request machine-readable fix-it hints without needing to adjust build flags. ! GCC 11.1 ! This is the [67]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 11.1 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! GCC 11.2 ! This is the [68]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 11.2 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! GCC 11.3 ! This is the [69]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 11.3 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! GCC 11.4 ! This is the [70]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 11.4 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). --- 1772,1830 ---- + As preliminary work towards eventually supporting C++, the malloc/free checking will also check new/delete and new[]/delete[]. However, C++ is not yet properly supported by ! [78]-fanalyzer (for example, exception-handling is unimplemented). ! + As noted above, the existing [79]malloc attribute has been extended so that it can be used to identify allocator/deallocator API pairs. The analyzer will use these attributes when checking for leaks, double-frees, use-after-frees, and similar issues. ! + A new [80]-Wanalyzer-mismatching-deallocation warning has been added, covering such mismatches as using scalar delete rather vector delete[]. * The analyzer has gained warnings ! [81]-Wanalyzer-shift-count-negative, ! [82]-Wanalyzer-shift-count-overflow, [83]-Wanalyzer-write-to-const, ! and [84]-Wanalyzer-write-to-string-literal, all enabled by default ! when [85]-fanalyzer is enabled. * The analyzer can now be extended by GCC plugins, allowing for domain-specific path-sensitive warnings. An example of using a ! [86]GCC plugin to check for misuses of CPython's global interpreter lock can be seen in the test suite * The analyzer has gained new debugging options ! [87]-fdump-analyzer-json and [88]-fno-analyzer-feasibility. Other significant improvements * GCC has gained a new environment variable ! [89]GCC_EXTRA_DIAGNOSTIC_OUTPUT which can be used by IDEs to request machine-readable fix-it hints without needing to adjust build flags. ! [90]GCC 11.1 ! This is the [91]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 11.1 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! [92]GCC 11.2 ! This is the [93]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 11.2 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! [94]GCC 11.3 ! This is the [95]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 11.3 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! [96]GCC 11.4 ! This is the [97]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 11.4 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). *************** GCC 11.4 *** 1803,1822 **** * Add CS prefix to call and jmp to indirect thunk with branch target in r8-r15 registers via -mindirect-branch-cs-prefix. For questions related to the use of GCC, please consult these web ! pages and the [71]GCC manuals. If that fails, the ! [72]gcc-help@gcc.gnu.org mailing list might help. Comments on these web pages and the development of GCC are welcome on our developer ! list at [73]gcc@gcc.gnu.org. All of [74]our lists have public archives. ! Copyright (C) [75]Free Software Foundation, Inc. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! These pages are [76]maintained by the GCC team. Last modified ! 2024-06-14. References --- 1843,1881 ---- * Add CS prefix to call and jmp to indirect thunk with branch target in r8-r15 registers via -mindirect-branch-cs-prefix. + [98]GCC 11.5 + + This is the [99]list of problem reports (PRs) from GCC's bug tracking + system that are known to be fixed in the 11.5 release. This list might + not be complete (that is, it is possible that some PRs that have been + fixed are not listed here). + + Caveats + + aarch64 + + * Due to a bug introduced a few weeks before the 11.5.0 release if + the compiler is configured without explicit --with-arch=, + --with=cpu= and/or --with-tune= configure options the compiler + without explicit -march= etc. options might act as if asked for + cortex-a34. This can be fixed by applying manually the + [100]r12-8060 commit patch on top of GCC 11.5.0. See [101]PR116029 + for more details. GCC 11.4.0 or earlier releases are not affected. + For questions related to the use of GCC, please consult these web ! pages and the [102]GCC manuals. If that fails, the ! [103]gcc-help@gcc.gnu.org mailing list might help. Comments on these web pages and the development of GCC are welcome on our developer ! list at [104]gcc@gcc.gnu.org. All of [105]our lists have public archives. ! Copyright (C) [106]Free Software Foundation, Inc. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! These pages are [107]maintained by the GCC team. Last modified ! 2025-01-31. References *************** References *** 1824,1903 **** 2. https://gcc.gnu.org/onlinedocs/index.html#current 3. https://wg21.link/p0522r0 4. https://gcc.gnu.org/pipermail/gcc-patches/2020-May/546494.html ! 5. https://github.com/google/sanitizers/wiki/ThreadSanitizerCppManual ! 6. https://www.kernel.org/doc/html/latest/dev-tools/kcsan.html ! 7. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-column-unit ! 8. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-column-origin ! 9. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format ! 10. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Preprocessor-Options.html#index-ftabstop ! 11. https://clang.llvm.org/docs/HardwareAssistedAddressSanitizerDesign.html ! 12. https://github.com/google/sanitizers/wiki/AddressSanitizer ! 13. https://clang.llvm.org/docs/HardwareAssistedAddressSanitizerDesign.html ! 14. https://dwarfstd.org/doc/DWARF5.pdf ! 15. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Code-Gen-Options.html#index-fno-bit-tests ! 16. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Optimize-Options.html#index-fipa-modref ! 17. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Optimize-Options.html#index-fipa-ocf ! 18. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Optimize-Options.html#index-fprofile-values ! 19. https://www.openmp.org/specifications/ ! 20. https://www.openacc.org/ ! 21. https://gcc.gnu.org/wiki/OpenACC/Implementation Status#status-11 ! 22. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/libgomp/Enabling-OpenACC.html ! 23. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Common-Function-Attributes.html#index-no_005fstack_005fprotector-function-attribute ! 24. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Common-Function-Attributes.html#index-malloc-function-attribute ! 25. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wmismatched-dealloc ! 26. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wmismatched-new-delete ! 27. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wfree-nonheap-object 28. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wmismatched-dealloc ! 29. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wsizeof-array-div ! 30. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wstringop-overread ! 31. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wtsan ! 32. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wfree-nonheap-object ! 33. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wmaybe-uninitialized ! 34. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wuninitialized ! 35. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Warray-parameter ! 36. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wvla-parameter ! 37. https://gcc.gnu.org/projects/cxx-status.html#cxx20 ! 38. https://gcc.gnu.org/projects/cxx-status.html#cxx23 ! 39. https://gcc.gnu.org/PR41437 ! 40. https://gcc.gnu.org/PR95307 ! 41. https://gcc.gnu.org/PR97518 ! 42. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wctad-maybe-unsupported ! 43. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wrange-loop-construct ! 44. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wdeprecated-enum-enum-conversion ! 45. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wdeprecated-enum-float-conversion ! 46. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wmismatched-new-delete ! 47. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wvexing-parse ! 48. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wnonnull ! 49. https://gcc.gnu.org/gcc-5/changes.html#jit ! 50. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/jit/topics/compatibility.html ! 51. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/jit/topics/expressions.html#c.gcc_jit_global_set_initializer ! 52. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/jit/topics/asm.html ! 53. https://developer.arm.com/documentation/102587/0102/Straight-line-speculation-frequently-asked-questions ! 54. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html ! 55. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html ! 56. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Common-Function-Attributes.html#index-malloc-function-attribute ! 57. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-mismatching-deallocation ! 58. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-shift-count-negative ! 59. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-shift-count-overflow ! 60. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-write-to-const ! 61. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-write-to-string-literal ! 62. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html ! 63. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=66dde7bc64b75d4a338266333c9c490b12d49825 ! 64. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-fdump-analyzer-json ! 65. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-fno-analyzer-feasibility ! 66. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Environment-Variables.html#index-GCC_005fEXTRA_005fDIAGNOSTIC_005fOUTPUT ! 67. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=11.0 ! 68. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=11.2 ! 69. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=11.3 ! 70. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=11.4 ! 71. https://gcc.gnu.org/onlinedocs/ ! 72. mailto:gcc-help@gcc.gnu.org ! 73. mailto:gcc@gcc.gnu.org ! 74. https://gcc.gnu.org/lists.html ! 75. https://www.fsf.org/ ! 76. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-10/index.html GCC 10 Release Series (This release series is no longer supported.) --- 1883,1994 ---- 2. https://gcc.gnu.org/onlinedocs/index.html#current 3. https://wg21.link/p0522r0 4. https://gcc.gnu.org/pipermail/gcc-patches/2020-May/546494.html ! 5. https://gcc.gnu.org/gcc-11/changes.html#general ! 6. https://github.com/google/sanitizers/wiki/ThreadSanitizerCppManual ! 7. https://www.kernel.org/doc/html/latest/dev-tools/kcsan.html ! 8. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-column-unit ! 9. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-column-origin ! 10. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format ! 11. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Preprocessor-Options.html#index-ftabstop ! 12. https://clang.llvm.org/docs/HardwareAssistedAddressSanitizerDesign.html ! 13. https://github.com/google/sanitizers/wiki/AddressSanitizer ! 14. https://clang.llvm.org/docs/HardwareAssistedAddressSanitizerDesign.html ! 15. https://dwarfstd.org/doc/DWARF5.pdf ! 16. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Code-Gen-Options.html#index-fno-bit-tests ! 17. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Optimize-Options.html#index-fipa-modref ! 18. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Optimize-Options.html#index-fipa-ocf ! 19. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Optimize-Options.html#index-fprofile-values ! 20. https://gcc.gnu.org/gcc-11/changes.html#languages ! 21. https://www.openmp.org/specifications/ ! 22. https://www.openacc.org/ ! 23. https://gcc.gnu.org/wiki/OpenACC/Implementation%20Status#status-11 ! 24. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/libgomp/Enabling-OpenACC.html ! 25. https://gcc.gnu.org/gcc-11/changes.html#c-family ! 26. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Common-Function-Attributes.html#index-no_005fstack_005fprotector-function-attribute ! 27. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Common-Function-Attributes.html#index-malloc-function-attribute 28. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wmismatched-dealloc ! 29. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wmismatched-new-delete ! 30. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wfree-nonheap-object ! 31. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wmismatched-dealloc ! 32. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wsizeof-array-div ! 33. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wstringop-overread ! 34. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wtsan ! 35. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wfree-nonheap-object ! 36. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wmaybe-uninitialized ! 37. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wuninitialized ! 38. https://gcc.gnu.org/gcc-11/changes.html#c ! 39. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Warray-parameter ! 40. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wvla-parameter ! 41. https://gcc.gnu.org/gcc-11/changes.html#cxx ! 42. https://gcc.gnu.org/projects/cxx-status.html#cxx20 ! 43. https://gcc.gnu.org/projects/cxx-status.html#cxx23 ! 44. https://gcc.gnu.org/PR41437 ! 45. https://gcc.gnu.org/PR95307 ! 46. https://gcc.gnu.org/PR97518 ! 47. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wctad-maybe-unsupported ! 48. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wrange-loop-construct ! 49. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wdeprecated-enum-enum-conversion ! 50. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wdeprecated-enum-float-conversion ! 51. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wmismatched-new-delete ! 52. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wvexing-parse ! 53. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Warning-Options.html#index-Wnonnull ! 54. https://gcc.gnu.org/gcc-11/changes.html#libstdcxx ! 55. https://gcc.gnu.org/gcc-11/changes.html#d ! 56. https://gcc.gnu.org/gcc-11/changes.html#fortran ! 57. https://gcc.gnu.org/gcc-11/changes.html#go ! 58. https://gcc.gnu.org/gcc-11/changes.html#jit ! 59. https://gcc.gnu.org/gcc-5/changes.html#jit ! 60. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/jit/topics/compatibility.html ! 61. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/jit/topics/expressions.html#c.gcc_jit_global_set_initializer ! 62. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/jit/topics/asm.html ! 63. https://gcc.gnu.org/gcc-11/changes.html#targets ! 64. https://gcc.gnu.org/gcc-11/changes.html#arm-targets ! 65. https://gcc.gnu.org/gcc-11/changes.html#aarch64 ! 66. https://developer.arm.com/documentation/102587/0102/Straight-line-speculation-frequently-asked-questions ! 67. https://gcc.gnu.org/gcc-11/changes.html#amdgcn ! 68. https://gcc.gnu.org/gcc-11/changes.html#arm ! 69. https://gcc.gnu.org/gcc-11/changes.html#x86 ! 70. https://gcc.gnu.org/gcc-11/changes.html#nios2 ! 71. https://gcc.gnu.org/gcc-11/changes.html#nvptx ! 72. https://gcc.gnu.org/gcc-11/changes.html#s390 ! 73. https://gcc.gnu.org/gcc-11/changes.html#riscv ! 74. https://gcc.gnu.org/gcc-11/changes.html#os ! 75. https://gcc.gnu.org/gcc-11/changes.html#aix ! 76. https://gcc.gnu.org/gcc-11/changes.html#analyzer ! 77. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html ! 78. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html ! 79. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Common-Function-Attributes.html#index-malloc-function-attribute ! 80. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-mismatching-deallocation ! 81. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-shift-count-negative ! 82. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-shift-count-overflow ! 83. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-write-to-const ! 84. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-Wanalyzer-write-to-string-literal ! 85. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html ! 86. https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=66dde7bc64b75d4a338266333c9c490b12d49825 ! 87. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-fdump-analyzer-json ! 88. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Static-Analyzer-Options.html#index-fno-analyzer-feasibility ! 89. https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Environment-Variables.html#index-GCC_005fEXTRA_005fDIAGNOSTIC_005fOUTPUT ! 90. https://gcc.gnu.org/gcc-11/changes.html#11.1 ! 91. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=11.0 ! 92. https://gcc.gnu.org/gcc-11/changes.html#11.2 ! 93. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=11.2 ! 94. https://gcc.gnu.org/gcc-11/changes.html#11.3 ! 95. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=11.3 ! 96. https://gcc.gnu.org/gcc-11/changes.html#11.4 ! 97. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=11.4 ! 98. https://gcc.gnu.org/gcc-11/changes.html#11.5 ! 99. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=11.5 ! 100. https://gcc.gnu.org/r12-8060 ! 101. https://gcc.gnu.org/PR116029 ! 102. https://gcc.gnu.org/onlinedocs/ ! 103. mailto:gcc-help@gcc.gnu.org ! 104. mailto:gcc@gcc.gnu.org ! 105. https://gcc.gnu.org/lists.html ! 106. https://www.fsf.org/ ! 107. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-10/index.html + GCC 10 Release Series (This release series is no longer supported.) *************** References *** 1985,1990 **** --- 2076,2082 ---- 22. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-10/changes.html + GCC 10 Release Series Changes, New Features, and Fixes *************** Caveats *** 2021,2051 **** std::istreambuf_iterator was changed in C++98 mode to be consistent with C++11 and later standards. See the [5]libstdc++ notes below for more details. ! General Improvements * New built-in functions: ! + The [6]__has_builtin built-in preprocessor operator can be used to query support for built-in functions provided by GCC and other compilers that support it. + __builtin_roundeven for the corresponding function from ISO/IEC TS 18661. * New command-line options: ! + [7]-fallocation-dce removes unneeded pairs of new and delete operators. ! + [8]-fprofile-partial-training can now be used to inform the compiler that code paths not covered by the training run should not be optimized for size. ! + [9]-fprofile-reproducible controls level of reproducibility of ! profile gathered by [10]-fprofile-generate. This makes it possible to rebuild program with same outcome which is useful, for example, for distribution packages. ! + [11]-fprofile-prefix-path can be used in combination with -fprofile-generate=profile_dir and -fprofile-use=profile_dir to inform GCC where the base directory of build source tree is in case it differs between instrumentation and optimized builds. ! + [12]-fanalyzer enables a new static analysis pass and associated warnings. This pass performs a time-consuming exploration of paths through the code in the hope of detecting various common errors, such as double-free bugs. This option --- 2113,2145 ---- std::istreambuf_iterator was changed in C++98 mode to be consistent with C++11 and later standards. See the [5]libstdc++ notes below for more details. + * GCC 10.5 does not bootstrap with a C++98 compiler; if you need to + start from C++98, you should build 10.4 or 9.5 instead. ! [6]General Improvements * New built-in functions: ! + The [7]__has_builtin built-in preprocessor operator can be used to query support for built-in functions provided by GCC and other compilers that support it. + __builtin_roundeven for the corresponding function from ISO/IEC TS 18661. * New command-line options: ! + [8]-fallocation-dce removes unneeded pairs of new and delete operators. ! + [9]-fprofile-partial-training can now be used to inform the compiler that code paths not covered by the training run should not be optimized for size. ! + [10]-fprofile-reproducible controls level of reproducibility ! of profile gathered by [11]-fprofile-generate. This makes it possible to rebuild program with same outcome which is useful, for example, for distribution packages. ! + [12]-fprofile-prefix-path can be used in combination with -fprofile-generate=profile_dir and -fprofile-use=profile_dir to inform GCC where the base directory of build source tree is in case it differs between instrumentation and optimized builds. ! + [13]-fanalyzer enables a new static analysis pass and associated warnings. This pass performs a time-consuming exploration of paths through the code in the hope of detecting various common errors, such as double-free bugs. This option *************** General Improvements *** 2055,2061 **** + The inter-procedural scalar replacement of aggregates (IPA-SRA) pass was re-implemented to work at link-time and can now also remove computing and returning unused return values. ! + [13]-finline-functions is now enabled at -O2 and was retuned for better code size versus runtime performance trade-offs. Inliner heuristics was also significantly sped up to avoid negative impact to -flto -O2 compile times. --- 2149,2155 ---- + The inter-procedural scalar replacement of aggregates (IPA-SRA) pass was re-implemented to work at link-time and can now also remove computing and returning unused return values. ! + [14]-finline-functions is now enabled at -O2 and was retuned for better code size versus runtime performance trade-offs. Inliner heuristics was also significantly sped up to avoid negative impact to -flto -O2 compile times. *************** General Improvements *** 2065,2076 **** + During link-time optimization the C++ One Definition Rule is used to increase precision of type based alias analysis. * Link-time optimization improvements: ! + A new binary [14]lto-dump has been added. It dumps various information about LTO bytecode object files. + The parallel phase of the LTO can automatically detect a running make's jobserver or fall back to number of available cores. ! + The LTO bytecode can be compressed with the [15]zstd algorithm. The configure script automatically detects zstd support. + Most --param values can now be specified at translation unit --- 2159,2170 ---- + During link-time optimization the C++ One Definition Rule is used to increase precision of type based alias analysis. * Link-time optimization improvements: ! + A new binary [15]lto-dump has been added. It dumps various information about LTO bytecode object files. + The parallel phase of the LTO can automatically detect a running make's jobserver or fall back to number of available cores. ! + The LTO bytecode can be compressed with the [16]zstd algorithm. The configure script automatically detects zstd support. + Most --param values can now be specified at translation unit *************** General Improvements *** 2083,2109 **** * Profile driven optimization improvements: + Profile maintenance during compilation and hot/cold code partitioning have been improved. ! + Using [16]-fprofile-values, an instrumented binary can track multiple values (up to 4) for e.g. indirect calls and provide more precise profile information. ! New Languages and Language-Specific Improvements ! * Version 2.6 of the [17]OpenACC specification is now supported by ! the C, C++ and Fortran compilers. See the [18]implementation status ! section on the OpenACC wiki page and the [19]run-time library documentation for further information. ! * GCC 10 adds a number of newly implemented [20]OpenMP 5.0 features such as conditional lastprivate clause, scan and loop directives, order(concurrent) and use_device_addr clauses support, if clause on simd construct, and partial support for the declare variant directive, getting closer to full support of the OpenMP 5.0 standard. ! * OpenMP and OpenACC now support [21]offloading to AMD Radeon (GCN) GPUs; supported are the third-generation Fiji (fiji) and the fifth-generation VEGA 10/VEGA 20 (gfx900 or gfx906). ! C family * New attributes: + The access function and type attribute has been added to --- 2177,2203 ---- * Profile driven optimization improvements: + Profile maintenance during compilation and hot/cold code partitioning have been improved. ! + Using [17]-fprofile-values, an instrumented binary can track multiple values (up to 4) for e.g. indirect calls and provide more precise profile information. ! [18]New Languages and Language-Specific Improvements ! * Version 2.6 of the [19]OpenACC specification is now supported by ! the C, C++ and Fortran compilers. See the [20]implementation status ! section on the OpenACC wiki page and the [21]run-time library documentation for further information. ! * GCC 10 adds a number of newly implemented [22]OpenMP 5.0 features such as conditional lastprivate clause, scan and loop directives, order(concurrent) and use_device_addr clauses support, if clause on simd construct, and partial support for the declare variant directive, getting closer to full support of the OpenMP 5.0 standard. ! * OpenMP and OpenACC now support [23]offloading to AMD Radeon (GCN) GPUs; supported are the third-generation Fiji (fiji) and the fifth-generation VEGA 10/VEGA 20 (gfx900 or gfx906). ! [24]C family * New attributes: + The access function and type attribute has been added to *************** New Languages and Language-Specific Impr *** 2118,2149 **** inline assembly with GNU as symver directive because the latter is not compatible with link-time optimizations. * New warnings: ! + [22]-Wstring-compare, enabled by -Wextra, warns about equality and inequality expressions between zero and the result of a call to either strcmp and strncmp that evaluate to a constant as a result of the length of one argument being greater than the size of the array pointed to by the other. ! + [23]-Wzero-length-bounds, enabled by -Warray-bounds, warns about accesses to elements of zero-length arrays that might overlap other members of the same object. * Enhancements to existing warnings: ! + [24]-Warray-bounds detects more out-of-bounds accesses to member arrays as well as accesses to elements of zero-length arrays. ! + [25]-Wformat-overflow makes full use of string length information computed by the strlen optimization pass. ! + [26]-Wrestrict detects overlapping accesses to dynamically allocated objects. ! + [27]-Wreturn-local-addr diagnoses more instances of return statements returning addresses of automatic variables. ! + [28]-Wstringop-overflow detects more out-of-bounds stores to member arrays including zero-length arrays, dynamically allocated objects and variable length arrays, as well as more instances of reads of unterminated character arrays by string built-in functions. The warning also detects out-of-bounds accesses by calls to user-defined functions declared with the new attribute access. ! + [29]-Warith-conversion re-enables warnings from -Wconversion, -Wfloat-conversion, and -Wsign-conversion that are now off by default for an expression where the result of an arithmetic operation will not fit in the target type due to promotion, --- 2212,2243 ---- inline assembly with GNU as symver directive because the latter is not compatible with link-time optimizations. * New warnings: ! + [25]-Wstring-compare, enabled by -Wextra, warns about equality and inequality expressions between zero and the result of a call to either strcmp and strncmp that evaluate to a constant as a result of the length of one argument being greater than the size of the array pointed to by the other. ! + [26]-Wzero-length-bounds, enabled by -Warray-bounds, warns about accesses to elements of zero-length arrays that might overlap other members of the same object. * Enhancements to existing warnings: ! + [27]-Warray-bounds detects more out-of-bounds accesses to member arrays as well as accesses to elements of zero-length arrays. ! + [28]-Wformat-overflow makes full use of string length information computed by the strlen optimization pass. ! + [29]-Wrestrict detects overlapping accesses to dynamically allocated objects. ! + [30]-Wreturn-local-addr diagnoses more instances of return statements returning addresses of automatic variables. ! + [31]-Wstringop-overflow detects more out-of-bounds stores to member arrays including zero-length arrays, dynamically allocated objects and variable length arrays, as well as more instances of reads of unterminated character arrays by string built-in functions. The warning also detects out-of-bounds accesses by calls to user-defined functions declared with the new attribute access. ! + [32]-Warith-conversion re-enables warnings from -Wconversion, -Wfloat-conversion, and -Wsign-conversion that are now off by default for an expression where the result of an arithmetic operation will not fit in the target type due to promotion, *************** New Languages and Language-Specific Impr *** 2152,2163 **** the input encoding (UTF-8, by default), in addition to the UCN syntax (\uNNNN or \UNNNNNNNN) that is already supported: ! static const int π = 3; ! int get_naïve_pi() { ! return π; } ! C * Several new features from the upcoming C2X revision of the ISO C standard are supported with -std=c2x and -std=gnu2x. Some of these --- 2246,2257 ---- the input encoding (UTF-8, by default), in addition to the UCN syntax (\uNNNN or \UNNNNNNNN) that is already supported: ! static const int p = 3; ! int get_nave_pi() { ! return p; } ! [33]C * Several new features from the upcoming C2X revision of the ISO C standard are supported with -std=c2x and -std=gnu2x. Some of these *************** int get_naïve_pi() { *** 2191,2197 **** errors. With -fcommon such definitions are silently merged during linking. ! C++ * Several C++20 features have been implemented: + Concepts, including P0734R0, P0857R0, P1084R2, P1141R2, --- 2285,2291 ---- errors. With -fcommon such definitions are silently merged during linking. ! [34]C++ * Several C++20 features have been implemented: + Concepts, including P0734R0, P0857R0, P1084R2, P1141R2, *************** int get_naïve_pi() { *** 2228,2240 **** initializer-list + DR 1710, Missing template keyword in class-or-decltype * New warnings: ! + [30]-Wmismatched-tags, disabled by default, warns about declarations of structs, classes, and class templates and their specializations with a class-key that does not match either the definition or the first declaration if no definition is provided. The option is provided to ease portability to Windows-based compilers. ! + [31]-Wredundant-tags, disabled by default, warns about redundant class-key and enum-key in contexts where the key can be eliminated without causing an syntactic ambiguity. * G++ can now detect modifying constant objects in constexpr --- 2322,2334 ---- initializer-list + DR 1710, Missing template keyword in class-or-decltype * New warnings: ! + [35]-Wmismatched-tags, disabled by default, warns about declarations of structs, classes, and class templates and their specializations with a class-key that does not match either the definition or the first declaration if no definition is provided. The option is provided to ease portability to Windows-based compilers. ! + [36]-Wredundant-tags, disabled by default, warns about redundant class-key and enum-key in contexts where the key can be eliminated without causing an syntactic ambiguity. * G++ can now detect modifying constant objects in constexpr *************** int get_naïve_pi() { *** 2248,2255 **** context as per [class.mem]. * The attribute deprecated can now be used on namespaces too. * The ABI of passing and returning certain C++ classes by value ! changed on several targets in GCC 10, including [32]AArch64, ! [33]ARM, [34]PowerPC ELFv2, [35]S/390 and [36]Itanium. These changes affect classes with a zero-sized subobject (an empty base class, or data member with the [[no_unique_address]] attribute) where all other non-static data members have the same type (this is --- 2342,2349 ---- context as per [class.mem]. * The attribute deprecated can now be used on namespaces too. * The ABI of passing and returning certain C++ classes by value ! changed on several targets in GCC 10, including [37]AArch64, ! [38]ARM, [39]PowerPC ELFv2, [40]S/390 and [41]Itanium. These changes affect classes with a zero-sized subobject (an empty base class, or data member with the [[no_unique_address]] attribute) where all other non-static data members have the same type (this is *************** int get_naïve_pi() { *** 2269,2275 **** the ABI argument passing decisions as they should be. Both of these ABI changes are now diagnosed with -Wpsabi. ! Runtime Library (libstdc++) * Improved experimental C++2a support, including: + Library concepts in and . --- 2363,2369 ---- the ABI argument passing decisions as they should be. Both of these ABI changes are now diagnosed with -Wpsabi. ! [42]Runtime Library (libstdc++) * Improved experimental C++2a support, including: + Library concepts in and . *************** int get_naïve_pi() { *** 2297,2305 **** subobjects of type std::istreambuf_iterator and another iterator type with a std::iterator base class. The layout of such a type might change when compiled as C++98. ! [37]Bug 92285 has more details and concrete examples. ! D * Support for static foreach has been implemented. * Aliases can now be created directly from any __traits that return --- 2391,2399 ---- subobjects of type std::istreambuf_iterator and another iterator type with a std::iterator base class. The layout of such a type might change when compiled as C++98. ! [43]Bug 92285 has more details and concrete examples. ! [44]D * Support for static foreach has been implemented. * Aliases can now be created directly from any __traits that return *************** int get_naïve_pi() { *** 2325,2333 **** whether to build only the core D runtime library, or both the core and standard libraries into libphobos. ! Fortran ! * use_device_addr of version 5.0 of the [38]OpenMP specification is now supported. Note that otherwise OpenMP 4.5 is partially supported in the Fortran compiler; the largest missing item is structure element mapping. --- 2419,2427 ---- whether to build only the core D runtime library, or both the core and standard libraries into libphobos. ! [45]Fortran ! * use_device_addr of version 5.0 of the [46]OpenMP specification is now supported. Note that otherwise OpenMP 4.5 is partially supported in the Fortran compiler; the largest missing item is structure element mapping. *************** int get_naïve_pi() { *** 2386,2407 **** change therefore breaks the ABI, but only for cases where this 126 character limit was exceeded. ! Go * GCC 10 provides a complete implementation of the Go 1.14.6 user packages. ! libgccjit * The libgccjit API gained four new entry points: ! + [39]gcc_jit_version_major, [40]gcc_jit_version_minor, and ! [41]gcc_jit_version_patchlevel for programmatically checking the libgccjit version from client code, and ! + [42]gcc_jit_context_new_bitfield ! New Targets and Target Specific Improvements ! AArch64 & arm * The AArch64 and arm ports now support condition flag output constraints in inline assembly, as indicated by the --- 2480,2501 ---- change therefore breaks the ABI, but only for cases where this 126 character limit was exceeded. ! [47]Go * GCC 10 provides a complete implementation of the Go 1.14.6 user packages. ! [48]libgccjit * The libgccjit API gained four new entry points: ! + [49]gcc_jit_version_major, [50]gcc_jit_version_minor, and ! [51]gcc_jit_version_patchlevel for programmatically checking the libgccjit version from client code, and ! + [52]gcc_jit_context_new_bitfield ! [53]New Targets and Target Specific Improvements ! [54]AArch64 & arm * The AArch64 and arm ports now support condition flag output constraints in inline assembly, as indicated by the *************** New Targets and Target Specific Improvem *** 2409,2415 **** A32 and T32 targets. Please refer to the documentation for more details. ! AArch64 * There have been several improvements related to the Scalable Vector Extension (SVE): --- 2503,2509 ---- A32 and T32 targets. Please refer to the documentation for more details. ! [55]AArch64 * There have been several improvements related to the Scalable Vector Extension (SVE): *************** typedef svbool_t pred512 __attribute__(( *** 2434,2440 **** one. Previously it would always use SVE if possible. + If a vector loop uses Advanced SIMD rather than SVE, the vectorizer now considers using SVE to vectorize the left-over ! elements (the “scalar tail” or “epilog”). + Besides these specific points, there have been many general improvements to the way that the vectorizer uses SVE. * The -mbranch-protection=pac-ret option now accepts the optional --- 2528,2534 ---- one. Previously it would always use SVE if possible. + If a vector loop uses Advanced SIMD rather than SVE, the vectorizer now considers using SVE to vectorize the left-over ! elements (the "scalar tail" or "epilog"). + Besides these specific points, there have been many general improvements to the way that the vectorizer uses SVE. * The -mbranch-protection=pac-ret option now accepts the optional *************** typedef svbool_t pred512 __attribute__(( *** 2494,2500 **** options, for example: -mcpu=cortex-a77 or -mtune=cortex-a65ae or as arguments to the equivalent target attributes and pragmas. ! arm * Support for the FDPIC ABI has been added. It uses 64-bit function descriptors to represent pointers to functions, and enables code --- 2588,2594 ---- options, for example: -mcpu=cortex-a77 or -mtune=cortex-a65ae or as arguments to the equivalent target attributes and pragmas. ! [56]arm * Support for the FDPIC ABI has been added. It uses 64-bit function descriptors to represent pointers to functions, and enables code *************** typedef svbool_t pred512 __attribute__(( *** 2515,2535 **** + Arm Cortex-M55 (cortex-m55). The GCC identifiers can be used as arguments to the -mcpu or -mtune options, for example: -mcpu=cortex-a77 or -mtune=cortex-m35p. ! * Support has been extended for the ACLE [43]data-processing intrinsics to include 32-bit SIMD, saturating arithmetic, 16-bit multiplication and other related intrinsics aimed at DSP algorithm optimization. * Support for -mpure-code in Thumb-1 (v6m) has been added: this M-profile feature is no longer restricted to targets with MOVT. For example, -mcpu=cortex-m0 now supports this option. ! * Support for the [44]Armv8.1-M Mainline Architecture has been added. + Armv8.1-M Mainline can be enabled by using the -march=armv8.1-m.main command-line option. ! * Support for the [45]MVE beta ACLE intrinsics has been added. These intrinsics can be enabled by including the arm_mve.h header file and passing the +mve or +mve.fp option extensions (for example: -march=armv8.1-m.main+mve). ! * Support for the Custom Datapath Extension beta ACLE [46]intrinsics has been added. * Support for Armv8.1-M Mainline Security Extensions architecture has been added. The -mcmse option, when used in combination with an --- 2609,2629 ---- + Arm Cortex-M55 (cortex-m55). The GCC identifiers can be used as arguments to the -mcpu or -mtune options, for example: -mcpu=cortex-a77 or -mtune=cortex-m35p. ! * Support has been extended for the ACLE [57]data-processing intrinsics to include 32-bit SIMD, saturating arithmetic, 16-bit multiplication and other related intrinsics aimed at DSP algorithm optimization. * Support for -mpure-code in Thumb-1 (v6m) has been added: this M-profile feature is no longer restricted to targets with MOVT. For example, -mcpu=cortex-m0 now supports this option. ! * Support for the [58]Armv8.1-M Mainline Architecture has been added. + Armv8.1-M Mainline can be enabled by using the -march=armv8.1-m.main command-line option. ! * Support for the [59]MVE beta ACLE intrinsics has been added. These intrinsics can be enabled by including the arm_mve.h header file and passing the +mve or +mve.fp option extensions (for example: -march=armv8.1-m.main+mve). ! * Support for the Custom Datapath Extension beta ACLE [60]intrinsics has been added. * Support for Armv8.1-M Mainline Security Extensions architecture has been added. The -mcmse option, when used in combination with an *************** typedef svbool_t pred512 __attribute__(( *** 2537,2548 **** -mcmse), now leads to the generation of improved code sequences when changing security states. ! AMD Radeon (GCN) * Code generation and in particular vectorization support have been much improved. ! ARC * The interrupt service routine functions save all used registers, including extension registers and auxiliary registers used by Zero --- 2631,2642 ---- -mcmse), now leads to the generation of improved code sequences when changing security states. ! [61]AMD Radeon (GCN) * Code generation and in particular vectorization support have been much improved. ! [62]ARC * The interrupt service routine functions save all used registers, including extension registers and auxiliary registers used by Zero *************** typedef svbool_t pred512 __attribute__(( *** 2555,2561 **** * Remove -mq-class option. * Improve 64-bit integer addition and subtraction operations. ! AVR * Support for the XMEGA-like devices --- 2649,2655 ---- * Remove -mq-class option. * Improve 64-bit integer addition and subtraction operations. ! [63]AVR * Support for the XMEGA-like devices *************** typedef svbool_t pred512 __attribute__(( *** 2568,2574 **** to provide a custom device-specs file by means of avr-gcc -nodevicespecs -specs=my-spec-file ! and without the need to provide options -B and -mmcu=. See [47]AVR command-line options for details. This feature is also available in GCC 9.3+ and GCC 8.4+. * New command-line options -mdouble=[32,64] and -mlong-double=[32,64] --- 2662,2668 ---- to provide a custom device-specs file by means of avr-gcc -nodevicespecs -specs=my-spec-file ! and without the need to provide options -B and -mmcu=. See [64]AVR command-line options for details. This feature is also available in GCC 9.3+ and GCC 8.4+. * New command-line options -mdouble=[32,64] and -mlong-double=[32,64] *************** typedef svbool_t pred512 __attribute__(( *** 2576,2590 **** double and long double types, respectively. Whether or not the mentioned layouts are available, whether the options act as a multilib option, and the default for either option are controlled ! by the new [48]AVR configure options --with-double= and --with-long-double=. * A new configure option --with-libf7= has been added. It controls to which level avr-libgcc provides 64-bit floating point support by ! means of [49]Libf7. * A new configure option --with-double-comparison= has been added. It's unlikely you need to set this option by hand. ! IA-32/x86-64 * Support to expand __builtin_roundeven into the appropriate SSE 4.1 instruction has been added. --- 2670,2684 ---- double and long double types, respectively. Whether or not the mentioned layouts are available, whether the options act as a multilib option, and the default for either option are controlled ! by the new [65]AVR configure options --with-double= and --with-long-double=. * A new configure option --with-libf7= has been added. It controls to which level avr-libgcc provides 64-bit floating point support by ! means of [66]Libf7. * A new configure option --with-double-comparison= has been added. It's unlikely you need to set this option by hand. ! [67]IA-32/x86-64 * Support to expand __builtin_roundeven into the appropriate SSE 4.1 instruction has been added. *************** typedef svbool_t pred512 __attribute__(( *** 2597,2603 **** -march=tigerlake. The switch enables the MOVDIRI MOVDIR64B AVX512VP2INTERSECT ISA extensions. ! MIPS * The mips*-*-linux* targets now mark object files with appropriate GNU-stack note, facilitating use of non-executable stack hardening --- 2691,2697 ---- -march=tigerlake. The switch enables the MOVDIRI MOVDIR64B AVX512VP2INTERSECT ISA extensions. ! [68]MIPS * The mips*-*-linux* targets now mark object files with appropriate GNU-stack note, facilitating use of non-executable stack hardening *************** typedef svbool_t pred512 __attribute__(( *** 2606,2615 **** configured with --with-glibc-version=2.31 against glibc 2.31 or later. ! PowerPC / PowerPC64 / RS6000 * Many vector builtins have been listed as deprecated in the ! [50]64-Bit ELF V2 ABI Specification for quite a number of years. The vector builtins listed in Tables A.8 through A.10 are now deprecated for GCC 10, and will likely be removed from support in GCC 11. Note that this does not result in any loss of function. --- 2700,2709 ---- configured with --with-glibc-version=2.31 against glibc 2.31 or later. ! [69]PowerPC / PowerPC64 / RS6000 * Many vector builtins have been listed as deprecated in the ! [70]64-Bit ELF V2 ABI Specification for quite a number of years. The vector builtins listed in Tables A.8 through A.10 are now deprecated for GCC 10, and will likely be removed from support in GCC 11. Note that this does not result in any loss of function. *************** typedef svbool_t pred512 __attribute__(( *** 2620,2636 **** will be unlikely to affect much if any code, and any required code changes will be trivial. ! PRU * A new back end targeting TI PRU I/O processors has been contributed to GCC. ! RISC-V * The riscv*-*-* targets now require GNU binutils version 2.30 or later, to support new assembly instructions produced by GCC. ! V850 * The ABI for V850 nested functions has been changed. Previously the V850 port used %r20 for the static chain pointer, now the port uses --- 2714,2730 ---- will be unlikely to affect much if any code, and any required code changes will be trivial. ! [71]PRU * A new back end targeting TI PRU I/O processors has been contributed to GCC. ! [72]RISC-V * The riscv*-*-* targets now require GNU binutils version 2.30 or later, to support new assembly instructions produced by GCC. ! [73]V850 * The ABI for V850 nested functions has been changed. Previously the V850 port used %r20 for the static chain pointer, now the port uses *************** typedef svbool_t pred512 __attribute__(( *** 2638,2655 **** where a call to a nested function would unexpectedly change the value in %r20. ! Operating Systems ! Improvements for plugin authors * GCC diagnostics can now have a chain of events associated with them, describing a path through the code that triggers the problem. These can be printed by the diagnostics subsystem in various ways, ! controlled by the [51]-fdiagnostics-path-format option, or captured ! in JSON form via [52]-fdiagnostics-format=json. ! * GCC diagnostics can now be associated with [53]CWE weakness identifiers, which will appear on the standard error stream, and in ! the JSON output from [54]-fdiagnostics-format=json. Other significant improvements --- 2732,2749 ---- where a call to a nested function would unexpectedly change the value in %r20. ! [74]Operating Systems ! [75]Improvements for plugin authors * GCC diagnostics can now have a chain of events associated with them, describing a path through the code that triggers the problem. These can be printed by the diagnostics subsystem in various ways, ! controlled by the [76]-fdiagnostics-path-format option, or captured ! in JSON form via [77]-fdiagnostics-format=json. ! * GCC diagnostics can now be associated with [78]CWE weakness identifiers, which will appear on the standard error stream, and in ! the JSON output from [79]-fdiagnostics-format=json. Other significant improvements *************** Other significant improvements *** 2661,2688 **** * For many releases, when GCC emits a warning it prints the option controlling that warning. As of GCC 10, that option text is now a clickable hyperlink for the documentation of that option (assuming ! a [55]sufficiently capable terminal). This behavior can be ! controlled via a new [56]-fdiagnostics-urls option (along with various environment variables and heuristics documented with that option). GCC 10.1 ! This is the [57]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 10.1 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! GCC 10.2 ! This is the [58]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 10.2 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! GCC 10.3 ! This is the [59]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 10.3 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). --- 2755,2782 ---- * For many releases, when GCC emits a warning it prints the option controlling that warning. As of GCC 10, that option text is now a clickable hyperlink for the documentation of that option (assuming ! a [80]sufficiently capable terminal). This behavior can be ! controlled via a new [81]-fdiagnostics-urls option (along with various environment variables and heuristics documented with that option). GCC 10.1 ! This is the [82]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 10.1 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! [83]GCC 10.2 ! This is the [84]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 10.2 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! [85]GCC 10.3 ! This is the [86]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 10.3 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). *************** GCC 10.3 *** 2707,2715 **** * GCC 10.3 supports AMD CPUs based on the znver3 core via -march=znver3. ! GCC 10.4 ! This is the [60]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 10.4 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). --- 2801,2809 ---- * GCC 10.3 supports AMD CPUs based on the znver3 core via -march=znver3. ! [87]GCC 10.4 ! This is the [88]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 10.4 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). *************** GCC 10.4 *** 2723,2749 **** MMX no longer changes how they are passed nor returned. This ABI change is now diagnosed with -Wpsabi. ! GCC 10.5 ! This is the [61]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 10.5 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). For questions related to the use of GCC, please consult these web ! pages and the [62]GCC manuals. If that fails, the ! [63]gcc-help@gcc.gnu.org mailing list might help. Comments on these web pages and the development of GCC are welcome on our developer ! list at [64]gcc@gcc.gnu.org. All of [65]our lists have public archives. ! Copyright (C) [66]Free Software Foundation, Inc. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! These pages are [67]maintained by the GCC team. Last modified ! 2023-07-07. References --- 2817,2843 ---- MMX no longer changes how they are passed nor returned. This ABI change is now diagnosed with -Wpsabi. ! [89]GCC 10.5 ! This is the [90]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 10.5 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). For questions related to the use of GCC, please consult these web ! pages and the [91]GCC manuals. If that fails, the ! [92]gcc-help@gcc.gnu.org mailing list might help. Comments on these web pages and the development of GCC are welcome on our developer ! list at [93]gcc@gcc.gnu.org. All of [94]our lists have public archives. ! Copyright (C) [95]Free Software Foundation, Inc. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! These pages are [96]maintained by the GCC team. Last modified ! 2025-03-21. References *************** References *** 2752,2821 **** 3. https://gcc.gnu.org/gcc-10/changes.html#empty_base 4. https://www.mpfr.org/ 5. https://gcc.gnu.org/gcc-10/changes.html#iterator_base ! 6. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/cpp/_005f_005fhas_005fbuiltin.html#g_t_005f_005fhas_005fbuiltin ! 7. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Optimize-Options.html#index-fno-allocation-dce ! 8. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Optimize-Options.html#index-fprofile-partial-training ! 9. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Instrumentation-Options.html#index-fprofile-reproducible ! 10. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Instrumentation-Options.html#index-fprofile-generate ! 11. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Instrumentation-Options.html#index-fprofile-prefix-path ! 12. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Static-Analyzer-Options.html ! 13. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Optimize-Options.html#index-finline-functions ! 14. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/lto-dump.html ! 15. https://facebook.github.io/zstd/ ! 16. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Optimize-Options.html#index-fprofile-values ! 17. https://www.openacc.org/ ! 18. https://gcc.gnu.org/wiki/OpenACC/Implementation Status#status-10 ! 19. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/libgomp/#toc-Enabling-OpenACC-1 ! 20. https://www.openmp.org/specifications/ ! 21. https://gcc.gnu.org/wiki/Offloading ! 22. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Wstring-compare ! 23. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Wzero-length-bounds ! 24. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Warray-bounds ! 25. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Wformat-overflow ! 26. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Wrestrict ! 27. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Wreturn-local-addr ! 28. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Wstringop-overflow ! 29. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Warith-conversion ! 30. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wmismatched-tags ! 31. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wredundant-tags ! 32. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94383 ! 33. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94711 ! 34. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94707 ! 35. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94704 ! 36. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94706 ! 37. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92285 ! 38. https://www.openmp.org/specifications/ ! 39. https://gcc.gnu.org/onlinedocs/jit/topics/compatibility.html#c.gcc_jit_version_major ! 40. https://gcc.gnu.org/onlinedocs/jit/topics/compatibility.html#c.gcc_jit_version_minor ! 41. https://gcc.gnu.org/onlinedocs/jit/topics/compatibility.html#c.gcc_jit_version_patchlevel ! 42. https://gcc.gnu.org/onlinedocs/jit/topics/types.html#c.gcc_jit_context_new_bitfield ! 43. https://developer.arm.com/documentation/101028/0009/Data-processing-intrinsics ! 44. https://developer.arm.com/Architectures/M-Profile Architecture ! 45. https://developer.arm.com/architectures/instruction-sets/intrinsics/ ! 46. https://developer.arm.com/documentation/101028/0010/Custom-Datapath-Extension ! 47. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/AVR-Options.html#index-nodevicespecs ! 48. https://gcc.gnu.org/install/configure.html#avr ! 49. https://gcc.gnu.org/wiki/avr-gcc#Libf7 ! 50. https://openpowerfoundation.org/?resource_lib=64-bit-elf-v2-abi-specification-power-architecture ! 51. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-path-format ! 52. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format ! 53. https://cwe.mitre.org/ ! 54. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format ! 55. https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda ! 56. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-urls ! 57. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=10.0 ! 58. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=10.2 ! 59. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=10.3 ! 60. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=10.4 ! 61. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=10.5 ! 62. https://gcc.gnu.org/onlinedocs/ ! 63. mailto:gcc-help@gcc.gnu.org ! 64. mailto:gcc@gcc.gnu.org ! 65. https://gcc.gnu.org/lists.html ! 66. https://www.fsf.org/ ! 67. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-9/index.html GCC 9 Release Series (This release series is no longer supported.) --- 2846,2945 ---- 3. https://gcc.gnu.org/gcc-10/changes.html#empty_base 4. https://www.mpfr.org/ 5. https://gcc.gnu.org/gcc-10/changes.html#iterator_base ! 6. https://gcc.gnu.org/gcc-10/changes.html#general ! 7. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/cpp/_005f_005fhas_005fbuiltin.html#g_t_005f_005fhas_005fbuiltin ! 8. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Optimize-Options.html#index-fno-allocation-dce ! 9. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Optimize-Options.html#index-fprofile-partial-training ! 10. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Instrumentation-Options.html#index-fprofile-reproducible ! 11. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Instrumentation-Options.html#index-fprofile-generate ! 12. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Instrumentation-Options.html#index-fprofile-prefix-path ! 13. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Static-Analyzer-Options.html ! 14. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Optimize-Options.html#index-finline-functions ! 15. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/lto-dump.html ! 16. https://facebook.github.io/zstd/ ! 17. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Optimize-Options.html#index-fprofile-values ! 18. https://gcc.gnu.org/gcc-10/changes.html#languages ! 19. https://www.openacc.org/ ! 20. https://gcc.gnu.org/wiki/OpenACC/Implementation%20Status#status-10 ! 21. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/libgomp/#toc-Enabling-OpenACC-1 ! 22. https://www.openmp.org/specifications/ ! 23. https://gcc.gnu.org/wiki/Offloading ! 24. https://gcc.gnu.org/gcc-10/changes.html#c-family ! 25. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Wstring-compare ! 26. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Wzero-length-bounds ! 27. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Warray-bounds ! 28. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Wformat-overflow ! 29. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Wrestrict ! 30. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Wreturn-local-addr ! 31. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Wstringop-overflow ! 32. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Warning-Options.html#index-Warith-conversion ! 33. https://gcc.gnu.org/gcc-10/changes.html#c ! 34. https://gcc.gnu.org/gcc-10/changes.html#cxx ! 35. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wmismatched-tags ! 36. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wredundant-tags ! 37. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94383 ! 38. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94711 ! 39. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94707 ! 40. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94704 ! 41. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94706 ! 42. https://gcc.gnu.org/gcc-10/changes.html#libstdcxx ! 43. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92285 ! 44. https://gcc.gnu.org/gcc-10/changes.html#d ! 45. https://gcc.gnu.org/gcc-10/changes.html#fortran ! 46. https://www.openmp.org/specifications/ ! 47. https://gcc.gnu.org/gcc-10/changes.html#go ! 48. https://gcc.gnu.org/gcc-10/changes.html#jit ! 49. https://gcc.gnu.org/onlinedocs/jit/topics/compatibility.html#c.gcc_jit_version_major ! 50. https://gcc.gnu.org/onlinedocs/jit/topics/compatibility.html#c.gcc_jit_version_minor ! 51. https://gcc.gnu.org/onlinedocs/jit/topics/compatibility.html#c.gcc_jit_version_patchlevel ! 52. https://gcc.gnu.org/onlinedocs/jit/topics/types.html#c.gcc_jit_context_new_bitfield ! 53. https://gcc.gnu.org/gcc-10/changes.html#targets ! 54. https://gcc.gnu.org/gcc-10/changes.html#arm-targets ! 55. https://gcc.gnu.org/gcc-10/changes.html#aarch64 ! 56. https://gcc.gnu.org/gcc-10/changes.html#arm ! 57. https://developer.arm.com/documentation/101028/0009/Data-processing-intrinsics ! 58. https://developer.arm.com/Architectures/M-Profile%20Architecture ! 59. https://developer.arm.com/architectures/instruction-sets/intrinsics/ ! 60. https://developer.arm.com/documentation/101028/0010/Custom-Datapath-Extension ! 61. https://gcc.gnu.org/gcc-10/changes.html#amdgcn ! 62. https://gcc.gnu.org/gcc-10/changes.html#arc ! 63. https://gcc.gnu.org/gcc-10/changes.html#avr ! 64. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/AVR-Options.html#index-nodevicespecs ! 65. https://gcc.gnu.org/install/configure.html#avr ! 66. https://gcc.gnu.org/wiki/avr-gcc#Libf7 ! 67. https://gcc.gnu.org/gcc-10/changes.html#x86 ! 68. https://gcc.gnu.org/gcc-10/changes.html#mips ! 69. https://gcc.gnu.org/gcc-10/changes.html#powerpc ! 70. https://openpowerfoundation.org/?resource_lib=64-bit-elf-v2-abi-specification-power-architecture ! 71. https://gcc.gnu.org/gcc-10/changes.html#pru ! 72. https://gcc.gnu.org/gcc-10/changes.html#riscv ! 73. https://gcc.gnu.org/gcc-10/changes.html#v850 ! 74. https://gcc.gnu.org/gcc-10/changes.html#os ! 75. https://gcc.gnu.org/gcc-10/changes.html#plugins ! 76. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-path-format ! 77. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format ! 78. https://cwe.mitre.org/ ! 79. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format ! 80. https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda ! 81. https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-urls ! 82. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=10.0 ! 83. https://gcc.gnu.org/gcc-10/changes.html#GCC10.2 ! 84. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=10.2 ! 85. https://gcc.gnu.org/gcc-10/changes.html#GCC10.3 ! 86. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=10.3 ! 87. https://gcc.gnu.org/gcc-10/changes.html#GCC10.4 ! 88. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=10.4 ! 89. https://gcc.gnu.org/gcc-10/changes.html#GCC10.5 ! 90. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=10.5 ! 91. https://gcc.gnu.org/onlinedocs/ ! 92. mailto:gcc-help@gcc.gnu.org ! 93. mailto:gcc@gcc.gnu.org ! 94. https://gcc.gnu.org/lists.html ! 95. https://www.fsf.org/ ! 96. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-9/index.html + GCC 9 Release Series (This release series is no longer supported.) *************** References *** 2903,2908 **** --- 3027,3033 ---- 22. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-9/changes.html + GCC 9 Release Series Changes, New Features, and Fixes *************** Caveats *** 2948,2962 **** installed headers to define the _GLIBCXX_USE_CXX11_ABI macro to 0. ! General Improvements The following GCC command line options have been introduced or improved. * All command line options that take a byte-size argument accept 64-bit integers as well as standard SI and IEC suffixes such as kb and KiB, MB and MiB, or GB and GiB denoting the corresponding ! multiples of bytes. See [9]Invoking GCC for more. ! * A new option [10]-flive-patching=[inline-only-static|inline-clone] generates code suitable for live patching. At the same time it provides multiple-level control over IPA optimizations. See the user guide for more details. --- 3073,3087 ---- installed headers to define the _GLIBCXX_USE_CXX11_ABI macro to 0. ! [9]General Improvements The following GCC command line options have been introduced or improved. * All command line options that take a byte-size argument accept 64-bit integers as well as standard SI and IEC suffixes such as kb and KiB, MB and MiB, or GB and GiB denoting the corresponding ! multiples of bytes. See [10]Invoking GCC for more. ! * A new option [11]-flive-patching=[inline-only-static|inline-clone] generates code suitable for live patching. At the same time it provides multiple-level control over IPA optimizations. See the user guide for more details. *************** General Improvements *** 2965,2971 **** Bash-completion. * GCC's diagnostics now print source code with a left margin showing line numbers, configurable with ! [11]-fno-diagnostics-show-line-numbers. GCC's diagnostics can also now label regions of the source code to show pertinent information, such as the types within an expression. $ g++ t.cc --- 3090,3096 ---- Bash-completion. * GCC's diagnostics now print source code with a left margin showing line numbers, configurable with ! [12]-fno-diagnostics-show-line-numbers. GCC's diagnostics can also now label regions of the source code to show pertinent information, such as the types within an expression. $ g++ t.cc *************** e>' and 'boxed_value') *** 2981,3001 **** | | | boxed_value<[...]> ! These labels can be disabled via [12]-fno-diagnostics-show-labels. ! * A new option [13]-fdiagnostics-format=json has been introduced for emitting diagnostics in a machine-readable format. ! * The alignment-related options [14]-falign-functions, ! [15]-falign-labels, [16]-falign-loops, and [17]-falign-jumps received support for a secondary alignment (e.g. -falign-loops=n:m:n2:m2). ! * New pair of profiling options ([18]-fprofile-filter-files and ! [19]-fprofile-exclude-files) has been added. The options help to filter which source files are instrumented. * AddressSanitizer generates more compact redzones for automatic variables. That helps to reduce memory footprint of a sanitized binary. * Numerous improvements have been made to the output of ! [20]-fopt-info. Messages are now prefixed with optimized, missed, or note, rather than the old behavior of all being prefixed with note. The output from -fopt-info can now contain information on inlining --- 3106,3126 ---- | | | boxed_value<[...]> ! These labels can be disabled via [13]-fno-diagnostics-show-labels. ! * A new option [14]-fdiagnostics-format=json has been introduced for emitting diagnostics in a machine-readable format. ! * The alignment-related options [15]-falign-functions, ! [16]-falign-labels, [17]-falign-loops, and [18]-falign-jumps received support for a secondary alignment (e.g. -falign-loops=n:m:n2:m2). ! * New pair of profiling options ([19]-fprofile-filter-files and ! [20]-fprofile-exclude-files) has been added. The options help to filter which source files are instrumented. * AddressSanitizer generates more compact redzones for automatic variables. That helps to reduce memory footprint of a sanitized binary. * Numerous improvements have been made to the output of ! [21]-fopt-info. Messages are now prefixed with optimized, missed, or note, rather than the old behavior of all being prefixed with note. The output from -fopt-info can now contain information on inlining *************** mory"); *** 3031,3057 **** The old behavior can be obtained via a new -internals suboption of -fopt-info. ! * A new option, [21]-fsave-optimization-record has been added, which writes a SRCFILE.opt-record.json.gz file describing the optimization decisions made by GCC. This is similar to the output of -fopt-info, but with additional metadata such as the inlining chain, and profile information (if available). * Inter-procedural propagation of stack alignment can now be ! controlled by [22]-fipa-stack-alignment. * Propagation of addressability, readonly, and writeonly flags on static variables can now be controlled by ! [23]-fipa-reference-addressable. The following built-in functions have been introduced. ! * [24]__builtin_expect_with_probability to provide branch prediction probability hints to the optimizer. ! * [25]__builtin_has_attribute determines whether a function, type, or variable has been declared with some attribute. ! * [26]__builtin_speculation_safe_value can be used to help mitigate against unsafe speculative execution. The following attributes have been introduced. ! * The [27]copy function attribute has been added. The attribute can also be applied to type definitions and to variable declarations. A large number of improvements to code generation have been made, --- 3156,3182 ---- The old behavior can be obtained via a new -internals suboption of -fopt-info. ! * A new option, [22]-fsave-optimization-record has been added, which writes a SRCFILE.opt-record.json.gz file describing the optimization decisions made by GCC. This is similar to the output of -fopt-info, but with additional metadata such as the inlining chain, and profile information (if available). * Inter-procedural propagation of stack alignment can now be ! controlled by [23]-fipa-stack-alignment. * Propagation of addressability, readonly, and writeonly flags on static variables can now be controlled by ! [24]-fipa-reference-addressable. The following built-in functions have been introduced. ! * [25]__builtin_expect_with_probability to provide branch prediction probability hints to the optimizer. ! * [26]__builtin_has_attribute determines whether a function, type, or variable has been declared with some attribute. ! * [27]__builtin_speculation_safe_value can be used to help mitigate against unsafe speculative execution. The following attributes have been introduced. ! * The [28]copy function attribute has been added. The attribute can also be applied to type definitions and to variable declarations. A large number of improvements to code generation have been made, *************** mory"); *** 3059,3065 **** * Switch expansion has been improved by using a different strategy (jump table, bit test, decision tree) for a subset of switch cases. * A linear function expression defined as a switch statement can be ! transformed by [28]-ftree-switch-conversion. For example: int foo (int how) --- 3184,3190 ---- * Switch expansion has been improved by using a different strategy (jump table, bit test, decision tree) for a subset of switch cases. * A linear function expression defined as a switch statement can be ! transformed by [29]-ftree-switch-conversion. For example: int foo (int how) *************** foo (int how) *** 3086,3094 **** + Improved scalability for very large translation units (especially when link-time optimizing large programs). * Profile driven optimization improvements: ! + [29]-fprofile-use now enables [30]-fversion-loops-for-strides, ! [31]-floop-interchange, [32]-floop-unroll-and-jam, ! [33]-ftree-loop-distribution. + Streaming of counter histograms was removed, which reduces the size of profile files. Histograms are computed on the fly with link-time optimization. --- 3211,3219 ---- + Improved scalability for very large translation units (especially when link-time optimizing large programs). * Profile driven optimization improvements: ! + [30]-fprofile-use now enables [31]-fversion-loops-for-strides, ! [32]-floop-interchange, [33]-floop-unroll-and-jam, ! [34]-ftree-loop-distribution. + Streaming of counter histograms was removed, which reduces the size of profile files. Histograms are computed on the fly with link-time optimization. *************** foo (int how) *** 3116,3160 **** The following improvements to the gcov command-line utility have been made. ! * The gcov tool received a new option [34]--use-hotness-colors (-q) that can provide perf-like coloring of hot functions. * The gcov tool has changed its intermediate format to a new JSON format. ! New Languages and Language specific improvements ! [35]OpenACC support in C, C++, and Fortran continues to be maintained and improved. Most of the OpenACC 2.5 specification is implemented. See ! the [36]implementation status section on the OpenACC wiki page for further information. ! C family ! * Version 5.0 of the [37]OpenMP specification is now partially supported in the C and C++ compilers. For details which features of OpenMP 5.0 are and which are not supported in the GCC 9 release see ! [38]this mail. * New extensions: ! + [39]__builtin_convertvector built-in for vector conversions has been added. * New warnings: ! + [40]-Waddress-of-packed-member, enabled by default, warns about an unaligned pointer value from the address of a packed member of a struct or union. * Enhancements to existing warnings: ! + [41]-Warray-bounds detects more instances of out-of-bounds indices. ! + [42]-Wattribute-alias also detects attribute mismatches between alias declarations and their targets, in addition to mismatches between their types. ! + [43]-Wformat-overflow and [44]-Wformat-truncation have been extended to all formatted input/output functions (where applicable) and enhanced to detect a subset of instances of reading past the end of unterminated constant character arrays in %s directives. ! + [45]-Wmissing-attributes detects instances of missing function attributes on declarations of aliases and weak references. ! + [46]-Wstringop-truncation also detects a subset of instances of reading past the end of unterminated constant character arrays, * If a macro is used with the wrong argument count, the C and C++ --- 3241,3285 ---- The following improvements to the gcov command-line utility have been made. ! * The gcov tool received a new option [35]--use-hotness-colors (-q) that can provide perf-like coloring of hot functions. * The gcov tool has changed its intermediate format to a new JSON format. ! [36]New Languages and Language specific improvements ! [37]OpenACC support in C, C++, and Fortran continues to be maintained and improved. Most of the OpenACC 2.5 specification is implemented. See ! the [38]implementation status section on the OpenACC wiki page for further information. ! [39]C family ! * Version 5.0 of the [40]OpenMP specification is now partially supported in the C and C++ compilers. For details which features of OpenMP 5.0 are and which are not supported in the GCC 9 release see ! [41]this mail. * New extensions: ! + [42]__builtin_convertvector built-in for vector conversions has been added. * New warnings: ! + [43]-Waddress-of-packed-member, enabled by default, warns about an unaligned pointer value from the address of a packed member of a struct or union. * Enhancements to existing warnings: ! + [44]-Warray-bounds detects more instances of out-of-bounds indices. ! + [45]-Wattribute-alias also detects attribute mismatches between alias declarations and their targets, in addition to mismatches between their types. ! + [46]-Wformat-overflow and [47]-Wformat-truncation have been extended to all formatted input/output functions (where applicable) and enhanced to detect a subset of instances of reading past the end of unterminated constant character arrays in %s directives. ! + [48]-Wmissing-attributes detects instances of missing function attributes on declarations of aliases and weak references. ! + [49]-Wstringop-truncation also detects a subset of instances of reading past the end of unterminated constant character arrays, * If a macro is used with the wrong argument count, the C and C++ *************** New Languages and Language specific impr *** 3163,3169 **** threshold for similarity has been tightened, to avoid nonsensical suggestions. ! C * There is now experimental support for -std=c2x, to select support for the upcoming C2X revision of the ISO C standard. This standard --- 3288,3294 ---- threshold for similarity has been tightened, to avoid nonsensical suggestions. ! [50]C * There is now experimental support for -std=c2x, to select support for the upcoming C2X revision of the ISO C standard. This standard *************** New Languages and Language specific impr *** 3175,3181 **** added in C2X (such warnings are also enabled by use of -Wpedantic if not using -std=c2x or -std=gnu2x). * New warnings: ! + [47]-Wabsolute-value warns for calls to standard functions that compute the absolute value of an argument when a more appropriate standard function is available. For example, calling abs(3.14) triggers the warning because the appropriate --- 3300,3306 ---- added in C2X (such warnings are also enabled by use of -Wpedantic if not using -std=c2x or -std=gnu2x). * New warnings: ! + [51]-Wabsolute-value warns for calls to standard functions that compute the absolute value of an argument when a more appropriate standard function is available. For example, calling abs(3.14) triggers the warning because the appropriate *************** New Languages and Language specific impr *** 3185,3206 **** This warning can be suppressed with an explicit type cast and it is also enabled by -Wextra. ! C++ * New warnings: ! + [48]-Wdeprecated-copy, implied by -Wextra, warns about the C++11 deprecation of implicitly declared copy constructor and assignment operator if one of them is user-provided. -Wdeprecated-copy-dtor also warns if the destructor is user-provided, as specified in C++11. ! + [49]-Winit-list-lifetime, on by default, warns about uses of std::initializer_list that are likely to result in a dangling pointer, such as returning or assigning from a temporary list. ! + [50]-Wredundant-move, implied by -Wextra, warns about redundant calls to std::move. ! + [51]-Wpessimizing-move, implied by -Wall, warns when a call to std::move prevents copy elision. ! + [52]-Wclass-conversion, on by default, warns when a conversion function will never be called due to the type it converts to. * The C++ front end has experimental support for some of the upcoming C++2a draft features with the -std=c++2a or -std=gnu++2a flags, --- 3310,3331 ---- This warning can be suppressed with an explicit type cast and it is also enabled by -Wextra. ! [52]C++ * New warnings: ! + [53]-Wdeprecated-copy, implied by -Wextra, warns about the C++11 deprecation of implicitly declared copy constructor and assignment operator if one of them is user-provided. -Wdeprecated-copy-dtor also warns if the destructor is user-provided, as specified in C++11. ! + [54]-Winit-list-lifetime, on by default, warns about uses of std::initializer_list that are likely to result in a dangling pointer, such as returning or assigning from a temporary list. ! + [55]-Wredundant-move, implied by -Wextra, warns about redundant calls to std::move. ! + [56]-Wpessimizing-move, implied by -Wall, warns when a call to std::move prevents copy elision. ! + [57]-Wclass-conversion, on by default, warns when a conversion function will never be called due to the type it converts to. * The C++ front end has experimental support for some of the upcoming C++2a draft features with the -std=c++2a or -std=gnu++2a flags, *************** New Languages and Language specific impr *** 3211,3217 **** attributes, class types in non-type template parameters, allowing virtual function calls in constant expressions, explicit(bool), std::is_constant_evaluated, nested inline namespaces, etc. For a ! full list of new features, see [53]the C++ status page. * The C++ front end now preserves source locations for literals, id-expression, and mem-initializer for longer. For example it is now able to pin-point the pertinent locations for bad --- 3336,3342 ---- attributes, class types in non-type template parameters, allowing virtual function calls in constant expressions, explicit(bool), std::is_constant_evaluated, nested inline namespaces, etc. For a ! full list of new features, see [58]the C++ status page. * The C++ front end now preserves source locations for literals, id-expression, and mem-initializer for longer. For example it is now able to pin-point the pertinent locations for bad *************** d*, int)' *** 3271,3277 **** 3 | void callee (int, void *, int) | ^~~~~~ ! * The C++ front end's implementation of [54]-Wformat now shows precise locations within string literals, and underlines the pertinent arguments at bogus call sites (the C front end has been doing this since GCC 7). For example: --- 3396,3402 ---- 3 | void callee (int, void *, int) | ^~~~~~ ! * The C++ front end's implementation of [59]-Wformat now shows precise locations within string literals, and underlines the pertinent arguments at bogus call sites (the C front end has been doing this since GCC 7). For example: *************** _SIZE'? *** 3353,3363 **** | ^~~~~~~ | BUF_SIZE ! Runtime Library (libstdc++) * Improved support for C++17, including: + The C++17 implementation is no longer experimental. ! + Parallel algorithms and (requires [55]Thread Building Blocks 2018 or newer). + . + Using the types and functions in does not require --- 3478,3488 ---- | ^~~~~~~ | BUF_SIZE ! [60]Runtime Library (libstdc++) * Improved support for C++17, including: + The C++17 implementation is no longer experimental. ! + Parallel algorithms and (requires [61]Thread Building Blocks 2018 or newer). + . + Using the types and functions in does not require *************** _SIZE'? *** 3385,3396 **** Filesystem TS on Windows. * Incomplete, experimental support for the Networking TS. ! D * Support for the D programming language has been added to GCC, implementing version 2.076 of the language and run-time library. ! Fortran * Asynchronous I/O is now fully supported. The program needs to be linked against the pthreads library to use it, otherwise the I/O is --- 3510,3521 ---- Filesystem TS on Windows. * Incomplete, experimental support for the Networking TS. ! [62]D * Support for the D programming language has been added to GCC, implementing version 2.076 of the language and run-time library. ! [63]Fortran * Asynchronous I/O is now fully supported. The program needs to be linked against the pthreads library to use it, otherwise the I/O is *************** _SIZE'? *** 3412,3440 **** specific way, one needs to explicitly check for NaN's before calling MAX or MIN, e.g. by using the IEEE_IS_NAN function from the intrinsic module IEEE_ARITHMETIC. ! * A new command-line option [56]-fdec-include, set also by the ! [57]-fdec option, has been added to increase compatibility with legacy code. With this option, an INCLUDE directive is also parsed as a statement, which allows the directive to be spread across multiple source lines with line continuations. ! * A new [58]BUILTIN directive, has been added. The purpose of the directive is to provide an API between the GCC compiler and the GNU C Library which would define vector implementations of math routines. ! Go * GCC 9 provides a complete implementation of the Go 1.12.2 user packages. ! libgccjit * The libgccjit API gained a new entry point: ! [59]gcc_jit_context_add_driver_option. ! New Targets and Target Specific Improvements ! AArch64 & Arm * Support has been added for the following processors (GCC identifiers in parentheses): --- 3537,3565 ---- specific way, one needs to explicitly check for NaN's before calling MAX or MIN, e.g. by using the IEEE_IS_NAN function from the intrinsic module IEEE_ARITHMETIC. ! * A new command-line option [64]-fdec-include, set also by the ! [65]-fdec option, has been added to increase compatibility with legacy code. With this option, an INCLUDE directive is also parsed as a statement, which allows the directive to be spread across multiple source lines with line continuations. ! * A new [66]BUILTIN directive, has been added. The purpose of the directive is to provide an API between the GCC compiler and the GNU C Library which would define vector implementations of math routines. ! [67]Go * GCC 9 provides a complete implementation of the Go 1.12.2 user packages. ! [68]libgccjit * The libgccjit API gained a new entry point: ! [69]gcc_jit_context_add_driver_option. ! [70]New Targets and Target Specific Improvements ! [71]AArch64 & Arm * Support has been added for the following processors (GCC identifiers in parentheses): *************** New Targets and Target Specific Improvem *** 3471,3477 **** * Support has been added for the Arm Neoverse E1 processor (-mcpu=neoverse-e1). * The AArch64 port now has support for stack clash protection using ! the [60]-fstack-clash-protection option. The probing interval/guard size can be set by using --param stack-clash-protection-guard-size=12|16. The value of this parameter must be in bytes represented as a power of two. The two --- 3596,3602 ---- * Support has been added for the Arm Neoverse E1 processor (-mcpu=neoverse-e1). * The AArch64 port now has support for stack clash protection using ! the [72]-fstack-clash-protection option. The probing interval/guard size can be set by using --param stack-clash-protection-guard-size=12|16. The value of this parameter must be in bytes represented as a power of two. The two *************** New Targets and Target Specific Improvem *** 3484,3490 **** option can now be used to enable the return address signing as well as the new Branch Target Identification feature of Armv8.5-A architecture. For more information on the arguments accepted by ! this option, please refer to [61]AArch64-Options. * The following optional extensions to Armv8.5-A architecture are now supported and only affect the assembler. + Random Number Generation instructions through the --- 3609,3615 ---- option can now be used to enable the return address signing as well as the new Branch Target Identification feature of Armv8.5-A architecture. For more information on the arguments accepted by ! this option, please refer to [73]AArch64-Options. * The following optional extensions to Armv8.5-A architecture are now supported and only affect the assembler. + Random Number Generation instructions through the *************** New Targets and Target Specific Improvem *** 3503,3509 **** * Corrected FPU configurations for Cortex-R7 and Cortex-R8 when using their respective -mcpu options. ! AMD GCN * A new back end targeting AMD GCN GPUs has been contributed to GCC. The implementation is currently limited to compiling --- 3628,3634 ---- * Corrected FPU configurations for Cortex-R7 and Cortex-R8 when using their respective -mcpu options. ! [74]AMD GCN * A new back end targeting AMD GCN GPUs has been contributed to GCC. The implementation is currently limited to compiling *************** New Targets and Target Specific Improvem *** 3514,3532 **** + Fiji (fiji). + Vega 10 (gfx900). ! ARC * LRA is now on by default for the ARC target. This can be controlled by -mlra. * Add support for frame code-density and branch-and-index instructions. ! C-SKY * A new back end targeting C-SKY V2 processors has been contributed to GCC. ! IA-32/x86-64 * Support of Intel MPX (Memory Protection Extensions) has been removed. --- 3639,3657 ---- + Fiji (fiji). + Vega 10 (gfx900). ! [75]ARC * LRA is now on by default for the ARC target. This can be controlled by -mlra. * Add support for frame code-density and branch-and-index instructions. ! [76]C-SKY * A new back end targeting C-SKY V2 processors has been contributed to GCC. ! [77]IA-32/x86-64 * Support of Intel MPX (Memory Protection Extensions) has been removed. *************** New Targets and Target Specific Improvem *** 3537,3543 **** following ISA extensions: AVX512F, AVX512VL, AVX512CD, AVX512BW, AVX512DQ, AVX512VNNI. ! MIPS * The Loongson loongson-mmi and loongson-ext extensions have been split from loongson3a: --- 3662,3668 ---- following ISA extensions: AVX512F, AVX512VL, AVX512CD, AVX512BW, AVX512DQ, AVX512VNNI. ! [78]MIPS * The Loongson loongson-mmi and loongson-ext extensions have been split from loongson3a: *************** New Targets and Target Specific Improvem *** 3561,3572 **** -mtune options (as in -mcpu=gs464 or -mtune=gs464e) or as arguments to the equivalent target attributes and pragmas. ! OpenRISC * A new back end targeting OpenRISC processors has been contributed to GCC. ! S/390, System z, IBM z Systems * Support for the arch13 architecture has been added. When using the -march=arch13 option, the compiler will generate code making use of --- 3686,3697 ---- -mtune options (as in -mcpu=gs464 or -mtune=gs464e) or as arguments to the equivalent target attributes and pragmas. ! [79]OpenRISC * A new back end targeting OpenRISC processors has been contributed to GCC. ! [80]S/390, System z, IBM z Systems * Support for the arch13 architecture has been added. When using the -march=arch13 option, the compiler will generate code making use of *************** New Targets and Target Specific Improvem *** 3596,3604 **** containing pointers to each profiling call stub. This is useful for automatically patching in and out calls. ! Operating Systems ! Solaris * g++ now unconditionally enables large file support when compiling 32-bit code. --- 3721,3729 ---- containing pointers to each profiling call stub. This is useful for automatically patching in and out calls. ! [81]Operating Systems ! [82]Solaris * g++ now unconditionally enables large file support when compiling 32-bit code. *************** Operating Systems *** 3609,3617 **** Solaris 11/x86. It requires the use of GNU as. Solaris 11/SPARC support is still work-in-progress. ! Windows ! * A C++ Microsoft ABI bitfield layout bug, [62]PR87137 has been fixed. A non-field declaration could cause the current bitfield allocation unit to be completed, incorrectly placing a following bitfield into a new allocation unit. The Microsoft ABI is selected --- 3734,3742 ---- Solaris 11/x86. It requires the use of GNU as. Solaris 11/SPARC support is still work-in-progress. ! [83]Windows ! * A C++ Microsoft ABI bitfield layout bug, [84]PR87137 has been fixed. A non-field declaration could cause the current bitfield allocation unit to be completed, incorrectly placing a following bitfield into a new allocation unit. The Microsoft ABI is selected *************** Operating Systems *** 3622,3634 **** + SuperH targets when the -mhitachi option is specified, or __attribute__((renesas)) is used ! Improvements for plugin authors * GCC's diagnostic subsystem now has a way to logically group together related diagnostics, auto_diagnostic_group. Such diagnostics will be nested by the output of ! [63]-fdiagnostics-format=json. ! * GCC now has a set of [64]user experience guidelines for GCC, with information and advice on implementing new diagnostics. Other significant improvements --- 3747,3759 ---- + SuperH targets when the -mhitachi option is specified, or __attribute__((renesas)) is used ! [85]Improvements for plugin authors * GCC's diagnostic subsystem now has a way to logically group together related diagnostics, auto_diagnostic_group. Such diagnostics will be nested by the output of ! [86]-fdiagnostics-format=json. ! * GCC now has a set of [87]user experience guidelines for GCC, with information and advice on implementing new diagnostics. Other significant improvements *************** Other significant improvements *** 3636,3665 **** * GCC's internal "selftest" suite now runs for C++ as well as C (in debug builds of the compiler). ! GCC 9.1 ! This is the [65]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 9.1 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! GCC 9.2 ! This is the [66]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 9.2 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! GCC 9.3 ! This is the [67]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 9.3 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! GCC 9.4 ! This is the [68]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 9.4 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). --- 3761,3790 ---- * GCC's internal "selftest" suite now runs for C++ as well as C (in debug builds of the compiler). ! [88]GCC 9.1 ! This is the [89]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 9.1 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! [90]GCC 9.2 ! This is the [91]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 9.2 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! [92]GCC 9.3 ! This is the [93]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 9.3 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! [94]GCC 9.4 ! This is the [95]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 9.4 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). *************** GCC 9.4 *** 3682,3708 **** for all SVE implementations. Adding -msve-vector-bits=512 makes the code specific to 512-bit SVE. ! GCC 9.5 ! This is the [69]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 9.5 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). For questions related to the use of GCC, please consult these web ! pages and the [70]GCC manuals. If that fails, the ! [71]gcc-help@gcc.gnu.org mailing list might help. Comments on these web pages and the development of GCC are welcome on our developer ! list at [72]gcc@gcc.gnu.org. All of [73]our lists have public archives. ! Copyright (C) [74]Free Software Foundation, Inc. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! These pages are [75]maintained by the GCC team. Last modified ! 2024-05-09. References --- 3807,3833 ---- for all SVE implementations. Adding -msve-vector-bits=512 makes the code specific to 512-bit SVE. ! [96]GCC 9.5 ! This is the [97]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 9.5 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). For questions related to the use of GCC, please consult these web ! pages and the [98]GCC manuals. If that fails, the ! [99]gcc-help@gcc.gnu.org mailing list might help. Comments on these web pages and the development of GCC are welcome on our developer ! list at [100]gcc@gcc.gnu.org. All of [101]our lists have public archives. ! Copyright (C) [102]Free Software Foundation, Inc. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! These pages are [103]maintained by the GCC team. Last modified ! 2025-01-31. References *************** References *** 3714,3788 **** 6. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90920 7. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/C_002b_002b-Dialect-Options.html#index-frepo 8. https://gcc.gnu.org/PR90361 ! 9. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Invoking-GCC.html#Invoking-GCC ! 10. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-flive-patching ! 11. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fno-diagnostics-show-line-numbers ! 12. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fno-diagnostics-show-labels ! 13. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format ! 14. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-falign-functions ! 15. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-falign-labels ! 16. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-falign-loops ! 17. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-falign-jumps ! 18. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Instrumentation-Options.html#index-fprofile-filter-files ! 19. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Instrumentation-Options.html#index-fprofile-exclude-files ! 20. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Developer-Options.html#index-fopt-info ! 21. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Developer-Options.html#index-fsave-optimization-record ! 22. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-fipa-stack-alignment ! 23. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-fipa-reference-addressable ! 24. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Other-Builtins.html#index-_005f_005fbuiltin_005fexpect_005fwith_005fprobability ! 25. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Other-Builtins.html#index-_005f_005fbuiltin_005fhas_005fattribute-1 ! 26. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Other-Builtins.html#index-_005f_005fbuiltin_005fspeculation_005fsafe_005fvalue-1 ! 27. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Common-Function-Attributes.html#index-copy-function-attribute ! 28. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-ftree-switch-conversion ! 29. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-fprofile-use ! 30. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-fversion-loops-for-strides ! 31. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-floop-interchange ! 32. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-floop-unroll-and-jam ! 33. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-ftree-loop-distribution ! 34. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Invoking-Gcov.html#Invoking-Gcov ! 35. https://www.openacc.org/ ! 36. https://gcc.gnu.org/wiki/OpenACC/Implementation Status#status-9 ! 37. https://www.openmp.org/specifications/ ! 38. https://gcc.gnu.org/ml/gcc-patches/2018-11/msg00628.html ! 39. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Vector-Extensions.html#index-_005f_005fbuiltin_005fconvertvector ! 40. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Waddress-of-packed-member ! 41. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Warray-bounds ! 42. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wattribute-alias ! 43. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wformat-overflow ! 44. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wformat-truncation ! 45. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wmissing-attributes ! 46. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wstringop-truncation ! 47. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wabsolute-value ! 48. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wdeprecated-copy ! 49. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Winit-list-lifetime ! 50. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wredundant-move ! 51. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wpessimizing-move ! 52. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wclass-conversion ! 53. https://gcc.gnu.org/projects/cxx-status.html#cxx2a ! 54. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wformat ! 55. https://github.com/oneapi-src/oneTBB ! 56. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gfortran/Fortran-Dialect-Options.html#index-fdec-include ! 57. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gfortran/Fortran-Dialect-Options.html#index-fdec ! 58. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gfortran/BUILTIN-directive.html#BUILTIN-directive ! 59. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/jit/topics/contexts.html#gcc_jit_context_add_driver_option ! 60. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Instrumentation-Options.html#index-fstack-protector ! 61. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/AArch64-Options.html#AArch64-Options ! 62. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87137 ! 63. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format ! 64. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gccint/User-Experience-Guidelines.html ! 65. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=9.0 ! 66. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=9.2 ! 67. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=9.3 ! 68. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=9.4 ! 69. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=9.5 ! 70. https://gcc.gnu.org/onlinedocs/ ! 71. mailto:gcc-help@gcc.gnu.org ! 72. mailto:gcc@gcc.gnu.org ! 73. https://gcc.gnu.org/lists.html ! 74. https://www.fsf.org/ ! 75. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-8/index.html GCC 8 Release Series (This release series is no longer supported.) --- 3839,3942 ---- 6. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90920 7. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/C_002b_002b-Dialect-Options.html#index-frepo 8. https://gcc.gnu.org/PR90361 ! 9. https://gcc.gnu.org/gcc-9/changes.html#general ! 10. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Invoking-GCC.html#Invoking-GCC ! 11. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-flive-patching ! 12. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fno-diagnostics-show-line-numbers ! 13. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fno-diagnostics-show-labels ! 14. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format ! 15. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-falign-functions ! 16. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-falign-labels ! 17. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-falign-loops ! 18. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-falign-jumps ! 19. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Instrumentation-Options.html#index-fprofile-filter-files ! 20. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Instrumentation-Options.html#index-fprofile-exclude-files ! 21. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Developer-Options.html#index-fopt-info ! 22. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Developer-Options.html#index-fsave-optimization-record ! 23. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-fipa-stack-alignment ! 24. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-fipa-reference-addressable ! 25. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Other-Builtins.html#index-_005f_005fbuiltin_005fexpect_005fwith_005fprobability ! 26. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Other-Builtins.html#index-_005f_005fbuiltin_005fhas_005fattribute-1 ! 27. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Other-Builtins.html#index-_005f_005fbuiltin_005fspeculation_005fsafe_005fvalue-1 ! 28. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Common-Function-Attributes.html#index-copy-function-attribute ! 29. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-ftree-switch-conversion ! 30. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-fprofile-use ! 31. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-fversion-loops-for-strides ! 32. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-floop-interchange ! 33. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-floop-unroll-and-jam ! 34. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Optimize-Options.html#index-ftree-loop-distribution ! 35. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Invoking-Gcov.html#Invoking-Gcov ! 36. https://gcc.gnu.org/gcc-9/changes.html#languages ! 37. https://www.openacc.org/ ! 38. https://gcc.gnu.org/wiki/OpenACC/Implementation%20Status#status-9 ! 39. https://gcc.gnu.org/gcc-9/changes.html#c-family ! 40. https://www.openmp.org/specifications/ ! 41. https://gcc.gnu.org/ml/gcc-patches/2018-11/msg00628.html ! 42. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Vector-Extensions.html#index-_005f_005fbuiltin_005fconvertvector ! 43. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Waddress-of-packed-member ! 44. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Warray-bounds ! 45. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wattribute-alias ! 46. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wformat-overflow ! 47. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wformat-truncation ! 48. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wmissing-attributes ! 49. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wstringop-truncation ! 50. https://gcc.gnu.org/gcc-9/changes.html#c ! 51. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wabsolute-value ! 52. https://gcc.gnu.org/gcc-9/changes.html#cxx ! 53. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wdeprecated-copy ! 54. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Winit-list-lifetime ! 55. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wredundant-move ! 56. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wpessimizing-move ! 57. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/C_002b_002b-Dialect-Options.html#index-Wclass-conversion ! 58. https://gcc.gnu.org/projects/cxx-status.html#cxx2a ! 59. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Warning-Options.html#index-Wformat ! 60. https://gcc.gnu.org/gcc-9/changes.html#libstdcxx ! 61. https://github.com/uxlfoundation/oneTBB ! 62. https://gcc.gnu.org/gcc-9/changes.html#d ! 63. https://gcc.gnu.org/gcc-9/changes.html#fortran ! 64. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gfortran/Fortran-Dialect-Options.html#index-fdec-include ! 65. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gfortran/Fortran-Dialect-Options.html#index-fdec ! 66. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gfortran/BUILTIN-directive.html#BUILTIN-directive ! 67. https://gcc.gnu.org/gcc-9/changes.html#go ! 68. https://gcc.gnu.org/gcc-9/changes.html#jit ! 69. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/jit/topics/contexts.html#gcc_jit_context_add_driver_option ! 70. https://gcc.gnu.org/gcc-9/changes.html#targets ! 71. https://gcc.gnu.org/gcc-9/changes.html#arm-targets ! 72. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Instrumentation-Options.html#index-fstack-protector ! 73. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/AArch64-Options.html#AArch64-Options ! 74. https://gcc.gnu.org/gcc-9/changes.html#amdgcn ! 75. https://gcc.gnu.org/gcc-9/changes.html#arc ! 76. https://gcc.gnu.org/gcc-9/changes.html#csky ! 77. https://gcc.gnu.org/gcc-9/changes.html#x86 ! 78. https://gcc.gnu.org/gcc-9/changes.html#mips ! 79. https://gcc.gnu.org/gcc-9/changes.html#or1k ! 80. https://gcc.gnu.org/gcc-9/changes.html#s390 ! 81. https://gcc.gnu.org/gcc-9/changes.html#os ! 82. https://gcc.gnu.org/gcc-9/changes.html#solaris ! 83. https://gcc.gnu.org/gcc-9/changes.html#windows ! 84. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87137 ! 85. https://gcc.gnu.org/gcc-9/changes.html#plugins ! 86. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format ! 87. https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gccint/User-Experience-Guidelines.html ! 88. https://gcc.gnu.org/gcc-9/changes.html#GCC9.1 ! 89. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=9.0 ! 90. https://gcc.gnu.org/gcc-9/changes.html#GCC9.2 ! 91. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=9.2 ! 92. https://gcc.gnu.org/gcc-9/changes.html#GCC9.3 ! 93. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=9.3 ! 94. https://gcc.gnu.org/gcc-9/changes.html#GCC9.4 ! 95. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=9.4 ! 96. https://gcc.gnu.org/gcc-9/changes.html#GCC9.5 ! 97. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=9.5 ! 98. https://gcc.gnu.org/onlinedocs/ ! 99. mailto:gcc-help@gcc.gnu.org ! 100. mailto:gcc@gcc.gnu.org ! 101. https://gcc.gnu.org/lists.html ! 102. https://www.fsf.org/ ! 103. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-8/index.html + GCC 8 Release Series (This release series is no longer supported.) *************** References *** 3874,3879 **** --- 4028,4034 ---- 23. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-8/changes.html + GCC 8 Release Series Changes, New Features, and Fixes *************** http://gcc.gnu.org/gcc-8/changes.html *** 3883,3888 **** --- 4038,4044 ---- Caveats + * The default mode for C is now -std=gnu17 instead of -std=gnu11. * Support for the obsolete SDB/coff debug info format has been removed. The option -gcoff no longer does anything. * The Cilk+ extensions to the C and C++ languages have been removed. *************** Caveats *** 3898,3904 **** revive them, the next release of GCC will have their sources permanently removed. ! General Improvements * Inter-procedural optimization improvements: + Reworked run-time estimation metrics leading to more realistic --- 4054,4060 ---- revive them, the next release of GCC will have their sources permanently removed. ! [4]General Improvements * Inter-procedural optimization improvements: + Reworked run-time estimation metrics leading to more realistic *************** SUMMARY: AddressSanitizer: invalid-point *** 4085,4100 **** void __attribute__ ((no_sanitize ("alignment", "object-size"))) f () { /* Do something. */; } ! New Languages and Language specific improvements ! Ada * For its internal exception handling used on the host for error recovery in the front-end, the compiler now relies on the native exception handling mechanism of the host platform, which should be more efficient than the former mechanism. ! BRIG (HSAIL) In this release cycle, the focus for the BRIGFE was on stabilization and performance improvements. Also a couple of completely new features --- 4241,4256 ---- void __attribute__ ((no_sanitize ("alignment", "object-size"))) f () { /* Do something. */; } ! [5]New Languages and Language specific improvements ! [6]Ada * For its internal exception handling used on the host for error recovery in the front-end, the compiler now relies on the native exception handling mechanism of the host platform, which should be more efficient than the former mechanism. ! [7]BRIG (HSAIL) In this release cycle, the focus for the BRIGFE was on stabilization and performance improvements. Also a couple of completely new features *************** New Languages and Language specific impr *** 4128,4141 **** * libhsail-rt: Assume the host runtime allocates the work group memory. ! C family * New command-line options have been added for the C and C++ compilers: ! + [4]-Wmultistatement-macros warns about unsafe macros expanding to multiple statements used as a body of a statement such as if, else, while, switch, or for. ! + [5]-Wstringop-truncation warns for calls to bounded string manipulation functions such as strncat, strncpy, and stpncpy that might either truncate the copied string or leave the destination unchanged. For example, the following call to --- 4284,4297 ---- * libhsail-rt: Assume the host runtime allocates the work group memory. ! [8]C family * New command-line options have been added for the C and C++ compilers: ! + [9]-Wmultistatement-macros warns about unsafe macros expanding to multiple statements used as a body of a statement such as if, else, while, switch, or for. ! + [10]-Wstringop-truncation warns for calls to bounded string manipulation functions such as strncat, strncpy, and stpncpy that might either truncate the copied string or leave the destination unchanged. For example, the following call to *************** void copy (const char *s) *** 4158,4186 **** { char buf[80]; strncpy (buf, s, sizeof buf); ! … } warning: 'strncpy' specified bound 80 equals destination size [-Wstringop-trunca tion] The -Wstringop-truncation option is included in -Wall. ! Note that due to GCC bug [6]82944, defining strncat, strncpy, or stpncpy as a macro in a system header as some implementations do, suppresses the warning. ! + [7]-Wif-not-aligned controls warnings issued in response to invalid uses of objects declared with attribute ! [8]warn_if_not_aligned. The -Wif-not-aligned option is included in -Wall. ! + [9]-Wmissing-attributes warns when a declaration of a function ! is missing one or more attributes that a related function is ! declared with and whose absence may adversely affect the ! correctness or efficiency of generated code. For example, in ! C++, the warning is issued when an explicit specialization of ! a primary template declared with attribute alloc_align, ! alloc_size, assume_aligned, format, format_arg, malloc, or ! nonnull is declared without it. Attributes deprecated, error, ! and warning suppress the warning. The -Wmissing-attributes option is included in -Wall. ! + [10]-Wpacked-not-aligned warns when a struct or union declared with attribute packed defines a member with an explicitly specified alignment greater than 1. Such a member will wind up under-aligned. For example, a warning will be issued for the --- 4314,4342 ---- { char buf[80]; strncpy (buf, s, sizeof buf); ! ... } warning: 'strncpy' specified bound 80 equals destination size [-Wstringop-trunca tion] The -Wstringop-truncation option is included in -Wall. ! Note that due to GCC bug [11]82944, defining strncat, strncpy, or stpncpy as a macro in a system header as some implementations do, suppresses the warning. ! + [12]-Wif-not-aligned controls warnings issued in response to invalid uses of objects declared with attribute ! [13]warn_if_not_aligned. The -Wif-not-aligned option is included in -Wall. ! + [14]-Wmissing-attributes warns when a declaration of a ! function is missing one or more attributes that a related ! function is declared with and whose absence may adversely ! affect the correctness or efficiency of generated code. For ! example, in C++, the warning is issued when an explicit ! specialization of a primary template declared with attribute ! alloc_align, alloc_size, assume_aligned, format, format_arg, ! malloc, or nonnull is declared without it. Attributes ! deprecated, error, and warning suppress the warning. The -Wmissing-attributes option is included in -Wall. ! + [15]-Wpacked-not-aligned warns when a struct or union declared with attribute packed defines a member with an explicitly specified alignment greater than 1. Such a member will wind up under-aligned. For example, a warning will be issued for the *************** warning: alignment 1 of 'struct S' is le *** 4215,4225 **** optimization levels. Using -fsanitize=signed-integer-overflow is now the preferred way to audit code, -Wstrict-overflow is deprecated. ! * The [11]-Warray-bounds option has been improved to detect more instances of out-of-bounds array indices and pointer offsets. For example, negative or excessive indices into flexible array members and string literals are detected. ! * The [12]-Wrestrict option introduced in GCC 7 has been enhanced to detect many more instances of overlapping accesses to objects via restrict-qualified arguments to standard memory and string manipulation functions such as memcpy and strcpy. For example, the --- 4371,4381 ---- optimization levels. Using -fsanitize=signed-integer-overflow is now the preferred way to audit code, -Wstrict-overflow is deprecated. ! * The [16]-Warray-bounds option has been improved to detect more instances of out-of-bounds array indices and pointer offsets. For example, negative or excessive indices into flexible array members and string literals are detected. ! * The [17]-Wrestrict option introduced in GCC 7 has been enhanced to detect many more instances of overlapping accesses to objects via restrict-qualified arguments to standard memory and string manipulation functions such as memcpy and strcpy. For example, the *************** void f (void) *** 4231,4243 **** { char a[] = "abcd1234"; strcpy (a, a + 4); ! … } warning: 'strcpy' accessing 5 bytes at offsets 0 and 4 overlaps 1 byte at offset 4 [-Wrestrict] The -Wrestrict option is included in -Wall. * Several optimizer enhancements have enabled improvements to the ! [13]-Wformat-overflow and [14]-Wformat-truncation options. The warnings detect more instances of buffer overflow and truncation than in GCC 7 and are better at avoiding certain kinds of false positives. --- 4387,4399 ---- { char a[] = "abcd1234"; strcpy (a, a + 4); ! ... } warning: 'strcpy' accessing 5 bytes at offsets 0 and 4 overlaps 1 byte at offset 4 [-Wrestrict] The -Wrestrict option is included in -Wall. * Several optimizer enhancements have enabled improvements to the ! [18]-Wformat-overflow and [19]-Wformat-truncation options. The warnings detect more instances of buffer overflow and truncation than in GCC 7 and are better at avoiding certain kinds of false positives. *************** unclosed-2.c:8:45: error: expected ')' b *** 4318,4324 **** They will also emit fix-it hints. ! C++ * GCC 8 (-fabi-version=12) has a couple of corrections to the calling convention, which changes the ABI for some uncommon code: --- 4474,4487 ---- They will also emit fix-it hints. ! [20]C ! ! * New options -std=c17, to select support for the 2018 edition of the ! ISO C standard (__STDC_VERSION__ == 201710L), and -std=gnu17, for ! C17 with GNU extensions. ! * The default mode has been changed to -std=gnu17. ! ! [21]C++ * GCC 8 (-fabi-version=12) has a couple of corrections to the calling convention, which changes the ABI for some uncommon code: *************** unclosed-2.c:8:45: error: expected ')' b *** 4331,4337 **** a class was impossible. + WARNING: In GCC 8.1 the second change mistakenly also affects classes with a deleted copy constructor and defaulted trivial ! move constructor (bug [15]c++/86094). This issue is fixed in GCC 8.2 (-fabi-version=13). You can test whether these changes affect your code with -Wabi=11 (or -Wabi=12 in GCC 8.2 for the third issue); if these changes are --- 4494,4500 ---- a class was impossible. + WARNING: In GCC 8.1 the second change mistakenly also affects classes with a deleted copy constructor and defaulted trivial ! move constructor (bug [22]c++/86094). This issue is fixed in GCC 8.2 (-fabi-version=13). You can test whether these changes affect your code with -Wabi=11 (or -Wabi=12 in GCC 8.2 for the third issue); if these changes are *************** unclosed-2.c:8:45: error: expected ')' b *** 4344,4350 **** preferred alignment should use __alignof__ instead. * New command-line options have been added for the C++ compiler to control warnings: ! + [16]-Wclass-memaccess warns when objects of non-trivial class types are manipulated in potentially unsafe ways by raw memory functions such as memcpy, or realloc. The warning helps detect calls that bypass user-defined constructors or copy-assignment --- 4507,4513 ---- preferred alignment should use __alignof__ instead. * New command-line options have been added for the C++ compiler to control warnings: ! + [23]-Wclass-memaccess warns when objects of non-trivial class types are manipulated in potentially unsafe ways by raw memory functions such as memcpy, or realloc. The warning helps detect calls that bypass user-defined constructors or copy-assignment *************** o trivial copy-assignment [-Wclass-memac *** 4363,4369 **** including designated initializers, default member initializers for bit-fields, __VA_OPT__ (except that #__VA_OPT__ is unsupported), lambda [=, this] captures, etc. For a full list of new features, ! see [17]the C++ status page. * When reporting on attempts to access private fields of a class or struct, the C++ compiler will now offer fix-it hints showing how to use an accessor function to get at the field in question, if one --- 4526,4532 ---- including designated initializers, default member initializers for bit-fields, __VA_OPT__ (except that #__VA_OPT__ is unsupported), lambda [=, this] captures, etc. For a full list of new features, ! see [24]the C++ status page. * When reporting on attempts to access private fields of a class or struct, the C++ compiler will now offer fix-it hints showing how to use an accessor function to get at the field in question, if one *************** ctor >()' from 'map >()' from 'map >()' from 'map >()' from 'map instead of --- 7107,7130 ---- register %d32 in lieu of on the stack as per the SPARC calling conventions. ! [40]Operating Systems ! [41]AIX * DWARF debugging support for AIX 7.1 has been enabled as an optional debugging format. A more recent Technology Level (TL) and GCC built with that level are required for full exploitation of DWARF debugging capabilities. ! [42]Linux ! * Support for the [43]musl C library was added for the AArch64, ARM, MicroBlaze, MIPS, MIPS64, PowerPC, PowerPC64, SH, i386, x32 and x86_64 targets. It can be selected using the new -mmusl option in case musl is not the default libc. GCC defaults to musl libc if it is built with a target triplet matching the *-linux-musl* pattern. ! [44]RTEMS * The RTEMS thread model implementation changed. Mutexes now use self-contained objects defined in newlib instead of *************** Operating Systems *** 6907,6913 **** thread pools for each scheduler instance via the environment variable GOMP_RTEMS_THREAD_POOLS. ! Solaris * Solaris 12 is now fully supported. Minimal support had already been present in GCC 5.3. --- 7138,7144 ---- thread pools for each scheduler instance via the environment variable GOMP_RTEMS_THREAD_POOLS. ! [45]Solaris * Solaris 12 is now fully supported. Minimal support had already been present in GCC 5.3. *************** Operating Systems *** 6919,6925 **** linker. * libvtv has been ported to Solaris 11 and up. ! Windows * The option -mstackrealign is now automatically activated in 32-bit mode whenever the use of SSE instructions is requested. --- 7150,7156 ---- linker. * libvtv has been ported to Solaris 11 and up. ! [46]Windows * The option -mstackrealign is now automatically activated in 32-bit mode whenever the use of SSE instructions is requested. *************** gcc: error: unrecognized command line op *** 6936,6944 **** * The --enable-default-pie configure option enables generation of PIE by default. ! GCC 6.2 ! This is the [22]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 6.2 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). --- 7167,7175 ---- * The --enable-default-pie configure option enables generation of PIE by default. ! [47]GCC 6.2 ! This is the [48]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 6.2 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). *************** Target Specific Changes *** 6952,6960 **** * Support for the SPARC M7 (Niagara 7) processor has been added. * Support for the VIS 4.0 instruction set has been added. ! GCC 6.3 ! This is the [23]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 6.3 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). --- 7183,7191 ---- * Support for the SPARC M7 (Niagara 7) processor has been added. * Support for the VIS 4.0 instruction set has been added. ! [49]GCC 6.3 ! This is the [50]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 6.3 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). *************** Target Specific Changes *** 6963,7005 **** IA-32/x86-64 ! * Support for the [24]deprecated pcommit instruction has been removed. ! GCC 6.4 ! This is the [25]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 6.4 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! Operating Systems ! RTEMS * The ABI changes on ARM so that no short enums are used by default. ! GCC 6.5 ! This is the [26]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 6.5 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). For questions related to the use of GCC, please consult these web ! pages and the [27]GCC manuals. If that fails, the ! [28]gcc-help@gcc.gnu.org mailing list might help. Comments on these web pages and the development of GCC are welcome on our developer ! list at [29]gcc@gcc.gnu.org. All of [30]our lists have public archives. ! Copyright (C) [31]Free Software Foundation, Inc. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! These pages are [32]maintained by the GCC team. Last modified ! 2023-02-20. References --- 7194,7236 ---- IA-32/x86-64 ! * Support for the [51]deprecated pcommit instruction has been removed. ! [52]GCC 6.4 ! This is the [53]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 6.4 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! [54]Operating Systems ! [55]RTEMS * The ABI changes on ARM so that no short enums are used by default. ! [56]GCC 6.5 ! This is the [57]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 6.5 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). For questions related to the use of GCC, please consult these web ! pages and the [58]GCC manuals. If that fails, the ! [59]gcc-help@gcc.gnu.org mailing list might help. Comments on these web pages and the development of GCC are welcome on our developer ! list at [60]gcc@gcc.gnu.org. All of [61]our lists have public archives. ! Copyright (C) [62]Free Software Foundation, Inc. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! These pages are [63]maintained by the GCC team. Last modified ! 2025-01-31. References *************** References *** 7008,7042 **** 3. https://gcc.gnu.org/ml/gcc/2015-08/msg00101.html 4. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71151 5. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87822 ! 6. https://www.openacc.org/ ! 7. https://gcc.gnu.org/wiki/OpenACC ! 8. https://gcc.gnu.org/wiki/Offloading ! 9. https://www.openmp.org/specifications/ ! 10. https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-1266 ! 11. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4377.pdf ! 12. https://gcc.gnu.org/projects/cxx-status.html#cxx1z ! 13. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/jit/topics/performance.html ! 14. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/jit/topics/functions.html#gcc_jit_block_end_with_switch ! 15. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/jit/topics/contexts.html#gcc_jit_context_set_bool_allow_unreachable_blocks ! 16. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/jit/topics/contexts.html#gcc_jit_context_add_command_line_option ! 17. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/gcc/AArch64-Function-Attributes.html#AArch64-Function-Attributes ! 18. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/gcc/ARM-Function-Attributes.html#ARM-Function-Attributes ! 19. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/gcc/Named-Address-Spaces.html#Named-Address-Spaces ! 20. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/gcc/S_002f390-Function-Attributes.html#S_002f390-Function-Attributes ! 21. http://www.musl-libc.org/ ! 22. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=6.2 ! 23. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=6.3 ! 24. https://www.intel.com/content/www/us/en/developer/articles/technical/deprecate-pcommit-instruction.html ! 25. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=6.4 ! 26. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=6.5 ! 27. https://gcc.gnu.org/onlinedocs/ ! 28. mailto:gcc-help@gcc.gnu.org ! 29. mailto:gcc@gcc.gnu.org ! 30. https://gcc.gnu.org/lists.html ! 31. https://www.fsf.org/ ! 32. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-5/index.html GCC 5 Release Series (This release series is no longer supported.) --- 7239,7305 ---- 3. https://gcc.gnu.org/ml/gcc/2015-08/msg00101.html 4. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71151 5. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87822 ! 6. https://gcc.gnu.org/gcc-6/changes.html#general ! 7. https://gcc.gnu.org/gcc-6/changes.html#languages ! 8. https://www.openacc.org/ ! 9. https://gcc.gnu.org/wiki/OpenACC ! 10. https://gcc.gnu.org/wiki/Offloading ! 11. https://gcc.gnu.org/gcc-6/changes.html#c-family ! 12. https://www.openmp.org/specifications/ ! 13. https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-1266 ! 14. https://gcc.gnu.org/gcc-6/changes.html#c ! 15. https://gcc.gnu.org/gcc-6/changes.html#cxx ! 16. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4377.pdf ! 17. https://gcc.gnu.org/projects/cxx-status.html#cxx1z ! 18. https://gcc.gnu.org/gcc-6/changes.html#libstdcxx ! 19. https://gcc.gnu.org/gcc-6/changes.html#fortran ! 20. https://gcc.gnu.org/gcc-6/changes.html#jit ! 21. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/jit/topics/performance.html ! 22. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/jit/topics/functions.html#gcc_jit_block_end_with_switch ! 23. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/jit/topics/contexts.html#gcc_jit_context_set_bool_allow_unreachable_blocks ! 24. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/jit/topics/contexts.html#gcc_jit_context_add_command_line_option ! 25. https://gcc.gnu.org/gcc-6/changes.html#targets ! 26. https://gcc.gnu.org/gcc-6/changes.html#aarch64 ! 27. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/gcc/AArch64-Function-Attributes.html#AArch64-Function-Attributes ! 28. https://gcc.gnu.org/gcc-6/changes.html#arm ! 29. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/gcc/ARM-Function-Attributes.html#ARM-Function-Attributes ! 30. https://gcc.gnu.org/gcc-6/changes.html#hsa ! 31. https://gcc.gnu.org/gcc-6/changes.html#x86 ! 32. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/gcc/Named-Address-Spaces.html#Named-Address-Spaces ! 33. https://gcc.gnu.org/gcc-6/changes.html#mep ! 34. https://gcc.gnu.org/gcc-6/changes.html#msp430 ! 35. https://gcc.gnu.org/gcc-6/changes.html#powerpc ! 36. https://gcc.gnu.org/gcc-6/changes.html#s390 ! 37. https://gcc.gnu.org/onlinedocs/gcc-6.1.0/gcc/S_002f390-Function-Attributes.html#S_002f390-Function-Attributes ! 38. https://gcc.gnu.org/gcc-6/changes.html#sh ! 39. https://gcc.gnu.org/gcc-6/changes.html#sparc ! 40. https://gcc.gnu.org/gcc-6/changes.html#os ! 41. https://gcc.gnu.org/gcc-6/changes.html#aix ! 42. https://gcc.gnu.org/gcc-6/changes.html#linux ! 43. http://www.musl-libc.org/ ! 44. https://gcc.gnu.org/gcc-6/changes.html#rtems ! 45. https://gcc.gnu.org/gcc-6/changes.html#solaris ! 46. https://gcc.gnu.org/gcc-6/changes.html#windows ! 47. https://gcc.gnu.org/gcc-6/changes.html#GCC6.2 ! 48. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=6.2 ! 49. https://gcc.gnu.org/gcc-6/changes.html#GCC6.3 ! 50. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=6.3 ! 51. https://www.intel.com/content/www/us/en/developer/articles/technical/deprecate-pcommit-instruction.html ! 52. https://gcc.gnu.org/gcc-6/changes.html#GCC6.4 ! 53. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=6.4 ! 54. https://gcc.gnu.org/gcc-6/changes.html#os64 ! 55. https://gcc.gnu.org/gcc-6/changes.html#rtems64 ! 56. https://gcc.gnu.org/gcc-6/changes.html#GCC6.5 ! 57. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=6.5 ! 58. https://gcc.gnu.org/onlinedocs/ ! 59. mailto:gcc-help@gcc.gnu.org ! 60. mailto:gcc@gcc.gnu.org ! 61. https://gcc.gnu.org/lists.html ! 62. https://www.fsf.org/ ! 63. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-5/index.html + GCC 5 Release Series (This release series is no longer supported.) *************** References *** 7128,7133 **** --- 7391,7397 ---- 23. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-5/changes.html + GCC 5 Release Series Changes, New Features, and Fixes *************** Caveats *** 7146,7160 **** C++11 traits is_trivially_default_constructible, is_trivially_copy_constructible and is_trivially_copy_assignable should be used instead. - * On AVR, support has been added for the devices - ATtiny4/5/9/10/20/40. This requires Binutils 2.25 or newer. - * The AVR port uses a new scheme to describe supported devices: For - each supported device the compiler provides a device-specific - [2]spec file. If the compiler is used together with AVR-LibC, this - requires at least GCC 5.2 and a version of AVR-LibC which - implements [3]feature #44574. ! General Optimizer Improvements * Inter-procedural optimization improvements: + An Identical Code Folding (ICF) pass (controlled via --- 7410,7417 ---- C++11 traits is_trivially_default_constructible, is_trivially_copy_constructible and is_trivially_copy_assignable should be used instead. ! [2]General Optimizer Improvements * Inter-procedural optimization improvements: + An Identical Code Folding (ICF) pass (controlled via *************** General Optimizer Improvements *** 7278,7286 **** bounds to detect pointer bounds violations (overflows). The Pointer Bounds Checker is available on x86/x86-64 GNU/Linux targets with a new ISA extension Intel MPX support. See the Pointer Bounds Checker ! [4]Wiki page for more details. ! New Languages and Language specific improvements * [5]OpenMP 4.0 specification offloading features are now supported by the C, C++, and Fortran compilers. Generic changes: --- 7535,7543 ---- bounds to detect pointer bounds violations (overflows). The Pointer Bounds Checker is available on x86/x86-64 GNU/Linux targets with a new ISA extension Intel MPX support. See the Pointer Bounds Checker ! [3]Wiki page for more details. ! [4]New Languages and Language specific improvements * [5]OpenMP 4.0 specification offloading features are now supported by the C, C++, and Fortran compilers. Generic changes: *************** New Languages and Language specific impr *** 7295,7304 **** devices such as GPUs. See [7]the OpenACC wiki page for more information. ! C family * The default setting of the -fdiagnostics-color= command-line option ! is now [8]configurable when building GCC using configuration option --with-diagnostics-color=. The possible values are: never, always, auto and auto-if-env. The new default auto uses color only when the standard error is a terminal. The default in GCC 4.9 was --- 7552,7561 ---- devices such as GPUs. See [7]the OpenACC wiki page for more information. ! [8]C family * The default setting of the -fdiagnostics-color= command-line option ! is now [9]configurable when building GCC using configuration option --with-diagnostics-color=. The possible values are: never, always, auto and auto-if-env. The new default auto uses color only when the standard error is a terminal. The default in GCC 4.9 was *************** New Languages and Language specific impr *** 7351,7357 **** * A new built-in function-like macro to determine the existence of an attribute, __has_attribute, has been added. The equivalent built-in macro __has_cpp_attribute was added to C++ to support ! [9]Feature-testing recommendations for C++. The macro __has_attribute is added to all C-like languages as an extension: int --- 7608,7614 ---- * A new built-in function-like macro to determine the existence of an attribute, __has_attribute, has been added. The equivalent built-in macro __has_cpp_attribute was added to C++ to support ! [10]Feature-testing recommendations for C++. The macro __has_attribute is added to all C-like languages as an extension: int *************** calloc (size_t x, size_t y) *** 7399,7405 **** C++, and for C99 and later C versions. Various bugs in the implementation of extended identifiers have been fixed. ! C * The default mode has been changed to -std=gnu11. * A new command-line option -Wc90-c99-compat has been added to warn --- 7656,7662 ---- C++, and for C99 and later C versions. Various bugs in the implementation of extended identifiers have been fixed. ! [11]C * The default mode has been changed to -std=gnu11. * A new command-line option -Wc90-c99-compat has been added to warn *************** calloc (size_t x, size_t y) *** 7423,7448 **** * The -pg command-line option now only affects the current file in an LTO build. ! C++ ! * G++ now supports [10]C++14 variable templates. * -Wnon-virtual-dtor doesn't warn anymore for final classes. * Excessive template instantiation depth is now a fatal error. This prevents excessive diagnostics that usually do not help to identify the problem. * G++ and libstdc++ now implement the feature-testing macros from ! [11]Feature-testing recommendations for C++. * G++ now allows typename in a template template parameter. template typename X> struct D; // OK ! * G++ now supports [12]C++14 aggregates with non-static data member initializers. struct A { int i, j = i; }; A a = { 42 }; // a.j is also 42 ! * G++ now supports [13]C++14 extended constexpr. constexpr int f (int i) { --- 7680,7705 ---- * The -pg command-line option now only affects the current file in an LTO build. ! [12]C++ ! * G++ now supports [13]C++14 variable templates. * -Wnon-virtual-dtor doesn't warn anymore for final classes. * Excessive template instantiation depth is now a fatal error. This prevents excessive diagnostics that usually do not help to identify the problem. * G++ and libstdc++ now implement the feature-testing macros from ! [14]Feature-testing recommendations for C++. * G++ now allows typename in a template template parameter. template typename X> struct D; // OK ! * G++ now supports [15]C++14 aggregates with non-static data member initializers. struct A { int i, j = i; }; A a = { 42 }; // a.j is also 42 ! * G++ now supports [16]C++14 extended constexpr. constexpr int f (int i) { *************** constexpr int f (int i) *** 7454,7460 **** constexpr int i = f(42); // i is 42 ! * G++ now supports the [14]C++14 sized deallocation functions. void operator delete (void *, std::size_t) noexcept; void operator delete[] (void *, std::size_t) noexcept; --- 7711,7717 ---- constexpr int i = f(42); // i is 42 ! * G++ now supports the [17]C++14 sized deallocation functions. void operator delete (void *, std::size_t) noexcept; void operator delete[] (void *, std::size_t) noexcept; *************** void operator delete[] (void *, std::siz *** 7467,7473 **** namespaces) to improve code generation. These warnings can be used at compile time, but they are more useful in combination with link-time optimization. ! * G++ no longer supports [15]N3639 variable length arrays, as they were removed from the C++14 working paper prior to ratification. GNU VLAs are still supported, so VLA support is now the same in C++14 mode as in C++98 and C++11 modes. --- 7724,7730 ---- namespaces) to improve code generation. These warnings can be used at compile time, but they are more useful in combination with link-time optimization. ! * G++ no longer supports [18]N3639 variable length arrays, as they were removed from the C++14 working paper prior to ratification. GNU VLAs are still supported, so VLA support is now the same in C++14 mode as in C++98 and C++11 modes. *************** void operator delete[] (void *, std::siz *** 7484,7492 **** member with type std::nullptr_t which changes position due to this change. ! Runtime Library (libstdc++) ! * A [16]Dual ABI is provided by the library. A new ABI is enabled by default. The old ABI is still supported and can be used by defining the macro _GLIBCXX_USE_CXX11_ABI to 0 before including any C++ standard library headers. --- 7741,7749 ---- member with type std::nullptr_t which changes position due to this change. ! [19]Runtime Library (libstdc++) ! * A [20]Dual ABI is provided by the library. A new ABI is enabled by default. The old ABI is still supported and can be used by defining the macro _GLIBCXX_USE_CXX11_ABI to 0 before including any C++ standard library headers. *************** void operator delete[] (void *, std::siz *** 7495,7501 **** counting. * A new implementation of std::list is enabled by default, with an O(1) size() function; ! * [17]Full support for C++11, including the following new features: + std::deque and std::vector meet the allocator-aware container requirements; + movable and swappable iostream classes; --- 7752,7758 ---- counting. * A new implementation of std::list is enabled by default, with an O(1) size() function; ! * [21]Full support for C++11, including the following new features: + std::deque and std::vector meet the allocator-aware container requirements; + movable and swappable iostream classes; *************** void operator delete[] (void *, std::siz *** 7518,7531 **** prevent the use of hexadecimal notation for floating point types use str.unsetf(std::ios_base::floatfield) to clear the relevant bits in str.flags(). ! * [18]Full experimental support for C++14, including the following new features: + std::is_final type trait; + heterogeneous comparison lookup in associative containers. + global functions cbegin, cend, rbegin, rend, crbegin, and crend for range access to containers, arrays and initializer lists. ! * [19]Improved experimental support for the Library Fundamentals TS, including: + class std::experimental::any; + function template std::experimental::apply; --- 7775,7788 ---- prevent the use of hexadecimal notation for floating point types use str.unsetf(std::ios_base::floatfield) to clear the relevant bits in str.flags(). ! * [22]Full experimental support for C++14, including the following new features: + std::is_final type trait; + heterogeneous comparison lookup in associative containers. + global functions cbegin, cend, rbegin, rend, crbegin, and crend for range access to containers, arrays and initializer lists. ! * [23]Improved experimental support for the Library Fundamentals TS, including: + class std::experimental::any; + function template std::experimental::apply; *************** void operator delete[] (void *, std::siz *** 7536,7548 **** + function template std::experimental::not_fn. * New random number distributions logistic_distribution and uniform_on_sphere_distribution as extensions. ! * [20]GDB Xmethods for containers and std::unique_ptr. ! Fortran * Compatibility notice: + The version of the module files (.mod) has been incremented. ! + For free-form source files [21]-Werror=line-truncation is now enabled by default. Note that comments exceeding the line length are not diagnosed. (For fixed-form source code, the same warning is available but turned off by default, such that --- 7793,7805 ---- + function template std::experimental::not_fn. * New random number distributions logistic_distribution and uniform_on_sphere_distribution as extensions. ! * [24]GDB Xmethods for containers and std::unique_ptr. ! [25]Fortran * Compatibility notice: + The version of the module files (.mod) has been incremented. ! + For free-form source files [26]-Werror=line-truncation is now enabled by default. Note that comments exceeding the line length are not diagnosed. (For fixed-form source code, the same warning is available but turned off by default, such that *************** void operator delete[] (void *, std::siz *** 7556,7564 **** by -Wall, -pedantic and the f95, f2003, f2008 and f2008ts options of -std=. * Incomplete support for colorizing diagnostics emitted by gfortran ! has been added. The option [22]-fdiagnostics-color controls when color is used in diagnostics. The default value of this option can ! be [23]configured when building GCC. The GCC_COLORS environment variable can be used to customize the colors or disable coloring completely. Sample diagnostics output: $ gfortran -fdiagnostics-color=always -Wuse-without-only test.f90 --- 7813,7821 ---- by -Wall, -pedantic and the f95, f2003, f2008 and f2008ts options of -std=. * Incomplete support for colorizing diagnostics emitted by gfortran ! has been added. The option [27]-fdiagnostics-color controls when color is used in diagnostics. The default value of this option can ! be [28]configured when building GCC. The GCC_COLORS environment variable can be used to customize the colors or disable coloring completely. Sample diagnostics output: $ gfortran -fdiagnostics-color=always -Wuse-without-only test.f90 *************** void operator delete[] (void *, std::siz *** 7578,7595 **** public entities of the used module. * Formatted READ and WRITE statements now work correctly in locale-aware programs. For more information and potential caveats, ! see [24]Section 5.3 Thread-safety of the runtime library in the manual. ! * [25]Fortran 2003: + The intrinsic IEEE modules (IEEE_FEATURES, IEEE_EXCEPTIONS and IEEE_ARITHMETIC) are now supported. ! * [26]Fortran 2008: ! + [27]Coarrays: Full experimental support of Fortran 2008's coarrays with -fcoarray=lib except for allocatable/pointer components of derived-type coarrays. GCC currently only ships with a single-image library (libcaf_single), but multi-image support based on MPI and GASNet is provided by the libraries ! of the [28]OpenCoarrays project. * TS18508 Additional Parallel Features in Fortran: + Support for the collective intrinsic subroutines CO_MAX, CO_MIN, CO_SUM, CO_BROADCAST and CO_REDUCE has been added, --- 7835,7852 ---- public entities of the used module. * Formatted READ and WRITE statements now work correctly in locale-aware programs. For more information and potential caveats, ! see [29]Section 5.3 Thread-safety of the runtime library in the manual. ! * [30]Fortran 2003: + The intrinsic IEEE modules (IEEE_FEATURES, IEEE_EXCEPTIONS and IEEE_ARITHMETIC) are now supported. ! * [31]Fortran 2008: ! + [32]Coarrays: Full experimental support of Fortran 2008's coarrays with -fcoarray=lib except for allocatable/pointer components of derived-type coarrays. GCC currently only ships with a single-image library (libcaf_single), but multi-image support based on MPI and GASNet is provided by the libraries ! of the [33]OpenCoarrays project. * TS18508 Additional Parallel Features in Fortran: + Support for the collective intrinsic subroutines CO_MAX, CO_MIN, CO_SUM, CO_BROADCAST and CO_REDUCE has been added, *************** void operator delete[] (void *, std::siz *** 7600,7642 **** + Support for IMPLICIT NONE (external, type). + ERROR STOP is now permitted in pure procedures. ! Go * GCC 5 provides a complete implementation of the Go 1.4.2 release. * Building GCC 5 with Go enabled will install two new programs: ! [29]go and [30]gofmt. ! libgccjit New in GCC 5 is the ability to build GCC as a shared library for embedding in other processes (such as interpreters), suitable for Just-In-Time compilation to machine code. ! The shared library has a [31]C API and a [32]C++ wrapper API providing some "syntactic sugar". There are also bindings available from 3rd ! parties for [33]Python and for [34]D. ! For example, this library can be used by interpreters for [35]compiling functions from bytecode to machine code. The library can also be used for ahead-of-time compilation, enabling GCC to be plugged into a pre-existing front end. An example of using this to build a compiler for an esoteric language we'll refer to as ! "brainf" can be seen [36]here. libgccjit is licensed under the GPLv3 (or at your option, any later version) It should be regarded as experimental at this time. ! New Targets and Target Specific Improvements ! Reporting stack usage * The BFIN, FT32, H8300, IQ2000 and M32C targets now support the -fstack-usage option. ! AArch64 * Code generation for the ARM Cortex-A57 processor has been improved. A more accurate instruction scheduling model for the processor is --- 7857,7899 ---- + Support for IMPLICIT NONE (external, type). + ERROR STOP is now permitted in pure procedures. ! [34]Go * GCC 5 provides a complete implementation of the Go 1.4.2 release. * Building GCC 5 with Go enabled will install two new programs: ! [35]go and [36]gofmt. ! [37]libgccjit New in GCC 5 is the ability to build GCC as a shared library for embedding in other processes (such as interpreters), suitable for Just-In-Time compilation to machine code. ! The shared library has a [38]C API and a [39]C++ wrapper API providing some "syntactic sugar". There are also bindings available from 3rd ! parties for [40]Python and for [41]D. ! For example, this library can be used by interpreters for [42]compiling functions from bytecode to machine code. The library can also be used for ahead-of-time compilation, enabling GCC to be plugged into a pre-existing front end. An example of using this to build a compiler for an esoteric language we'll refer to as ! "brainf" can be seen [43]here. libgccjit is licensed under the GPLv3 (or at your option, any later version) It should be regarded as experimental at this time. ! [44]New Targets and Target Specific Improvements ! [45]Reporting stack usage * The BFIN, FT32, H8300, IQ2000 and M32C targets now support the -fstack-usage option. ! [46]AArch64 * Code generation for the ARM Cortex-A57 processor has been improved. A more accurate instruction scheduling model for the processor is *************** New Targets and Target Specific Improvem *** 7664,7670 **** * The transitional options -mlra and -mno-lra have been removed. The AArch64 back end now uses the local register allocator (LRA) only. ! ARM * Thumb-1 assembly code is now generated in unified syntax. The new option -masm-syntax-unified specifies whether inline assembly code --- 7921,7927 ---- * The transitional options -mlra and -mno-lra have been removed. The AArch64 back end now uses the local register allocator (LRA) only. ! [47]ARM * Thumb-1 assembly code is now generated in unified syntax. The new option -masm-syntax-unified specifies whether inline assembly code *************** New Targets and Target Specific Improvem *** 7697,7708 **** * The transitional options -mlra and -mno-lra have been removed. The ARM back end now uses the local register allocator (LRA) only. ! AVR ! * The compiler no more supports individual devices like ATmega8. ! Specifying, say, -mmcu=atmega8 triggers the usage of the ! device-specific [37]spec file specs-atmega8 which is part of the ! installation and describes options for the sub-processes like compiler proper, assembler and linker. You can add support for a new device -mmcu=mydevice as follows: 1. In an empty directory /someplace, create a new directory --- 7954,7972 ---- * The transitional options -mlra and -mno-lra have been removed. The ARM back end now uses the local register allocator (LRA) only. ! [48]AVR ! * Support has been added for the devices ATtiny4/5/9/10/20/40. This ! requires Binutils 2.25 or newer. ! * The port uses a new scheme to describe supported devices: For each ! supported device, the compiler provides a device-specific [49]spec ! file. If the compiler is used together with AVR-LibC, this requires ! at least GCC 5.2 and a version of AVR-LibC which implements ! [50]feature #44574. ! As a consequence, the compiler no more supports individual devices ! like ATmega8. Specifying, say, -mmcu=atmega8 triggers the usage of ! the device-specific [51]spec file specs-atmega8 which is part of ! the installation and describes options for the sub-processes like compiler proper, assembler and linker. You can add support for a new device -mmcu=mydevice as follows: 1. In an empty directory /someplace, create a new directory *************** New Targets and Target Specific Improvem *** 7731,7746 **** -mn-flash=size Specify the flash size of the device in units of 64 KiB, rounded up to the next integer as needed. This option ! affects the availability of the [38]AVR address-spaces. -mskip-bug Set if the device is affected by the respective silicon bug. ! In general, you don't need to set these options by hand. The new ! device-specific spec file will set them as needed. ! IA-32/x86-64 * New ISA extensions support AVX-512{BW,DQ,VL,IFMA,VBMI} of Intel's CPU codenamed Skylake Server was added to GCC. That includes inline --- 7995,8011 ---- -mn-flash=size Specify the flash size of the device in units of 64 KiB, rounded up to the next integer as needed. This option ! affects the availability of the [52]AVR address-spaces. -mskip-bug Set if the device is affected by the respective silicon bug. ! These options are used internally in order to communicate between ! the compiler and the device-spces file. They are set in the ! device-specs file as needed. Don't set them by hand. ! [53]IA-32/x86-64 * New ISA extensions support AVX-512{BW,DQ,VL,IFMA,VBMI} of Intel's CPU codenamed Skylake Server was added to GCC. That includes inline *************** New Targets and Target Specific Improvem *** 7772,7778 **** when SSE is disabled and there are no variable arguments passed in vector registers. This can be used to optimize the Linux kernel. ! MIPS * MIPS Releases 3 and 5 are now directly supported. Use the command-line options -mips32r3, -mips64r3, -mips32r5 and -mips64r5 --- 8037,8043 ---- when SSE is disabled and there are no variable arguments passed in vector registers. This can be used to optimize the Linux kernel. ! [54]MIPS * MIPS Releases 3 and 5 are now directly supported. Use the command-line options -mips32r3, -mips64r3, -mips32r5 and -mips64r5 *************** New Targets and Target Specific Improvem *** 7823,7829 **** .set directive to override the global assembler options when compiling for soft-float targets. ! NDS32 * The variadic function ABI implementation is now compatible with past Andes toolchains where the caller uses registers to pass --- 8088,8094 ---- .set directive to override the global assembler options when compiling for soft-float targets. ! [55]NDS32 * The variadic function ABI implementation is now compatible with past Andes toolchains where the caller uses registers to pass *************** New Targets and Target Specific Improvem *** 7835,7841 **** models on code generation. The -mgp-direct option became meaningless and can be discarded. ! RX * A new command line option -mno-allow-string-insns can be used to disable the generation of the SCMPU, SMOVU, SMOVB, SMOVF, SUNTIL, --- 8100,8106 ---- models on code generation. The -mgp-direct option became meaningless and can be discarded. ! [56]RX * A new command line option -mno-allow-string-insns can be used to disable the generation of the SCMPU, SMOVU, SMOVB, SMOVF, SUNTIL, *************** New Targets and Target Specific Improvem *** 7845,7851 **** programmer is concerned that the I/O space might be accessed. The default is still to enable these instructions. ! SH * The compiler will now pass the appropriate --isa= option to the assembler. --- 8110,8116 ---- programmer is concerned that the I/O space might be accessed. The default is still to enable these instructions. ! [57]SH * The compiler will now pass the appropriate --isa= option to the assembler. *************** New Targets and Target Specific Improvem *** 7878,7901 **** in the original SH7055) by specifying the new option -mcbranch-force-delay-slot. ! Operating Systems ! AIX * GCC now supports stabs debugging continuation lines to allow long stabs debug information without overflow that generates AIX linker errors. ! DragonFly BSD * GCC now supports the DragonFly BSD operating system. ! FreeBSD * GCC now supports the FreeBSD operating system for the arm port through the arm*-*-freebsd* target triplets. ! VxWorks MILS * GCC now supports the MILS (Multiple Independent Levels of Security) variant of WindRiver's VxWorks operating system for PowerPC --- 8143,8166 ---- in the original SH7055) by specifying the new option -mcbranch-force-delay-slot. ! [58]Operating Systems ! [59]AIX * GCC now supports stabs debugging continuation lines to allow long stabs debug information without overflow that generates AIX linker errors. ! [60]DragonFly BSD * GCC now supports the DragonFly BSD operating system. ! [61]FreeBSD * GCC now supports the FreeBSD operating system for the arm port through the arm*-*-freebsd* target triplets. ! [62]VxWorks MILS * GCC now supports the MILS (Multiple Independent Levels of Security) variant of WindRiver's VxWorks operating system for PowerPC *************** Other significant improvements *** 7910,7918 **** automatically generates a developer-friendly reproducer whenever an internal compiler error is encountered. ! GCC 5.2 ! This is the [39]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 5.2 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). --- 8175,8183 ---- automatically generates a developer-friendly reproducer whenever an internal compiler error is encountered. ! [63]GCC 5.2 ! This is the [64]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 5.2 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). *************** Target Specific Changes *** 7951,7959 **** make use of these builtins the vecintrin.h header file needs to be included. ! GCC 5.3 ! This is the [40]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 5.3 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). --- 8216,8224 ---- make use of these builtins the vecintrin.h header file needs to be included. ! [65]GCC 5.3 ! This is the [66]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 5.3 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). *************** Target Specific Changes *** 7973,7988 **** the GO runtime environment. GCC 5.3 has proven to be able to compile larger GO applications on IBM z Systems. ! GCC 5.4 ! This is the [41]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 5.4 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! GCC 5.5 ! This is the [42]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 5.5 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). --- 8238,8253 ---- the GO runtime environment. GCC 5.3 has proven to be able to compile larger GO applications on IBM z Systems. ! [67]GCC 5.4 ! This is the [68]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 5.4 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! [69]GCC 5.5 ! This is the [70]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 5.5 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). *************** Target Specific Changes *** 7991,8067 **** IA-32/x86-64 ! * Support for the [43]deprecated pcommit instruction has been removed. For questions related to the use of GCC, please consult these web ! pages and the [44]GCC manuals. If that fails, the ! [45]gcc-help@gcc.gnu.org mailing list might help. Comments on these web pages and the development of GCC are welcome on our developer ! list at [46]gcc@gcc.gnu.org. All of [47]our lists have public archives. ! Copyright (C) [48]Free Software Foundation, Inc. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! These pages are [49]maintained by the GCC team. Last modified ! 2024-06-08. References 1. https://gcc.gnu.org/gcc-5/changes.html#libstdcxx ! 2. https://gcc.gnu.org/onlinedocs/gcc/Spec-Files.html ! 3. https://savannah.nongnu.org/bugs/?44574 ! 4. https://gcc.gnu.org/wiki/Intel MPX support in the GCC compiler 5. https://www.openmp.org/wp-content/uploads/OpenMP4.0.0.pdf 6. https://www.openmp.org/wp-content/uploads/OpenMP4.0.0.Examples.pdf 7. https://gcc.gnu.org/wiki/OpenACC ! 8. https://gcc.gnu.org/install/configure.html ! 9. https://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations ! 10. https://gcc.gnu.org/projects/cxx1y.html ! 11. https://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations ! 12. https://gcc.gnu.org/projects/cxx1y.html 13. https://gcc.gnu.org/projects/cxx1y.html ! 14. https://gcc.gnu.org/projects/cxx1y.html ! 15. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3639.html ! 16. https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html ! 17. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/libstdc++/manual/manual/status.html#status.iso.2011 ! 18. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/libstdc++/manual/manual/status.html#status.iso.2014 ! 19. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/libstdc++/manual/manual/status.html#status.iso.2014 ! 20. https://sourceware.org/gdb/current/onlinedocs/gdb#Xmethods-In-Python ! 21. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/gfortran/Error-and-Warning-Options.html ! 22. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/gcc/Language-Independent-Options.html ! 23. https://gcc.gnu.org/install/configure.html ! 24. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/gfortran/Thread-safety-of-the-runtime-library.html ! 25. https://gcc.gnu.org/wiki/Fortran2003Status ! 26. https://gcc.gnu.org/wiki/Fortran2008Status ! 27. https://gcc.gnu.org/wiki/Coarray ! 28. http://www.opencoarrays.org/ ! 29. https://pkg.go.dev/cmd/go ! 30. https://pkg.go.dev/cmd/gofmt ! 31. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/jit/intro/index.html ! 32. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/jit/cp/index.html ! 33. https://github.com/davidmalcolm/pygccjit ! 34. https://github.com/ibuclaw/gccjitd ! 35. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/jit/intro/tutorial04.html ! 36. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/jit/intro/tutorial05.html ! 37. https://gcc.gnu.org/onlinedocs/gcc/Spec-Files.html ! 38. https://gcc.gnu.org/onlinedocs/gcc/Named-Address-Spaces.html ! 39. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=5.2 ! 40. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=5.3 ! 41. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=5.4 ! 42. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=5.5 ! 43. https://www.intel.com/content/www/us/en/developer/articles/technical/deprecate-pcommit-instruction.html ! 44. https://gcc.gnu.org/onlinedocs/ ! 45. mailto:gcc-help@gcc.gnu.org ! 46. mailto:gcc@gcc.gnu.org ! 47. https://gcc.gnu.org/lists.html ! 48. https://www.fsf.org/ ! 49. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-4.9/index.html GCC 4.9 Release Series (This release series is no longer supported.) --- 8256,8361 ---- IA-32/x86-64 ! * Support for the [71]deprecated pcommit instruction has been removed. For questions related to the use of GCC, please consult these web ! pages and the [72]GCC manuals. If that fails, the ! [73]gcc-help@gcc.gnu.org mailing list might help. Comments on these web pages and the development of GCC are welcome on our developer ! list at [74]gcc@gcc.gnu.org. All of [75]our lists have public archives. ! Copyright (C) [76]Free Software Foundation, Inc. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! These pages are [77]maintained by the GCC team. Last modified ! 2025-02-28. References 1. https://gcc.gnu.org/gcc-5/changes.html#libstdcxx ! 2. https://gcc.gnu.org/gcc-5/changes.html#general ! 3. https://gcc.gnu.org/wiki/Intel%20MPX%20support%20in%20the%20GCC%20compiler ! 4. https://gcc.gnu.org/gcc-5/changes.html#languages 5. https://www.openmp.org/wp-content/uploads/OpenMP4.0.0.pdf 6. https://www.openmp.org/wp-content/uploads/OpenMP4.0.0.Examples.pdf 7. https://gcc.gnu.org/wiki/OpenACC ! 8. https://gcc.gnu.org/gcc-5/changes.html#c-family ! 9. https://gcc.gnu.org/install/configure.html ! 10. https://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations ! 11. https://gcc.gnu.org/gcc-5/changes.html#c ! 12. https://gcc.gnu.org/gcc-5/changes.html#cxx 13. https://gcc.gnu.org/projects/cxx1y.html ! 14. https://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations ! 15. https://gcc.gnu.org/projects/cxx1y.html ! 16. https://gcc.gnu.org/projects/cxx1y.html ! 17. https://gcc.gnu.org/projects/cxx1y.html ! 18. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3639.html ! 19. https://gcc.gnu.org/gcc-5/changes.html#libstdcxx ! 20. https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html ! 21. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/libstdc++/manual/manual/status.html#status.iso.2011 ! 22. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/libstdc++/manual/manual/status.html#status.iso.2014 ! 23. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/libstdc++/manual/manual/status.html#status.iso.2014 ! 24. https://sourceware.org/gdb/current/onlinedocs/gdb#Xmethods-In-Python ! 25. https://gcc.gnu.org/gcc-5/changes.html#fortran ! 26. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/gfortran/Error-and-Warning-Options.html ! 27. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/gcc/Language-Independent-Options.html ! 28. https://gcc.gnu.org/install/configure.html ! 29. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/gfortran/Thread-safety-of-the-runtime-library.html ! 30. https://gcc.gnu.org/wiki/Fortran2003Status ! 31. https://gcc.gnu.org/wiki/Fortran2008Status ! 32. https://gcc.gnu.org/wiki/Coarray ! 33. http://www.opencoarrays.org/ ! 34. https://gcc.gnu.org/gcc-5/changes.html#go ! 35. https://pkg.go.dev/cmd/go ! 36. https://pkg.go.dev/cmd/gofmt ! 37. https://gcc.gnu.org/gcc-5/changes.html#jit ! 38. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/jit/intro/index.html ! 39. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/jit/cp/index.html ! 40. https://github.com/davidmalcolm/pygccjit ! 41. https://github.com/ibuclaw/gccjitd ! 42. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/jit/intro/tutorial04.html ! 43. https://gcc.gnu.org/onlinedocs/gcc-5.1.0/jit/intro/tutorial05.html ! 44. https://gcc.gnu.org/gcc-5/changes.html#targets ! 45. https://gcc.gnu.org/gcc-5/changes.html#stack-usage ! 46. https://gcc.gnu.org/gcc-5/changes.html#aarch64 ! 47. https://gcc.gnu.org/gcc-5/changes.html#arm ! 48. https://gcc.gnu.org/gcc-5/changes.html#avr ! 49. https://gcc.gnu.org/onlinedocs/gcc/Spec-Files.html ! 50. https://savannah.nongnu.org/bugs/?44574 ! 51. https://gcc.gnu.org/onlinedocs/gcc/Spec-Files.html ! 52. https://gcc.gnu.org/onlinedocs/gcc/Named-Address-Spaces.html ! 53. https://gcc.gnu.org/gcc-5/changes.html#x86 ! 54. https://gcc.gnu.org/gcc-5/changes.html#mips ! 55. https://gcc.gnu.org/gcc-5/changes.html#nds32 ! 56. https://gcc.gnu.org/gcc-5/changes.html#rx ! 57. https://gcc.gnu.org/gcc-5/changes.html#sh ! 58. https://gcc.gnu.org/gcc-5/changes.html#os ! 59. https://gcc.gnu.org/gcc-5/changes.html#aix ! 60. https://gcc.gnu.org/gcc-5/changes.html#dragonfly ! 61. https://gcc.gnu.org/gcc-5/changes.html#freebsd ! 62. https://gcc.gnu.org/gcc-5/changes.html#vxmils ! 63. https://gcc.gnu.org/gcc-5/changes.html#GCC5.2 ! 64. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=5.2 ! 65. https://gcc.gnu.org/gcc-5/changes.html#GCC5.3 ! 66. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=5.3 ! 67. https://gcc.gnu.org/gcc-5/changes.html#GCC5.4 ! 68. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=5.4 ! 69. https://gcc.gnu.org/gcc-5/changes.html#GCC5.5 ! 70. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=5.5 ! 71. https://www.intel.com/content/www/us/en/developer/articles/technical/deprecate-pcommit-instruction.html ! 72. https://gcc.gnu.org/onlinedocs/ ! 73. mailto:gcc-help@gcc.gnu.org ! 74. mailto:gcc@gcc.gnu.org ! 75. https://gcc.gnu.org/lists.html ! 76. https://www.fsf.org/ ! 77. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-4.9/index.html + GCC 4.9 Release Series (This release series is no longer supported.) *************** References *** 8153,8158 **** --- 8447,8453 ---- 23. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-4.9/changes.html + GCC 4.9 Release Series Changes, New Features, and Fixes *************** General Optimizer Improvements *** 8236,8248 **** handle cross-module calls when link-time optimization is enabled. ! New Languages and Language specific improvements ! * Version 4.0 of the [4]OpenMP specification is now supported in the C and C++ compilers and starting with the 4.9.1 release also in the Fortran compiler. The new -fopenmp-simd option can be used to enable OpenMP's SIMD directives while ignoring other OpenMP ! directives. The new [5]-fsimd-cost-model= option permits to tune the vectorization cost model for loops annotated with OpenMP and Cilk Plus simd directives. -Wopenmp-simd warns when the current cost model overrides simd directives set by the user. --- 8531,8543 ---- handle cross-module calls when link-time optimization is enabled. ! [4]New Languages and Language specific improvements ! * Version 4.0 of the [5]OpenMP specification is now supported in the C and C++ compilers and starting with the 4.9.1 release also in the Fortran compiler. The new -fopenmp-simd option can be used to enable OpenMP's SIMD directives while ignoring other OpenMP ! directives. The new [6]-fsimd-cost-model= option permits to tune the vectorization cost model for loops annotated with OpenMP and Cilk Plus simd directives. -Wopenmp-simd warns when the current cost model overrides simd directives set by the user. *************** New Languages and Language specific impr *** 8251,8264 **** macros are used. Those macros might prevent bit-wise-identical reproducible compilations. ! Ada * GNAT switched to Ada 2012 instead of Ada 2005 by default. ! C family * Support for colorizing diagnostics emitted by GCC has been added. ! The [6]-fdiagnostics-color=auto will enable it when outputting to terminals, -fdiagnostics-color=always unconditionally. The GCC_COLORS environment variable can be used to customize the colors or disable coloring. If GCC_COLORS variable is present in the --- 8546,8559 ---- macros are used. Those macros might prevent bit-wise-identical reproducible compilations. ! [7]Ada * GNAT switched to Ada 2012 instead of Ada 2005 by default. ! [8]C family * Support for colorizing diagnostics emitted by GCC has been added. ! The [9]-fdiagnostics-color=auto will enable it when outputting to terminals, -fdiagnostics-color=always unconditionally. The GCC_COLORS environment variable can be used to customize the colors or disable coloring. If GCC_COLORS variable is present in the *************** New Languages and Language specific impr *** 8266,8288 **** -fdiagnostics-color=never. Sample diagnostics output: $ g++ -fdiagnostics-color=always -S -Wall test.C ! test.C: In function ‘int foo()’: test.C:1:14: warning: no return statement in function returning non-void [-W return-type] int foo () { } ^ test.C:2:46: error: template instantiation depth exceeds maximum of 900 (use ! -ftemplate-depth= to increase the maximum) instantiating ‘struct X<100>’ template struct X { static const int value = X::value; }; temp late struct X<1000>; ^ ! test.C:2:46: recursively required from ‘const int X<999>::value’ ! test.C:2:46: required from ‘const int X<1000>::value’ test.C:2:88: required from here ! test.C:2:46: error: incomplete type ‘X<100>’ used in nested name specifier ! * With the new [7]#pragma GCC ivdep, the user can assert that there are no loop-carried dependencies which would prevent concurrent execution of consecutive iterations using SIMD (single instruction multiple data) instructions. --- 8561,8583 ---- -fdiagnostics-color=never. Sample diagnostics output: $ g++ -fdiagnostics-color=always -S -Wall test.C ! test.C: In function `int foo()': test.C:1:14: warning: no return statement in function returning non-void [-W return-type] int foo () { } ^ test.C:2:46: error: template instantiation depth exceeds maximum of 900 (use ! -ftemplate-depth= to increase the maximum) instantiating `struct X<100>' template struct X { static const int value = X::value; }; temp late struct X<1000>; ^ ! test.C:2:46: recursively required from `const int X<999>::value' ! test.C:2:46: required from `const int X<1000>::value' test.C:2:88: required from here ! test.C:2:46: error: incomplete type `X<100>' used in nested name specifier ! * With the new [10]#pragma GCC ivdep, the user can assert that there are no loop-carried dependencies which would prevent concurrent execution of consecutive iterations using SIMD (single instruction multiple data) instructions. *************** late struct X<1000>; *** 8292,8298 **** implementation follows ABI version 1.2; all features but _Cilk_for have been implemented. ! C * ISO C11 atomics (the _Atomic type specifier and qualifier and the header) are now supported. --- 8587,8593 ---- implementation follows ABI version 1.2; all features but _Cilk_for have been implemented. ! [11]C * ISO C11 atomics (the _Atomic type specifier and qualifier and the header) are now supported. *************** late struct X<1000>; *** 8309,8319 **** * A new C extension __auto_type provides a subset of the functionality of C++11 auto in GNU C. ! C++ ! * The G++ implementation of [8]C++1y return type deduction for normal ! functions has been updated to conform to [9]N3638, the proposal ! accepted into the working paper. Most notably, it adds decltype(auto) for getting decltype semantics rather than the template argument deduction semantics of plain auto: --- 8604,8614 ---- * A new C extension __auto_type provides a subset of the functionality of C++11 auto in GNU C. ! [12]C++ ! * The G++ implementation of [13]C++1y return type deduction for ! normal functions has been updated to conform to [14]N3638, the ! proposal accepted into the working paper. Most notably, it adds decltype(auto) for getting decltype semantics rather than the template argument deduction semantics of plain auto: *************** int& f(); *** 8321,8334 **** auto i1 = f(); // int decltype(auto) i2 = f(); // int& ! * G++ supports [10]C++1y lambda capture initializers: [x = 42]{ ... }; Actually, they have been accepted since GCC 4.5, but now the compiler doesn't warn about them with -std=c++1y, and supports parenthesized and brace-enclosed initializers as well. ! * G++ supports [11]C++1y variable length arrays. G++ has supported GNU/C99-style VLAs for a long time, but now additionally supports initializers and lambda capture by reference. In C++1y mode G++ will complain about VLA uses that are not permitted by the draft --- 8616,8629 ---- auto i1 = f(); // int decltype(auto) i2 = f(); // int& ! * G++ supports [15]C++1y lambda capture initializers: [x = 42]{ ... }; Actually, they have been accepted since GCC 4.5, but now the compiler doesn't warn about them with -std=c++1y, and supports parenthesized and brace-enclosed initializers as well. ! * G++ supports [16]C++1y variable length arrays. G++ has supported GNU/C99-style VLAs for a long time, but now additionally supports initializers and lambda capture by reference. In C++1y mode G++ will complain about VLA uses that are not permitted by the draft *************** void f(int n) { *** 8343,8349 **** &a; // error, taking address of VLA } ! * G++ supports the [12]C++1y [[deprecated]] attribute modulo bugs in the underlying [[gnu::deprecated]] attribute. Classes and functions can be marked deprecated and a diagnostic message added: --- 8638,8644 ---- &a; // error, taking address of VLA } ! * G++ supports the [17]C++1y [[deprecated]] attribute modulo bugs in the underlying [[gnu::deprecated]] attribute. Classes and functions can be marked deprecated and a diagnostic message added: *************** A aa; // warning: 'A' is deprecated : A *** 8361,8367 **** int j = bar(2); // warning: 'int bar(int)' is deprecated : bar is unsafe; use fo o() instead ! * G++ supports [13]C++1y digit separators. Long numeric literals can be subdivided with a single quote ' to enhance readability: int i = 1048576; --- 8656,8662 ---- int j = bar(2); // warning: 'int bar(int)' is deprecated : bar is unsafe; use fo o() instead ! * G++ supports [18]C++1y digit separators. Long numeric literals can be subdivided with a single quote ' to enhance readability: int i = 1048576; *************** int n = 0b0001'0000'0000'0000'0000'0000; *** 8373,8379 **** double x = 1.602'176'565e-19; double y = 1.602'176'565e-1'9; ! * G++ supports [14]C++1y generic (polymorphic) lambdas. // a functional object that will increment any type auto incr = [](auto x) { return x++; }; --- 8668,8674 ---- double x = 1.602'176'565e-19; double y = 1.602'176'565e-1'9; ! * G++ supports [19]C++1y generic (polymorphic) lambdas. // a functional object that will increment any type auto incr = [](auto x) { return x++; }; *************** auto incr = [](auto x) { return x++; }; *** 8385,8392 **** // a functional object that will add two like-type objects auto add = [] (T a, T b) { return a + b; }; ! * G++ supports unconstrained generic functions as specified by §4.1.2 ! and §5.1.1 of [15]N3889: Concepts Lite Specification. Briefly, auto may be used as a type-specifier in a parameter declaration of any function declarator in order to introduce an implicit function template parameter, akin to generic lambdas. --- 8680,8687 ---- // a functional object that will add two like-type objects auto add = [] (T a, T b) { return a + b; }; ! * G++ supports unconstrained generic functions as specified by 4.1.2 ! and 5.1.1 of [20]N3889: Concepts Lite Specification. Briefly, auto may be used as a type-specifier in a parameter declaration of any function declarator in order to introduce an implicit function template parameter, akin to generic lambdas. *************** auto incr(T x) { return x++; } *** 8398,8410 **** Runtime Library (libstdc++) ! * [16]Improved support for C++11, including: + support for ; + The associative containers in and and the unordered associative containers in and meet the allocator-aware container requirements; ! * [17]Improved experimental support for the upcoming ISO C++ standard, C++14, including: + fixing constexpr member functions without const; + implementation of the std::exchange() utility function; --- 8693,8705 ---- Runtime Library (libstdc++) ! * [21]Improved support for C++11, including: + support for ; + The associative containers in and and the unordered associative containers in and meet the allocator-aware container requirements; ! * [22]Improved experimental support for the upcoming ISO C++ standard, C++14, including: + fixing constexpr member functions without const; + implementation of the std::exchange() utility function; *************** auto incr(T x) { return x++; } *** 8430,8436 **** and will be removed in a future version. std::make_exception_ptr should be used instead. ! Fortran * Compatibility notice: + Module files: The version of the module files (.mod) has been --- 8725,8731 ---- and will be removed in a future version. std::make_exception_ptr should be used instead. ! [23]Fortran * Compatibility notice: + Module files: The version of the module files (.mod) has been *************** auto incr(T x) { return x++; } *** 8443,8449 **** object files and libraries are fully compatible with older versions (except as stated below). + ABI changes: ! o The [18]argument passing ABI has changed for scalar dummy arguments of type INTEGER, REAL, COMPLEX and LOGICAL, which have both the VALUE and the OPTIONAL attributes. o To support finalization the virtual table associated with --- 8738,8744 ---- object files and libraries are fully compatible with older versions (except as stated below). + ABI changes: ! o The [24]argument passing ABI has changed for scalar dummy arguments of type INTEGER, REAL, COMPLEX and LOGICAL, which have both the VALUE and the OPTIONAL attributes. o To support finalization the virtual table associated with *************** auto incr(T x) { return x++; } *** 8471,8477 **** * The compiler no longer unconditionally warns about DO loops with zero iterations. This warning is now controlled by the -Wzerotrip option, which is implied by -Wall. ! * The new NO_ARG_CHECK attribute of the [19]!GCC$ directive can be used to disable the type-kind-rank (TKR) argument check for a dummy argument. The feature is similar to ISO/IEC TS 29133:2012's TYPE(*), except that it additionally also disables the rank check. --- 8766,8772 ---- * The compiler no longer unconditionally warns about DO loops with zero iterations. This warning is now controlled by the -Wzerotrip option, which is implied by -Wall. ! * The new NO_ARG_CHECK attribute of the [25]!GCC$ directive can be used to disable the type-kind-rank (TKR) argument check for a dummy argument. The feature is similar to ISO/IEC TS 29133:2012's TYPE(*), except that it additionally also disables the rank check. *************** auto incr(T x) { return x++; } *** 8479,8485 **** be used as argument to ISO_C_BINDING's C_LOC and as actual argument to another NO_ARG_CHECK dummy argument; also the other constraints of TYPE(*) apply. The dummy arguments should be declared as scalar ! or assumed-size variable of type type(*) (recommended) – or of type integer, real, complex or logical. With NO_ARG_CHECK, a pointer to the data without further type or shape information is passed, similar to C's void*. Note that also TS 29113's --- 8774,8780 ---- be used as argument to ISO_C_BINDING's C_LOC and as actual argument to another NO_ARG_CHECK dummy argument; also the other constraints of TYPE(*) apply. The dummy arguments should be declared as scalar ! or assumed-size variable of type type(*) (recommended) - or of type integer, real, complex or logical. With NO_ARG_CHECK, a pointer to the data without further type or shape information is passed, similar to C's void*. Note that also TS 29113's *************** auto incr(T x) { return x++; } *** 8487,8504 **** contrary to NO_ARG_CHECK assumed-rank arguments pass an array descriptor which contains the array shape and stride of the argument. ! * [20]Fortran 2003: + Finalization is now supported. It is currently only done for a subset of those situations in which it should occur. + Experimental support for scalar character components with deferred length (i.e. allocatable string length) in derived types has been added. (Deferred-length character variables are supported since GCC 4.6.) ! * [21]Fortran 2008: + When STOP or ERROR STOP are used to terminate the execution and any exception (but inexact) is signaling, a warning is printed to ERROR_UNIT, indicating which exceptions are ! signaling. The [22]-ffpe-summary= command-line option can be used to fine-tune for which exceptions the warning should be shown. + Rounding on input (READ) is now handled on systems where --- 8782,8799 ---- contrary to NO_ARG_CHECK assumed-rank arguments pass an array descriptor which contains the array shape and stride of the argument. ! * [26]Fortran 2003: + Finalization is now supported. It is currently only done for a subset of those situations in which it should occur. + Experimental support for scalar character components with deferred length (i.e. allocatable string length) in derived types has been added. (Deferred-length character variables are supported since GCC 4.6.) ! * [27]Fortran 2008: + When STOP or ERROR STOP are used to terminate the execution and any exception (but inexact) is signaling, a warning is printed to ERROR_UNIT, indicating which exceptions are ! signaling. The [28]-ffpe-summary= command-line option can be used to fine-tune for which exceptions the warning should be shown. + Rounding on input (READ) is now handled on systems where *************** auto incr(T x) { return x++; } *** 8508,8520 **** least significant [cf. IEC 60559:1989] for a tie, while compatible rounds away from zero in that case). ! Go * GCC 4.9 provides a complete implementation of the Go 1.2.1 release. ! New Targets and Target Specific Improvements ! AArch64 * The ARMv8-A crypto and CRC instructions are now supported through intrinsics. These are enabled when the architecture supports these --- 8803,8815 ---- least significant [cf. IEC 60559:1989] for a tie, while compatible rounds away from zero in that case). ! [29]Go * GCC 4.9 provides a complete implementation of the Go 1.2.1 release. ! [30]New Targets and Target Specific Improvements ! [31]AArch64 * The ARMv8-A crypto and CRC instructions are now supported through intrinsics. These are enabled when the architecture supports these *************** New Targets and Target Specific Improvem *** 8542,8553 **** default by configuring GCC with the --enable-fix-cortex-a53-835769 option. ! ARC * A port for Synopsys Designware ARC has been contributed by Embecosm and Synopsys Inc. ! ARM * Use of Advanced SIMD (Neon) for 64-bit scalar computations has been disabled by default. This was found to generate better code in only --- 8837,8848 ---- default by configuring GCC with the --enable-fix-cortex-a53-835769 option. ! [32]ARC * A port for Synopsys Designware ARC has been contributed by Embecosm and Synopsys Inc. ! [33]ARM * Use of Advanced SIMD (Neon) for 64-bit scalar computations has been disabled by default. This was found to generate better code in only *************** New Targets and Target Specific Improvem *** 8590,8602 **** * A number of code generation improvements for Thumb2 to reduce code size when compiling for the M-profile processors. ! AVR * A new command-line option -mfract-convert-truncate has been added. It allows compiler to use truncation instead of rounding towards zero for fractional fixed-point types. ! IA-32/x86-64 * -mfpmath=sse is now implied by -ffast-math on all targets where SSE2 is supported. --- 8885,8897 ---- * A number of code generation improvements for Thumb2 to reduce code size when compiling for the M-profile processors. ! [34]AVR * A new command-line option -mfract-convert-truncate has been added. It allows compiler to use truncation instead of rounding towards zero for fractional fixed-point types. ! [35]IA-32/x86-64 * -mfpmath=sse is now implied by -ffast-math on all targets where SSE2 is supported. *************** New Targets and Target Specific Improvem *** 8612,8618 **** a file that are tagged with the corresponding target attribute without having to compile the entire file with the -mxxx option. This improves the usability of x86 intrinsics and is particularly ! useful when doing [23]Function Multiversioning. * GCC now supports the new Intel microarchitecture named Silvermont through -march=silvermont. * GCC now supports the new Intel microarchitecture named Broadwell --- 8907,8913 ---- a file that are tagged with the corresponding target attribute without having to compile the entire file with the -mxxx option. This improves the usability of x86 intrinsics and is particularly ! useful when doing [36]Function Multiversioning. * GCC now supports the new Intel microarchitecture named Silvermont through -march=silvermont. * GCC now supports the new Intel microarchitecture named Broadwell *************** New Targets and Target Specific Improvem *** 8636,8642 **** * Support for new AMD family 15h processors (Excavator core) is now available through the -march=bdver4 and -mtune=bdver4 options. ! MSP430 * A new command-line option -mcpu= has been added to the MSP430 back end. This option is used to specify the ISA to be used. Accepted --- 8931,8937 ---- * Support for new AMD family 15h processors (Excavator core) is now available through the -march=bdver4 and -mtune=bdver4 options. ! [37]MSP430 * A new command-line option -mcpu= has been added to the MSP430 back end. This option is used to specify the ISA to be used. Accepted *************** New Targets and Target Specific Improvem *** 8647,8665 **** preprocessor symbol that will be recognised by the msp430.h header file. ! NDS32 * A new nds32 port supports the 32-bit architecture from Andes Technology Corporation. * The port provides initial support for the V2, V3, V3m instruction set architectures. ! Nios II * A port for the Altera Nios II has been contributed by Mentor Graphics. ! PowerPC / PowerPC64 / RS6000 * GCC now supports Power ISA 2.07, which includes support for Hardware Transactional Memory (HTM), Quadword atomics and several --- 8942,8960 ---- preprocessor symbol that will be recognised by the msp430.h header file. ! [38]NDS32 * A new nds32 port supports the 32-bit architecture from Andes Technology Corporation. * The port provides initial support for the V2, V3, V3m instruction set architectures. ! [39]Nios II * A port for the Altera Nios II has been contributed by Mentor Graphics. ! [40]PowerPC / PowerPC64 / RS6000 * GCC now supports Power ISA 2.07, which includes support for Hardware Transactional Memory (HTM), Quadword atomics and several *************** New Targets and Target Specific Improvem *** 8695,8707 **** certain leaf function with -march=z10 or higher. * The LRA rtl pass replaces reload by default on S/390. ! RX * The port now allows to specify the RX100, RX200, and RX600 processors with the command-line options -mcpu=rx100, -mcpu=rx200 and -mcpu=rx600. ! SH * Minor improvements to code generated for integer arithmetic and code that involves the T bit. --- 8990,9002 ---- certain leaf function with -march=z10 or higher. * The LRA rtl pass replaces reload by default on S/390. ! [41]RX * The port now allows to specify the RX100, RX200, and RX600 processors with the command-line options -mcpu=rx100, -mcpu=rx200 and -mcpu=rx600. ! [42]SH * Minor improvements to code generated for integer arithmetic and code that involves the T bit. *************** New Targets and Target Specific Improvem *** 8718,8726 **** * The option -mcmpeqdi has been deprecated. Specifying it will result in a warning and will not influence code generation. ! GCC 4.9.1 ! This is the [24]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.9.1 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). --- 9013,9021 ---- * The option -mcmpeqdi has been deprecated. Specifying it will result in a warning and will not influence code generation. ! [43]GCC 4.9.1 ! This is the [44]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.9.1 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). *************** GCC 4.9.1 *** 8728,8806 **** Version 4.0 of the OpenMP specification is supported even in Fortran, not just C and C++. ! GCC 4.9.2 ! This is the [25]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.9.2 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! GCC 4.9.3 ! This is the [26]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.9.3 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! GCC 4.9.4 ! This is the [27]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.9.4 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). For questions related to the use of GCC, please consult these web ! pages and the [28]GCC manuals. If that fails, the ! [29]gcc-help@gcc.gnu.org mailing list might help. Comments on these web pages and the development of GCC are welcome on our developer ! list at [30]gcc@gcc.gnu.org. All of [31]our lists have public archives. ! Copyright (C) [32]Free Software Foundation, Inc. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! These pages are [33]maintained by the GCC team. Last modified ! 2023-09-02. References 1. https://gcc.gnu.org/ml/gcc-patches/2013-05/msg00728.html 2. https://gcc.gnu.org/PR60825 3. https://gcc.gnu.org/gcc-4.9/porting_to.html ! 4. https://www.openmp.org/specifications/ ! 5. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Optimize-Options.html#index-fsimd-cost-model-908 ! 6. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Language-Independent-Options.html#index-fdiagnostics-color-252 ! 7. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Loop-Specific-Pragmas.html ! 8. https://gcc.gnu.org/projects/cxx1y.html ! 9. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3638.html ! 10. https://gcc.gnu.org/projects/cxx1y.html ! 11. https://gcc.gnu.org/projects/cxx1y.html ! 12. https://gcc.gnu.org/projects/cxx1y.html 13. https://gcc.gnu.org/projects/cxx1y.html ! 14. https://gcc.gnu.org/projects/cxx1y.html ! 15. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3889.pdf ! 16. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/libstdc++/manual/manual/status.html#status.iso.2011 ! 17. https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2014 ! 18. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gfortran/Argument-passing-conventions.html ! 19. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gfortran/GNU-Fortran-Compiler-Directives.html ! 20. https://gcc.gnu.org/wiki/Fortran2003Status ! 21. https://gcc.gnu.org/wiki/Fortran2008Status ! 22. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gfortran/Debugging-Options.html ! 23. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Function-Multiversioning.html ! 24. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.9.1 ! 25. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.9.2 ! 26. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.9.3 ! 27. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.9.4 ! 28. https://gcc.gnu.org/onlinedocs/ ! 29. mailto:gcc-help@gcc.gnu.org ! 30. mailto:gcc@gcc.gnu.org ! 31. https://gcc.gnu.org/lists.html ! 32. https://www.fsf.org/ ! 33. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-4.8/index.html GCC 4.8 Release Series (This release series is no longer supported.) --- 9023,9125 ---- Version 4.0 of the OpenMP specification is supported even in Fortran, not just C and C++. ! [45]GCC 4.9.2 ! This is the [46]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.9.2 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! [47]GCC 4.9.3 ! This is the [48]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.9.3 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! [49]GCC 4.9.4 ! This is the [50]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.9.4 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). For questions related to the use of GCC, please consult these web ! pages and the [51]GCC manuals. If that fails, the ! [52]gcc-help@gcc.gnu.org mailing list might help. Comments on these web pages and the development of GCC are welcome on our developer ! list at [53]gcc@gcc.gnu.org. All of [54]our lists have public archives. ! Copyright (C) [55]Free Software Foundation, Inc. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! These pages are [56]maintained by the GCC team. Last modified ! 2025-06-10. References 1. https://gcc.gnu.org/ml/gcc-patches/2013-05/msg00728.html 2. https://gcc.gnu.org/PR60825 3. https://gcc.gnu.org/gcc-4.9/porting_to.html ! 4. https://gcc.gnu.org/gcc-4.9/changes.html#languages ! 5. https://www.openmp.org/specifications/ ! 6. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Optimize-Options.html#index-fsimd-cost-model-908 ! 7. https://gcc.gnu.org/gcc-4.9/changes.html#ada ! 8. https://gcc.gnu.org/gcc-4.9/changes.html#c-family ! 9. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Language-Independent-Options.html#index-fdiagnostics-color-252 ! 10. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Loop-Specific-Pragmas.html ! 11. https://gcc.gnu.org/gcc-4.9/changes.html#c ! 12. https://gcc.gnu.org/gcc-4.9/changes.html#cxx 13. https://gcc.gnu.org/projects/cxx1y.html ! 14. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3638.html ! 15. https://gcc.gnu.org/projects/cxx1y.html ! 16. https://gcc.gnu.org/projects/cxx1y.html ! 17. https://gcc.gnu.org/projects/cxx1y.html ! 18. https://gcc.gnu.org/projects/cxx1y.html ! 19. https://gcc.gnu.org/projects/cxx1y.html ! 20. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3889.pdf ! 21. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/libstdc++/manual/manual/status.html#status.iso.2011 ! 22. https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2014 ! 23. https://gcc.gnu.org/gcc-4.9/changes.html#fortran ! 24. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gfortran/Argument-passing-conventions.html ! 25. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gfortran/GNU-Fortran-Compiler-Directives.html ! 26. https://gcc.gnu.org/wiki/Fortran2003Status ! 27. https://gcc.gnu.org/wiki/Fortran2008Status ! 28. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gfortran/Debugging-Options.html ! 29. https://gcc.gnu.org/gcc-4.9/changes.html#go ! 30. https://gcc.gnu.org/gcc-4.9/changes.html#targets ! 31. https://gcc.gnu.org/gcc-4.9/changes.html#aarch64 ! 32. https://gcc.gnu.org/gcc-4.9/changes.html#arc ! 33. https://gcc.gnu.org/gcc-4.9/changes.html#arm ! 34. https://gcc.gnu.org/gcc-4.9/changes.html#avr ! 35. https://gcc.gnu.org/gcc-4.9/changes.html#x86 ! 36. https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Function-Multiversioning.html ! 37. https://gcc.gnu.org/gcc-4.9/changes.html#msp430 ! 38. https://gcc.gnu.org/gcc-4.9/changes.html#nds32 ! 39. https://gcc.gnu.org/gcc-4.9/changes.html#nios2 ! 40. https://gcc.gnu.org/gcc-4.9/changes.html#powerpc ! 41. https://gcc.gnu.org/gcc-4.9/changes.html#rx ! 42. https://gcc.gnu.org/gcc-4.9/changes.html#sh ! 43. https://gcc.gnu.org/gcc-4.9/changes.html#GCC4.9.1 ! 44. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.9.1 ! 45. https://gcc.gnu.org/gcc-4.9/changes.html#GCC4.9.2 ! 46. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.9.2 ! 47. https://gcc.gnu.org/gcc-4.9/changes.html#GCC4.9.3 ! 48. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.9.3 ! 49. https://gcc.gnu.org/gcc-4.9/changes.html#GCC4.9.4 ! 50. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.9.4 ! 51. https://gcc.gnu.org/onlinedocs/ ! 52. mailto:gcc-help@gcc.gnu.org ! 53. mailto:gcc@gcc.gnu.org ! 54. https://gcc.gnu.org/lists.html ! 55. https://www.fsf.org/ ! 56. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-4.8/index.html + GCC 4.8 Release Series (This release series is no longer supported.) *************** References *** 8897,8902 **** --- 9216,9222 ---- 25. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-4.8/changes.html + GCC 4.8 Release Series Changes, New Features, and Fixes *************** Caveats *** 8932,8949 **** built with older versions of GCC. Auto-vectorized code is not affected by this change. - On AVR, support has been removed for the command-line option - -mshort-calls deprecated in GCC 4.7. - - On AVR, the configure option --with-avrlibc supported since GCC 4.7.2 - is turned on per default for all non-RTEMS configurations. This option - arranges for a better integration of [3]AVR Libc with avr-gcc. For - technical details, see [4]PR54461. To turn off the option in non-RTEMS - configurations, use --with-avrlibc=no. If the compiler is configured - for RTEMS, the option is always turned off. - More information on porting to GCC 4.8 from previous versions of GCC ! can be found in the [5]porting guide for this release. General Optimizer Improvements (and Changes) --- 9252,9259 ---- built with older versions of GCC. Auto-vectorized code is not affected by this change. More information on porting to GCC 4.8 from previous versions of GCC ! can be found in the [3]porting guide for this release. General Optimizer Improvements (and Changes) *************** General Optimizer Improvements (and Chan *** 8996,9009 **** reference) are now propagated at the inter-procedural level leading to better inlining decisions (for example in the case of Fortran array descriptors) and devirtualization. ! * [6]AddressSanitizer , a fast memory error detector, has been added and can be enabled via -fsanitize=address. Memory access instructions will be instrumented to detect heap-, stack-, and global-buffer overflow as well as use-after-free bugs. To get nicer stacktraces, use -fno-omit-frame-pointer. The AddressSanitizer is available on IA-32/x86-64/x32/PowerPC/PowerPC64 GNU/Linux and on x86-64 Darwin. ! * [7]ThreadSanitizer has been added and can be enabled via -fsanitize=thread. Instructions will be instrumented to detect data races. The ThreadSanitizer is available on x86-64 GNU/Linux. * A new local register allocator (LRA) has been implemented, which --- 9306,9319 ---- reference) are now propagated at the inter-procedural level leading to better inlining decisions (for example in the case of Fortran array descriptors) and devirtualization. ! * [4]AddressSanitizer , a fast memory error detector, has been added and can be enabled via -fsanitize=address. Memory access instructions will be instrumented to detect heap-, stack-, and global-buffer overflow as well as use-after-free bugs. To get nicer stacktraces, use -fno-omit-frame-pointer. The AddressSanitizer is available on IA-32/x86-64/x32/PowerPC/PowerPC64 GNU/Linux and on x86-64 Darwin. ! * [5]ThreadSanitizer has been added and can be enabled via -fsanitize=thread. Instructions will be instrumented to detect data races. The ThreadSanitizer is available on x86-64 GNU/Linux. * A new local register allocator (LRA) has been implemented, which *************** New Languages and Language specific impr *** 9025,9032 **** diagnostics. Combined with the caret information, an example diagnostic showing these two features is: ! t.c:1:94: error: invalid operands to binary < (have ‘struct mystruct’ and ‘float ! ’) #define MYMAX(A,B) __extension__ ({ __typeof__(A) __a = (A); __typeof__(B) _ _b = (B); __a < __b ? __b : __a; }) --- 9335,9342 ---- diagnostics. Combined with the caret information, an example diagnostic showing these two features is: ! t.c:1:94: error: invalid operands to binary < (have `struct mystruct' and `float ! ') #define MYMAX(A,B) __extension__ ({ __typeof__(A) __a = (A); __typeof__(B) _ _b = (B); __a < __b ? __b : __a; }) *************** t.c:7:7: note: in expansion of macro 'MY *** 9050,9061 **** diagnostics that are disabled when using -Wno-pedantic. * The option -Wshadow no longer warns if a declaration shadows a function declaration, unless the former declares a function or ! pointer to function, because this is [8]a common and valid case in real-world code. ! C++ ! * G++ now implements the [9]C++11 thread_local keyword; this differs from the GNU __thread keyword primarily in that it allows dynamic initialization and destruction semantics. Unfortunately, this support requires a run-time penalty for references to --- 9360,9371 ---- diagnostics that are disabled when using -Wno-pedantic. * The option -Wshadow no longer warns if a declaration shadows a function declaration, unless the former declares a function or ! pointer to function, because this is [6]a common and valid case in real-world code. ! [7]C++ ! * G++ now implements the [8]C++11 thread_local keyword; this differs from the GNU __thread keyword primarily in that it allows dynamic initialization and destruction semantics. Unfortunately, this support requires a run-time penalty for references to *************** t.c:7:7: note: in expansion of macro 'MY *** 9071,9077 **** -fno-extern-tls-init option. OpenMP threadprivate variables now also support dynamic initialization and destruction by the same mechanism. ! * G++ now implements the [10]C++11 attribute syntax, e.g. [[noreturn]] void f(); --- 9381,9387 ---- -fno-extern-tls-init option. OpenMP threadprivate variables now also support dynamic initialization and destruction by the same mechanism. ! * G++ now implements the [9]C++11 attribute syntax, e.g. [[noreturn]] void f(); *************** t.c:7:7: note: in expansion of macro 'MY *** 9079,9097 **** alignas(double) int i; ! * G++ now implements [11]C++11 inheriting constructors, e.g. struct A { A(int); }; struct B: A { using A::A; }; // defines B::B(int) B b(42); // OK * As of GCC 4.8.1, G++ implements the change to decltype semantics ! from [12]N3276. struct A f(); decltype(f()) g(); // OK, return type of f() is not required to be complete. ! * As of GCC 4.8.1, G++ implements [13]C++11 ref-qualifiers, e.g. struct A { int f() &; }; int i = A().f(); // error, f() requires an lvalue object --- 9389,9407 ---- alignas(double) int i; ! * G++ now implements [10]C++11 inheriting constructors, e.g. struct A { A(int); }; struct B: A { using A::A; }; // defines B::B(int) B b(42); // OK * As of GCC 4.8.1, G++ implements the change to decltype semantics ! from [11]N3276. struct A f(); decltype(f()) g(); // OK, return type of f() is not required to be complete. ! * As of GCC 4.8.1, G++ implements [12]C++11 ref-qualifiers, e.g. struct A { int f() &; }; int i = A().f(); // error, f() requires an lvalue object *************** int i = A().f(); // error, f() requires *** 9100,9107 **** features proposed for the next revision of the standard, expected around 2014. Currently the only difference from -std=c++11 is support for return type deduction in normal functions, as proposed ! in [14]N3386. Status of C++1y features in GCC 4.8 can be found ! [15]here. * The G++ namespace association extension, __attribute ((strong)), has been deprecated. Inline namespaces should be used instead. * G++ now supports a -fext-numeric-literal option to control whether --- 9410,9417 ---- features proposed for the next revision of the standard, expected around 2014. Currently the only difference from -std=c++11 is support for return type deduction in normal functions, as proposed ! in [13]N3386. Status of C++1y features in GCC 4.8 can be found ! [14]here. * The G++ namespace association extension, __attribute ((strong)), has been deprecated. Inline namespaces should be used instead. * G++ now supports a -fext-numeric-literal option to control whether *************** int i = A().f(); // error, f() requires *** 9113,9119 **** Runtime Library (libstdc++) ! * [16]Improved experimental support for the new ISO C++ standard, C++11, including: + forward_list meets the allocator-aware container requirements; + this_thread::sleep_for(), this_thread::sleep_until() and --- 9423,9429 ---- Runtime Library (libstdc++) ! * [15]Improved experimental support for the new ISO C++ standard, C++11, including: + forward_list meets the allocator-aware container requirements; + this_thread::sleep_for(), this_thread::sleep_until() and *************** int i = A().f(); // error, f() requires *** 9136,9142 **** This may be useful for embedded systems to reduce the size of executables that link statically to the library. ! Fortran * Compatibility notice: + Module files: The version of module files (.mod) has been --- 9446,9452 ---- This may be useful for embedded systems to reduce the size of executables that link statically to the library. ! [16]Fortran * Compatibility notice: + Module files: The version of module files (.mod) has been *************** int i = A().f(); // error, f() requires *** 9150,9157 **** older versions except as noted below. + ABI: Some internal names (used in the assembler/object file) have changed for symbols declared in the specification part of ! a module. If an affected module – or a file using it via use ! association – is recompiled, the module and all files which directly use such symbols have to be recompiled as well. This change only affects the following kind of module symbols: o Procedure pointers. Note: C-interoperable function --- 9460,9467 ---- older versions except as noted below. + ABI: Some internal names (used in the assembler/object file) have changed for symbols declared in the specification part of ! a module. If an affected module - or a file using it via use ! association - is recompiled, the module and all files which directly use such symbols have to be recompiled as well. This change only affects the following kind of module symbols: o Procedure pointers. Note: C-interoperable function *************** int i = A().f(); // error, f() requires *** 9178,9184 **** * The [21]-Wcompare-reals command-line option has been added. When this is set, warnings are issued when comparing REAL or COMPLEX types for equality and inequality; consider replacing a == b by ! abs(a−b) < eps with a suitable eps. -Wcompare-reals is enabled by -Wextra. * The [22]-Wtarget-lifetime command-line option has been added (enabled with -Wall), which warns if the pointer in a pointer --- 9488,9494 ---- * The [21]-Wcompare-reals command-line option has been added. When this is set, warnings are issued when comparing REAL or COMPLEX types for equality and inequality; consider replacing a == b by ! abs(a-b) < eps with a suitable eps. -Wcompare-reals is enabled by -Wextra. * The [22]-Wtarget-lifetime command-line option has been added (enabled with -Wall), which warns if the pointer in a pointer *************** int i = A().f(); // error, f() requires *** 9190,9196 **** 4.0e0). (For Fortran source code, consider replacing the "q" in floating-point literals by a kind parameter (e.g. 4.0e0_qp with a ! suitable qp). Note that – in Fortran source code – replacing "q" by a simple "e" is not equivalent.) * The GFORTRAN_TMPDIR environment variable for specifying a non-default directory for files opened with STATUS="SCRATCH", is --- 9500,9506 ---- 4.0e0). (For Fortran source code, consider replacing the "q" in floating-point literals by a kind parameter (e.g. 4.0e0_qp with a ! suitable qp). Note that - in Fortran source code - replacing "q" by a simple "e" is not equivalent.) * The GFORTRAN_TMPDIR environment variable for specifying a non-default directory for files opened with STATUS="SCRATCH", is *************** int i = A().f(); // error, f() requires *** 9210,9216 **** TS29113, see [26]gfortran's header file or use the [27]Chasm Language Interoperability Tools. ! Go * GCC 4.8.2 provides a complete implementation of the Go 1.1.2 release. --- 9520,9526 ---- TS29113, see [26]gfortran's header file or use the [27]Chasm Language Interoperability Tools. ! [28]Go * GCC 4.8.2 provides a complete implementation of the Go 1.1.2 release. *************** int i = A().f(); // error, f() requires *** 9220,9228 **** processors including x86, x86_64, PowerPC, SPARC, and Alpha. It may work on other platforms as well. ! New Targets and Target Specific Improvements ! AArch64 * A new port has been added to support AArch64, the new 64-bit architecture from ARM. Note that this is a separate port from the --- 9530,9538 ---- processors including x86, x86_64, PowerPC, SPARC, and Alpha. It may work on other platforms as well. ! [29]New Targets and Target Specific Improvements ! [30]AArch64 * A new port has been added to support AArch64, the new 64-bit architecture from ARM. Note that this is a separate port from the *************** New Targets and Target Specific Improvem *** 9236,9242 **** default by configuring GCC with the --enable-fix-cortex-a53-835769 option. ! ARM * Initial support has been added for the AArch32 extensions defined in the ARMv8 architecture. --- 9546,9552 ---- default by configuring GCC with the --enable-fix-cortex-a53-835769 option. ! [31]ARM * Initial support has been added for the AArch32 extensions defined in the ARMv8 architecture. *************** New Targets and Target Specific Improvem *** 9267,9276 **** + arm*-*-freebsd (no alternative) + arm*-wince-pe* (no alternative). ! AVR * Support for the "Embedded C" fixed-point has been added. For ! details, see the [28]GCC wiki and the [29]user manual. The support is not complete. * A new print modifier %r for register operands in inline assembler is supported. It will print the raw register number without the --- 9577,9594 ---- + arm*-*-freebsd (no alternative) + arm*-wince-pe* (no alternative). ! [32]AVR + * Support for the command-line option -mshort-calls has been removed. + It was deprecated in GCC 4.7. + * The configure option --with-avrlibc supported since GCC 4.7.2 is + turned on per default for all non-RTEMS configurations. This option + arranges for a better integration of [33]AVR-LibC with avr-gcc. For + technical details, see [34]PR54461. To turn off the option in + non-AVR-LibC configurations, use --with-avrlibc=no. If the compiler + is configured for RTEMS, the option is always turned off. * Support for the "Embedded C" fixed-point has been added. For ! details, see the [35]GCC wiki and the [36]user manual. The support is not complete. * A new print modifier %r for register operands in inline assembler is supported. It will print the raw register number without the *************** New Targets and Target Specific Improvem *** 9285,9292 **** } The inline assembler in this example will generate code like mov r24, 8+7 ! provided c is allocated to R24 and val is allocated to R8…R15. This ! works because the GNU assembler accepts plain register numbers without register prefix. * Static initializers with 3-byte symbols are supported now: extern const __memx char foo; --- 9603,9610 ---- } The inline assembler in this example will generate code like mov r24, 8+7 ! provided c is allocated to R24 and val is allocated to R8...R15. ! This works because the GNU assembler accepts plain register numbers without register prefix. * Static initializers with 3-byte symbols are supported now: extern const __memx char foo; *************** New Targets and Target Specific Improvem *** 9327,9333 **** string literal argument, the CPU name. For example, __builtin_cpu_is("westmere") returns a positive integer if the run-time CPU is an Intel Core i7 Westmere processor. Please ! refer to the [30]user manual for the list of valid CPU names recognized. + A built-in function __builtin_cpu_supports has been added to detect if the run-time CPU supports a particular ISA feature. --- 9645,9651 ---- string literal argument, the CPU name. For example, __builtin_cpu_is("westmere") returns a positive integer if the run-time CPU is an Intel Core i7 Westmere processor. Please ! refer to the [37]user manual for the list of valid CPU names recognized. + A built-in function __builtin_cpu_supports has been added to detect if the run-time CPU supports a particular ISA feature. *************** New Targets and Target Specific Improvem *** 9335,9341 **** It accepts one string literal argument, the ISA feature. For example, __builtin_cpu_supports("ssse3") returns a positive integer if the run-time CPU supports SSSE3 instructions. ! Please refer to the [31]user manual for the list of valid ISA names recognized. Caveat: If these built-in functions are called before any static constructors are invoked, like during IFUNC initialization, then --- 9653,9659 ---- It accepts one string literal argument, the ISA feature. For example, __builtin_cpu_supports("ssse3") returns a positive integer if the run-time CPU supports SSSE3 instructions. ! Please refer to the [38]user manual for the list of valid ISA names recognized. Caveat: If these built-in functions are called before any static constructors are invoked, like during IFUNC initialization, then *************** New Targets and Target Specific Improvem *** 9374,9380 **** return 0; } ! Please refer to this [32]wiki for more information. * The x86 back end has been improved to allow option -fschedule-insns to work reliably. This option can be used to schedule instructions better and leads to improved performace in certain cases. --- 9692,9698 ---- return 0; } ! Please refer to this [39]wiki for more information. * The x86 back end has been improved to allow option -fschedule-insns to work reliably. This option can be used to schedule instructions better and leads to improved performace in certain cases. *************** New Targets and Target Specific Improvem *** 9385,9395 **** * Support for new AMD family 16h processors (Jaguar core) is now available through the -march=btver2 and -mtune=btver2 options. ! FRV * This target now supports the -fstack-usage command-line option. ! MIPS * GCC can now generate code specifically for the R4700, Broadcom XLP and MIPS 34kn processors. The associated -march options are --- 9703,9713 ---- * Support for new AMD family 16h processors (Jaguar core) is now available through the -march=btver2 and -mtune=btver2 options. ! [40]FRV * This target now supports the -fstack-usage command-line option. ! [41]MIPS * GCC can now generate code specifically for the R4700, Broadcom XLP and MIPS 34kn processors. The associated -march options are *************** New Targets and Target Specific Improvem *** 9403,9409 **** intended or supported, and did not generate position-independent code. GCC 4.8 now reports an error when this combination is used. ! PowerPC / PowerPC64 / RS6000 * SVR4 configurations (GNU/Linux, FreeBSD, NetBSD) no longer save, restore or update the VRSAVE register by default. The respective --- 9721,9727 ---- intended or supported, and did not generate position-independent code. GCC 4.8 now reports an error when this combination is used. ! [42]PowerPC / PowerPC64 / RS6000 * SVR4 configurations (GNU/Linux, FreeBSD, NetBSD) no longer save, restore or update the VRSAVE register by default. The respective *************** New Targets and Target Specific Improvem *** 9415,9421 **** when targetting processors that support those hardware features on AIX 6.1 and above. ! RX * This target will now issue a warning message whenever multiple fast interrupt handlers are found in the same compilation unit. This --- 9733,9739 ---- when targetting processors that support those hardware features on AIX 6.1 and above. ! [43]RX * This target will now issue a warning message whenever multiple fast interrupt handlers are found in the same compilation unit. This *************** New Targets and Target Specific Improvem *** 9440,9446 **** higher. The purpose is to make use of the IFUNC optimized versions in Glibc. ! SH * The default alignment settings have been reduced to be less aggressive. This results in more compact code for optimization --- 9758,9764 ---- higher. The purpose is to make use of the IFUNC optimized versions in Glibc. ! [44]SH * The default alignment settings have been reduced to be less aggressive. This results in more compact code for optimization *************** New Targets and Target Specific Improvem *** 9515,9548 **** * The -mdiv= option for targets other than SHmedia has been fixed and documented. ! SPARC * Added optimized instruction scheduling for Niagara4. ! TILE-Gx * Added support for the -mcmodel=MODEL command-line option. The models supported are small and large. ! V850 * This target now supports the E3V5 architecture via the use of the new -mv850e3v5 command-line option. It also has experimental support for the e3v5 LOOP instruction which can be enabled via the new -mloop command-line option. ! XStormy16 * This target now supports the -fstack-usage command-line option. ! Operating Systems ! OpenBSD * Support for OpenBSD/amd64 (x86_64-*-openbsd*) has been added and support for OpenBSD/i386 (i386-*-openbsd*) has been rejuvenated. ! Windows (Cygwin) * Executables are now linked against shared libgcc by default. The previous default was to link statically, which can still be done by --- 9833,9866 ---- * The -mdiv= option for targets other than SHmedia has been fixed and documented. ! [45]SPARC * Added optimized instruction scheduling for Niagara4. ! [46]TILE-Gx * Added support for the -mcmodel=MODEL command-line option. The models supported are small and large. ! [47]V850 * This target now supports the E3V5 architecture via the use of the new -mv850e3v5 command-line option. It also has experimental support for the e3v5 LOOP instruction which can be enabled via the new -mloop command-line option. ! [48]XStormy16 * This target now supports the -fstack-usage command-line option. ! [49]Operating Systems ! [50]OpenBSD * Support for OpenBSD/amd64 (x86_64-*-openbsd*) has been added and support for OpenBSD/i386 (i386-*-openbsd*) has been rejuvenated. ! [51]Windows (Cygwin) * Executables are now linked against shared libgcc by default. The previous default was to link statically, which can still be done by *************** Operating Systems *** 9553,9561 **** only links against the Windows DLLs, but offers little or no benefit. ! GCC 4.8.1 ! This is the [33]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.8.1 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). --- 9871,9879 ---- only links against the Windows DLLs, but offers little or no benefit. ! [52]GCC 4.8.1 ! This is the [53]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.8.1 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). *************** GCC 4.8.1 *** 9576,9591 **** libstdc++ configured with the non-default --enable-libstdcxx-time= configuration option needs to be recompiled. ! GCC 4.8.2 ! This is the [34]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.8.2 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! GCC 4.8.3 ! This is the [35]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.8.3 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). --- 9894,9909 ---- libstdc++ configured with the non-default --enable-libstdcxx-time= configuration option needs to be recompiled. ! [54]GCC 4.8.2 ! This is the [55]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.8.2 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! [56]GCC 4.8.3 ! This is the [57]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.8.3 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). *************** GCC 4.8.3 *** 9593,9645 **** Support for the new powerpc64le-linux platform has been added. It defaults to generating code that conforms to the ELFV2 ABI. ! GCC 4.8.4 ! This is the [36]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.8.4 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! GCC 4.8.5 ! This is the [37]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.8.5 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). For questions related to the use of GCC, please consult these web ! pages and the [38]GCC manuals. If that fails, the ! [39]gcc-help@gcc.gnu.org mailing list might help. Comments on these web pages and the development of GCC are welcome on our developer ! list at [40]gcc@gcc.gnu.org. All of [41]our lists have public archives. ! Copyright (C) [42]Free Software Foundation, Inc. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! These pages are [43]maintained by the GCC team. Last modified ! 2022-11-05. References 1. https://gcc.gnu.org/wiki/cxx-conversion 2. ftp://gcc.gnu.org/pub/gcc/infrastructure/ ! 3. http://www.nongnu.org/avr-libc/ ! 4. https://gcc.gnu.org/PR54461 ! 5. https://gcc.gnu.org/gcc-4.8/porting_to.html ! 6. https://github.com/google/sanitizers ! 7. https://code.google.com/archive/p/data-race-test/wikis/ThreadSanitizer.wiki ! 8. https://lkml.org/lkml/2006/11/28/239 9. https://gcc.gnu.org/gcc-4.8/cxx0x_status.html 10. https://gcc.gnu.org/gcc-4.8/cxx0x_status.html ! 11. https://gcc.gnu.org/gcc-4.8/cxx0x_status.html ! 12. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3276.pdf ! 13. https://gcc.gnu.org/gcc-4.8/cxx0x_status.html ! 14. https://www.open-std.org/JTC1/SC22/WG21/docs/papers/2012/n3386.html ! 15. https://gcc.gnu.org/projects/cxx1y.html ! 16. https://gcc.gnu.org/onlinedocs/gcc-4.8.4/libstdc++/manual/manual/status.html#status.iso.2011 17. https://gcc.gnu.org/onlinedocs/gfortran/BACKTRACE.html 18. https://gcc.gnu.org/onlinedocs/gfortran/Error-and-Warning-Options.html 19. https://gcc.gnu.org/onlinedocs/gfortran/Error-and-Warning-Options.html --- 9911,9963 ---- Support for the new powerpc64le-linux platform has been added. It defaults to generating code that conforms to the ELFV2 ABI. ! [58]GCC 4.8.4 ! This is the [59]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.8.4 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! [60]GCC 4.8.5 ! This is the [61]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.8.5 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). For questions related to the use of GCC, please consult these web ! pages and the [62]GCC manuals. If that fails, the ! [63]gcc-help@gcc.gnu.org mailing list might help. Comments on these web pages and the development of GCC are welcome on our developer ! list at [64]gcc@gcc.gnu.org. All of [65]our lists have public archives. ! Copyright (C) [66]Free Software Foundation, Inc. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! These pages are [67]maintained by the GCC team. Last modified ! 2025-02-28. References 1. https://gcc.gnu.org/wiki/cxx-conversion 2. ftp://gcc.gnu.org/pub/gcc/infrastructure/ ! 3. https://gcc.gnu.org/gcc-4.8/porting_to.html ! 4. https://github.com/google/sanitizers ! 5. https://code.google.com/archive/p/data-race-test/wikis/ThreadSanitizer.wiki ! 6. https://lkml.org/lkml/2006/11/28/239 ! 7. https://gcc.gnu.org/gcc-4.8/changes.html#cxx ! 8. https://gcc.gnu.org/gcc-4.8/cxx0x_status.html 9. https://gcc.gnu.org/gcc-4.8/cxx0x_status.html 10. https://gcc.gnu.org/gcc-4.8/cxx0x_status.html ! 11. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3276.pdf ! 12. https://gcc.gnu.org/gcc-4.8/cxx0x_status.html ! 13. https://www.open-std.org/JTC1/SC22/WG21/docs/papers/2012/n3386.html ! 14. https://gcc.gnu.org/projects/cxx1y.html ! 15. https://gcc.gnu.org/onlinedocs/gcc-4.8.4/libstdc++/manual/manual/status.html#status.iso.2011 ! 16. https://gcc.gnu.org/gcc-4.8/changes.html#fortran 17. https://gcc.gnu.org/onlinedocs/gfortran/BACKTRACE.html 18. https://gcc.gnu.org/onlinedocs/gfortran/Error-and-Warning-Options.html 19. https://gcc.gnu.org/onlinedocs/gfortran/Error-and-Warning-Options.html *************** References *** 9651,9674 **** 25. https://gcc.gnu.org/wiki/TS29113Status 26. https://gcc.gnu.org/git/?p=gcc.git;a=blob;f=libgfortran/libgfortran.h 27. https://chasm-interop.sourceforge.net/ ! 28. https://gcc.gnu.org/wiki/avr-gcc#Fixed-Point_Support ! 29. https://gcc.gnu.org/onlinedocs/gcc/Fixed-Point.html ! 30. https://gcc.gnu.org/onlinedocs/gcc/x86-Built-in-Functions.html ! 31. https://gcc.gnu.org/onlinedocs/gcc/x86-Built-in-Functions.html ! 32. https://gcc.gnu.org/wiki/FunctionMultiVersioning ! 33. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.8.1 ! 34. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.8.2 ! 35. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.8.3 ! 36. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.8.4 ! 37. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.8.5 ! 38. https://gcc.gnu.org/onlinedocs/ ! 39. mailto:gcc-help@gcc.gnu.org ! 40. mailto:gcc@gcc.gnu.org ! 41. https://gcc.gnu.org/lists.html ! 42. https://www.fsf.org/ ! 43. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-4.7/index.html GCC 4.7 Release Series (This release series is no longer supported.) --- 9969,10017 ---- 25. https://gcc.gnu.org/wiki/TS29113Status 26. https://gcc.gnu.org/git/?p=gcc.git;a=blob;f=libgfortran/libgfortran.h 27. https://chasm-interop.sourceforge.net/ ! 28. https://gcc.gnu.org/gcc-4.8/changes.html#go ! 29. https://gcc.gnu.org/gcc-4.8/changes.html#targets ! 30. https://gcc.gnu.org/gcc-4.8/changes.html#aarch64 ! 31. https://gcc.gnu.org/gcc-4.8/changes.html#arm ! 32. https://gcc.gnu.org/gcc-4.8/changes.html#avr ! 33. http://www.nongnu.org/avr-libc/ ! 34. https://gcc.gnu.org/PR54461 ! 35. https://gcc.gnu.org/wiki/avr-gcc#Fixed-Point_Support ! 36. https://gcc.gnu.org/onlinedocs/gcc/Fixed-Point.html ! 37. https://gcc.gnu.org/onlinedocs/gcc/x86-Built-in-Functions.html ! 38. https://gcc.gnu.org/onlinedocs/gcc/x86-Built-in-Functions.html ! 39. https://gcc.gnu.org/wiki/FunctionMultiVersioning ! 40. https://gcc.gnu.org/gcc-4.8/changes.html#frv ! 41. https://gcc.gnu.org/gcc-4.8/changes.html#mips ! 42. https://gcc.gnu.org/gcc-4.8/changes.html#powerpc ! 43. https://gcc.gnu.org/gcc-4.8/changes.html#rx ! 44. https://gcc.gnu.org/gcc-4.8/changes.html#sh ! 45. https://gcc.gnu.org/gcc-4.8/changes.html#sparc ! 46. https://gcc.gnu.org/gcc-4.8/changes.html#tilegx ! 47. https://gcc.gnu.org/gcc-4.8/changes.html#v850 ! 48. https://gcc.gnu.org/gcc-4.8/changes.html#xstormy16 ! 49. https://gcc.gnu.org/gcc-4.8/changes.html#os ! 50. https://gcc.gnu.org/gcc-4.8/changes.html#openbsd ! 51. https://gcc.gnu.org/gcc-4.8/changes.html#windows ! 52. https://gcc.gnu.org/gcc-4.8/changes.html#GCC4.8.1 ! 53. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.8.1 ! 54. https://gcc.gnu.org/gcc-4.8/changes.html#GCC4.8.2 ! 55. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.8.2 ! 56. https://gcc.gnu.org/gcc-4.8/changes.html#GCC4.8.3 ! 57. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.8.3 ! 58. https://gcc.gnu.org/gcc-4.8/changes.html#GCC4.8.4 ! 59. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.8.4 ! 60. https://gcc.gnu.org/gcc-4.8/changes.html#GCC4.8.5 ! 61. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.8.5 ! 62. https://gcc.gnu.org/onlinedocs/ ! 63. mailto:gcc-help@gcc.gnu.org ! 64. mailto:gcc@gcc.gnu.org ! 65. https://gcc.gnu.org/lists.html ! 66. https://www.fsf.org/ ! 67. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-4.7/index.html + GCC 4.7 Release Series (This release series is no longer supported.) *************** References *** 9760,9765 **** --- 10103,10109 ---- 23. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-4.7/changes.html + GCC 4.7 Release Series Changes, New Features, and Fixes *************** Caveats *** 9826,9848 **** from Solaris 11, and was only intended as a migration aid from SunOS 4 to SunOS 5. The -compat-bsd compiler option is not recognized any longer. - * The AVR port's libgcc has been improved and its multilib structure - has been enhanced. As a result, all objects contributing to an - application must either be compiled with GCC versions up to 4.6.x - or with GCC versions 4.7.1 or later. If the compiler is used with - AVR Libc, you need a version that supports the new layout, i.e. - implements [2]#35407. - * The AVR port's -mshort-calls command-line option has been - deprecated. It will be removed in the GCC 4.8 release. See -mrelax - for a replacement. - * The AVR port only references startup code that clears .bss and the - common section resp. initializes the .data and .rodata section - provided respective sections (or subsections thereof) are not - empty, see [3]PR18145. Applications that put all static storage - objects into non-standard sections and / or define all static - storage objects in assembler modules, must reference __do_clear_bss - resp. __do_copy_data by hand or undefine the symbol(s) by means of - -Wl,-u,__do_clear_bss resp. -Wl,-u,__do_copy_data. * The ARM port's -mwords-little-endian option has been deprecated. It will be removed in a future release. * Support has been removed for the NetWare x86 configuration --- 10170,10175 ---- *************** Caveats *** 9868,9874 **** not affected by this change. (This change affects GCC versions 4.7.2 and later.) * More information on porting to GCC 4.7 from previous versions of ! GCC can be found in the [4]porting guide for this release. General Optimizer Improvements --- 10195,10201 ---- not affected by this change. (This change affects GCC versions 4.7.2 and later.) * More information on porting to GCC 4.7 from previous versions of ! GCC can be found in the [2]porting guide for this release. General Optimizer Improvements *************** New Languages and Language specific impr *** 9999,10005 **** constructs, use the -fgnu-tm option. Support is currently available for Alpha, ARM, PowerPC, SH, SPARC, and 32-bit/64-bit x86 platforms. ! For more details on transactional memory see [5]the GCC WiKi. * Support for atomic operations specifying the C++11/C11 memory model has been added. These new __atomic routines replace the existing __sync built-in routines. --- 10326,10332 ---- constructs, use the -fgnu-tm option. Support is currently available for Alpha, ARM, PowerPC, SH, SPARC, and 32-bit/64-bit x86 platforms. ! For more details on transactional memory see [3]the GCC WiKi. * Support for atomic operations specifying the C++11/C11 memory model has been added. These new __atomic routines replace the existing __sync built-in routines. *************** New Languages and Language specific impr *** 10010,10016 **** library functions is available on the GCC atomic wiki in the "External Atomics Library" section. For more details on the memory models and features, see the ! [6]atomic wiki. * When a binary operation is performed on vector types and one of the operands is a uniform vector, it is possible to replace the vector with the generating element. For example: --- 10337,10343 ---- library functions is available on the GCC atomic wiki in the "External Atomics Library" section. For more details on the memory models and features, see the ! [4]atomic wiki. * When a binary operation is performed on vector types and one of the operands is a uniform vector, it is possible to replace the vector with the generating element. For example: *************** int x; *** 10021,10027 **** res = 2 + a; /* means {2,2,2,2} + a */ res = a - x; /* means a - {x,x,x,x} */ ! C * There is support for some more features from the C11 revision of the ISO C standard. GCC now accepts the options -std=c11 and --- 10348,10354 ---- res = 2 + a; /* means {2,2,2,2} + a */ res = a - x; /* means a - {x,x,x,x} */ ! [5]C * There is support for some more features from the C11 revision of the ISO C standard. GCC now accepts the options -std=c11 and *************** res = a - x; /* means a - {x,x,x,x} */ *** 10035,10041 **** + A built-in function __builtin_complex is provided to support C library implementation of the CMPLX family of macros. ! C++ * G++ now accepts the -std=c++11, -std=gnu++11, and -Wc++11-compat options, which are equivalent to -std=c++0x, -std=gnu++0x, and --- 10362,10368 ---- + A built-in function __builtin_complex is provided to support C library implementation of the CMPLX family of macros. ! [6]C++ * G++ now accepts the -std=c++11, -std=gnu++11, and -Wc++11-compat options, which are equivalent to -std=c++0x, -std=gnu++0x, and *************** long double pi = 180.0_degrees; *** 10090,10096 **** template using Ptr = T*; Ptr ip; // decltype(ip) is int* ! * Thanks to Ville Voutilainen and Pedro Lamarão, G++ now implements [12]C++11 delegating constructors. struct A { --- 10417,10423 ---- template using Ptr = T*; Ptr ip; // decltype(ip) is int* ! * Thanks to Ville Voutilainen and Pedro Lamaro, G++ now implements [12]C++11 delegating constructors. struct A { *************** const int &y = f(2); *** 10191,10219 **** * Debug Mode iterators for unordered associative containers. * Avoid polluting the global namespace and do not include . ! Fortran ! * The compile flag [16]-fstack-arrays has been added, which causes all local arrays to be put on stack memory. For some programs this will improve the performance significantly. If your program uses very large local arrays, it is possible that you will have to extend your runtime limits for stack memory. ! * The [17]-Ofast flag now also implies [18]-fno-protect-parens and ! [19]-fstack-arrays. * Front-end optimizations can now be selected by the ! [20]-ffrontend-optimize option and deselected by the -fno-frontend-optimize option. * When front-end optimization removes a function call, ! [21]-Wfunction-elimination warns about that. * When performing front-end-optimization, the ! [22]-faggressive-function-elimination option allows the removal of duplicate function calls even for impure functions. ! * The flag [23]-Wreal-q-constant has been added, which warns if floating-point literals have been specified using q (such as 1.0q0); the q marker is now supported as a vendor extension to denote quad precision (REAL(16) or, if not available, REAL(10)). Consider using a kind parameter (such as in 1.0_qp) instead, which ! can be obtained via [24]SELECTED_REAL_KIND. * The GFORTRAN_USE_STDERR environment variable has been removed. GNU Fortran now always prints error messages to standard error. If you wish to redirect standard error, please consult the manual for your --- 10518,10546 ---- * Debug Mode iterators for unordered associative containers. * Avoid polluting the global namespace and do not include . ! [16]Fortran ! * The compile flag [17]-fstack-arrays has been added, which causes all local arrays to be put on stack memory. For some programs this will improve the performance significantly. If your program uses very large local arrays, it is possible that you will have to extend your runtime limits for stack memory. ! * The [18]-Ofast flag now also implies [19]-fno-protect-parens and ! [20]-fstack-arrays. * Front-end optimizations can now be selected by the ! [21]-ffrontend-optimize option and deselected by the -fno-frontend-optimize option. * When front-end optimization removes a function call, ! [22]-Wfunction-elimination warns about that. * When performing front-end-optimization, the ! [23]-faggressive-function-elimination option allows the removal of duplicate function calls even for impure functions. ! * The flag [24]-Wreal-q-constant has been added, which warns if floating-point literals have been specified using q (such as 1.0q0); the q marker is now supported as a vendor extension to denote quad precision (REAL(16) or, if not available, REAL(10)). Consider using a kind parameter (such as in 1.0_qp) instead, which ! can be obtained via [25]SELECTED_REAL_KIND. * The GFORTRAN_USE_STDERR environment variable has been removed. GNU Fortran now always prints error messages to standard error. If you wish to redirect standard error, please consult the manual for your *************** const int &y = f(2); *** 10223,10254 **** gfortran will now always abort the program. Whether a core dump is generated depends on the user environment settings; see the ulimit -c setting for POSIX shells, limit coredumpsize for C shells, and ! the [25]WER user-mode dumps settings on Windows. ! * The [26]-fbacktrace option is now enabled by default. When encountering a fatal error, gfortran will attempt to print a backtrace to standard error before aborting. It can be disabled with -fno-backtrace. Note: On POSIX targets with the addr2line utility from GNU binutils, GNU Fortran can print a backtrace with function name, file name, line number information in addition to the addresses; otherwise only the addresses are printed. ! * [27]Fortran 2003: + Generic interface names which have the same name as derived types are now supported, which allows to write constructor functions. Note that Fortran does not support static constructor functions; only default initialization or an explicit structure-constructor initialization are available. ! + [28]Polymorphic (class) arrays are now supported. ! * [29]Fortran 2008: + Support for the DO CONCURRENT construct has been added, which allows the user to specify that individual loop iterations have no interdependencies. ! + [30]Coarrays: Full single-image support except for polymorphic coarrays. Additionally, preliminary support for multiple ! images via an MPI-based [31]coarray communication library has been added. Note: The library version is not yet usable as remote coarray access is not yet possible. ! * [32]TS 29113: ! + New flag [33]-std=f2008ts permits programs that are expected to conform to the Fortran 2008 standard and the draft Technical Specification (TS) 29113 on Further Interoperability of Fortran with C. --- 10550,10581 ---- gfortran will now always abort the program. Whether a core dump is generated depends on the user environment settings; see the ulimit -c setting for POSIX shells, limit coredumpsize for C shells, and ! the [26]WER user-mode dumps settings on Windows. ! * The [27]-fbacktrace option is now enabled by default. When encountering a fatal error, gfortran will attempt to print a backtrace to standard error before aborting. It can be disabled with -fno-backtrace. Note: On POSIX targets with the addr2line utility from GNU binutils, GNU Fortran can print a backtrace with function name, file name, line number information in addition to the addresses; otherwise only the addresses are printed. ! * [28]Fortran 2003: + Generic interface names which have the same name as derived types are now supported, which allows to write constructor functions. Note that Fortran does not support static constructor functions; only default initialization or an explicit structure-constructor initialization are available. ! + [29]Polymorphic (class) arrays are now supported. ! * [30]Fortran 2008: + Support for the DO CONCURRENT construct has been added, which allows the user to specify that individual loop iterations have no interdependencies. ! + [31]Coarrays: Full single-image support except for polymorphic coarrays. Additionally, preliminary support for multiple ! images via an MPI-based [32]coarray communication library has been added. Note: The library version is not yet usable as remote coarray access is not yet possible. ! * [33]TS 29113: ! + New flag [34]-std=f2008ts permits programs that are expected to conform to the Fortran 2008 standard and the draft Technical Specification (TS) 29113 on Further Interoperability of Fortran with C. *************** const int &y = f(2); *** 10259,10276 **** compatible with the candidate draft of TS 29113 (since GCC 4.6). ! Go ! * GCC 4.7 implements the [34]Go 1 language standard. The library support in 4.7.0 is not quite complete, due to release timing. Release 4.7.1 includes complete support for Go 1. The Go library is from the Go 1.0.1 release. * Go has been tested on GNU/Linux and Solaris platforms. It may work on other platforms as well. ! New Targets and Target Specific Improvements ! ARM * GCC now supports the Cortex-A7 processor implementing the v7-a version of the architecture using the option -mcpu=cortex-a7. --- 10586,10603 ---- compatible with the candidate draft of TS 29113 (since GCC 4.6). ! [35]Go ! * GCC 4.7 implements the [36]Go 1 language standard. The library support in 4.7.0 is not quite complete, due to release timing. Release 4.7.1 includes complete support for Go 1. The Go library is from the Go 1.0.1 release. * Go has been tested on GNU/Linux and Solaris platforms. It may work on other platforms as well. ! [37]New Targets and Target Specific Improvements ! [38]ARM * GCC now supports the Cortex-A7 processor implementing the v7-a version of the architecture using the option -mcpu=cortex-a7. *************** New Targets and Target Specific Improvem *** 10280,10290 **** * A new option -mvectorize-with-neon-double was added to allow users to change the vector size to 64 bits. ! AVR ! * GCC now supports the XMEGA architecture. This requires GNU binutils 2.22 or later. ! * Support for the [35]named address spaces __flash, __flash1, …, __flash5 and __memx has been added. These address spaces locate read-only data in flash memory and allow reading from flash memory by means of ordinary C code, i.e. without the need of (inline) --- 10607,10633 ---- * A new option -mvectorize-with-neon-double was added to allow users to change the vector size to 64 bits. ! [39]AVR ! * The AVR port's libgcc has been improved and its multilib structure ! has been enhanced. As a result, all objects contributing to an ! application must either be compiled with GCC versions up to 4.6.x ! or with GCC versions 4.7.1 or later. If the compiler is used with ! AVR-LibC, you need a version that supports the new layout, i.e. ! implements [40]#35407. ! * The -mshort-calls command-line option has been deprecated. It will ! be removed in the GCC 4.8 release. See -mrelax for a replacement. ! * The compiled code only references startup code that clears .bss and ! the common section resp. initializes the .data and .rodata section ! provided respective sections (or subsections thereof) are not ! empty, see [41]PR18145. Applications that put all static storage ! objects into non-standard sections and / or define all static ! storage objects in assembler modules, must reference __do_clear_bss ! resp. __do_copy_data by hand or undefine the symbol(s) by means of ! -Wl,-u,__do_clear_bss resp. -Wl,-u,__do_copy_data. ! * GCC now supports the XMEGA architecture. This requires GNU Binutils 2.22 or later. ! * Support for the [42]named address spaces __flash, __flash1, ..., __flash5 and __memx has been added. These address spaces locate read-only data in flash memory and allow reading from flash memory by means of ordinary C code, i.e. without the need of (inline) *************** int add_values (const __flash int *p, in *** 10299,10310 **** * Support has been added for the AVR-specific configure option --with-avrlibc=yes in order to arrange for better integration of ! [36]AVR-Libc. This configure option is supported in avr-gcc 4.7.2 and newer and will only take effect in non-RTEMS configurations. If avr-gcc is configured for RTEMS, the option will be ignored which ! is the same as specifying --with-avrlibc=no. See [37]PR54461 for more technical details. ! * Support for AVR-specific [38]built-in functions has been added. * Support has been added for the signed and unsigned 24-bit scalar integer types __int24 and __uint24. * New command-line options -maccumulate-args, -mbranch-cost=cost and --- 10642,10653 ---- * Support has been added for the AVR-specific configure option --with-avrlibc=yes in order to arrange for better integration of ! [43]AVR-Libc. This configure option is supported in avr-gcc v4.7.2 and newer and will only take effect in non-RTEMS configurations. If avr-gcc is configured for RTEMS, the option will be ignored which ! is the same as specifying --with-avrlibc=no. See [44]PR54461 for more technical details. ! * Support for AVR-specific [45]built-in functions has been added. * Support has been added for the signed and unsigned 24-bit scalar integer types __int24 and __uint24. * New command-line options -maccumulate-args, -mbranch-cost=cost and *************** void set_portb (uint8_t value) *** 10328,10334 **** suitable to be used as operand in an I/O command. The address must be a constant integer known at compile time. * The inline assembler constraint "R" to represent integers in the ! range −6 … 5 has been removed without replacement. * Many optimizations to: + 64-bit integer arithmetic + Widening multiplication --- 10671,10677 ---- suitable to be used as operand in an I/O command. The address must be a constant integer known at compile time. * The inline assembler constraint "R" to represent integers in the ! range -6 ... 5 has been removed without replacement. * Many optimizations to: + 64-bit integer arithmetic + Widening multiplication *************** void set_portb (uint8_t value) *** 10340,10346 **** + If-else decision trees generated by switch instructions + Merging of data located in flash memory + New libgcc variants for devices with 8-bit wide stack pointer ! + … * Better documentation: + Handling of EIND and indirect jumps on devices with more than 128 KiB of program memory. --- 10683,10689 ---- + If-else decision trees generated by switch instructions + Merging of data located in flash memory + New libgcc variants for devices with 8-bit wide stack pointer ! + ... * Better documentation: + Handling of EIND and indirect jumps on devices with more than 128 KiB of program memory. *************** void set_portb (uint8_t value) *** 10386,10392 **** FMA, BMI, BMI2, LZCNT is available through -march=core-avx2. * Support for new AMD family 15h processors (Piledriver core) is now available through -march=bdver2 and -mtune=bdver2 options. ! * Support for [39]the x32 psABI is now available through the -mx32 option. * Windows mingw targets are using the -mms-bitfields option by default. --- 10729,10735 ---- FMA, BMI, BMI2, LZCNT is available through -march=core-avx2. * Support for new AMD family 15h processors (Piledriver core) is now available through -march=bdver2 and -mtune=bdver2 options. ! * Support for [46]the x32 psABI is now available through the -mx32 option. * Windows mingw targets are using the -mms-bitfields option by default. *************** void set_portb (uint8_t value) *** 10395,10401 **** * Support for the configure option --with-threads=posix for Windows mingw targets. ! MIPS * GCC now supports thread-local storage (TLS) for MIPS16. This requires GNU binutils 2.22 or later. --- 10738,10744 ---- * Support for the configure option --with-threads=posix for Windows mingw targets. ! [47]MIPS * GCC now supports thread-local storage (TLS) for MIPS16. This requires GNU binutils 2.22 or later. *************** Other significant improvements *** 10501,10566 **** the DW_AT_producer attribute string in the DWARF debugging information. * GCC now supports various new GNU extensions to the DWARF debugging ! information format, like [40]entry value and [41]call site ! information, [42]typed DWARF stack or [43]a more compact macro representation. Support for these extensions has been added to GDB 7.4. They can be disabled through the -gstrict-dwarf command-line option. ! GCC 4.7.1 ! This is the [44]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.7.1 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! The Go front end in the 4.7.1 release fully supports the [45]Go 1 language standard. ! GCC 4.7.2 ! This is the [46]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.7.2 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! GCC 4.7.3 ! This is the [47]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.7.3 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! GCC 4.7.4 ! This is the [48]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.7.4 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). For questions related to the use of GCC, please consult these web ! pages and the [49]GCC manuals. If that fails, the ! [50]gcc-help@gcc.gnu.org mailing list might help. Comments on these web pages and the development of GCC are welcome on our developer ! list at [51]gcc@gcc.gnu.org. All of [52]our lists have public archives. ! Copyright (C) [53]Free Software Foundation, Inc. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! These pages are [54]maintained by the GCC team. Last modified ! 2023-03-29. References 1. https://gcc.gnu.org/ml/gcc-patches/2011-03/msg01263.html ! 2. http://savannah.nongnu.org/bugs/?35407 ! 3. https://gcc.gnu.org/PR18145 ! 4. https://gcc.gnu.org/gcc-4.7/porting_to.html ! 5. https://gcc.gnu.org/wiki/TransactionalMemory ! 6. https://gcc.gnu.org/wiki/Atomic/GCCMM 7. https://gcc.gnu.org/gcc-4.7/cxx0x_status.html 8. https://gcc.gnu.org/gcc-4.7/cxx0x_status.html 9. https://gcc.gnu.org/gcc-4.7/cxx0x_status.html --- 10844,10909 ---- the DW_AT_producer attribute string in the DWARF debugging information. * GCC now supports various new GNU extensions to the DWARF debugging ! information format, like [48]entry value and [49]call site ! information, [50]typed DWARF stack or [51]a more compact macro representation. Support for these extensions has been added to GDB 7.4. They can be disabled through the -gstrict-dwarf command-line option. ! [52]GCC 4.7.1 ! This is the [53]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.7.1 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! The Go front end in the 4.7.1 release fully supports the [54]Go 1 language standard. ! [55]GCC 4.7.2 ! This is the [56]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.7.2 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! [57]GCC 4.7.3 ! This is the [58]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.7.3 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! [59]GCC 4.7.4 ! This is the [60]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.7.4 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). For questions related to the use of GCC, please consult these web ! pages and the [61]GCC manuals. If that fails, the ! [62]gcc-help@gcc.gnu.org mailing list might help. Comments on these web pages and the development of GCC are welcome on our developer ! list at [63]gcc@gcc.gnu.org. All of [64]our lists have public archives. ! Copyright (C) [65]Free Software Foundation, Inc. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! These pages are [66]maintained by the GCC team. Last modified ! 2025-06-10. References 1. https://gcc.gnu.org/ml/gcc-patches/2011-03/msg01263.html ! 2. https://gcc.gnu.org/gcc-4.7/porting_to.html ! 3. https://gcc.gnu.org/wiki/TransactionalMemory ! 4. https://gcc.gnu.org/wiki/Atomic/GCCMM ! 5. https://gcc.gnu.org/gcc-4.7/changes.html#c ! 6. https://gcc.gnu.org/gcc-4.7/changes.html#cxx 7. https://gcc.gnu.org/gcc-4.7/cxx0x_status.html 8. https://gcc.gnu.org/gcc-4.7/cxx0x_status.html 9. https://gcc.gnu.org/gcc-4.7/cxx0x_status.html *************** References *** 10570,10616 **** 13. https://gcc.gnu.org/PR14258 14. https://gcc.gnu.org/PR35688 15. https://gcc.gnu.org/onlinedocs/gcc-4.7.4/libstdc++/manual/manual/status.html#status.iso.2011 ! 16. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfstack-arrays_007d-254 ! 17. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/Optimize-Options.html#index-Ofast-689 ! 18. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfno-protect-parens_007d-270 ! 19. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfstack-arrays_007d-254 ! 20. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfrontend-optimize_007d-275 ! 21. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Error-and-Warning-Options.html#index-g_t_0040code_007bWfunction-elimination_007d-170 ! 22. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfaggressive-function-elimination_007d-270 ! 23. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Error-and-Warning-Options.html#index-g_t_0040code_007bWreal-q-constant_007d-149 ! 24. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/SELECTED_005fREAL_005fKIND.html ! 25. https://learn.microsoft.com/en-us/windows/win32/wer/collecting-user-mode-dumps ! 26. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Debugging-Options.html#index-g_t_0040code_007bfno-backtrace_007d-183 ! 27. https://gcc.gnu.org/wiki/Fortran2003Status ! 28. https://gcc.gnu.org/wiki/OOP ! 29. https://gcc.gnu.org/wiki/Fortran2008Status ! 30. https://gcc.gnu.org/wiki/Coarray ! 31. https://gcc.gnu.org/wiki/CoarrayLib ! 32. https://gcc.gnu.org/wiki/TS29113Status ! 33. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Fortran-Dialect-Options.html#index-g_t_0040code_007bstd_003d_007d_0040var_007bstd_007d-option-53 ! 34. https://go.dev/doc/go1 ! 35. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/Named-Address-Spaces.html ! 36. http://www.nongnu.org/avr-libc/ ! 37. https://gcc.gnu.org/PR54461 ! 38. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/AVR-Built_002din-Functions.html ! 39. https://sites.google.com/site/x32abi/ ! 40. https://dwarfstd.org/issues/100909.1.html ! 41. https://dwarfstd.org/issues/100909.2.html ! 42. https://dwarfstd.org/issues/140425.1.html ! 43. https://dwarfstd.org/issues/110722.1.html ! 44. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.7.1 ! 45. https://go.dev/doc/go1 ! 46. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.7.2 ! 47. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.7.3 ! 48. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.7.4 ! 49. https://gcc.gnu.org/onlinedocs/ ! 50. mailto:gcc-help@gcc.gnu.org ! 51. mailto:gcc@gcc.gnu.org ! 52. https://gcc.gnu.org/lists.html ! 53. https://www.fsf.org/ ! 54. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-4.6/index.html GCC 4.6 Release Series (This release series is no longer supported.) --- 10913,10972 ---- 13. https://gcc.gnu.org/PR14258 14. https://gcc.gnu.org/PR35688 15. https://gcc.gnu.org/onlinedocs/gcc-4.7.4/libstdc++/manual/manual/status.html#status.iso.2011 ! 16. https://gcc.gnu.org/gcc-4.7/changes.html#fortran ! 17. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfstack-arrays_007d-254 ! 18. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/Optimize-Options.html#index-Ofast-689 ! 19. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfno-protect-parens_007d-270 ! 20. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfstack-arrays_007d-254 ! 21. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfrontend-optimize_007d-275 ! 22. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Error-and-Warning-Options.html#index-g_t_0040code_007bWfunction-elimination_007d-170 ! 23. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfaggressive-function-elimination_007d-270 ! 24. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Error-and-Warning-Options.html#index-g_t_0040code_007bWreal-q-constant_007d-149 ! 25. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/SELECTED_005fREAL_005fKIND.html ! 26. https://learn.microsoft.com/en-us/windows/win32/wer/collecting-user-mode-dumps ! 27. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Debugging-Options.html#index-g_t_0040code_007bfno-backtrace_007d-183 ! 28. https://gcc.gnu.org/wiki/Fortran2003Status ! 29. https://gcc.gnu.org/wiki/OOP ! 30. https://gcc.gnu.org/wiki/Fortran2008Status ! 31. https://gcc.gnu.org/wiki/Coarray ! 32. https://gcc.gnu.org/wiki/CoarrayLib ! 33. https://gcc.gnu.org/wiki/TS29113Status ! 34. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gfortran/Fortran-Dialect-Options.html#index-g_t_0040code_007bstd_003d_007d_0040var_007bstd_007d-option-53 ! 35. https://gcc.gnu.org/gcc-4.7/changes.html#go ! 36. https://go.dev/doc/go1 ! 37. https://gcc.gnu.org/gcc-4.7/changes.html#targets ! 38. https://gcc.gnu.org/gcc-4.7/changes.html#arm ! 39. https://gcc.gnu.org/gcc-4.7/changes.html#avr ! 40. http://savannah.nongnu.org/bugs/?35407 ! 41. https://gcc.gnu.org/PR18145 ! 42. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/Named-Address-Spaces.html ! 43. http://www.nongnu.org/avr-libc/ ! 44. https://gcc.gnu.org/PR54461 ! 45. https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/AVR-Built%5f002din-Functions.html ! 46. https://sites.google.com/site/x32abi/ ! 47. https://gcc.gnu.org/gcc-4.7/changes.html#mips ! 48. https://dwarfstd.org/issues/100909.1.html ! 49. https://dwarfstd.org/issues/100909.2.html ! 50. https://dwarfstd.org/issues/140425.1.html ! 51. https://dwarfstd.org/issues/110722.1.html ! 52. https://gcc.gnu.org/gcc-4.7/changes.html#GCC4.7.1 ! 53. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.7.1 ! 54. https://go.dev/doc/go1 ! 55. https://gcc.gnu.org/gcc-4.7/changes.html#GCC4.7.2 ! 56. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.7.2 ! 57. https://gcc.gnu.org/gcc-4.7/changes.html#GCC4.7.3 ! 58. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.7.3 ! 59. https://gcc.gnu.org/gcc-4.7/changes.html#GCC4.7.4 ! 60. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.7.4 ! 61. https://gcc.gnu.org/onlinedocs/ ! 62. mailto:gcc-help@gcc.gnu.org ! 63. mailto:gcc@gcc.gnu.org ! 64. https://gcc.gnu.org/lists.html ! 65. https://www.fsf.org/ ! 66. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-4.6/index.html + GCC 4.6 Release Series (This release series is no longer supported.) *************** References *** 10702,10707 **** --- 11058,11064 ---- 23. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-4.6/changes.html + GCC 4.6 Release Series Changes, New Features, and Fixes *************** New Languages and Language specific impr *** 10950,10956 **** * The -fmax-errors=N option is now supported. Using this option causes the compiler to exit after N errors have been issued. ! C * There is now experimental support for some features from the upcoming C1X revision of the ISO C standard. This support may be --- 11307,11313 ---- * The -fmax-errors=N option is now supported. Using this option causes the compiler to exit after N errors have been issued. ! [7]C * There is now experimental support for some features from the upcoming C1X revision of the ISO C standard. This support may be *************** New Languages and Language specific impr *** 10974,10982 **** field whose type is a typedef name may be referred to using the typedef name. ! C++ ! * Improved [7]experimental support for the upcoming C++0x ISO C++ standard, including support for constexpr (thanks to Gabriel Dos Reis and Jason Merrill), nullptr (thanks to Magnus Fromreide), noexcept, unrestricted unions, range-based for loops (thanks to --- 11331,11339 ---- field whose type is a typedef name may be referred to using the typedef name. ! [8]C++ ! * Improved [9]experimental support for the upcoming C++0x ISO C++ standard, including support for constexpr (thanks to Gabriel Dos Reis and Jason Merrill), nullptr (thanks to Magnus Fromreide), noexcept, unrestricted unions, range-based for loops (thanks to *************** New Languages and Language specific impr *** 10986,10999 **** * When an extern declaration within a function does not match a declaration in the enclosing context, G++ now properly declares the name within the namespace of the function rather than the namespace ! which was open just before the function definition ([8]c++/43145). * GCC now warns by default when casting integers to larger pointer types. These warnings can be disabled with the option -Wno-int-to-pointer-cast, which is now also available in C++. * G++ no longer optimizes using the assumption that a value of enumeration type will fall within the range specified by the standard, since that assumption is easily violated with a ! conversion from integer type ([9]c++/43680). The old behavior can be restored with -fstrict-enums. * The new -fnothrow-opt flag changes the semantics of a throw() exception specification to match the proposed semantics of the --- 11343,11356 ---- * When an extern declaration within a function does not match a declaration in the enclosing context, G++ now properly declares the name within the namespace of the function rather than the namespace ! which was open just before the function definition ([10]c++/43145). * GCC now warns by default when casting integers to larger pointer types. These warnings can be disabled with the option -Wno-int-to-pointer-cast, which is now also available in C++. * G++ no longer optimizes using the assumption that a value of enumeration type will fall within the range specified by the standard, since that assumption is easily violated with a ! conversion from integer type ([11]c++/43680). The old behavior can be restored with -fstrict-enums. * The new -fnothrow-opt flag changes the semantics of a throw() exception specification to match the proposed semantics of the *************** New Languages and Language specific impr *** 11016,11022 **** class member declarations. * G++ now issues clearer diagnostics when a colon is used in a place where a double-colon was intended. ! * G++ no longer accepts mutable on reference members ([10]c++/33558). Use -fpermissive to allow the old, non-conforming behaviour. * A few mangling fixes have been made, to attribute const/volatile on function pointer types, decltype of a plain decl, and use of a --- 11373,11379 ---- class member declarations. * G++ now issues clearer diagnostics when a colon is used in a place where a double-colon was intended. ! * G++ no longer accepts mutable on reference members ([12]c++/33558). Use -fpermissive to allow the old, non-conforming behaviour. * A few mangling fixes have been made, to attribute const/volatile on function pointer types, decltype of a plain decl, and use of a *************** New Languages and Language specific impr *** 11029,11035 **** * In 4.6.0 and 4.6.1 G++ no longer allows objects of const-qualified type to be default initialized unless the type has a user-declared default constructor. In 4.6.2 G++ implements the proposed ! resolution of [11]DR 253, so default initialization is allowed if it initializes all subobjects. Code that fails to compile can be fixed by providing an initializer e.g. struct A { A(); }; --- 11386,11392 ---- * In 4.6.0 and 4.6.1 G++ no longer allows objects of const-qualified type to be default initialized unless the type has a user-declared default constructor. In 4.6.2 G++ implements the proposed ! resolution of [13]DR 253, so default initialization is allowed if it initializes all subobjects. Code that fails to compile can be fixed by providing an initializer e.g. struct A { A(); }; *************** New Languages and Language specific impr *** 11039,11057 **** Runtime Library (libstdc++) ! * [12]Improved experimental support for the upcoming ISO C++ standard, C++0x, including using constexpr and nullptr. ! * Performance improvements to the [13]Debug Mode, thanks to François Dumont. * Atomic operations used for reference-counting are annotated so that they can be understood by race detectors such as Helgrind, see ! [14]Data Race Hunting. * Most libstdc++ standard headers have been changed to no longer include the cstddef header as an implementation detail. Code that relied on that header being included as side-effect of including other standard headers will need to include cstddef explicitly. ! Fortran * On systems supporting the libquadmath library, GNU Fortran now also supports a quad-precision, kind=16 floating-point data type --- 11396,11414 ---- Runtime Library (libstdc++) ! * [14]Improved experimental support for the upcoming ISO C++ standard, C++0x, including using constexpr and nullptr. ! * Performance improvements to the [15]Debug Mode, thanks to Franois Dumont. * Atomic operations used for reference-counting are annotated so that they can be understood by race detectors such as Helgrind, see ! [16]Data Race Hunting. * Most libstdc++ standard headers have been changed to no longer include the cstddef header as an implementation detail. Code that relied on that header being included as side-effect of including other standard headers will need to include cstddef explicitly. ! [17]Fortran * On systems supporting the libquadmath library, GNU Fortran now also supports a quad-precision, kind=16 floating-point data type *************** New Languages and Language specific impr *** 11069,11075 **** * The -fwhole-file flag is now enabled by default. This improves code generation and diagnostics. It can be disabled using the deprecated -fno-whole-file flag. ! * Support the generation of Makefile dependencies via the [15]-M... flags of GCC; you may need to specify the -cpp option in addition. The dependencies take modules, Fortran's include, and CPP's #include into account. Note: Using -M for the module path is no --- 11426,11432 ---- * The -fwhole-file flag is now enabled by default. This improves code generation and diagnostics. It can be disabled using the deprecated -fno-whole-file flag. ! * Support the generation of Makefile dependencies via the [18]-M... flags of GCC; you may need to specify the -cpp option in addition. The dependencies take modules, Fortran's include, and CPP's #include into account. Note: Using -M for the module path is no *************** New Languages and Language specific impr *** 11086,11092 **** * Fortran 2003 support has been extended: + Improved support for polymorphism between libraries and programs and for complicated inheritance patterns (cf. ! [16]object-oriented programming). + Experimental support of the ASSOCIATE construct. + In pointer assignments it is now possible to specify the lower bounds of the pointer and, for a rank-1 or a simply contiguous --- 11443,11449 ---- * Fortran 2003 support has been extended: + Improved support for polymorphism between libraries and programs and for complicated inheritance patterns (cf. ! [19]object-oriented programming). + Experimental support of the ASSOCIATE construct. + In pointer assignments it is now possible to specify the lower bounds of the pointer and, for a rank-1 or a simply contiguous *************** New Languages and Language specific impr *** 11096,11110 **** allocated (if unallocated) or reallocated (if the shape or type parameter is different). To avoid the small performance penalty, you can use a(:) = ... instead of a = ... for arrays ! and character strings – or disable the feature using -std=f95 or -fno-realloc-lhs. + Deferred type parameter: For scalar allocatable and pointer variables the character length can be deferred. + Namelist variables with allocatable and pointer attribute and nonconstant length type parameter are supported. * Fortran 2008 support has been extended: ! + Experimental [17]coarray support (for one image only, i.e. ! num_images() == 1); use the [18]-fcoarray=single flag to enable it. + The STOP and the new ERROR STOP statements now support all constant expressions. --- 11453,11467 ---- allocated (if unallocated) or reallocated (if the shape or type parameter is different). To avoid the small performance penalty, you can use a(:) = ... instead of a = ... for arrays ! and character strings - or disable the feature using -std=f95 or -fno-realloc-lhs. + Deferred type parameter: For scalar allocatable and pointer variables the character length can be deferred. + Namelist variables with allocatable and pointer attribute and nonconstant length type parameter are supported. * Fortran 2008 support has been extended: ! + Experimental [20]coarray support (for one image only, i.e. ! num_images() == 1); use the [21]-fcoarray=single flag to enable it. + The STOP and the new ERROR STOP statements now support all constant expressions. *************** New Languages and Language specific impr *** 11151,11161 **** be declared in a single PROCEDURE statement; implied-shape arrays are supported for named constants (PARAMETER). The transformational, three argument versions of BESSEL_JN and ! BESSEL_YN were added – the elemental, two-argument version had been added in GCC 4.4; note that the transformational functions use a recurrence algorithm. ! Go Support for the Go programming language has been added to GCC. It is not enabled by default when you build GCC; use the --enable-languages --- 11508,11518 ---- be declared in a single PROCEDURE statement; implied-shape arrays are supported for named constants (PARAMETER). The transformational, three argument versions of BESSEL_JN and ! BESSEL_YN were added - the elemental, two-argument version had been added in GCC 4.4; note that the transformational functions use a recurrence algorithm. ! [22]Go Support for the Go programming language has been added to GCC. It is not enabled by default when you build GCC; use the --enable-languages *************** New Languages and Language specific impr *** 11165,11171 **** Go is currently known to work on GNU/Linux and RTEMS. Solaris support is in progress. It may or may not work on other platforms. ! Objective-C and Objective-C++ * The -fobjc-exceptions flag is now required to enable Objective-C exception and synchronization syntax (introduced by the keywords --- 11522,11528 ---- Go is currently known to work on GNU/Linux and RTEMS. Solaris support is in progress. It may or may not work on other platforms. ! [23]Objective-C and Objective-C++ * The -fobjc-exceptions flag is now required to enable Objective-C exception and synchronization syntax (introduced by the keywords *************** New Languages and Language specific impr *** 11262,11270 **** * Runtime support for Objective-C 2.0 fast enumeration has been added. ! New Targets and Target Specific Improvements ! ARM * GCC now supports the Cortex-M4 processor implementing the v7-em version of the architecture using the option -mcpu=cortex-m4. --- 11619,11627 ---- * Runtime support for Objective-C 2.0 fast enumeration has been added. ! [24]New Targets and Target Specific Improvements ! [25]ARM * GCC now supports the Cortex-M4 processor implementing the v7-em version of the architecture using the option -mcpu=cortex-m4. *************** New Targets and Target Specific Improvem *** 11328,11334 **** * Support for AMD's BMI (Bit Manipulation) built-in functions and code generation is available via -mbmi. ! MicroBlaze * Support has been added for the Xilinx MicroBlaze softcore processor (microblaze-elf) embedded target. This configurable processor is --- 11685,11691 ---- * Support for AMD's BMI (Bit Manipulation) built-in functions and code generation is available via -mbmi. ! [26]MicroBlaze * Support has been added for the Xilinx MicroBlaze softcore processor (microblaze-elf) embedded target. This configurable processor is *************** New Targets and Target Specific Improvem *** 11339,11345 **** * GCC now supports the Loongson 3A processor. Its canonical -march= and -mtune= name is loongson3a. ! MN10300 / AM33 * The inline assembly register constraint "A" has been renamed "c". This constraint is used to select a floating-point register that --- 11696,11702 ---- * GCC now supports the Loongson 3A processor. Its canonical -march= and -mtune= name is loongson3a. ! [27]MN10300 / AM33 * The inline assembly register constraint "A" has been renamed "c". This constraint is used to select a floating-point register that *************** New Targets and Target Specific Improvem *** 11435,11443 **** documented workaround for the single erratum of the Atmel AT697F processor. ! Operating Systems ! Android * GCC now supports the Bionic C library and provides a convenient way of building native libraries and applications for the Android --- 11792,11800 ---- documented workaround for the single erratum of the Atmel AT697F processor. ! [28]Operating Systems ! [29]Android * GCC now supports the Bionic C library and provides a convenient way of building native libraries and applications for the Android *************** Operating Systems *** 11445,11451 **** options for details on building native code. At the moment, Android support is enabled only for ARM. ! Darwin/Mac OS X * General + Initial support for CFString types has been added. --- 11802,11808 ---- options for details on building native code. At the moment, Android support is enabled only for ARM. ! [30]Darwin/Mac OS X * General + Initial support for CFString types has been added. *************** Operating Systems *** 11490,11496 **** + The -fsection-anchors option is now available although, presently, not heavily tested. ! Solaris 2 New Features --- 11847,11853 ---- + The -fsection-anchors option is now available although, presently, not heavily tested. ! [31]Solaris 2 New Features *************** Operating Systems *** 11515,11521 **** use the new -mvect8-ret-in-mem option to remain compatible with previous versions of GCC and Sun Studio. ! Windows x86/x86_64 * Initial support for decimal floating point. * Support for the __thiscall calling-convention. --- 11872,11878 ---- use the new -mvect8-ret-in-mem option to remain compatible with previous versions of GCC and Sun Studio. ! [32]Windows x86/x86_64 * Initial support for decimal floating point. * Support for the __thiscall calling-convention. *************** Changes for GCC Developers *** 11555,11602 **** * The old GC allocation interface of ggc_alloc and friends was replaced with a type-safe alternative. ! GCC 4.6.1 ! This is the [19]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.6.1 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! GCC 4.6.2 ! This is the [20]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.6.2 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! GCC 4.6.3 ! This is the [21]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.6.3 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! GCC 4.6.4 ! This is the [22]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.6.4 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). For questions related to the use of GCC, please consult these web ! pages and the [23]GCC manuals. If that fails, the ! [24]gcc-help@gcc.gnu.org mailing list might help. Comments on these web pages and the development of GCC are welcome on our developer ! list at [25]gcc@gcc.gnu.org. All of [26]our lists have public archives. ! Copyright (C) [27]Free Software Foundation, Inc. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! These pages are [28]maintained by the GCC team. Last modified ! 2024-05-17. References --- 11912,11959 ---- * The old GC allocation interface of ggc_alloc and friends was replaced with a type-safe alternative. ! [33]GCC 4.6.1 ! This is the [34]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.6.1 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! [35]GCC 4.6.2 ! This is the [36]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.6.2 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! [37]GCC 4.6.3 ! This is the [38]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.6.3 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! [39]GCC 4.6.4 ! This is the [40]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.6.4 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). For questions related to the use of GCC, please consult these web ! pages and the [41]GCC manuals. If that fails, the ! [42]gcc-help@gcc.gnu.org mailing list might help. Comments on these web pages and the development of GCC are welcome on our developer ! list at [43]gcc@gcc.gnu.org. All of [44]our lists have public archives. ! Copyright (C) [45]Free Software Foundation, Inc. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! These pages are [46]maintained by the GCC team. Last modified ! 2025-01-31. References *************** References *** 11606,11635 **** 4. https://gcc.gnu.org/gcc-4.6/porting_to.html 5. https://gcc.gnu.org/projects/lto/whopr.pdf 6. https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#Warning-Options ! 7. https://gcc.gnu.org/gcc-4.6/cxx0x_status.html ! 8. https://gcc.gnu.org/PR43145 ! 9. https://gcc.gnu.org/PR43680 ! 10. https://gcc.gnu.org/PR33558 ! 11. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#253 ! 12. https://gcc.gnu.org/onlinedocs/gcc-4.6.4/libstdc++/manual/manual/status.html#status.iso.200x ! 13. https://gcc.gnu.org/onlinedocs/libstdc++/manual/debug_mode.html ! 14. https://gcc.gnu.org/onlinedocs/libstdc++/manual/debug.html#debug.races ! 15. https://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html ! 16. https://gcc.gnu.org/wiki/OOP ! 17. https://gcc.gnu.org/wiki/Coarray ! 18. https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfcoarray_007d-233 ! 19. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.6.1 ! 20. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.6.2 ! 21. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.6.3 ! 22. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.6.4 ! 23. https://gcc.gnu.org/onlinedocs/ ! 24. mailto:gcc-help@gcc.gnu.org ! 25. mailto:gcc@gcc.gnu.org ! 26. https://gcc.gnu.org/lists.html ! 27. https://www.fsf.org/ ! 28. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-4.5/index.html GCC 4.5 Release Series (This release series is no longer supported.) --- 11963,12011 ---- 4. https://gcc.gnu.org/gcc-4.6/porting_to.html 5. https://gcc.gnu.org/projects/lto/whopr.pdf 6. https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#Warning-Options ! 7. https://gcc.gnu.org/gcc-4.6/changes.html#c ! 8. https://gcc.gnu.org/gcc-4.6/changes.html#cplusplus ! 9. https://gcc.gnu.org/gcc-4.6/cxx0x_status.html ! 10. https://gcc.gnu.org/PR43145 ! 11. https://gcc.gnu.org/PR43680 ! 12. https://gcc.gnu.org/PR33558 ! 13. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#253 ! 14. https://gcc.gnu.org/onlinedocs/gcc-4.6.4/libstdc++/manual/manual/status.html#status.iso.200x ! 15. https://gcc.gnu.org/onlinedocs/libstdc++/manual/debug_mode.html ! 16. https://gcc.gnu.org/onlinedocs/libstdc++/manual/debug.html#debug.races ! 17. https://gcc.gnu.org/gcc-4.6/changes.html#fortran ! 18. https://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html ! 19. https://gcc.gnu.org/wiki/OOP ! 20. https://gcc.gnu.org/wiki/Coarray ! 21. https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfcoarray_007d-233 ! 22. https://gcc.gnu.org/gcc-4.6/changes.html#go ! 23. https://gcc.gnu.org/gcc-4.6/changes.html#objective-c ! 24. https://gcc.gnu.org/gcc-4.6/changes.html#targets ! 25. https://gcc.gnu.org/gcc-4.6/changes.html#arm ! 26. https://gcc.gnu.org/gcc-4.6/changes.html#microblaze ! 27. https://gcc.gnu.org/gcc-4.6/changes.html#mn10300 ! 28. https://gcc.gnu.org/gcc-4.6/changes.html#os ! 29. https://gcc.gnu.org/gcc-4.6/changes.html#android ! 30. https://gcc.gnu.org/gcc-4.6/changes.html#darwin ! 31. https://gcc.gnu.org/gcc-4.6/changes.html#solaris ! 32. https://gcc.gnu.org/gcc-4.6/changes.html#windows ! 33. https://gcc.gnu.org/gcc-4.6/changes.html#GCC4.6.1 ! 34. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.6.1 ! 35. https://gcc.gnu.org/gcc-4.6/changes.html#GCC4.6.2 ! 36. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.6.2 ! 37. https://gcc.gnu.org/gcc-4.6/changes.html#GCC4.6.3 ! 38. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.6.3 ! 39. https://gcc.gnu.org/gcc-4.6/changes.html#GCC4.6.4 ! 40. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.6.4 ! 41. https://gcc.gnu.org/onlinedocs/ ! 42. mailto:gcc-help@gcc.gnu.org ! 43. mailto:gcc@gcc.gnu.org ! 44. https://gcc.gnu.org/lists.html ! 45. https://www.fsf.org/ ! 46. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-4.5/index.html + GCC 4.5 Release Series (This release series is no longer supported.) *************** References *** 11716,11721 **** --- 12092,12098 ---- 18. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-4.5/changes.html + GCC 4.5 Release Series Changes, New Features, and Fixes *************** New Languages and Language specific impr *** 11919,11927 **** supported. This is currently only implemented for the SPU processor. ! C++ ! * Improved [11]experimental support for the upcoming C++0x ISO C++ standard, including support for raw strings, lambda expressions and explicit type conversion operators. * When printing the name of a class template specialization, G++ will --- 12296,12304 ---- supported. This is currently only implemented for the SPU processor. ! [11]C++ ! * Improved [12]experimental support for the upcoming C++0x ISO C++ standard, including support for raw strings, lambda expressions and explicit type conversion operators. * When printing the name of a class template specialization, G++ will *************** New Languages and Language specific impr *** 11949,11961 **** * In C++0x mode local and anonymous classes are now allowed as template arguments, and in declarations of variables and functions with linkage, so long as any such declaration that is used is also ! defined ([12]DR 757). * Labels may now have attributes, as has been permitted for a while in C. This is only permitted when the label definition and the ! attribute specifier is followed by a semicolon—i.e., the label applies to an empty statement. The only useful attribute for a label is unused. ! * G++ now implements [13]DR 176. Previously G++ did not support using the injected-class-name of a template base class as a type name, and lookup of the name found the declaration of the template in the enclosing scope. Now lookup of the name finds the --- 12326,12338 ---- * In C++0x mode local and anonymous classes are now allowed as template arguments, and in declarations of variables and functions with linkage, so long as any such declaration that is used is also ! defined ([13]DR 757). * Labels may now have attributes, as has been permitted for a while in C. This is only permitted when the label definition and the ! attribute specifier is followed by a semicolon--i.e., the label applies to an empty statement. The only useful attribute for a label is unused. ! * G++ now implements [14]DR 176. Previously G++ did not support using the injected-class-name of a template base class as a type name, and lookup of the name found the declaration of the template in the enclosing scope. Now lookup of the name finds the *************** New Languages and Language specific impr *** 11993,11999 **** + Existing facilities now exploit explicit operators and the newly implemented core C++0x features. + The header has been renamed to . ! * An experimental [14]profile mode has been added. This is an implementation of many C++ standard library constructs with an additional analysis layer that gives performance improvement advice based on recognition of suboptimal usage patterns. For example, --- 12370,12376 ---- + Existing facilities now exploit explicit operators and the newly implemented core C++0x features. + The header has been renamed to . ! * An experimental [15]profile mode has been added. This is an implementation of many C++ standard library constructs with an additional analysis layer that gives performance improvement advice based on recognition of suboptimal usage patterns. For example, *************** vector-size: improvement = 3: call stack *** 12015,12021 **** These constructs can be substituted for the normal libstdc++ constructs on a piecemeal basis, or all existing components can be transformed via the -D_GLIBCXX_PROFILE macro. ! * [15]Support for decimal floating-point arithmetic (aka ISO C++ TR 24733) has been added. This support is in header file , uses namespace std::decimal, and includes classes decimal32, decimal64, and decimal128. --- 12392,12398 ---- These constructs can be substituted for the normal libstdc++ constructs on a piecemeal basis, or all existing components can be transformed via the -D_GLIBCXX_PROFILE macro. ! * [16]Support for decimal floating-point arithmetic (aka ISO C++ TR 24733) has been added. This support is in header file , uses namespace std::decimal, and includes classes decimal32, decimal64, and decimal128. *************** vector-size: improvement = 3: call stack *** 12025,12044 **** components that simplify the internal representation and present a more intuitive view of components when used with appropriately-advanced versions of GDB. For more information, ! please consult the more [16]detailed description. * The default behavior for comparing typeinfo names has changed, so in , __GXX_MERGED_TYPEINFO_NAMES now defaults to zero. * The new -static-libstdc++ option directs g++ to link the C++ library statically, even if the default would normally be to link it dynamically. ! Fortran ! * The COMMON default padding has been changed – instead of adding the padding before a variable it is now added afterwards, which increases the compatibility with other vendors and helps to obtain the correct output in some cases. Cf. also the -falign-commons ! option ([17]added in 4.4). * The -finit-real= option now also supports the value snan for signaling not-a-number; to be effective, one additionally needs to enable trapping (e.g. via -ffpe-trap=). Note: Compile-time --- 12402,12421 ---- components that simplify the internal representation and present a more intuitive view of components when used with appropriately-advanced versions of GDB. For more information, ! please consult the more [17]detailed description. * The default behavior for comparing typeinfo names has changed, so in , __GXX_MERGED_TYPEINFO_NAMES now defaults to zero. * The new -static-libstdc++ option directs g++ to link the C++ library statically, even if the default would normally be to link it dynamically. ! [18]Fortran ! * The COMMON default padding has been changed - instead of adding the padding before a variable it is now added afterwards, which increases the compatibility with other vendors and helps to obtain the correct output in some cases. Cf. also the -falign-commons ! option ([19]added in 4.4). * The -finit-real= option now also supports the value snan for signaling not-a-number; to be effective, one additionally needs to enable trapping (e.g. via -ffpe-trap=). Note: Compile-time *************** vector-size: improvement = 3: call stack *** 12056,12062 **** * The run-time checking -fcheck=bounds now warns about invalid string lengths of character dummy arguments. Additionally, more compile-time checks have been added. ! * The new option [18]-fno-protect-parens has been added; if set, the compiler may reorder REAL and COMPLEX expressions without regard to parentheses. * GNU Fortran no longer links against libgfortranbegin. As before, --- 12433,12439 ---- * The run-time checking -fcheck=bounds now warns about invalid string lengths of character dummy arguments. Additionally, more compile-time checks have been added. ! * The new option [20]-fno-protect-parens has been added; if set, the compiler may reorder REAL and COMPLEX expressions without regard to parentheses. * GNU Fortran no longer links against libgfortranbegin. As before, *************** vector-size: improvement = 3: call stack *** 12064,12070 **** which is invoked by the main function. However, main is now generated and put in the same object file as MAIN__. For the time being, libgfortranbegin still exists for backward compatibility. ! For details see the new [19]Mixed-Language Programming chapter in the manual. * The I/O library was restructured for performance and cleaner code. * Array assignments and WHERE are now run in parallel when OpenMP's --- 12441,12447 ---- which is invoked by the main function. However, main is now generated and put in the same object file as MAIN__. For the time being, libgfortranbegin still exists for backward compatibility. ! For details see the new [21]Mixed-Language Programming chapter in the manual. * The I/O library was restructured for performance and cleaner code. * Array assignments and WHERE are now run in parallel when OpenMP's *************** vector-size: improvement = 3: call stack *** 12076,12082 **** * More Fortran 2003 and Fortran 2008 mathematical functions can now be used as initialization expressions. * Some extended attributes such as STDCALL are now supported via the ! [20]GCC$ compiler directive. * For Fortran 77 compatibility: If -fno-sign-zero is used, the SIGN intrinsic behaves now as if zero were always positive. * For legacy compatibiliy: On Cygwin and MinGW, the special files --- 12453,12459 ---- * More Fortran 2003 and Fortran 2008 mathematical functions can now be used as initialization expressions. * Some extended attributes such as STDCALL are now supported via the ! [22]GCC$ compiler directive. * For Fortran 77 compatibility: If -fno-sign-zero is used, the SIGN intrinsic behaves now as if zero were always positive. * For legacy compatibiliy: On Cygwin and MinGW, the special files *************** vector-size: improvement = 3: call stack *** 12102,12108 **** procedure pointer with PASS attribute now have to use CLASS in line with the Fortran 2003 standard; the workaround to use TYPE is no longer supported. ! + [21]Experimental, incomplete support for polymorphism, including CLASS, SELECT TYPE and dynamic dispatch of type-bound procedure calls. Some features do not work yet such as unlimited polymorphism (CLASS(*)). --- 12479,12485 ---- procedure pointer with PASS attribute now have to use CLASS in line with the Fortran 2003 standard; the workaround to use TYPE is no longer supported. ! + [23]Experimental, incomplete support for polymorphism, including CLASS, SELECT TYPE and dynamic dispatch of type-bound procedure calls. Some features do not work yet such as unlimited polymorphism (CLASS(*)). *************** vector-size: improvement = 3: call stack *** 12119,12125 **** ATAN(Y,X) is now an alias for ATAN2(Y,X). + The BLOCK construct has been implemented. ! New Targets and Target Specific Improvements AIX --- 12496,12502 ---- ATAN(Y,X) is now an alias for ATAN2(Y,X). + The BLOCK construct has been implemented. ! [24]New Targets and Target Specific Improvements AIX *************** New Targets and Target Specific Improvem *** 12150,12156 **** + ATmega16U2 + ATmega32U2 ! IA-32/x86-64 * GCC now will set the default for -march= based on the configure target. --- 12527,12533 ---- + ATmega16U2 + ATmega32U2 ! [25]IA-32/x86-64 * GCC now will set the default for -march= based on the configure target. *************** New Targets and Target Specific Improvem *** 12184,12190 **** * GCC now supports thread-local storage (TLS) on M68K and ColdFire processors. ! MeP Support has been added for the Toshiba Media embedded Processor (MeP, or mep-elf) embedded target. --- 12561,12567 ---- * GCC now supports thread-local storage (TLS) on M68K and ColdFire processors. ! [26]MeP Support has been added for the Toshiba Media embedded Processor (MeP, or mep-elf) embedded target. *************** New Targets and Target Specific Improvem *** 12222,12228 **** use_debug_exception_return. See the documentation for more details about these attributes. ! RS/6000 (POWER/PowerPC) * GCC now supports the Power ISA 2.06, which includes the VSX instructions that add vector 64-bit floating point support, new --- 12599,12605 ---- use_debug_exception_return. See the documentation for more details about these attributes. ! [27]RS/6000 (POWER/PowerPC) * GCC now supports the Power ISA 2.06, which includes the VSX instructions that add vector 64-bit floating point support, new *************** New Targets and Target Specific Improvem *** 12247,12259 **** adhere to the ABI for 128-bit vectors with 64-bit integer base types (PR 48857). This is also fixed in the GCC 4.6.1 release. ! RX Support has been added for the Renesas RX Processor (rx-elf) target. ! Operating Systems ! Windows (Cygwin and MinGW) * GCC now installs all the major language runtime libraries as DLLs when configured with the --enable-shared option. --- 12624,12636 ---- adhere to the ABI for 128-bit vectors with 64-bit integer base types (PR 48857). This is also fixed in the GCC 4.6.1 release. ! [28]RX Support has been added for the Renesas RX Processor (rx-elf) target. ! [29]Operating Systems ! [30]Windows (Cygwin and MinGW) * GCC now installs all the major language runtime libraries as DLLs when configured with the --enable-shared option. *************** Other significant improvements *** 12302,12317 **** infodir info documentation [DATAROOTDIR/info] mandir man documentation [DATAROOTDIR/man] ! GCC 4.5.1 ! This is the [22]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.5.1 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). All languages ! * GCC's new link-time optimizer ([23]-flto) now also works on a few non-ELF targets: + Cygwin (*-cygwin*) + MinGW (*-mingw*) --- 12679,12694 ---- infodir info documentation [DATAROOTDIR/info] mandir man documentation [DATAROOTDIR/man] ! [31]GCC 4.5.1 ! This is the [32]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.5.1 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). All languages ! * GCC's new link-time optimizer ([33]-flto) now also works on a few non-ELF targets: + Cygwin (*-cygwin*) + MinGW (*-mingw*) *************** GCC 4.5.1 *** 12319,12334 **** LTO is not enabled by default for these targets. To enable LTO, you should configure with the --enable-lto option. ! GCC 4.5.2 ! This is the [24]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.5.2 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! GCC 4.5.3 ! This is the [25]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.5.3 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). --- 12696,12711 ---- LTO is not enabled by default for these targets. To enable LTO, you should configure with the --enable-lto option. ! [34]GCC 4.5.2 ! This is the [35]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.5.2 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! [36]GCC 4.5.3 ! This is the [37]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.5.3 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). *************** GCC 4.5.3 *** 12343,12369 **** vec_vsx_ld and vec_vsx_st which always generates the VSX memory instructions. ! GCC 4.5.4 ! This is the [26]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.5.4 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). For questions related to the use of GCC, please consult these web ! pages and the [27]GCC manuals. If that fails, the ! [28]gcc-help@gcc.gnu.org mailing list might help. Comments on these web pages and the development of GCC are welcome on our developer ! list at [29]gcc@gcc.gnu.org. All of [30]our lists have public archives. ! Copyright (C) [31]Free Software Foundation, Inc. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! These pages are [32]maintained by the GCC team. Last modified ! 2023-07-30. References --- 12720,12746 ---- vec_vsx_ld and vec_vsx_st which always generates the VSX memory instructions. ! [38]GCC 4.5.4 ! This is the [39]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.5.4 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). For questions related to the use of GCC, please consult these web ! pages and the [40]GCC manuals. If that fails, the ! [41]gcc-help@gcc.gnu.org mailing list might help. Comments on these web pages and the development of GCC are welcome on our developer ! list at [42]gcc@gcc.gnu.org. All of [43]our lists have public archives. ! Copyright (C) [44]Free Software Foundation, Inc. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! These pages are [45]maintained by the GCC team. Last modified ! 2025-01-31. References *************** References *** 12377,12406 **** 8. https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-fwhopr-802 9. https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-fwhole-program-800 10. https://gcc.gnu.org/onlinedocs/gcc/Restricted-Pointers.html ! 11. https://gcc.gnu.org/gcc-4.5/cxx0x_status.html ! 12. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#757 ! 13. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#176 ! 14. https://gcc.gnu.org/onlinedocs/libstdc++/manual/profile_mode.html ! 15. https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.tr24733 ! 16. https://sourceware.org/gdb/wiki/STLSupport ! 17. https://gcc.gnu.org/gcc-4.4/changes.html ! 18. https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html ! 19. https://gcc.gnu.org/onlinedocs/gfortran/Mixed-Language-Programming.html ! 20. https://gcc.gnu.org/onlinedocs/gfortran/GNU-Fortran-Compiler-Directives.html ! 21. https://gcc.gnu.org/wiki/OOP ! 22. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.1 ! 23. https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-flto-801 ! 24. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.2 ! 25. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.3 ! 26. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.4 ! 27. https://gcc.gnu.org/onlinedocs/ ! 28. mailto:gcc-help@gcc.gnu.org ! 29. mailto:gcc@gcc.gnu.org ! 30. https://gcc.gnu.org/lists.html ! 31. https://www.fsf.org/ ! 32. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-4.4/index.html GCC 4.4 Release Series This release series is no longer maintained. --- 12754,12797 ---- 8. https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-fwhopr-802 9. https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-fwhole-program-800 10. https://gcc.gnu.org/onlinedocs/gcc/Restricted-Pointers.html ! 11. https://gcc.gnu.org/gcc-4.5/changes.html#cplusplus ! 12. https://gcc.gnu.org/gcc-4.5/cxx0x_status.html ! 13. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#757 ! 14. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#176 ! 15. https://gcc.gnu.org/onlinedocs/libstdc++/manual/profile_mode.html ! 16. https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.tr24733 ! 17. https://sourceware.org/gdb/wiki/STLSupport ! 18. https://gcc.gnu.org/gcc-4.5/changes.html#Fortran ! 19. https://gcc.gnu.org/gcc-4.4/changes.html ! 20. https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html ! 21. https://gcc.gnu.org/onlinedocs/gfortran/Mixed-Language-Programming.html ! 22. https://gcc.gnu.org/onlinedocs/gfortran/GNU-Fortran-Compiler-Directives.html ! 23. https://gcc.gnu.org/wiki/OOP ! 24. https://gcc.gnu.org/gcc-4.5/changes.html#targets ! 25. https://gcc.gnu.org/gcc-4.5/changes.html#x86 ! 26. https://gcc.gnu.org/gcc-4.5/changes.html#mep ! 27. https://gcc.gnu.org/gcc-4.5/changes.html#rs6000 ! 28. https://gcc.gnu.org/gcc-4.5/changes.html#rx ! 29. https://gcc.gnu.org/gcc-4.5/changes.html#os ! 30. https://gcc.gnu.org/gcc-4.5/changes.html#windows ! 31. https://gcc.gnu.org/gcc-4.5/changes.html#GCC4.5.1 ! 32. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.1 ! 33. https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-flto-801 ! 34. https://gcc.gnu.org/gcc-4.5/changes.html#GCC4.5.2 ! 35. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.2 ! 36. https://gcc.gnu.org/gcc-4.5/changes.html#GCC4.5.3 ! 37. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.3 ! 38. https://gcc.gnu.org/gcc-4.5/changes.html#GCC4.5.4 ! 39. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.5.4 ! 40. https://gcc.gnu.org/onlinedocs/ ! 41. mailto:gcc-help@gcc.gnu.org ! 42. mailto:gcc@gcc.gnu.org ! 43. https://gcc.gnu.org/lists.html ! 44. https://www.fsf.org/ ! 45. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-4.4/index.html + GCC 4.4 Release Series This release series is no longer maintained. *************** References *** 12499,12504 **** --- 12890,12896 ---- 21. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-4.4/changes.html + GCC 4.4 Release Series Changes, New Features, and Fixes *************** New Languages and Language specific impr *** 12845,12851 **** * The Ada runtime now supports multilibs on many platforms including x86_64, SPARC and PowerPC. Their build is enabled by default. ! New Targets and Target Specific Improvements ARM --- 13237,13243 ---- * The Ada runtime now supports multilibs on many platforms including x86_64, SPARC and PowerPC. Their build is enabled by default. ! [11]New Targets and Target Specific Improvements ARM *************** New Targets and Target Specific Improvem *** 13001,13007 **** canonical -march= and -mtune= names for these processors are loongson2e and loongson2f. ! picochip Picochip is a 16-bit processor. A typical picoChip contains over 250 small cores, each with small amounts of memory. There are three --- 13393,13399 ---- canonical -march= and -mtune= names for these processors are loongson2e and loongson2f. ! [12]picochip Picochip is a 16-bit processor. A typical picoChip contains over 250 small cores, each with small amounts of memory. There are three *************** Documentation improvements *** 13039,13107 **** Other significant improvements ! GCC 4.4.1 ! This is the [11]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.4.1 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! GCC 4.4.2 ! This is the [12]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.4.2 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! GCC 4.4.3 ! This is the [13]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.4.3 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! GCC 4.4.4 ! This is the [14]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.4.4 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! GCC 4.4.5 ! This is the [15]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.4.5 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! GCC 4.4.6 ! This is the [16]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.4.6 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! GCC 4.4.7 ! This is the [17]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.4.7 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). For questions related to the use of GCC, please consult these web ! pages and the [18]GCC manuals. If that fails, the ! [19]gcc-help@gcc.gnu.org mailing list might help. Comments on these web pages and the development of GCC are welcome on our developer ! list at [20]gcc@gcc.gnu.org. All of [21]our lists have public archives. ! Copyright (C) [22]Free Software Foundation, Inc. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! These pages are [23]maintained by the GCC team. Last modified ! 2022-11-01. References --- 13431,13499 ---- Other significant improvements ! [13]GCC 4.4.1 ! This is the [14]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.4.1 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! [15]GCC 4.4.2 ! This is the [16]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.4.2 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! [17]GCC 4.4.3 ! This is the [18]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.4.3 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! [19]GCC 4.4.4 ! This is the [20]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.4.4 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! [21]GCC 4.4.5 ! This is the [22]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.4.5 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! [23]GCC 4.4.6 ! This is the [24]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.4.6 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! [25]GCC 4.4.7 ! This is the [26]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.4.7 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). For questions related to the use of GCC, please consult these web ! pages and the [27]GCC manuals. If that fails, the ! [28]gcc-help@gcc.gnu.org mailing list might help. Comments on these web pages and the development of GCC are welcome on our developer ! list at [29]gcc@gcc.gnu.org. All of [30]our lists have public archives. ! Copyright (C) [31]Free Software Foundation, Inc. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! These pages are [32]maintained by the GCC team. Last modified ! 2025-01-31. References *************** References *** 13115,13135 **** 8. https://gcc.gnu.org/onlinedocs/gfortran/Error-and-Warning-Options.html#index-g_t_0040code_007bWarray-temporaries_007d-125 9. https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfcheck-array-temporaries_007d-221 10. https://gcc.gnu.org/onlinedocs/gfortran/Fortran-Dialect-Options.html#index-g_t_0040code_007bbackslash_007d-34 ! 11. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.1 ! 12. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.2 ! 13. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.3 ! 14. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.4 ! 15. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.5 ! 16. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.6 ! 17. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.7 ! 18. https://gcc.gnu.org/onlinedocs/ ! 19. mailto:gcc-help@gcc.gnu.org ! 20. mailto:gcc@gcc.gnu.org ! 21. https://gcc.gnu.org/lists.html ! 22. https://www.fsf.org/ ! 23. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-4.3/index.html GCC 4.3 Release Series (This release series is no longer supported.) --- 13507,13537 ---- 8. https://gcc.gnu.org/onlinedocs/gfortran/Error-and-Warning-Options.html#index-g_t_0040code_007bWarray-temporaries_007d-125 9. https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html#index-g_t_0040code_007bfcheck-array-temporaries_007d-221 10. https://gcc.gnu.org/onlinedocs/gfortran/Fortran-Dialect-Options.html#index-g_t_0040code_007bbackslash_007d-34 ! 11. https://gcc.gnu.org/gcc-4.4/changes.html#targets ! 12. https://gcc.gnu.org/gcc-4.4/changes.html#picochip ! 13. https://gcc.gnu.org/gcc-4.4/changes.html#GCC4.4.1 ! 14. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.1 ! 15. https://gcc.gnu.org/gcc-4.4/changes.html#GCC4.4.2 ! 16. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.2 ! 17. https://gcc.gnu.org/gcc-4.4/changes.html#GCC4.4.3 ! 18. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.3 ! 19. https://gcc.gnu.org/gcc-4.4/changes.html#GCC4.4.4 ! 20. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.4 ! 21. https://gcc.gnu.org/gcc-4.4/changes.html#GCC4.4.5 ! 22. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.5 ! 23. https://gcc.gnu.org/gcc-4.4/changes.html#GCC4.4.6 ! 24. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.6 ! 25. https://gcc.gnu.org/gcc-4.4/changes.html#GCC4.4.7 ! 26. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.4.7 ! 27. https://gcc.gnu.org/onlinedocs/ ! 28. mailto:gcc-help@gcc.gnu.org ! 29. mailto:gcc@gcc.gnu.org ! 30. https://gcc.gnu.org/lists.html ! 31. https://www.fsf.org/ ! 32. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-4.3/index.html + GCC 4.3 Release Series (This release series is no longer supported.) *************** References *** 13224,13229 **** --- 13626,13632 ---- 20. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-4.3/changes.html + GCC 4.3 Release Series Changes, New Features, and Fixes *************** New Languages and Language specific impr *** 13576,13582 **** packagers no longer have to update libgcj when a time zone change is published. ! New Targets and Target Specific Improvements IA-32/x86-64 --- 13979,13985 ---- packagers no longer have to update libgcj when a time zone change is published. ! [18]New Targets and Target Specific Improvements IA-32/x86-64 *************** New Targets and Target Specific Improvem *** 13629,13635 **** * Compiler and Library support for Thumb-2 and the ARMv7 architecture has been added. ! CRIS New features --- 14032,14038 ---- * Compiler and Library support for Thumb-2 and the ARMv7 architecture has been added. ! [19]CRIS New features *************** New Targets and Target Specific Improvem *** 13653,13659 **** * __builtin_bswap32 is now implemented using the swapwb instruction, when available. ! m68k and ColdFire New features --- 14056,14062 ---- * __builtin_bswap32 is now implemented using the swapwb instruction, when available. ! [20]m68k and ColdFire New features *************** Documentation improvements *** 13898,13904 **** * Existing libstdc++ documentation has been edited and restructured into a single DocBook XML manual. The results can be viewed online ! [18]here. Other significant improvements --- 14301,14307 ---- * Existing libstdc++ documentation has been edited and restructured into a single DocBook XML manual. The results can be viewed online ! [21]here. Other significant improvements *************** Other significant improvements *** 13928,13936 **** distributor-specific string in manuals and --version output and to specify the URL for reporting bugs in their versions of GCC. ! GCC 4.3.1 ! This is the [19]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.3.1 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). --- 14331,14339 ---- distributor-specific string in manuals and --version output and to specify the URL for reporting bugs in their versions of GCC. ! [22]GCC 4.3.1 ! This is the [23]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.3.1 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). *************** Target Specific Changes *** 13954,14008 **** by default for 32-bit x86 targets by configuring GCC with the --enable-cld configure option. ! GCC 4.3.2 ! This is the [20]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.3.2 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! GCC 4.3.3 ! This is the [21]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.3.3 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! GCC 4.3.4 ! This is the [22]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.3.4 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! GCC 4.3.5 ! This is the [23]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.3.5 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! GCC 4.3.6 ! This is the [24]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.3.6 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). For questions related to the use of GCC, please consult these web ! pages and the [25]GCC manuals. If that fails, the ! [26]gcc-help@gcc.gnu.org mailing list might help. Comments on these web pages and the development of GCC are welcome on our developer ! list at [27]gcc@gcc.gnu.org. All of [28]our lists have public archives. ! Copyright (C) [29]Free Software Foundation, Inc. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! These pages are [30]maintained by the GCC team. Last modified ! 2022-10-26. References --- 14357,14411 ---- by default for 32-bit x86 targets by configuring GCC with the --enable-cld configure option. ! [24]GCC 4.3.2 ! This is the [25]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.3.2 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! [26]GCC 4.3.3 ! This is the [27]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.3.3 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! [28]GCC 4.3.4 ! This is the [29]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.3.4 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! [30]GCC 4.3.5 ! This is the [31]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.3.5 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! [32]GCC 4.3.6 ! This is the [33]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.3.6 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). For questions related to the use of GCC, please consult these web ! pages and the [34]GCC manuals. If that fails, the ! [35]gcc-help@gcc.gnu.org mailing list might help. Comments on these web pages and the development of GCC are welcome on our developer ! list at [36]gcc@gcc.gnu.org. All of [37]our lists have public archives. ! Copyright (C) [38]Free Software Foundation, Inc. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! These pages are [39]maintained by the GCC team. Last modified ! 2025-01-31. References *************** References *** 14023,14043 **** 15. https://gcc.gnu.org/onlinedocs/gcc-4.3.0/gfortran/LGAMMA.html 16. https://gcc.gnu.org/onlinedocs/gfortran/Fortran-Dialect-Options.html 17. https://gcc.gnu.org/onlinedocs/gfortran/BOZ-literal-constants.html ! 18. https://gcc.gnu.org/onlinedocs/libstdc++/ ! 19. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.1 ! 20. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.2 ! 21. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.3 ! 22. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.4 ! 23. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.5 ! 24. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.6 ! 25. https://gcc.gnu.org/onlinedocs/ ! 26. mailto:gcc-help@gcc.gnu.org ! 27. mailto:gcc@gcc.gnu.org ! 28. https://gcc.gnu.org/lists.html ! 29. https://www.fsf.org/ ! 30. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-4.2/index.html GCC 4.2 Release Series (This release series is no longer supported.) --- 14426,14456 ---- 15. https://gcc.gnu.org/onlinedocs/gcc-4.3.0/gfortran/LGAMMA.html 16. https://gcc.gnu.org/onlinedocs/gfortran/Fortran-Dialect-Options.html 17. https://gcc.gnu.org/onlinedocs/gfortran/BOZ-literal-constants.html ! 18. https://gcc.gnu.org/gcc-4.3/changes.html#targets ! 19. https://gcc.gnu.org/gcc-4.3/changes.html#cris ! 20. https://gcc.gnu.org/gcc-4.3/changes.html#m68k ! 21. https://gcc.gnu.org/onlinedocs/libstdc++/ ! 22. https://gcc.gnu.org/gcc-4.3/changes.html#GCC4.3.1 ! 23. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.1 ! 24. https://gcc.gnu.org/gcc-4.3/changes.html#GCC4.3.2 ! 25. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.2 ! 26. https://gcc.gnu.org/gcc-4.3/changes.html#GCC4.3.3 ! 27. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.3 ! 28. https://gcc.gnu.org/gcc-4.3/changes.html#GCC4.3.4 ! 29. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.4 ! 30. https://gcc.gnu.org/gcc-4.3/changes.html#GCC4.3.5 ! 31. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.5 ! 32. https://gcc.gnu.org/gcc-4.3/changes.html#GCC4.3.6 ! 33. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.3.6 ! 34. https://gcc.gnu.org/onlinedocs/ ! 35. mailto:gcc-help@gcc.gnu.org ! 36. mailto:gcc@gcc.gnu.org ! 37. https://gcc.gnu.org/lists.html ! 38. https://www.fsf.org/ ! 39. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-4.2/index.html + GCC 4.2 Release Series (This release series is no longer supported.) *************** References *** 14124,14129 **** --- 14537,14543 ---- 18. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-4.2/changes.html + GCC 4.2 Release Series Changes, New Features, and Fixes *************** New Languages and Language specific impr *** 14318,14324 **** script that is based on InfoZIP and provides the same functionality as fastjar. ! New Targets and Target Specific Improvements IA-32/x86-64 --- 14732,14738 ---- script that is based on InfoZIP and provides the same functionality as fastjar. ! [6]New Targets and Target Specific Improvements IA-32/x86-64 *************** New Targets and Target Specific Improvem *** 14367,14373 **** * Added Java language support (libffi and libjava) for 32-bit HP-UX 11 target. ! Obsolete Systems Documentation improvements --- 14781,14787 ---- * Added Java language support (libffi and libjava) for 32-bit HP-UX 11 target. ! [7]Obsolete Systems Documentation improvements *************** Other significant improvements *** 14417,14433 **** For questions related to the use of GCC, please consult these web ! pages and the [6]GCC manuals. If that fails, the ! [7]gcc-help@gcc.gnu.org mailing list might help. Comments on these web pages and the development of GCC are welcome on our developer ! list at [8]gcc@gcc.gnu.org. All of [9]our lists have public archives. ! Copyright (C) [10]Free Software Foundation, Inc. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! These pages are [11]maintained by the GCC team. Last modified ! 2022-10-26. References --- 14831,14848 ---- For questions related to the use of GCC, please consult these web ! pages and the [8]GCC manuals. If that fails, the ! [9]gcc-help@gcc.gnu.org mailing list might help. Comments on these web pages and the development of GCC are welcome on our developer ! list at [10]gcc@gcc.gnu.org. All of [11]our lists have public ! archives. ! Copyright (C) [12]Free Software Foundation, Inc. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! These pages are [13]maintained by the GCC team. Last modified ! 2025-01-31. References *************** References *** 14436,14449 **** 3. https://gcc.gnu.org/onlinedocs/libstdc++/ext/pb_ds/index.html 4. https://gcc.gnu.org/onlinedocs/gfortran/Runtime-Options.html 5. https://gcc.gnu.org/wiki/Statically_linking_libgcj ! 6. https://gcc.gnu.org/onlinedocs/ ! 7. mailto:gcc-help@gcc.gnu.org ! 8. mailto:gcc@gcc.gnu.org ! 9. https://gcc.gnu.org/lists.html ! 10. https://www.fsf.org/ ! 11. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-4.1/index.html GCC 4.1 Release Series (This release series is no longer supported.) --- 14851,14867 ---- 3. https://gcc.gnu.org/onlinedocs/libstdc++/ext/pb_ds/index.html 4. https://gcc.gnu.org/onlinedocs/gfortran/Runtime-Options.html 5. https://gcc.gnu.org/wiki/Statically_linking_libgcj ! 6. https://gcc.gnu.org/gcc-4.2/changes.html#targets ! 7. https://gcc.gnu.org/gcc-4.2/changes.html#obsolete_systems ! 8. https://gcc.gnu.org/onlinedocs/ ! 9. mailto:gcc-help@gcc.gnu.org ! 10. mailto:gcc@gcc.gnu.org ! 11. https://gcc.gnu.org/lists.html ! 12. https://www.fsf.org/ ! 13. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-4.1/index.html + GCC 4.1 Release Series (This release series is no longer supported.) *************** References *** 14522,14527 **** --- 14940,14946 ---- 16. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-4.1/changes.html + GCC 4.1 Release Series Changes, New Features, and Fixes *************** New Languages and Language specific impr *** 14653,14659 **** infrastructure of GCC. This should make doing cross builds of Ada a bit easier. ! C++ * ARM-style name-injection of friend declarations is no longer the default. For example: --- 15072,15078 ---- infrastructure of GCC. This should make doing cross builds of Ada a bit easier. ! [2]C++ * ARM-style name-injection of friend declarations is no longer the default. For example: *************** New Languages and Language specific impr *** 14908,14914 **** most of the work is currently being done around gcj/gij we want this framework to be as VM neutral as possible. Early design is described in: ! [2]https://gcc.gnu.org/ml/java/2005-05/msg00260.html o QT4 AWT peers, enable by giving configure --enable-qt-peer. Included, but not ready for production yet. They are explicitly disabled and not supported. But --- 15327,15333 ---- most of the work is currently being done around gcj/gij we want this framework to be as VM neutral as possible. Early design is described in: ! [3]https://gcc.gnu.org/ml/java/2005-05/msg00260.html o QT4 AWT peers, enable by giving configure --enable-qt-peer. Included, but not ready for production yet. They are explicitly disabled and not supported. But *************** New Languages and Language specific impr *** 14917,14925 **** explicitly enable them to try them out (and they will most likely contain bugs). o Documentation fixes all over the place. See ! [3]https://developer.classpath.org/doc/ ! New Targets and Target Specific Improvements IA-32/x86-64 --- 15336,15344 ---- explicitly enable them to try them out (and they will most likely contain bugs). o Documentation fixes all over the place. See ! [4]https://developer.classpath.org/doc/ ! [5]New Targets and Target Specific Improvements IA-32/x86-64 *************** New Targets and Target Specific Improvem *** 14986,14992 **** instructions implicitly truncate the shift count to six bits. * Back-end support for the following generic features has been implemented: ! + The full set of [4]built-in functions for atomic memory access. + The -fstack-protector feature. + The optimization pass avoiding unnecessary stores of incoming --- 15405,15411 ---- instructions implicitly truncate the shift count to six bits. * Back-end support for the following generic features has been implemented: ! + The full set of [6]built-in functions for atomic memory access. + The -fstack-protector feature. + The optimization pass avoiding unnecessary stores of incoming *************** New Targets and Target Specific Improvem *** 15004,15010 **** * Support has been added for this new architecture. ! Obsolete Systems Documentation improvements --- 15423,15429 ---- * Support has been added for this new architecture. ! [7]Obsolete Systems Documentation improvements *************** Other significant improvements *** 15020,15028 **** have far smaller overhead. This means that programs built using safe builtins should not experience any measurable slowdown. ! GCC 4.1.2 ! This is the [5]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.1.2 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). --- 15439,15447 ---- have far smaller overhead. This means that programs built using safe builtins should not experience any measurable slowdown. ! [8]GCC 4.1.2 ! This is the [9]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.1.2 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). *************** GCC 4.1.2 *** 15048,15080 **** For questions related to the use of GCC, please consult these web ! pages and the [6]GCC manuals. If that fails, the ! [7]gcc-help@gcc.gnu.org mailing list might help. Comments on these web pages and the development of GCC are welcome on our developer ! list at [8]gcc@gcc.gnu.org. All of [9]our lists have public archives. ! Copyright (C) [10]Free Software Foundation, Inc. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! These pages are [11]maintained by the GCC team. Last modified ! 2022-10-26. References 1. https://gcc.gnu.org/gcc-4.1/changes.html#4.1.2 ! 2. https://gcc.gnu.org/ml/java/2005-05/msg00260.html ! 3. https://developer.classpath.org/doc/ ! 4. https://gcc.gnu.org/onlinedocs/gcc-4.1.0/gcc/Atomic-Builtins.html ! 5. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.1.2 ! 6. https://gcc.gnu.org/onlinedocs/ ! 7. mailto:gcc-help@gcc.gnu.org ! 8. mailto:gcc@gcc.gnu.org ! 9. https://gcc.gnu.org/lists.html ! 10. https://www.fsf.org/ ! 11. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-4.0/index.html GCC 4.0 Release Series (This release series is no longer supported.) --- 15467,15505 ---- For questions related to the use of GCC, please consult these web ! pages and the [10]GCC manuals. If that fails, the ! [11]gcc-help@gcc.gnu.org mailing list might help. Comments on these web pages and the development of GCC are welcome on our developer ! list at [12]gcc@gcc.gnu.org. All of [13]our lists have public ! archives. ! Copyright (C) [14]Free Software Foundation, Inc. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! These pages are [15]maintained by the GCC team. Last modified ! 2025-01-31. References 1. https://gcc.gnu.org/gcc-4.1/changes.html#4.1.2 ! 2. https://gcc.gnu.org/gcc-4.1/changes.html#cplusplus ! 3. https://gcc.gnu.org/ml/java/2005-05/msg00260.html ! 4. https://developer.classpath.org/doc/ ! 5. https://gcc.gnu.org/gcc-4.1/changes.html#targets ! 6. https://gcc.gnu.org/onlinedocs/gcc-4.1.0/gcc/Atomic-Builtins.html ! 7. https://gcc.gnu.org/gcc-4.1/changes.html#obsolete_systems ! 8. https://gcc.gnu.org/gcc-4.1/changes.html#GCC4.1.2 ! 9. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.1.2 ! 10. https://gcc.gnu.org/onlinedocs/ ! 11. mailto:gcc-help@gcc.gnu.org ! 12. mailto:gcc@gcc.gnu.org ! 13. https://gcc.gnu.org/lists.html ! 14. https://www.fsf.org/ ! 15. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-4.0/index.html + GCC 4.0 Release Series (This release series is no longer supported.) *************** References *** 15161,15166 **** --- 15586,15592 ---- 18. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-4.0/changes.html + GCC 4.0 Release Series Changes, New Features, and Fixes *************** class N::A { *** 15432,15438 **** since the Ada front end is not currently activated by default. See the [10]Installing GCC for details. ! New Targets and Target Specific Improvements H8/300 --- 15858,15864 ---- since the Ada front end is not currently activated by default. See the [10]Installing GCC for details. ! [11]New Targets and Target Specific Improvements H8/300 *************** New Targets and Target Specific Improvem *** 15560,15566 **** (the ABI previously supported was that of some Unix systems, which NetWare never tried to support). ! Obsolete Systems Support for a number of older systems has been declared obsolete in GCC 4.0. Unless there is activity to revive them, the next release of GCC --- 15986,15992 ---- (the ABI previously supported was that of some Unix systems, which NetWare never tried to support). ! [12]Obsolete Systems Support for a number of older systems has been declared obsolete in GCC 4.0. Unless there is activity to revive them, the next release of GCC *************** Other significant improvements *** 15605,15636 **** solving problems many projects such as python were forced to use RTLD_LOCAL for (with its resulting issues for C++ correctness). You can find more information about using these options at ! [11]https://gcc.gnu.org/wiki/Visibility. __________________________________________________________________ ! GCC 4.0.1 ! This is the [12]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.0.1 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! GCC 4.0.2 ! This is the [13]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.0.2 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). Unfortunately, due to a release engineering failure, this release has a regression on Solaris that will affect some C++ programs. We suggest ! that Solaris users apply a [14]patch that corrects the problem. Users who do not wish to apply the patch should explicitly link C++ programs with the -pthreads option, even if they do not use threads. This problem has been corrected in the current 4.0 branch sources and will not be present in GCC 4.0.3. ! GCC 4.0.3 Starting with this release, the function getcontext is recognized by the compiler as having the same semantics as the setjmp function. In --- 16031,16062 ---- solving problems many projects such as python were forced to use RTLD_LOCAL for (with its resulting issues for C++ correctness). You can find more information about using these options at ! [13]https://gcc.gnu.org/wiki/Visibility. __________________________________________________________________ ! [14]GCC 4.0.1 ! This is the [15]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.0.1 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). ! [16]GCC 4.0.2 ! This is the [17]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.0.2 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). Unfortunately, due to a release engineering failure, this release has a regression on Solaris that will affect some C++ programs. We suggest ! that Solaris users apply a [18]patch that corrects the problem. Users who do not wish to apply the patch should explicitly link C++ programs with the -pthreads option, even if they do not use threads. This problem has been corrected in the current 4.0 branch sources and will not be present in GCC 4.0.3. ! [19]GCC 4.0.3 Starting with this release, the function getcontext is recognized by the compiler as having the same semantics as the setjmp function. In *************** GCC 4.0.3 *** 15638,15646 **** calling such a function and will emit a warning about the variables that may be clobbered after the second return from the function. ! GCC 4.0.4 ! This is the [15]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.0.4 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). --- 16064,16072 ---- calling such a function and will emit a warning about the variables that may be clobbered after the second return from the function. ! [20]GCC 4.0.4 ! This is the [21]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 4.0.4 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). *************** GCC 4.0.4 *** 15651,15668 **** For questions related to the use of GCC, please consult these web ! pages and the [16]GCC manuals. If that fails, the ! [17]gcc-help@gcc.gnu.org mailing list might help. Comments on these web pages and the development of GCC are welcome on our developer ! list at [18]gcc@gcc.gnu.org. All of [19]our lists have public archives. ! Copyright (C) [20]Free Software Foundation, Inc. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! These pages are [21]maintained by the GCC team. Last modified ! 2022-10-26. References --- 16077,16094 ---- For questions related to the use of GCC, please consult these web ! pages and the [22]GCC manuals. If that fails, the ! [23]gcc-help@gcc.gnu.org mailing list might help. Comments on these web pages and the development of GCC are welcome on our developer ! list at [24]gcc@gcc.gnu.org. All of [25]our lists have public archives. ! Copyright (C) [26]Free Software Foundation, Inc. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! These pages are [27]maintained by the GCC team. Last modified ! 2025-01-31. References *************** References *** 15676,15694 **** 8. https://itanium-cxx-abi.github.io/cxx-abi/ 9. https://gcc.gnu.org/fortran/ 10. https://gcc.gnu.org/install/ ! 11. https://gcc.gnu.org/wiki/Visibility ! 12. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.0.1 ! 13. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.0.2 ! 14. https://gcc.gnu.org/ml/gcc-cvs/2005-09/msg00984.html ! 15. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.0.4 ! 16. https://gcc.gnu.org/onlinedocs/ ! 17. mailto:gcc-help@gcc.gnu.org ! 18. mailto:gcc@gcc.gnu.org ! 19. https://gcc.gnu.org/lists.html ! 20. https://www.fsf.org/ ! 21. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-3.4/index.html GCC 3.4 Release Series (This release series is no longer supported.) --- 16102,16127 ---- 8. https://itanium-cxx-abi.github.io/cxx-abi/ 9. https://gcc.gnu.org/fortran/ 10. https://gcc.gnu.org/install/ ! 11. https://gcc.gnu.org/gcc-4.0/changes.html#targets ! 12. https://gcc.gnu.org/gcc-4.0/changes.html#obsolete_systems ! 13. https://gcc.gnu.org/wiki/Visibility ! 14. https://gcc.gnu.org/gcc-4.0/changes.html#GCC4.0.1 ! 15. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.0.1 ! 16. https://gcc.gnu.org/gcc-4.0/changes.html#GCC4.0.2 ! 17. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.0.2 ! 18. https://gcc.gnu.org/ml/gcc-cvs/2005-09/msg00984.html ! 19. https://gcc.gnu.org/gcc-4.0/changes.html#GCC4.0.3 ! 20. https://gcc.gnu.org/gcc-4.0/changes.html#GCC4.0.4 ! 21. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=4.0.4 ! 22. https://gcc.gnu.org/onlinedocs/ ! 23. mailto:gcc-help@gcc.gnu.org ! 24. mailto:gcc@gcc.gnu.org ! 25. https://gcc.gnu.org/lists.html ! 26. https://www.fsf.org/ ! 27. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-3.4/index.html + GCC 3.4 Release Series (This release series is no longer supported.) *************** References *** 15790,15795 **** --- 16223,16229 ---- 22. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-3.4/changes.html + GCC 3.4 Release Series Changes, New Features, and Fixes *************** New Languages and Language specific impr *** 16019,16025 **** and may be overridden with the -finput-charset command line option. In the future we will add support for inline encoding markers. ! C++ * G++ is now much closer to full conformance to the ISO/ANSI C++ standard. This means, among other things, that a lot of invalid --- 16453,16459 ---- and may be overridden with the -finput-charset command line option. In the future we will add support for inline encoding markers. ! [11]C++ * G++ is now much closer to full conformance to the ISO/ANSI C++ standard. This means, among other things, that a lot of invalid *************** New Languages and Language specific impr *** 16197,16203 **** declaration must be accessible at the point of that declaration. Previous versions of G++ used to be less strict about this and allowed friend declarations for private class members, for example. ! See the ISO C++ Standard Committee's [11]defect report #209 for details. * Declaration of member functions of class templates as friends are supported. For example, --- 16631,16637 ---- declaration must be accessible at the point of that declaration. Previous versions of G++ used to be less strict about this and allowed friend declarations for private class members, for example. ! See the ISO C++ Standard Committee's [12]defect report #209 for details. * Declaration of member functions of class templates as friends are supported. For example, *************** New Languages and Language specific impr *** 16273,16279 **** foo(a1); // OK, a1 is a lvalue } This might be surprising at first sight, especially since most ! popular compilers do not correctly implement this rule ([12]further details). * When forming a pointer to member or a pointer to member function, access checks for class visibility (public, protected, private) are --- 16707,16713 ---- foo(a1); // OK, a1 is a lvalue } This might be surprising at first sight, especially since most ! popular compilers do not correctly implement this rule ([13]further details). * When forming a pointer to member or a pointer to member function, access checks for class visibility (public, protected, private) are *************** New Languages and Language specific impr *** 16343,16349 **** synchronization (@synchronized) support. These are accessible via the -fobjc-exceptions switch; as of this writing, they may only be used in conjunction with -fnext-runtime on Mac OS X ! 10.3 and later. See [13]Options Controlling Objective-C Dialect for more information. + An overhaul of @encode logic. The C99 _Bool and C++ bool type may now be encoded as 'B'. In addition, the back-end/codegen --- 16777,16783 ---- synchronization (@synchronized) support. These are accessible via the -fobjc-exceptions switch; as of this writing, they may only be used in conjunction with -fnext-runtime on Mac OS X ! 10.3 and later. See [14]Options Controlling Objective-C Dialect for more information. + An overhaul of @encode logic. The C99 _Bool and C++ bool type may now be encoded as 'B'. In addition, the back-end/codegen *************** New Languages and Language specific impr *** 16353,16364 **** properly, and that correct diagnostics are issued. + Support for "Zero-Link" (-fzero-link) and "Fix-and-Continue" (-freplace-objc-classes) debugging modes, currently available ! on Mac OS X 10.3 and later. See [14]Options Controlling Objective-C Dialect for more information. + Access to optimized runtime entry points (-fno-nil-receivers ) on the assumption that message receivers are never nil. This is currently available on Mac OS X 10.3 and later. See ! [15]Options Controlling Objective-C Dialect for more information. Java --- 16787,16798 ---- properly, and that correct diagnostics are issued. + Support for "Zero-Link" (-fzero-link) and "Fix-and-Continue" (-freplace-objc-classes) debugging modes, currently available ! on Mac OS X 10.3 and later. See [15]Options Controlling Objective-C Dialect for more information. + Access to optimized runtime entry points (-fno-nil-receivers ) on the assumption that message receivers are never nil. This is currently available on Mac OS X 10.3 and later. See ! [16]Options Controlling Objective-C Dialect for more information. Java *************** New Languages and Language specific impr *** 16370,16379 **** to gcj. * libgcj has a new gcjlib URL type; this lets URLClassLoader load code from shared libraries. ! * libgcj has been much more completely merged with [16]GNU Classpath. * Class loading is now much more correct; in particular the caller's class loader is now used when that is required. ! * [17]Eclipse 2.x will run out of the box using gij. * Parts of java.nio have been implemented. Direct and indirect buffers work, as do fundamental file and socket operations. * java.awt has been improved, though it is still not ready for --- 16804,16813 ---- to gcj. * libgcj has a new gcjlib URL type; this lets URLClassLoader load code from shared libraries. ! * libgcj has been much more completely merged with [17]GNU Classpath. * Class loading is now much more correct; in particular the caller's class loader is now used when that is required. ! * [18]Eclipse 2.x will run out of the box using gij. * Parts of java.nio have been implemented. Direct and indirect buffers work, as do fundamental file and socket operations. * java.awt has been improved, though it is still not ready for *************** New Languages and Language specific impr *** 16386,16398 **** Fortran ! * Fortran improvements are listed in the [18]Fortran documentation. New Targets and Target Specific Improvements Alpha ! * Several [19]built-in functions have been added such as __builtin_alpha_zap to allow utilizing the more obscure instructions of the CPU. * Parameter passing of complex arguments has changed to match the --- 16820,16832 ---- Fortran ! * Fortran improvements are listed in the [19]Fortran documentation. New Targets and Target Specific Improvements Alpha ! * Several [20]built-in functions have been added such as __builtin_alpha_zap to allow utilizing the more obscure instructions of the CPU. * Parameter passing of complex arguments has changed to match the *************** New Targets and Target Specific Improvem *** 16413,16420 **** * A new ARM target has been added: arm-wince-pe. This is similar to the arm-pe target, but it defaults to using the APCS32 ABI. * The existing ARM pipeline description has been converted to the use ! the [20]DFA processor pipeline model. There is not much change in ! code performance, but the description is now [21]easier to understand. * Support for the Cirrus EP9312 Maverick floating point co-processor added. Enabled at run time with the -mcpu=ep9312 command line --- 16847,16854 ---- * A new ARM target has been added: arm-wince-pe. This is similar to the arm-pe target, but it defaults to using the APCS32 ABI. * The existing ARM pipeline description has been converted to the use ! the [21]DFA processor pipeline model. There is not much change in ! code performance, but the description is now [22]easier to understand. * Support for the Cirrus EP9312 Maverick floating point co-processor added. Enabled at run time with the -mcpu=ep9312 command line *************** New Targets and Target Specific Improvem *** 16460,16466 **** generation of code tuned for Itanium 2 (option -mtune=itanium2) is enabled by default now. To generate code tuned for Itanium 1 the option -mtune=itanium1 should be used. ! * [22]DFA processor pipeline descriptions for the IA-64 processors have been added. This resulted in about 3% improvement on the SPECInt2000 benchmark for Itanium 2. * Instruction bundling for the IA-64 processors has been rewritten --- 16894,16900 ---- generation of code tuned for Itanium 2 (option -mtune=itanium2) is enabled by default now. To generate code tuned for Itanium 1 the option -mtune=itanium1 should be used. ! * [23]DFA processor pipeline descriptions for the IA-64 processors have been added. This resulted in about 3% improvement on the SPECInt2000 benchmark for Itanium 2. * Instruction bundling for the IA-64 processors has been rewritten *************** New Targets and Target Specific Improvem *** 16524,16530 **** General ! * Several [23]ABI bugs have been fixed. Unfortunately, these changes will break binary compatibility with earlier releases. * GCC can now use explicit relocation operators when generating -mabicalls code. This behavior is controlled by -mexplicit-relocs --- 16958,16964 ---- General ! * Several [24]ABI bugs have been fixed. Unfortunately, these changes will break binary compatibility with earlier releases. * GCC can now use explicit relocation operators when generating -mabicalls code. This behavior is controlled by -mexplicit-relocs *************** New Targets and Target Specific Improvem *** 16549,16555 **** PowerPC * GCC 3.4 releases have a number of fixes for PowerPC and PowerPC64 ! [24]ABI incompatibilities regarding the way parameters are passed during functions calls. These changes may result in incompatibility between code compiled with GCC 3.3 and GCC 3.4. --- 16983,16989 ---- PowerPC * GCC 3.4 releases have a number of fixes for PowerPC and PowerPC64 ! [25]ABI incompatibilities regarding the way parameters are passed during functions calls. These changes may result in incompatibility between code compiled with GCC 3.3 and GCC 3.4. *************** New Targets and Target Specific Improvem *** 16631,16637 **** * The option -mflat is deprecated. * Support for large (> 2GB) frames has been added to the 64-bit port. ! * Several [25]ABI bugs have been fixed. Unfortunately, these changes will break binary compatibility with earlier releases. * The default debugging format has been switched from STABS to DWARF-2 for 32-bit code on Solaris 7 and later. DWARF-2 is already --- 17065,17071 ---- * The option -mflat is deprecated. * Support for large (> 2GB) frames has been added to the 64-bit port. ! * Several [26]ABI bugs have been fixed. Unfortunately, these changes will break binary compatibility with earlier releases. * The default debugging format has been switched from STABS to DWARF-2 for 32-bit code on Solaris 7 and later. DWARF-2 is already *************** New Targets and Target Specific Improvem *** 16679,16685 **** header file when building GCC. Additionally, the -mno-serialize-volatile option is no longer supported. ! Obsolete Systems Support for a number of older systems has been declared obsolete in GCC 3.4. Unless there is activity to revive them, the next release of GCC --- 17113,17119 ---- header file when building GCC. Additionally, the -mno-serialize-volatile option is no longer supported. ! [27]Obsolete Systems Support for a number of older systems has been declared obsolete in GCC 3.4. Unless there is activity to revive them, the next release of GCC *************** Other significant improvements *** 16739,16756 **** particularly for non-optimizing compilations. __________________________________________________________________ ! GCC 3.4.0 Bug Fixes A vast number of bugs have been fixed in 3.4.0, too many to publish a ! complete list here. [26]Follow this link to query the Bugzilla database for the list of over 900 bugs fixed in 3.4.0. This is the list of all bugs marked as resolved and fixed in 3.4.0 that are not flagged as 3.4 regressions. __________________________________________________________________ ! GCC 3.4.1 Bug Fixes --- 17173,17190 ---- particularly for non-optimizing compilations. __________________________________________________________________ ! [28]GCC 3.4.0 Bug Fixes A vast number of bugs have been fixed in 3.4.0, too many to publish a ! complete list here. [29]Follow this link to query the Bugzilla database for the list of over 900 bugs fixed in 3.4.0. This is the list of all bugs marked as resolved and fixed in 3.4.0 that are not flagged as 3.4 regressions. __________________________________________________________________ ! [30]GCC 3.4.1 Bug Fixes *************** GCC 3.4.1 *** 16761,17027 **** Bootstrap failures ! * [27]10129 Ada bootstrap fails on PPC-Darwin - invalid assembler emitted - PIC related ! * [28]14576 [ARM] ICE in libiberty when building gcc-3.4 for arm-elf ! * [29]14760 A bug in configure.in prevents using both --program-suffix and --program-prefix ! * [30]14671 [hppa64] bootstrap fails: ICE in save_call_clobbered_regs, in caller_save.c ! * [31]15093 [alpha][Java] make bootstrap fails to configure libffi on Alpha ! * [32]15178 Solaris 9/x86 fails linking after stage 3 Multi-platform internal compiler errors (ICEs) ! * [33]12753 (preprocessor) Memory corruption in preprocessor on bad input ! * [34]13985 ICE in gcc.c-torture/compile/930621-1.c ! * [35]14810 (c++) tree check failures with invalid code involving templates ! * [36]14883 (c++) ICE on invalid code, in cp_parser_lookup_name, in cp/parser.c ! * [37]15044 (c++) ICE on syntax error, template header ! * [38]15057 (c++) Compiling of conditional value throw constructs cause a segmentation violation ! * [39]15064 (c++) typeid of template parameter gives ICE ! * [40]15142 (c++) ICE when passing a string where a char* is expected in a throw statement ! * [41]15159 ICE in rtl_verify_flow_info_1 ! * [42]15165 (c++) ICE in instantiate_template ! * [43]15193 Unary minus using pointer to V4SF vector causes -fforce-mem to exhaust all memory ! * [44]15209 (c++) Runs out of memory with packed structs ! * [45]15227 (c++) Trouble with invalid function definition ! * [46]15285 (c++) instantiate_type ICE when forming pointer to template function ! * [47]15299 (c++) ICE in resolve_overloaded_unification ! * [48]15329 (c++) ICE on constructor of member template ! * [49]15550 ICE in extract_insn, in recog.c ! * [50]15554 (c++) ICE in tsubst_copy, in cp/pt.c ! * [51]15640 (c++) ICE on invalid code in arg_assoc, in cp/name-lookup.c ! * [52]15666 [unit-at-a-time] Gcc abort on valid code ! * [53]15696 (c++) ICE with bad pointer-to-member code ! * [54]15701 (c++) ICE with friends and template template parameter ! * [55]15761 ICE in do_SUBST, in combine.c ! * [56]15829 (c++) ICE on Botan-1.3.13 due to -funroll-loops Ada ! * [57]14538 All RTEMS targets broken for gnat C front end ! * [58]12391 missing warning about assigning to an incomplete type ! * [59]14649 atan(1.0) should not be a constant expression ! * [60]15004 [unit-at-a-time] no warning for unused paramater in static function ! * [61]15749 --pedantic-errors behaves differently from --pedantic with C-compiler on GNU/Linux C++ compiler and library ! * [62]10646 non-const reference is incorrectly matched in a "const T" partial specialization ! * [63]12077 wcin.rdbuf()->in_avail() return value too high ! * [64]13598 enc_filebuf doesn't work ! * [65]14211 const_cast returns lvalue but should be rvalue ! * [66]14220 num_put::do_put() undesired float/double behavior ! * [67]14245 problem with user-defined allocators in std::basic_string ! * [68]14340 libstdc++ Debug mode: failure to convert iterator to const_iterator ! * [69]14600 __gnu_cxx::stdio_sync_filebuf should expose internal FILE* ! * [70]14668 no warning anymore for reevaluation of declaration ! * [71]14775 LFS (large file support) tests missing ! * [72]14821 Duplicate namespace alias declaration should not conflict ! * [73]14930 Friend declaration ignored ! * [74]14932 cannot use offsetof to get offsets of array elements in g++ 3.4.0 ! * [75]14950 [non unit-at-a-time] always_inline does not mix with templates and -O0 ! * [76]14962 g++ ignores #pragma redefine_extname ! * [77]14975 Segfault on low-level write error during imbue ! * [78]15002 Linewise stream input is unusably slow (std::string slow) ! * [79]15025 compiler accepts redeclaration of template as non-template ! * [80]15046 [arm] Math functions misdetected by cross configuration ! * [81]15069 a bit test on a variable of enum type is miscompiled ! * [82]15074 g++ -lsupc++ still links against libstdc++ ! * [83]15083 spurious "statement has no effect" warning ! * [84]15096 parse error with templates and pointer to const member ! * [85]15287 combination of operator[] and operator .* fails in templates ! * [86]15317 __attribute__ unused in first parameter of constructor gives error ! * [87]15337 sizeof on incomplete type diagnostic ! * [88]15361 bitset<>::_Find_next fails ! * [89]15412 _GLIBCXX_ symbols symbols defined and used in different namespaces ! * [90]15427 valid code results in incomplete type error ! * [91]15471 Incorrect member pointer offsets in anonymous structs/unions ! * [92]15503 nested template problem ! * [93]15507 compiler hangs while laying out union ! * [94]15542 operator & and template definitions ! * [95]15565 SLES9: leading + sign for unsigned int with showpos ! * [96]15625 friend defined inside a template fails to find static function ! * [97]15629 Function templates, overloads, and friend name injection ! * [98]15742 'noreturn' attribute ignored in method of template functions. ! * [99]15775 Allocator::pointer consistently ignored ! * [100]15821 Duplicate namespace alias within namespace rejected ! * [101]15862 'enum yn' fails (confict with undeclared builtin) ! * [102]15875 rejects pointer to member in template ! * [103]15877 valid code using templates and anonymous enums is rejected ! * [104]15947 Puzzling error message for wrong destructor declaration in template class ! * [105]16020 cannot copy __gnu_debug::bitset ! * [106]16154 input iterator concept too restrictive ! * [107]16174 deducing top-level consts Java ! * [108]14315 Java compiler is not parallel make safe Fortran ! * [109]15151 [g77] incorrect logical i/o in 64-bit mode Objective-C ! * [110]7993 private variables cannot be shadowed in subclasses Optimization bugs ! * [111]15228 useless copies of floating point operands ! * [112]15345 [non-unit-at-a-time] unreferenced nested inline functions not optimized away ! * [113]15945 Incorrect floating point optimization ! * [114]15526 ftrapv aborts on 0 * (-1) ! * [115]14690 Miscompiled POOMA tests ! * [116]15112 GCC generates code to write to unchanging memory Preprocessor ! * [117]15067 Minor glitch in the source of cpp Main driver program bugs ! * [118]1963 collect2 interprets -oldstyle_liblookup as -o ldstyle_liblookup x86-specific (Intel/AMD) ! * [119]15717 Error: can't resolve `L0' {*ABS* section} - `xx' {*UND* section} HPPA-specific ! * [120]14782 GCC produces an unaligned data access at -O2 ! * [121]14828 FAIL: gcc.c-torture/execute/20030408-1.c execution, -O2 ! * [122]15202 ICE in reload_cse_simplify_operands, in postreload.c IA64-specific ! * [123]14610 __float80 constants incorrectly emitted ! * [124]14813 init_array sections are initialized in the wrong order ! * [125]14857 GCC segfault on duplicated asm statement ! * [126]15598 Gcc 3.4 ICE on valid code ! * [127]15653 Gcc 3.4 ICE on valid code MIPS-specific ! * [128]15189 wrong filling of delay slot with -march=mips1 -G0 -mno-split-addresses -mno-explicit-relocs ! * [129]15331 Assembler error building gnatlib on IRIX 6.5 with GNU as 2.14.91 ! * [130]16144 Bogus reference to __divdf3 when -O1 ! * [131]16176 Miscompilation of unaligned data in MIPS backend PowerPC-specific ! * [132]11591 ICE in gcc.dg/altivec-5.c ! * [133]12028 powerpc-eabispe produces bad sCOND operation ! * [134]14478 rs6000 geu/ltu patterns generate incorrect code ! * [135]14567 long double and va_arg complex args ! * [136]14715 Altivec stack layout may overlap gpr save with stack temps ! * [137]14902 (libstdc++) Stream checking functions fail when -pthread option is used. ! * [138]14924 Compiler ICE on valid code ! * [139]14960 -maltivec affects vector return with -mabi=no-altivec ! * [140]15106 vector varargs failure passing from altivec to non-altivec code for -m32 ! * [141]16026 ICE in function.c:4804, assign_parms, when -mpowerpc64 & half-word operation ! * [142]15191 -maltivec -mabi=no-altivec results in mis-aligned lvx and stvx ! * [143]15662 Segmentation fault when an exception is thrown - even if try and catch are specified s390-specific ! * [144]15054 Bad code due to overlapping stack temporaries SPARC-specific ! * [145]15783 ICE with union assignment in 64-bit mode ! * [146]15626 GCC 3.4 emits "ld: warning: relocation error: R_SPARC_UA32" x86-64-specific ! * [147]14326 boehm-gc hardcodes to 3DNow! prefetch for x86_64 ! * [148]14723 Backported -march=nocona from mainline ! * [149]15290 __float128 failed to pass to function properly Cygwin/Mingw32-specific ! * [150]15250 Option -mms-bitfields support on GCC 3.4 is not conformant to MS layout ! * [151]15551 -mtune=pentium4 -O2 with sjlj EH breaks stack probe worker on windows32 targets Bugs specific to embedded processors ! * [152]8309 [m68k] -m5200 produces erroneous SImode set of short varaible on stack ! * [153]13250 [SH] Gcc code for rotation clobbers the register, but gcc continues to use the register as if it was not clobbered ! * [154]13803 [coldfire] movqi operand constraints too restrictivefor TARGET_COLDFIRE ! * [155]14093 [SH] ICE for code when using -mhitachi option in SH ! * [156]14457 [m6811hc] ICE with simple c++ source ! * [157]14542 [m6811hc] ICE on simple source ! * [158]15100 [SH] cc1plus got hang-up on libstdc++-v3/testsuite/abi_check.cc ! * [159]15296 [CRIS] Delayed branch scheduling causing invalid code on cris-* ! * [160]15396 [SH] ICE with -O2 -fPIC ! * [161]15782 [coldfire] m68k_output_mi_thunk emits wrong code for ColdFire Testsuite problems (compiler not affected) ! * [162]11610 libstdc++ testcases 27_io/* don't work properly remotely ! * [163]15488 (libstdc++) possibly insufficient file permissions for executing test suite ! * [164]15489 (libstdc++) testsuite_files determined incorrectly Documentation bugs ! * [165]13928 (libstdc++) no whatis info in some man pages generated by doxygen ! * [166]14150 Ada documentation out of date ! * [167]14949 (c++) Need to document method visibility changes ! * [168]15123 libstdc++-doc: Allocators.3 manpage is empty __________________________________________________________________ ! GCC 3.4.2 Bug Fixes --- 17195,17461 ---- Bootstrap failures ! * [31]10129 Ada bootstrap fails on PPC-Darwin - invalid assembler emitted - PIC related ! * [32]14576 [ARM] ICE in libiberty when building gcc-3.4 for arm-elf ! * [33]14760 A bug in configure.in prevents using both --program-suffix and --program-prefix ! * [34]14671 [hppa64] bootstrap fails: ICE in save_call_clobbered_regs, in caller_save.c ! * [35]15093 [alpha][Java] make bootstrap fails to configure libffi on Alpha ! * [36]15178 Solaris 9/x86 fails linking after stage 3 Multi-platform internal compiler errors (ICEs) ! * [37]12753 (preprocessor) Memory corruption in preprocessor on bad input ! * [38]13985 ICE in gcc.c-torture/compile/930621-1.c ! * [39]14810 (c++) tree check failures with invalid code involving templates ! * [40]14883 (c++) ICE on invalid code, in cp_parser_lookup_name, in cp/parser.c ! * [41]15044 (c++) ICE on syntax error, template header ! * [42]15057 (c++) Compiling of conditional value throw constructs cause a segmentation violation ! * [43]15064 (c++) typeid of template parameter gives ICE ! * [44]15142 (c++) ICE when passing a string where a char* is expected in a throw statement ! * [45]15159 ICE in rtl_verify_flow_info_1 ! * [46]15165 (c++) ICE in instantiate_template ! * [47]15193 Unary minus using pointer to V4SF vector causes -fforce-mem to exhaust all memory ! * [48]15209 (c++) Runs out of memory with packed structs ! * [49]15227 (c++) Trouble with invalid function definition ! * [50]15285 (c++) instantiate_type ICE when forming pointer to template function ! * [51]15299 (c++) ICE in resolve_overloaded_unification ! * [52]15329 (c++) ICE on constructor of member template ! * [53]15550 ICE in extract_insn, in recog.c ! * [54]15554 (c++) ICE in tsubst_copy, in cp/pt.c ! * [55]15640 (c++) ICE on invalid code in arg_assoc, in cp/name-lookup.c ! * [56]15666 [unit-at-a-time] Gcc abort on valid code ! * [57]15696 (c++) ICE with bad pointer-to-member code ! * [58]15701 (c++) ICE with friends and template template parameter ! * [59]15761 ICE in do_SUBST, in combine.c ! * [60]15829 (c++) ICE on Botan-1.3.13 due to -funroll-loops Ada ! * [61]14538 All RTEMS targets broken for gnat C front end ! * [62]12391 missing warning about assigning to an incomplete type ! * [63]14649 atan(1.0) should not be a constant expression ! * [64]15004 [unit-at-a-time] no warning for unused paramater in static function ! * [65]15749 --pedantic-errors behaves differently from --pedantic with C-compiler on GNU/Linux C++ compiler and library ! * [66]10646 non-const reference is incorrectly matched in a "const T" partial specialization ! * [67]12077 wcin.rdbuf()->in_avail() return value too high ! * [68]13598 enc_filebuf doesn't work ! * [69]14211 const_cast returns lvalue but should be rvalue ! * [70]14220 num_put::do_put() undesired float/double behavior ! * [71]14245 problem with user-defined allocators in std::basic_string ! * [72]14340 libstdc++ Debug mode: failure to convert iterator to const_iterator ! * [73]14600 __gnu_cxx::stdio_sync_filebuf should expose internal FILE* ! * [74]14668 no warning anymore for reevaluation of declaration ! * [75]14775 LFS (large file support) tests missing ! * [76]14821 Duplicate namespace alias declaration should not conflict ! * [77]14930 Friend declaration ignored ! * [78]14932 cannot use offsetof to get offsets of array elements in g++ 3.4.0 ! * [79]14950 [non unit-at-a-time] always_inline does not mix with templates and -O0 ! * [80]14962 g++ ignores #pragma redefine_extname ! * [81]14975 Segfault on low-level write error during imbue ! * [82]15002 Linewise stream input is unusably slow (std::string slow) ! * [83]15025 compiler accepts redeclaration of template as non-template ! * [84]15046 [arm] Math functions misdetected by cross configuration ! * [85]15069 a bit test on a variable of enum type is miscompiled ! * [86]15074 g++ -lsupc++ still links against libstdc++ ! * [87]15083 spurious "statement has no effect" warning ! * [88]15096 parse error with templates and pointer to const member ! * [89]15287 combination of operator[] and operator .* fails in templates ! * [90]15317 __attribute__ unused in first parameter of constructor gives error ! * [91]15337 sizeof on incomplete type diagnostic ! * [92]15361 bitset<>::_Find_next fails ! * [93]15412 _GLIBCXX_ symbols symbols defined and used in different namespaces ! * [94]15427 valid code results in incomplete type error ! * [95]15471 Incorrect member pointer offsets in anonymous structs/unions ! * [96]15503 nested template problem ! * [97]15507 compiler hangs while laying out union ! * [98]15542 operator & and template definitions ! * [99]15565 SLES9: leading + sign for unsigned int with showpos ! * [100]15625 friend defined inside a template fails to find static function ! * [101]15629 Function templates, overloads, and friend name injection ! * [102]15742 'noreturn' attribute ignored in method of template functions. ! * [103]15775 Allocator::pointer consistently ignored ! * [104]15821 Duplicate namespace alias within namespace rejected ! * [105]15862 'enum yn' fails (confict with undeclared builtin) ! * [106]15875 rejects pointer to member in template ! * [107]15877 valid code using templates and anonymous enums is rejected ! * [108]15947 Puzzling error message for wrong destructor declaration in template class ! * [109]16020 cannot copy __gnu_debug::bitset ! * [110]16154 input iterator concept too restrictive ! * [111]16174 deducing top-level consts Java ! * [112]14315 Java compiler is not parallel make safe Fortran ! * [113]15151 [g77] incorrect logical i/o in 64-bit mode Objective-C ! * [114]7993 private variables cannot be shadowed in subclasses Optimization bugs ! * [115]15228 useless copies of floating point operands ! * [116]15345 [non-unit-at-a-time] unreferenced nested inline functions not optimized away ! * [117]15945 Incorrect floating point optimization ! * [118]15526 ftrapv aborts on 0 * (-1) ! * [119]14690 Miscompiled POOMA tests ! * [120]15112 GCC generates code to write to unchanging memory Preprocessor ! * [121]15067 Minor glitch in the source of cpp Main driver program bugs ! * [122]1963 collect2 interprets -oldstyle_liblookup as -o ldstyle_liblookup x86-specific (Intel/AMD) ! * [123]15717 Error: can't resolve `L0' {*ABS* section} - `xx' {*UND* section} HPPA-specific ! * [124]14782 GCC produces an unaligned data access at -O2 ! * [125]14828 FAIL: gcc.c-torture/execute/20030408-1.c execution, -O2 ! * [126]15202 ICE in reload_cse_simplify_operands, in postreload.c IA64-specific ! * [127]14610 __float80 constants incorrectly emitted ! * [128]14813 init_array sections are initialized in the wrong order ! * [129]14857 GCC segfault on duplicated asm statement ! * [130]15598 Gcc 3.4 ICE on valid code ! * [131]15653 Gcc 3.4 ICE on valid code MIPS-specific ! * [132]15189 wrong filling of delay slot with -march=mips1 -G0 -mno-split-addresses -mno-explicit-relocs ! * [133]15331 Assembler error building gnatlib on IRIX 6.5 with GNU as 2.14.91 ! * [134]16144 Bogus reference to __divdf3 when -O1 ! * [135]16176 Miscompilation of unaligned data in MIPS backend PowerPC-specific ! * [136]11591 ICE in gcc.dg/altivec-5.c ! * [137]12028 powerpc-eabispe produces bad sCOND operation ! * [138]14478 rs6000 geu/ltu patterns generate incorrect code ! * [139]14567 long double and va_arg complex args ! * [140]14715 Altivec stack layout may overlap gpr save with stack temps ! * [141]14902 (libstdc++) Stream checking functions fail when -pthread option is used. ! * [142]14924 Compiler ICE on valid code ! * [143]14960 -maltivec affects vector return with -mabi=no-altivec ! * [144]15106 vector varargs failure passing from altivec to non-altivec code for -m32 ! * [145]16026 ICE in function.c:4804, assign_parms, when -mpowerpc64 & half-word operation ! * [146]15191 -maltivec -mabi=no-altivec results in mis-aligned lvx and stvx ! * [147]15662 Segmentation fault when an exception is thrown - even if try and catch are specified s390-specific ! * [148]15054 Bad code due to overlapping stack temporaries SPARC-specific ! * [149]15783 ICE with union assignment in 64-bit mode ! * [150]15626 GCC 3.4 emits "ld: warning: relocation error: R_SPARC_UA32" x86-64-specific ! * [151]14326 boehm-gc hardcodes to 3DNow! prefetch for x86_64 ! * [152]14723 Backported -march=nocona from mainline ! * [153]15290 __float128 failed to pass to function properly Cygwin/Mingw32-specific ! * [154]15250 Option -mms-bitfields support on GCC 3.4 is not conformant to MS layout ! * [155]15551 -mtune=pentium4 -O2 with sjlj EH breaks stack probe worker on windows32 targets Bugs specific to embedded processors ! * [156]8309 [m68k] -m5200 produces erroneous SImode set of short varaible on stack ! * [157]13250 [SH] Gcc code for rotation clobbers the register, but gcc continues to use the register as if it was not clobbered ! * [158]13803 [coldfire] movqi operand constraints too restrictivefor TARGET_COLDFIRE ! * [159]14093 [SH] ICE for code when using -mhitachi option in SH ! * [160]14457 [m6811hc] ICE with simple c++ source ! * [161]14542 [m6811hc] ICE on simple source ! * [162]15100 [SH] cc1plus got hang-up on libstdc++-v3/testsuite/abi_check.cc ! * [163]15296 [CRIS] Delayed branch scheduling causing invalid code on cris-* ! * [164]15396 [SH] ICE with -O2 -fPIC ! * [165]15782 [coldfire] m68k_output_mi_thunk emits wrong code for ColdFire Testsuite problems (compiler not affected) ! * [166]11610 libstdc++ testcases 27_io/* don't work properly remotely ! * [167]15488 (libstdc++) possibly insufficient file permissions for executing test suite ! * [168]15489 (libstdc++) testsuite_files determined incorrectly Documentation bugs ! * [169]13928 (libstdc++) no whatis info in some man pages generated by doxygen ! * [170]14150 Ada documentation out of date ! * [171]14949 (c++) Need to document method visibility changes ! * [172]15123 libstdc++-doc: Allocators.3 manpage is empty __________________________________________________________________ ! [173]GCC 3.4.2 Bug Fixes *************** GCC 3.4.2 *** 17032,17555 **** Bootstrap failures and issues ! * [169]16469 [mips-sgi-irix5.3] bootstrap fails in libstdc++-v3/testsuite ! * [170]16344 [hppa-linux-gnu] libstdc++'s PCH built by profiledbootstrap does not work with the built compiler ! * [171]16842 [Solaris/x86] mkheaders can not find mkheaders.conf Multi-platform internal compiler errors (ICEs) ! * [172]12608 (c++) ICE: expected class 't', have 'x' (error_mark) in cp_parser_class_specifier, in cp/parser.c ! * [173]14492 ICE in loc_descriptor_from_tree, in dwarf2out.c ! * [174]15461 (c++) ICE due to NRV and inlining ! * [175]15890 (c++) ICE in c_expand_expr, in c-common.c ! * [176]16180 ICE: segmentation fault in RTL optimization ! * [177]16224 (c++) ICE in write_unscoped_name (template/namespace) ! * [178]16408 ICE: in delete_insn, in cfgrtl.c ! * [179]16529 (c++) ICE for: namespace-alias shall not be declared as the name of any other entity ! * [180]16698 (c++) ICE with exceptions and declaration of __cxa_throw ! * [181]16706 (c++) ICE in finish_member_declaration, in cp/semantics.c ! * [182]16810 (c++) Legal C++ program with cast gives ICE in build_ptrmemfunc ! * [183]16851 (c++) ICE when throwing a comma expression ! * [184]16870 (c++) Boost.Spirit causes ICE in tsubst, in cp/pt.c ! * [185]16904 (c++) ICE in finish_class_member_access_expr, in cp/typeck.c ! * [186]16905 (c++) ICE (segfault) with exceptions ! * [187]16964 (c++) ICE in cp_parser_class_specifier due to redefinition ! * [188]17068 (c++) ICE: tree check: expected class 'd', have 'x' (identifier_node) in dependent_template_p, in cp/pt.c Preprocessor bugs ! * [189]16366 Preprocessor option -remap causes memory corruption Optimization ! * [190]15345 unreferenced nested inline functions not optimized away ! * [191]16590 Incorrect execution when compiling with -O2 ! * [192]16693 Bitwise AND is lost when used within a cast to an enum of the same precision ! * [193]17078 Jump into if(0) substatement fails Problems in generated debug information ! * [194]13956 incorrect stabs for nested local variables C front end bugs ! * [195]16684 GCC should not warn about redundant redeclarations of built-ins C++ compiler and library ! * [196]12658 Thread safety problems in locale::global() and locale::locale() ! * [197]13092 g++ accepts invalid pointer-to-member conversion ! * [198]15320 Excessive memory consumption ! * [199]16246 Incorrect template argument deduction ! * [200]16273 Memory exhausted when using nested classes and virtual functions ! * [201]16401 ostringstream in gcc 3.4.x very slow for big data ! * [202]16411 undefined reference to __gnu_cxx::stdio_sync_filebuf >::file() ! * [203]16489 G++ incorrectly rejects use of a null constant integral expression as a null constant pointer ! * [204]16618 offsetof fails with constant member ! * [205]16637 syntax error reported for valid input code ! * [206]16717 __attribute__((constructor)) broken in C++ ! * [207]16813 compiler error in DEBUG version of range insertion std::map::insert ! * [208]16853 pointer-to-member initialization from incompatible one accepted ! * [209]16889 ambiguity is not detected ! * [210]16959 Segmentation fault in ios_base::sync_with_stdio Java compiler and library ! * [211]7587 direct threaded interpreter not thread-safe ! * [212]16473 ServerSocket accept() leaks file descriptors ! * [213]16478 Hash synchronization deadlock with finalizers Alpha-specific ! * [214]10695 ICE in dwarf2out_frame_debug_expr, in dwarf2out.c ! * [215]16974 could not split insn (ice in final_scan_insn, in final.c) x86-specific ! * [216]16298 ICE in output_operand ! * [217]17113 ICE with SSE2 intrinsics x86-64 specific ! * [218]14697 libstdc++ couldn't find 32bit libgcc_s MIPS-specific ! * [219]15869 [mips64] No NOP after LW (with -mips1 -O0) ! * [220]16325 [mips64] value profiling clobbers gp on mips ! * [221]16357 [mipsisa64-elf] ICE copying 7 bytes between extern char[]s ! * [222]16380 [mips64] Use of uninitialised register after dbra conversion ! * [223]16407 [mips64] Unaligned access to local variables ! * [224]16643 [mips64] verify_local_live_at_start ICE after crossjumping & cfgcleanup ARM-specific ! * [225]15927 THUMB -O2: strength-reduced iteration variable ends up off by 1 ! * [226]15948 THUMB: ICE with non-commutative cbranch ! * [227]17019 THUMB: bad switch statement in md code for addsi3_cbranch_scratch IA64-specific ! * [228]16130 ICE on valid code: in bundling, in config/ia64/ia64.c (-mtune=merced) ! * [229]16142 ICE on valid code: in bundling, in config/ia64/ia64.c (-mtune=itanium) ! * [230]16278 Gcc failed to build Linux kernel with -mtune=merced ! * [231]16414 ICE on valid code: typo in comparison of asm_noperands result ! * [232]16445 ICE on valid code: don't count ignored insns ! * [233]16490 ICE (segfault) while compiling with -fprofile-use ! * [234]16683 ia64 does not honor SUBTARGET_EXTRA_SPECS PowerPC-specific ! * [235]16195 (ppc64): Miscompilation of GCC 3.3.x by 3.4.x ! * [236]16239 ICE on ppc64 (mozilla 1.7 compile, -O1 -fno-exceptions issue) SPARC-specific ! * [237]16199 ICE while compiling apache 2.0.49 ! * [238]16416 -m64 doesn't imply -mcpu=v9 anymore ! * [239]16430 ICE when returning non-C aggregates larger than 16 bytes Bugs specific to embedded processors ! * [240]16379 [m32r] can't output large model function call of memcpy ! * [241]17093 [m32r] ICE with -msdata=use -O0 ! * [242]17119 [m32r] ICE at switch case 0x8000 DJGPP-specific ! * [243]15928 libstdc++ in 3.4.x doesn't cross-compile for djgpp Alpha Tru64-specific ! * [244]16210 libstdc++ gratuitously omits "long long" I/O Testsuite, documentation issues (compiler is not affected): ! * [245]15488 (libstdc++) possibly insufficient file permissions for executing test suite ! * [246]16250 ada/doctools runs makeinfo even in release tarball __________________________________________________________________ ! GCC 3.4.3 ! This is the [247]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 3.4.3 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). Bootstrap failures ! * [248]17369 [ia64] Bootstrap failure with binutils-2.15.90.0.1.1 ! * [249]17850 [arm-elf] bootstrap failure - libstdc++ uses strtold when undeclared Internal compiler errors (ICEs) affecting multiple platforms ! * [250]13948 (java) GCJ segmentation fault while compiling GL4Java .class files ! * [251]14492 ICE in loc_descriptor_from_tree, in dwarf2out.c ! * [252]16301 (c++) ICE when "strong" attribute is attached to a using directive ! * [253]16566 ICE with flexible arrays ! * [254]17023 ICE with nested functions in parameter declaration ! * [255]17027 ICE with noreturn function in loop at -O2 ! * [256]17524 ICE in grokdeclarator, in cp/decl.c ! * [257]17826 (c++) ICE in cp_tree_equal C and optimization bugs ! * [258]15526 -ftrapv aborts on 0 * (-1) ! * [259]16999 #ident stopped working ! * [260]17503 quadratic behaviour in invalid_mode_change_p ! * [261]17581 Long long arithmetic fails inside a switch/case statement when compiled with -O2 ! * [262]18129 -fwritable-strings doesn't work C++ compiler and library bugs ! * [263]10975 incorrect initial ostringstream::tellp() ! * [264]11722 Unbuffered filebuf::sgetn is slow ! * [265]14534 Unrecognizing static function as a template parameter when its return value is also templated ! * [266]15172 Copy constructor optimization in aggregate initialization ! * [267]15786 Bad error message for frequently occuring error. ! * [268]16162 Rejects valid member-template-definition ! * [269]16612 empty basic_strings can't live in shared memory ! * [270]16715 std::basic_iostream is instantiated when used, even though instantiations are already contained in libstdc++ ! * [271]16848 code in /ext/demangle.h appears broken ! * [272]17132 GCC fails to eliminate function template specialization when argument deduction fails ! * [273]17259 One more _S_leaf incorrectly qualified with _RopeRep:: in ropeimpl.h ! * [274]17327 use of `enumeral_type' in template type unification ! * [275]17393 "unused variable '._0'" warning with -Wall ! * [276]17501 Confusion with member templates ! * [277]17537 g++ not passing -lstdc++ to linker when all command line arguments are libraries ! * [278]17585 usage of unqualified name of static member from within class not allowed ! * [279]17821 Poor diagnostic for using "." instead of "->" ! * [280]17829 wrong error: call of overloaded function is ambiguous ! * [281]17851 Misleading diagnostic for invalid function declarations with undeclared types ! * [282]17976 Destructor is called twice ! * [283]18020 rejects valid definition of enum value in template ! * [284]18093 bogus conflict in namespace aliasing ! * [285]18140 C++ parser bug when using >> in templates Fortran ! * [286]17541 data statements with double precision constants fail x86-specific ! * [287]17853 -O2 ICE for MMX testcase SPARC-specific ! * [288]17245 ICE compiling gsl-1.5 statistics/lag1.c Darwin-specific ! * [289]17167 FATAL:Symbol L_foo$stub already defined. AIX-specific ! * [290]17277 could not catch an exception when specified -maix64 Solaris-specific ! * [291]17505 calls acosf(), ceilf(), and other functions missing from system libraries HP/UX specific: ! * [292]17684 /usr/ccs/bin/ld: Can't create libgcc_s.sl ARM-specific ! * [293]17384 ICE with mode attribute on structures MIPS-specific ! * [294]17770 No NOP after LWL with -mips1 Other embedded target specific ! * [295]11476 [arc-elf] gcc ICE on newlib's vfprintf.c ! * [296]14064 [avr-elf] -fdata-sections triggers ICE ! * [297]14678 [m68hc11-elf] gcc ICE ! * [298]15583 [powerpc-rtems] powerpc-rtems lacks __USE_INIT_FINI__ ! * [299]15790 [i686-coff] Alignment error building gcc with i686-coff target ! * [300]15886 [SH] Miscompilation with -O2 -fPIC ! * [301]16884 [avr-elf] [fweb related] bug while initializing variables Bugs relating to debugger support ! * [302]13841 missing debug info for _Complex function arguments ! * [303]15860 [big-endian targets] No DW_AT_location debug info is emitted for formal arguments to a function that uses "register" qualifiers Testsuite issues (compiler not affected) ! * [304]17465 Testsuite in libffi overrides LD_LIBRARY_PATH ! * [305]17469 Testsuite in libstdc++ overrides LD_LIBRARY_PATH ! * [306]18138 [mips-sgi-irix6.5] libgcc_s.so.1 not found by 64-bit testsuite Documentation ! * [307]15498 typo in gcc manual: non-existing locale example en_UK, should be en_GB ! * [308]15747 [mips-sgi-irix5.3] /bin/sh hangs during bootstrap: document broken shell ! * [309]16406 USE_LD_AS_NEEDED undocumented __________________________________________________________________ ! GCC 3.4.4 ! This is the [310]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 3.4.4 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). __________________________________________________________________ ! GCC 3.4.5 ! This is the [311]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 3.4.5 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). Bootstrap issues ! * [312]24688 sco_math fixincl breaks math.h C compiler bugs ! * [313]17188 struct Foo { } redefinition ! * [314]20187 wrong code for ((unsigned char)(unsigned long long)((a?a:1)&(a*b)))?0:1) ! * [315]21873 infinite warning loop on bad array initializer ! * [316]21899 enum definition accepts values to be overriden ! * [317]22061 ICE in find_function_data, in function.c ! * [318]22308 Failure to diagnose violation of constraint 6.516p2 ! * [319]22458 ICE on missing brace ! * [320]22589 ICE casting to long long ! * [321]24101 Segfault with preprocessed source C++ compiler and library bugs ! * [322]10611 operations on vector mode not recognized in C++ ! * [323]13377 unexpected behavior of namespace usage directive ! * [324]16002 Strange error message with new parser ! * [325]17413 local classes as template argument ! * [326]17609 spurious error message after using keyword ! * [327]17618 ICE in cp_convert_to_pointer, in cp/cvt.c ! * [328]18124 ICE with invalid template template parameter ! * [329]18155 typedef in template declaration not rejected ! * [330]18177 ICE with const_cast for undeclared variable ! * [331]18368 C++ error message regression ! * [332]16378 ICE when returning a copy of a packed member ! * [333]18466 int ::i; accepted ! * [334]18512 ICE on invalid usage of template base class ! * [335]18454 ICE when returning undefined type ! * [336]18738 typename not allowed with non-dependent qualified name ! * [337]18803 rejects access to operator() in template ! * [338]19004 ICE in uses_template_parms, in cp/pt.c ! * [339]19208 Spurious error about variably modified type ! * [340]18253 bad error message / ICE for invalid template parameter ! * [341]19608 ICE after friend function definition in local class ! * [342]19884 ICE on explicit instantiation of a non-template constructor ! * [343]20153 ICE when C++ template function contains anonymous union ! * [344]20563 Infinite loop in diagnostic (and ice after error message) ! * [345]20789 ICE with incomplete type in template ! * [346]21336 Internal compiler error when using custom new operators ! * [347]21768 ICE in error message due to violation of coding conventions ! * [348]21853 constness of pointer to data member ignored ! * [349]21903 Default argument of template function causes a compile-time error ! * [350]21983 multiple diagnostics ! * [351]21987 New testsuite failure g++.dg/warn/conversion-function-1.C ! * [352]22153 ICE on invalid template specialization ! * [353]22172 Internal compiler error, seg fault. ! * [354]21286 filebuf::xsgetn vs pipes ! * [355]22233 ICE with wrong number of template parameters ! * [356]22508 ICE after invalid operator new ! * [357]22545 ICE with pointer to class member & user defined conversion operator ! * [358]23528 Wrong default allocator in ext/hash_map ! * [359]23550 char_traits requirements/1.cc test bad math ! * [360]23586 Bad diagnostic for invalid namespace-name ! * [361]23624 ICE in invert_truthvalue, in fold-const.c ! * [362]23639 Bad error message: not a member of '' ! * [363]23797 ICE on typename outside template ! * [364]23965 Bogus error message: no matching function for call to 'foo()' ! * [365]24052 &#`label_decl' not supported by dump_expr# ! * [366]24580 virtual base class cause exception not to be caught Problems in generated debug information ! * [367]24267 Bad DWARF for altivec vectors Optimizations issues ! * [368]17810 ICE in verify_local_live_at_start ! * [369]17860 Wrong generated code for loop with varying bound ! * [370]21709 ICE on compile-time complex NaN ! * [371]21964 broken tail call at -O2 or more ! * [372]22167 Strange optimization bug when using -Os ! * [373]22619 Compilation failure for real_const_1.f and real_const_2.f90 ! * [374]23241 Invalid code generated for comparison of uchar to 255 ! * [375]23478 Miscompilation due to reloading of a var that is also used in EH pad ! * [376]24470 segmentation fault in cc1plus when compiling with -O ! * [377]24950 ICE in operand_subword_force Precompiled headers problems ! * [378]14400 Cannot compile qt-x11-free-3.3.0 ! * [379]14940 PCH largefile test fails on various platforms Preprocessor bugs ! * [380]20239 ICE on empty preprocessed input ! * [381]15220 "gcc -E -MM -MG" reports missing system headers in source directory Testsuite issues ! * [382]19275 gcc.dg/20020919-1.c fails with -fpic/-fPIC on i686-pc-linux-gnu Alpha specific ! * [383]21888 bootstrap failure with linker relaxation enabled ARM specific ! * [384]15342 [arm-linux]: ICE in verify_local_live_at_start ! * [385]23985 Memory aliasing information incorrect in inlined memcpy ColdFile specific ! * [386]16719 Illegal move of byte into address register causes compiler to ICE HPPA specific ! * [387]21723 ICE while building libgfortran ! * [388]21841 -mhp-ld/-mgnu-ld documentation IA-64 specific ! * [389]23644 IA-64 hardware models and configuration options documentation error ! * [390]24718 Shared libgcc not used for linking by default M68000 specific ! * [391]18421 ICE in reload_cse_simplify_operands, in postreload.c MIPS specific ! * [392]20621 ICE in change_address_1, in emit-rtl.c PowerPC and PowerPC64 specific ! * [393]18583 error on valid code: const __attribute__((altivec(vector__))) doesn't work in arrays ! * [394]20191 ICE in reload_cse_simplify_operands ! * [395]22083 AIX: TARGET_C99_FUNCTIONS is wrongly defined ! * [396]23070 CALL_V4_CLEAR_FP_ARGS flag not properly set ! * [397]23404 gij trashes args of functions with more than 8 fp args ! * [398]23539 C & C++ compiler generating misaligned references regardless of compiler flags ! * [399]24102 floatdisf2_internal2 broken ! * [400]24465 -mminimal-toc miscompilation of __thread vars Solaris specific ! * [401]19933 Problem with define of HUGE_VAL in math_c99 ! * [402]21889 Native Solaris assembler cannot grok DTP-relative debug symbols SPARC specific ! * [403]19300 PCH failures on sparc-linux ! * [404]20301 Assembler labels have a leading "-" ! * [405]20673 C PCH testsuite assembly comparison failure x86 and x86_64 specific ! * [406]18582 ICE with arrays of type V2DF ! * [407]19340 Compilation SEGFAULTs with -O1 -fschedule-insns2 -fsched2-use-traces ! * [408]21716 ICE in reg-stack.c's swap_rtx_condition ! * [409]24315 amd64 fails -fpeephole2 __________________________________________________________________ ! GCC 3.4.6 ! This is the [410]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 3.4.6 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). For questions related to the use of GCC, please consult these web ! pages and the [411]GCC manuals. If that fails, the ! [412]gcc-help@gcc.gnu.org mailing list might help. Comments on these web pages and the development of GCC are welcome on our developer ! list at [413]gcc@gcc.gnu.org. All of [414]our lists have public archives. ! Copyright (C) [415]Free Software Foundation, Inc. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! These pages are [416]maintained by the GCC team. Last modified ! 2023-01-27. References --- 17466,17989 ---- Bootstrap failures and issues ! * [174]16469 [mips-sgi-irix5.3] bootstrap fails in libstdc++-v3/testsuite ! * [175]16344 [hppa-linux-gnu] libstdc++'s PCH built by profiledbootstrap does not work with the built compiler ! * [176]16842 [Solaris/x86] mkheaders can not find mkheaders.conf Multi-platform internal compiler errors (ICEs) ! * [177]12608 (c++) ICE: expected class 't', have 'x' (error_mark) in cp_parser_class_specifier, in cp/parser.c ! * [178]14492 ICE in loc_descriptor_from_tree, in dwarf2out.c ! * [179]15461 (c++) ICE due to NRV and inlining ! * [180]15890 (c++) ICE in c_expand_expr, in c-common.c ! * [181]16180 ICE: segmentation fault in RTL optimization ! * [182]16224 (c++) ICE in write_unscoped_name (template/namespace) ! * [183]16408 ICE: in delete_insn, in cfgrtl.c ! * [184]16529 (c++) ICE for: namespace-alias shall not be declared as the name of any other entity ! * [185]16698 (c++) ICE with exceptions and declaration of __cxa_throw ! * [186]16706 (c++) ICE in finish_member_declaration, in cp/semantics.c ! * [187]16810 (c++) Legal C++ program with cast gives ICE in build_ptrmemfunc ! * [188]16851 (c++) ICE when throwing a comma expression ! * [189]16870 (c++) Boost.Spirit causes ICE in tsubst, in cp/pt.c ! * [190]16904 (c++) ICE in finish_class_member_access_expr, in cp/typeck.c ! * [191]16905 (c++) ICE (segfault) with exceptions ! * [192]16964 (c++) ICE in cp_parser_class_specifier due to redefinition ! * [193]17068 (c++) ICE: tree check: expected class 'd', have 'x' (identifier_node) in dependent_template_p, in cp/pt.c Preprocessor bugs ! * [194]16366 Preprocessor option -remap causes memory corruption Optimization ! * [195]15345 unreferenced nested inline functions not optimized away ! * [196]16590 Incorrect execution when compiling with -O2 ! * [197]16693 Bitwise AND is lost when used within a cast to an enum of the same precision ! * [198]17078 Jump into if(0) substatement fails Problems in generated debug information ! * [199]13956 incorrect stabs for nested local variables C front end bugs ! * [200]16684 GCC should not warn about redundant redeclarations of built-ins C++ compiler and library ! * [201]12658 Thread safety problems in locale::global() and locale::locale() ! * [202]13092 g++ accepts invalid pointer-to-member conversion ! * [203]15320 Excessive memory consumption ! * [204]16246 Incorrect template argument deduction ! * [205]16273 Memory exhausted when using nested classes and virtual functions ! * [206]16401 ostringstream in gcc 3.4.x very slow for big data ! * [207]16411 undefined reference to __gnu_cxx::stdio_sync_filebuf >::file() ! * [208]16489 G++ incorrectly rejects use of a null constant integral expression as a null constant pointer ! * [209]16618 offsetof fails with constant member ! * [210]16637 syntax error reported for valid input code ! * [211]16717 __attribute__((constructor)) broken in C++ ! * [212]16813 compiler error in DEBUG version of range insertion std::map::insert ! * [213]16853 pointer-to-member initialization from incompatible one accepted ! * [214]16889 ambiguity is not detected ! * [215]16959 Segmentation fault in ios_base::sync_with_stdio Java compiler and library ! * [216]7587 direct threaded interpreter not thread-safe ! * [217]16473 ServerSocket accept() leaks file descriptors ! * [218]16478 Hash synchronization deadlock with finalizers Alpha-specific ! * [219]10695 ICE in dwarf2out_frame_debug_expr, in dwarf2out.c ! * [220]16974 could not split insn (ice in final_scan_insn, in final.c) x86-specific ! * [221]16298 ICE in output_operand ! * [222]17113 ICE with SSE2 intrinsics x86-64 specific ! * [223]14697 libstdc++ couldn't find 32bit libgcc_s MIPS-specific ! * [224]15869 [mips64] No NOP after LW (with -mips1 -O0) ! * [225]16325 [mips64] value profiling clobbers gp on mips ! * [226]16357 [mipsisa64-elf] ICE copying 7 bytes between extern char[]s ! * [227]16380 [mips64] Use of uninitialised register after dbra conversion ! * [228]16407 [mips64] Unaligned access to local variables ! * [229]16643 [mips64] verify_local_live_at_start ICE after crossjumping & cfgcleanup ARM-specific ! * [230]15927 THUMB -O2: strength-reduced iteration variable ends up off by 1 ! * [231]15948 THUMB: ICE with non-commutative cbranch ! * [232]17019 THUMB: bad switch statement in md code for addsi3_cbranch_scratch IA64-specific ! * [233]16130 ICE on valid code: in bundling, in config/ia64/ia64.c (-mtune=merced) ! * [234]16142 ICE on valid code: in bundling, in config/ia64/ia64.c (-mtune=itanium) ! * [235]16278 Gcc failed to build Linux kernel with -mtune=merced ! * [236]16414 ICE on valid code: typo in comparison of asm_noperands result ! * [237]16445 ICE on valid code: don't count ignored insns ! * [238]16490 ICE (segfault) while compiling with -fprofile-use ! * [239]16683 ia64 does not honor SUBTARGET_EXTRA_SPECS PowerPC-specific ! * [240]16195 (ppc64): Miscompilation of GCC 3.3.x by 3.4.x ! * [241]16239 ICE on ppc64 (mozilla 1.7 compile, -O1 -fno-exceptions issue) SPARC-specific ! * [242]16199 ICE while compiling apache 2.0.49 ! * [243]16416 -m64 doesn't imply -mcpu=v9 anymore ! * [244]16430 ICE when returning non-C aggregates larger than 16 bytes Bugs specific to embedded processors ! * [245]16379 [m32r] can't output large model function call of memcpy ! * [246]17093 [m32r] ICE with -msdata=use -O0 ! * [247]17119 [m32r] ICE at switch case 0x8000 DJGPP-specific ! * [248]15928 libstdc++ in 3.4.x doesn't cross-compile for djgpp Alpha Tru64-specific ! * [249]16210 libstdc++ gratuitously omits "long long" I/O Testsuite, documentation issues (compiler is not affected): ! * [250]15488 (libstdc++) possibly insufficient file permissions for executing test suite ! * [251]16250 ada/doctools runs makeinfo even in release tarball __________________________________________________________________ ! [252]GCC 3.4.3 ! This is the [253]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 3.4.3 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). Bootstrap failures ! * [254]17369 [ia64] Bootstrap failure with binutils-2.15.90.0.1.1 ! * [255]17850 [arm-elf] bootstrap failure - libstdc++ uses strtold when undeclared Internal compiler errors (ICEs) affecting multiple platforms ! * [256]13948 (java) GCJ segmentation fault while compiling GL4Java .class files ! * [257]14492 ICE in loc_descriptor_from_tree, in dwarf2out.c ! * [258]16301 (c++) ICE when "strong" attribute is attached to a using directive ! * [259]16566 ICE with flexible arrays ! * [260]17023 ICE with nested functions in parameter declaration ! * [261]17027 ICE with noreturn function in loop at -O2 ! * [262]17524 ICE in grokdeclarator, in cp/decl.c ! * [263]17826 (c++) ICE in cp_tree_equal C and optimization bugs ! * [264]15526 -ftrapv aborts on 0 * (-1) ! * [265]16999 #ident stopped working ! * [266]17503 quadratic behaviour in invalid_mode_change_p ! * [267]17581 Long long arithmetic fails inside a switch/case statement when compiled with -O2 ! * [268]18129 -fwritable-strings doesn't work C++ compiler and library bugs ! * [269]10975 incorrect initial ostringstream::tellp() ! * [270]11722 Unbuffered filebuf::sgetn is slow ! * [271]14534 Unrecognizing static function as a template parameter when its return value is also templated ! * [272]15172 Copy constructor optimization in aggregate initialization ! * [273]15786 Bad error message for frequently occuring error. ! * [274]16162 Rejects valid member-template-definition ! * [275]16612 empty basic_strings can't live in shared memory ! * [276]16715 std::basic_iostream is instantiated when used, even though instantiations are already contained in libstdc++ ! * [277]16848 code in /ext/demangle.h appears broken ! * [278]17132 GCC fails to eliminate function template specialization when argument deduction fails ! * [279]17259 One more _S_leaf incorrectly qualified with _RopeRep:: in ropeimpl.h ! * [280]17327 use of `enumeral_type' in template type unification ! * [281]17393 "unused variable '._0'" warning with -Wall ! * [282]17501 Confusion with member templates ! * [283]17537 g++ not passing -lstdc++ to linker when all command line arguments are libraries ! * [284]17585 usage of unqualified name of static member from within class not allowed ! * [285]17821 Poor diagnostic for using "." instead of "->" ! * [286]17829 wrong error: call of overloaded function is ambiguous ! * [287]17851 Misleading diagnostic for invalid function declarations with undeclared types ! * [288]17976 Destructor is called twice ! * [289]18020 rejects valid definition of enum value in template ! * [290]18093 bogus conflict in namespace aliasing ! * [291]18140 C++ parser bug when using >> in templates Fortran ! * [292]17541 data statements with double precision constants fail x86-specific ! * [293]17853 -O2 ICE for MMX testcase SPARC-specific ! * [294]17245 ICE compiling gsl-1.5 statistics/lag1.c Darwin-specific ! * [295]17167 FATAL:Symbol L_foo$stub already defined. AIX-specific ! * [296]17277 could not catch an exception when specified -maix64 Solaris-specific ! * [297]17505 calls acosf(), ceilf(), and other functions missing from system libraries HP/UX specific: ! * [298]17684 /usr/ccs/bin/ld: Can't create libgcc_s.sl ARM-specific ! * [299]17384 ICE with mode attribute on structures MIPS-specific ! * [300]17770 No NOP after LWL with -mips1 Other embedded target specific ! * [301]11476 [arc-elf] gcc ICE on newlib's vfprintf.c ! * [302]14064 [avr-elf] -fdata-sections triggers ICE ! * [303]14678 [m68hc11-elf] gcc ICE ! * [304]15583 [powerpc-rtems] powerpc-rtems lacks __USE_INIT_FINI__ ! * [305]15790 [i686-coff] Alignment error building gcc with i686-coff target ! * [306]15886 [SH] Miscompilation with -O2 -fPIC ! * [307]16884 [avr-elf] [fweb related] bug while initializing variables Bugs relating to debugger support ! * [308]13841 missing debug info for _Complex function arguments ! * [309]15860 [big-endian targets] No DW_AT_location debug info is emitted for formal arguments to a function that uses "register" qualifiers Testsuite issues (compiler not affected) ! * [310]17465 Testsuite in libffi overrides LD_LIBRARY_PATH ! * [311]17469 Testsuite in libstdc++ overrides LD_LIBRARY_PATH ! * [312]18138 [mips-sgi-irix6.5] libgcc_s.so.1 not found by 64-bit testsuite Documentation ! * [313]15498 typo in gcc manual: non-existing locale example en_UK, should be en_GB ! * [314]15747 [mips-sgi-irix5.3] /bin/sh hangs during bootstrap: document broken shell ! * [315]16406 USE_LD_AS_NEEDED undocumented __________________________________________________________________ ! [316]GCC 3.4.4 ! This is the [317]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 3.4.4 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). __________________________________________________________________ ! [318]GCC 3.4.5 ! This is the [319]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 3.4.5 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). Bootstrap issues ! * [320]24688 sco_math fixincl breaks math.h C compiler bugs ! * [321]17188 struct Foo { } redefinition ! * [322]20187 wrong code for ((unsigned char)(unsigned long long)((a?a:1)&(a*b)))?0:1) ! * [323]21873 infinite warning loop on bad array initializer ! * [324]21899 enum definition accepts values to be overriden ! * [325]22061 ICE in find_function_data, in function.c ! * [326]22308 Failure to diagnose violation of constraint 6.516p2 ! * [327]22458 ICE on missing brace ! * [328]22589 ICE casting to long long ! * [329]24101 Segfault with preprocessed source C++ compiler and library bugs ! * [330]10611 operations on vector mode not recognized in C++ ! * [331]13377 unexpected behavior of namespace usage directive ! * [332]16002 Strange error message with new parser ! * [333]17413 local classes as template argument ! * [334]17609 spurious error message after using keyword ! * [335]17618 ICE in cp_convert_to_pointer, in cp/cvt.c ! * [336]18124 ICE with invalid template template parameter ! * [337]18155 typedef in template declaration not rejected ! * [338]18177 ICE with const_cast for undeclared variable ! * [339]18368 C++ error message regression ! * [340]16378 ICE when returning a copy of a packed member ! * [341]18466 int ::i; accepted ! * [342]18512 ICE on invalid usage of template base class ! * [343]18454 ICE when returning undefined type ! * [344]18738 typename not allowed with non-dependent qualified name ! * [345]18803 rejects access to operator() in template ! * [346]19004 ICE in uses_template_parms, in cp/pt.c ! * [347]19208 Spurious error about variably modified type ! * [348]18253 bad error message / ICE for invalid template parameter ! * [349]19608 ICE after friend function definition in local class ! * [350]19884 ICE on explicit instantiation of a non-template constructor ! * [351]20153 ICE when C++ template function contains anonymous union ! * [352]20563 Infinite loop in diagnostic (and ice after error message) ! * [353]20789 ICE with incomplete type in template ! * [354]21336 Internal compiler error when using custom new operators ! * [355]21768 ICE in error message due to violation of coding conventions ! * [356]21853 constness of pointer to data member ignored ! * [357]21903 Default argument of template function causes a compile-time error ! * [358]21983 multiple diagnostics ! * [359]21987 New testsuite failure g++.dg/warn/conversion-function-1.C ! * [360]22153 ICE on invalid template specialization ! * [361]22172 Internal compiler error, seg fault. ! * [362]21286 filebuf::xsgetn vs pipes ! * [363]22233 ICE with wrong number of template parameters ! * [364]22508 ICE after invalid operator new ! * [365]22545 ICE with pointer to class member & user defined conversion operator ! * [366]23528 Wrong default allocator in ext/hash_map ! * [367]23550 char_traits requirements/1.cc test bad math ! * [368]23586 Bad diagnostic for invalid namespace-name ! * [369]23624 ICE in invert_truthvalue, in fold-const.c ! * [370]23639 Bad error message: not a member of '' ! * [371]23797 ICE on typename outside template ! * [372]23965 Bogus error message: no matching function for call to 'foo()' ! * [373]24052 &#`label_decl' not supported by dump_expr# ! * [374]24580 virtual base class cause exception not to be caught Problems in generated debug information ! * [375]24267 Bad DWARF for altivec vectors Optimizations issues ! * [376]17810 ICE in verify_local_live_at_start ! * [377]17860 Wrong generated code for loop with varying bound ! * [378]21709 ICE on compile-time complex NaN ! * [379]21964 broken tail call at -O2 or more ! * [380]22167 Strange optimization bug when using -Os ! * [381]22619 Compilation failure for real_const_1.f and real_const_2.f90 ! * [382]23241 Invalid code generated for comparison of uchar to 255 ! * [383]23478 Miscompilation due to reloading of a var that is also used in EH pad ! * [384]24470 segmentation fault in cc1plus when compiling with -O ! * [385]24950 ICE in operand_subword_force Precompiled headers problems ! * [386]14400 Cannot compile qt-x11-free-3.3.0 ! * [387]14940 PCH largefile test fails on various platforms Preprocessor bugs ! * [388]20239 ICE on empty preprocessed input ! * [389]15220 "gcc -E -MM -MG" reports missing system headers in source directory Testsuite issues ! * [390]19275 gcc.dg/20020919-1.c fails with -fpic/-fPIC on i686-pc-linux-gnu Alpha specific ! * [391]21888 bootstrap failure with linker relaxation enabled ARM specific ! * [392]15342 [arm-linux]: ICE in verify_local_live_at_start ! * [393]23985 Memory aliasing information incorrect in inlined memcpy ColdFile specific ! * [394]16719 Illegal move of byte into address register causes compiler to ICE HPPA specific ! * [395]21723 ICE while building libgfortran ! * [396]21841 -mhp-ld/-mgnu-ld documentation IA-64 specific ! * [397]23644 IA-64 hardware models and configuration options documentation error ! * [398]24718 Shared libgcc not used for linking by default M68000 specific ! * [399]18421 ICE in reload_cse_simplify_operands, in postreload.c MIPS specific ! * [400]20621 ICE in change_address_1, in emit-rtl.c PowerPC and PowerPC64 specific ! * [401]18583 error on valid code: const __attribute__((altivec(vector__))) doesn't work in arrays ! * [402]20191 ICE in reload_cse_simplify_operands ! * [403]22083 AIX: TARGET_C99_FUNCTIONS is wrongly defined ! * [404]23070 CALL_V4_CLEAR_FP_ARGS flag not properly set ! * [405]23404 gij trashes args of functions with more than 8 fp args ! * [406]23539 C & C++ compiler generating misaligned references regardless of compiler flags ! * [407]24102 floatdisf2_internal2 broken ! * [408]24465 -mminimal-toc miscompilation of __thread vars Solaris specific ! * [409]19933 Problem with define of HUGE_VAL in math_c99 ! * [410]21889 Native Solaris assembler cannot grok DTP-relative debug symbols SPARC specific ! * [411]19300 PCH failures on sparc-linux ! * [412]20301 Assembler labels have a leading "-" ! * [413]20673 C PCH testsuite assembly comparison failure x86 and x86_64 specific ! * [414]18582 ICE with arrays of type V2DF ! * [415]19340 Compilation SEGFAULTs with -O1 -fschedule-insns2 -fsched2-use-traces ! * [416]21716 ICE in reg-stack.c's swap_rtx_condition ! * [417]24315 amd64 fails -fpeephole2 __________________________________________________________________ ! [418]GCC 3.4.6 ! This is the [419]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 3.4.6 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). For questions related to the use of GCC, please consult these web ! pages and the [420]GCC manuals. If that fails, the ! [421]gcc-help@gcc.gnu.org mailing list might help. Comments on these web pages and the development of GCC are welcome on our developer ! list at [422]gcc@gcc.gnu.org. All of [423]our lists have public archives. ! Copyright (C) [424]Free Software Foundation, Inc. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! These pages are [425]maintained by the GCC team. Last modified ! 2025-01-31. References *************** References *** 17562,17976 **** 7. https://www.boost.org/ 8. https://gcc.gnu.org/PR11953 9. https://gcc.gnu.org/PR8361 ! 10. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Other-Builtins.html#Other Builtins ! 11. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_closed.html#209 ! 12. https://gcc.gnu.org/bugs/#cxx_rvalbind ! 13. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Objective-C-Dialect-Options.html 14. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Objective-C-Dialect-Options.html 15. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Objective-C-Dialect-Options.html ! 16. http://www.gnu.org/software/classpath/ ! 17. https://www.eclipse.org/ ! 18. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/g77/News.html ! 19. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Alpha-Built-in-Functions.html ! 20. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gccint/Processor-pipeline-description.html ! 21. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gccint/Comparison-of-the-two-descriptions.html ! 22. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gccint/Processor-pipeline-description.html ! 23. https://gcc.gnu.org/gcc-3.4/mips-abi.html ! 24. https://gcc.gnu.org/gcc-3.4/powerpc-abi.html ! 25. https://gcc.gnu.org/gcc-3.4/sparc-abi.html ! 26. https://gcc.gnu.org/bugzilla/buglist.cgi?short_desc_type=notregexp&short_desc=\[3\.4.*[Rr]egression&target_milestone=3.4.0&bug_status=RESOLVED&resolution=FIXED ! 27. https://gcc.gnu.org/PR10129 ! 28. https://gcc.gnu.org/PR14576 ! 29. https://gcc.gnu.org/PR14760 ! 30. https://gcc.gnu.org/PR14671 ! 31. https://gcc.gnu.org/PR15093 ! 32. https://gcc.gnu.org/PR15178 ! 33. https://gcc.gnu.org/PR12753 ! 34. https://gcc.gnu.org/PR13985 ! 35. https://gcc.gnu.org/PR14810 ! 36. https://gcc.gnu.org/PR14883 ! 37. https://gcc.gnu.org/PR15044 ! 38. https://gcc.gnu.org/PR15057 ! 39. https://gcc.gnu.org/PR15064 ! 40. https://gcc.gnu.org/PR15142 ! 41. https://gcc.gnu.org/PR15159 ! 42. https://gcc.gnu.org/PR15165 ! 43. https://gcc.gnu.org/PR15193 ! 44. https://gcc.gnu.org/PR15209 ! 45. https://gcc.gnu.org/PR15227 ! 46. https://gcc.gnu.org/PR15285 ! 47. https://gcc.gnu.org/PR15299 ! 48. https://gcc.gnu.org/PR15329 ! 49. https://gcc.gnu.org/PR15550 ! 50. https://gcc.gnu.org/PR15554 ! 51. https://gcc.gnu.org/PR15640 ! 52. https://gcc.gnu.org/PR15666 ! 53. https://gcc.gnu.org/PR15696 ! 54. https://gcc.gnu.org/PR15701 ! 55. https://gcc.gnu.org/PR15761 ! 56. https://gcc.gnu.org/PR15829 ! 57. https://gcc.gnu.org/PR14538 ! 58. https://gcc.gnu.org/PR12391 ! 59. https://gcc.gnu.org/PR14649 ! 60. https://gcc.gnu.org/PR15004 ! 61. https://gcc.gnu.org/PR15749 ! 62. https://gcc.gnu.org/PR10646 ! 63. https://gcc.gnu.org/PR12077 ! 64. https://gcc.gnu.org/PR13598 ! 65. https://gcc.gnu.org/PR14211 ! 66. https://gcc.gnu.org/PR14220 ! 67. https://gcc.gnu.org/PR14245 ! 68. https://gcc.gnu.org/PR14340 ! 69. https://gcc.gnu.org/PR14600 ! 70. https://gcc.gnu.org/PR14668 ! 71. https://gcc.gnu.org/PR14775 ! 72. https://gcc.gnu.org/PR14821 ! 73. https://gcc.gnu.org/PR14930 ! 74. https://gcc.gnu.org/PR14932 ! 75. https://gcc.gnu.org/PR14950 ! 76. https://gcc.gnu.org/PR14962 ! 77. https://gcc.gnu.org/PR14975 ! 78. https://gcc.gnu.org/PR15002 ! 79. https://gcc.gnu.org/PR15025 ! 80. https://gcc.gnu.org/PR15046 ! 81. https://gcc.gnu.org/PR15069 ! 82. https://gcc.gnu.org/PR15074 ! 83. https://gcc.gnu.org/PR15083 ! 84. https://gcc.gnu.org/PR15096 ! 85. https://gcc.gnu.org/PR15287 ! 86. https://gcc.gnu.org/PR15317 ! 87. https://gcc.gnu.org/PR15337 ! 88. https://gcc.gnu.org/PR15361 ! 89. https://gcc.gnu.org/PR15412 ! 90. https://gcc.gnu.org/PR15427 ! 91. https://gcc.gnu.org/PR15471 ! 92. https://gcc.gnu.org/PR15503 ! 93. https://gcc.gnu.org/PR15507 ! 94. https://gcc.gnu.org/PR15542 ! 95. https://gcc.gnu.org/PR15565 ! 96. https://gcc.gnu.org/PR15625 ! 97. https://gcc.gnu.org/PR15629 ! 98. https://gcc.gnu.org/PR15742 ! 99. https://gcc.gnu.org/PR15775 ! 100. https://gcc.gnu.org/PR15821 ! 101. https://gcc.gnu.org/PR15862 ! 102. https://gcc.gnu.org/PR15875 ! 103. https://gcc.gnu.org/PR15877 ! 104. https://gcc.gnu.org/PR15947 ! 105. https://gcc.gnu.org/PR16020 ! 106. https://gcc.gnu.org/PR16154 ! 107. https://gcc.gnu.org/PR16174 ! 108. https://gcc.gnu.org/PR14315 ! 109. https://gcc.gnu.org/PR15151 ! 110. https://gcc.gnu.org/PR7993 ! 111. https://gcc.gnu.org/PR15228 ! 112. https://gcc.gnu.org/PR15345 ! 113. https://gcc.gnu.org/PR15945 ! 114. https://gcc.gnu.org/PR15526 ! 115. https://gcc.gnu.org/PR14690 ! 116. https://gcc.gnu.org/PR15112 ! 117. https://gcc.gnu.org/PR15067 ! 118. https://gcc.gnu.org/PR1963 ! 119. https://gcc.gnu.org/PR15717 ! 120. https://gcc.gnu.org/PR14782 ! 121. https://gcc.gnu.org/PR14828 ! 122. https://gcc.gnu.org/PR15202 ! 123. https://gcc.gnu.org/PR14610 ! 124. https://gcc.gnu.org/PR14813 ! 125. https://gcc.gnu.org/PR14857 ! 126. https://gcc.gnu.org/PR15598 ! 127. https://gcc.gnu.org/PR15653 ! 128. https://gcc.gnu.org/PR15189 ! 129. https://gcc.gnu.org/PR15331 ! 130. https://gcc.gnu.org/PR16144 ! 131. https://gcc.gnu.org/PR16176 ! 132. https://gcc.gnu.org/PR11591 ! 133. https://gcc.gnu.org/PR12028 ! 134. https://gcc.gnu.org/PR14478 ! 135. https://gcc.gnu.org/PR14567 ! 136. https://gcc.gnu.org/PR14715 ! 137. https://gcc.gnu.org/PR14902 ! 138. https://gcc.gnu.org/PR14924 ! 139. https://gcc.gnu.org/PR14960 ! 140. https://gcc.gnu.org/PR15106 ! 141. https://gcc.gnu.org/PR16026 ! 142. https://gcc.gnu.org/PR15191 ! 143. https://gcc.gnu.org/PR15662 ! 144. https://gcc.gnu.org/PR15054 ! 145. https://gcc.gnu.org/PR15783 ! 146. https://gcc.gnu.org/PR15626 ! 147. https://gcc.gnu.org/PR14326 ! 148. https://gcc.gnu.org/PR14723 ! 149. https://gcc.gnu.org/PR15290 ! 150. https://gcc.gnu.org/PR15250 ! 151. https://gcc.gnu.org/PR15551 ! 152. https://gcc.gnu.org/PR8309 ! 153. https://gcc.gnu.org/PR13250 ! 154. https://gcc.gnu.org/PR13803 ! 155. https://gcc.gnu.org/PR14093 ! 156. https://gcc.gnu.org/PR14457 ! 157. https://gcc.gnu.org/PR14542 ! 158. https://gcc.gnu.org/PR15100 ! 159. https://gcc.gnu.org/PR15296 ! 160. https://gcc.gnu.org/PR15396 ! 161. https://gcc.gnu.org/PR15782 ! 162. https://gcc.gnu.org/PR11610 ! 163. https://gcc.gnu.org/PR15488 ! 164. https://gcc.gnu.org/PR15489 ! 165. https://gcc.gnu.org/PR13928 ! 166. https://gcc.gnu.org/PR14150 ! 167. https://gcc.gnu.org/PR14949 ! 168. https://gcc.gnu.org/PR15123 ! 169. https://gcc.gnu.org/PR16469 ! 170. https://gcc.gnu.org/PR16344 ! 171. https://gcc.gnu.org/PR16842 ! 172. https://gcc.gnu.org/PR12608 ! 173. https://gcc.gnu.org/PR14492 ! 174. https://gcc.gnu.org/PR15461 ! 175. https://gcc.gnu.org/PR15890 ! 176. https://gcc.gnu.org/PR16180 ! 177. https://gcc.gnu.org/PR16224 ! 178. https://gcc.gnu.org/PR16408 ! 179. https://gcc.gnu.org/PR16529 ! 180. https://gcc.gnu.org/PR16698 ! 181. https://gcc.gnu.org/PR16706 ! 182. https://gcc.gnu.org/PR16810 ! 183. https://gcc.gnu.org/PR16851 ! 184. https://gcc.gnu.org/PR16870 ! 185. https://gcc.gnu.org/PR16904 ! 186. https://gcc.gnu.org/PR16905 ! 187. https://gcc.gnu.org/PR16964 ! 188. https://gcc.gnu.org/PR17068 ! 189. https://gcc.gnu.org/PR16366 ! 190. https://gcc.gnu.org/PR15345 ! 191. https://gcc.gnu.org/PR16590 ! 192. https://gcc.gnu.org/PR16693 ! 193. https://gcc.gnu.org/PR17078 ! 194. https://gcc.gnu.org/PR13956 ! 195. https://gcc.gnu.org/PR16684 ! 196. https://gcc.gnu.org/PR12658 ! 197. https://gcc.gnu.org/PR13092 ! 198. https://gcc.gnu.org/PR15320 ! 199. https://gcc.gnu.org/PR16246 ! 200. https://gcc.gnu.org/PR16273 ! 201. https://gcc.gnu.org/PR16401 ! 202. https://gcc.gnu.org/PR16411 ! 203. https://gcc.gnu.org/PR16489 ! 204. https://gcc.gnu.org/PR16618 ! 205. https://gcc.gnu.org/PR16637 ! 206. https://gcc.gnu.org/PR16717 ! 207. https://gcc.gnu.org/PR16813 ! 208. https://gcc.gnu.org/PR16853 ! 209. https://gcc.gnu.org/PR16889 ! 210. https://gcc.gnu.org/PR16959 ! 211. https://gcc.gnu.org/PR7587 ! 212. https://gcc.gnu.org/PR16473 ! 213. https://gcc.gnu.org/PR16478 ! 214. https://gcc.gnu.org/PR10695 ! 215. https://gcc.gnu.org/PR16974 ! 216. https://gcc.gnu.org/PR16298 ! 217. https://gcc.gnu.org/PR17113 ! 218. https://gcc.gnu.org/PR14697 ! 219. https://gcc.gnu.org/PR15869 ! 220. https://gcc.gnu.org/PR16325 ! 221. https://gcc.gnu.org/PR16357 ! 222. https://gcc.gnu.org/PR16380 ! 223. https://gcc.gnu.org/PR16407 ! 224. https://gcc.gnu.org/PR16643 ! 225. https://gcc.gnu.org/PR15927 ! 226. https://gcc.gnu.org/PR15948 ! 227. https://gcc.gnu.org/PR17019 ! 228. https://gcc.gnu.org/PR16130 ! 229. https://gcc.gnu.org/PR16142 ! 230. https://gcc.gnu.org/PR16278 ! 231. https://gcc.gnu.org/PR16414 ! 232. https://gcc.gnu.org/PR16445 ! 233. https://gcc.gnu.org/PR16490 ! 234. https://gcc.gnu.org/PR16683 ! 235. https://gcc.gnu.org/PR16195 ! 236. https://gcc.gnu.org/PR16239 ! 237. https://gcc.gnu.org/PR16199 ! 238. https://gcc.gnu.org/PR16416 ! 239. https://gcc.gnu.org/PR16430 ! 240. https://gcc.gnu.org/PR16379 ! 241. https://gcc.gnu.org/PR17093 ! 242. https://gcc.gnu.org/PR17119 ! 243. https://gcc.gnu.org/PR15928 ! 244. https://gcc.gnu.org/PR16210 ! 245. https://gcc.gnu.org/PR15488 ! 246. https://gcc.gnu.org/PR16250 ! 247. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.4.3 ! 248. https://gcc.gnu.org/PR17369 ! 249. https://gcc.gnu.org/PR17850 ! 250. https://gcc.gnu.org/PR13948 ! 251. https://gcc.gnu.org/PR14492 ! 252. https://gcc.gnu.org/PR16301 ! 253. https://gcc.gnu.org/PR16566 ! 254. https://gcc.gnu.org/PR17023 ! 255. https://gcc.gnu.org/PR17027 ! 256. https://gcc.gnu.org/PR17524 ! 257. https://gcc.gnu.org/PR17826 ! 258. https://gcc.gnu.org/PR15526 ! 259. https://gcc.gnu.org/PR16999 ! 260. https://gcc.gnu.org/PR17503 ! 261. https://gcc.gnu.org/PR17581 ! 262. https://gcc.gnu.org/PR18129 ! 263. https://gcc.gnu.org/PR10975 ! 264. https://gcc.gnu.org/PR11722 ! 265. https://gcc.gnu.org/PR14534 ! 266. https://gcc.gnu.org/PR15172 ! 267. https://gcc.gnu.org/PR15786 ! 268. https://gcc.gnu.org/PR16162 ! 269. https://gcc.gnu.org/PR16612 ! 270. https://gcc.gnu.org/PR16715 ! 271. https://gcc.gnu.org/PR16848 ! 272. https://gcc.gnu.org/PR17132 ! 273. https://gcc.gnu.org/PR17259 ! 274. https://gcc.gnu.org/PR17327 ! 275. https://gcc.gnu.org/PR17393 ! 276. https://gcc.gnu.org/PR17501 ! 277. https://gcc.gnu.org/PR17537 ! 278. https://gcc.gnu.org/PR17585 ! 279. https://gcc.gnu.org/PR17821 ! 280. https://gcc.gnu.org/PR17829 ! 281. https://gcc.gnu.org/PR17851 ! 282. https://gcc.gnu.org/PR17976 ! 283. https://gcc.gnu.org/PR18020 ! 284. https://gcc.gnu.org/PR18093 ! 285. https://gcc.gnu.org/PR18140 ! 286. https://gcc.gnu.org/PR17541 ! 287. https://gcc.gnu.org/PR17853 ! 288. https://gcc.gnu.org/PR17245 ! 289. https://gcc.gnu.org/PR17167 ! 290. https://gcc.gnu.org/PR17277 ! 291. https://gcc.gnu.org/PR17505 ! 292. https://gcc.gnu.org/PR17684 ! 293. https://gcc.gnu.org/PR17384 ! 294. https://gcc.gnu.org/PR17770 ! 295. https://gcc.gnu.org/PR11476 ! 296. https://gcc.gnu.org/PR14064 ! 297. https://gcc.gnu.org/PR14678 ! 298. https://gcc.gnu.org/PR15583 ! 299. https://gcc.gnu.org/PR15790 ! 300. https://gcc.gnu.org/PR15886 ! 301. https://gcc.gnu.org/PR16884 ! 302. https://gcc.gnu.org/PR13841 ! 303. https://gcc.gnu.org/PR15860 ! 304. https://gcc.gnu.org/PR17465 ! 305. https://gcc.gnu.org/PR17469 ! 306. https://gcc.gnu.org/PR18138 ! 307. https://gcc.gnu.org/PR15498 ! 308. https://gcc.gnu.org/PR15747 ! 309. https://gcc.gnu.org/PR16406 ! 310. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.4.4 ! 311. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.4.5 ! 312. https://gcc.gnu.org/PR24688 ! 313. https://gcc.gnu.org/PR17188 ! 314. https://gcc.gnu.org/PR20187 ! 315. https://gcc.gnu.org/PR21873 ! 316. https://gcc.gnu.org/PR21899 ! 317. https://gcc.gnu.org/PR22061 ! 318. https://gcc.gnu.org/PR22208 ! 319. https://gcc.gnu.org/PR22458 ! 320. https://gcc.gnu.org/PR22589 ! 321. https://gcc.gnu.org/PR24101 ! 322. https://gcc.gnu.org/PR10611 ! 323. https://gcc.gnu.org/PR13377 ! 324. https://gcc.gnu.org/PR16002 ! 325. https://gcc.gnu.org/PR17413 ! 326. https://gcc.gnu.org/PR17609 ! 327. https://gcc.gnu.org/PR17618 ! 328. https://gcc.gnu.org/PR18124 ! 329. https://gcc.gnu.org/PR18155 ! 330. https://gcc.gnu.org/PR18177 ! 331. https://gcc.gnu.org/PR18368 ! 332. https://gcc.gnu.org/PR18378 ! 333. https://gcc.gnu.org/PR18466 ! 334. https://gcc.gnu.org/PR18512 ! 335. https://gcc.gnu.org/PR18545 ! 336. https://gcc.gnu.org/PR18738 ! 337. https://gcc.gnu.org/PR18803 ! 338. https://gcc.gnu.org/PR19004 ! 339. https://gcc.gnu.org/PR19208 ! 340. https://gcc.gnu.org/PR19253 ! 341. https://gcc.gnu.org/PR19608 ! 342. https://gcc.gnu.org/PR19884 ! 343. https://gcc.gnu.org/PR20153 ! 344. https://gcc.gnu.org/PR20563 ! 345. https://gcc.gnu.org/PR20789 ! 346. https://gcc.gnu.org/PR21336 ! 347. https://gcc.gnu.org/PR21768 ! 348. https://gcc.gnu.org/PR21853 ! 349. https://gcc.gnu.org/PR21903 ! 350. https://gcc.gnu.org/PR21983 ! 351. https://gcc.gnu.org/PR21987 ! 352. https://gcc.gnu.org/PR22153 ! 353. https://gcc.gnu.org/PR22172 ! 354. https://gcc.gnu.org/PR21286 ! 355. https://gcc.gnu.org/PR22233 ! 356. https://gcc.gnu.org/PR22508 ! 357. https://gcc.gnu.org/PR22545 ! 358. https://gcc.gnu.org/PR23528 ! 359. https://gcc.gnu.org/PR23550 ! 360. https://gcc.gnu.org/PR23586 ! 361. https://gcc.gnu.org/PR23624 ! 362. https://gcc.gnu.org/PR23639 ! 363. https://gcc.gnu.org/PR23797 ! 364. https://gcc.gnu.org/PR23965 ! 365. https://gcc.gnu.org/PR24052 ! 366. https://gcc.gnu.org/PR24580 ! 367. https://gcc.gnu.org/PR24267 ! 368. https://gcc.gnu.org/PR17810 ! 369. https://gcc.gnu.org/PR17860 ! 370. https://gcc.gnu.org/PR21709 ! 371. https://gcc.gnu.org/PR21964 ! 372. https://gcc.gnu.org/PR22167 ! 373. https://gcc.gnu.org/PR22619 ! 374. https://gcc.gnu.org/PR23241 ! 375. https://gcc.gnu.org/PR23478 ! 376. https://gcc.gnu.org/PR24470 ! 377. https://gcc.gnu.org/PR24950 ! 378. https://gcc.gnu.org/PR14400 ! 379. https://gcc.gnu.org/PR14940 ! 380. https://gcc.gnu.org/PR20239 ! 381. https://gcc.gnu.org/PR15220 ! 382. https://gcc.gnu.org/PR19275 ! 383. https://gcc.gnu.org/PR21888 ! 384. https://gcc.gnu.org/PR15342 ! 385. https://gcc.gnu.org/PR23985 ! 386. https://gcc.gnu.org/PR16719 ! 387. https://gcc.gnu.org/PR21723 ! 388. https://gcc.gnu.org/PR21841 ! 389. https://gcc.gnu.org/PR23644 ! 390. https://gcc.gnu.org/PR24718 ! 391. https://gcc.gnu.org/PR18421 ! 392. https://gcc.gnu.org/PR20621 ! 393. https://gcc.gnu.org/PR18583 ! 394. https://gcc.gnu.org/PR20191 ! 395. https://gcc.gnu.org/PR22083 ! 396. https://gcc.gnu.org/PR23070 ! 397. https://gcc.gnu.org/PR23404 ! 398. https://gcc.gnu.org/PR23539 ! 399. https://gcc.gnu.org/PR24102 ! 400. https://gcc.gnu.org/PR24465 ! 401. https://gcc.gnu.org/PR19933 ! 402. https://gcc.gnu.org/PR21889 ! 403. https://gcc.gnu.org/PR19300 ! 404. https://gcc.gnu.org/PR20301 ! 405. https://gcc.gnu.org/PR20673 ! 406. https://gcc.gnu.org/PR18582 ! 407. https://gcc.gnu.org/PR19340 ! 408. https://gcc.gnu.org/PR21716 ! 409. https://gcc.gnu.org/PR24315 ! 410. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.4.6 ! 411. https://gcc.gnu.org/onlinedocs/ ! 412. mailto:gcc-help@gcc.gnu.org ! 413. mailto:gcc@gcc.gnu.org ! 414. https://gcc.gnu.org/lists.html ! 415. https://www.fsf.org/ ! 416. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-3.3/index.html GCC 3.3 Release Series (This release series is no longer supported.) --- 17996,18420 ---- 7. https://www.boost.org/ 8. https://gcc.gnu.org/PR11953 9. https://gcc.gnu.org/PR8361 ! 10. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Other-Builtins.html#Other%20Builtins ! 11. https://gcc.gnu.org/gcc-3.4/changes.html#cplusplus ! 12. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_closed.html#209 ! 13. https://gcc.gnu.org/bugs/#cxx_rvalbind 14. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Objective-C-Dialect-Options.html 15. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Objective-C-Dialect-Options.html ! 16. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Objective-C-Dialect-Options.html ! 17. https://www.gnu.org/software/classpath/ ! 18. https://www.eclipse.org/ ! 19. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/g77/News.html ! 20. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Alpha-Built-in-Functions.html ! 21. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gccint/Processor-pipeline-description.html ! 22. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gccint/Comparison-of-the-two-descriptions.html ! 23. https://gcc.gnu.org/onlinedocs/gcc-3.4.3/gccint/Processor-pipeline-description.html ! 24. https://gcc.gnu.org/gcc-3.4/mips-abi.html ! 25. https://gcc.gnu.org/gcc-3.4/powerpc-abi.html ! 26. https://gcc.gnu.org/gcc-3.4/sparc-abi.html ! 27. https://gcc.gnu.org/gcc-3.4/changes.html#obsolete_systems ! 28. https://gcc.gnu.org/gcc-3.4/changes.html#GCC3.4.0 ! 29. https://gcc.gnu.org/bugzilla/buglist.cgi?short_desc_type=notregexp&short_desc=%5C%5B3%5C.4.*%5BRr%5Degression&target_milestone=3.4.0&bug_status=RESOLVED&resolution=FIXED ! 30. https://gcc.gnu.org/gcc-3.4/changes.html#GCC3.4.1 ! 31. https://gcc.gnu.org/PR10129 ! 32. https://gcc.gnu.org/PR14576 ! 33. https://gcc.gnu.org/PR14760 ! 34. https://gcc.gnu.org/PR14671 ! 35. https://gcc.gnu.org/PR15093 ! 36. https://gcc.gnu.org/PR15178 ! 37. https://gcc.gnu.org/PR12753 ! 38. https://gcc.gnu.org/PR13985 ! 39. https://gcc.gnu.org/PR14810 ! 40. https://gcc.gnu.org/PR14883 ! 41. https://gcc.gnu.org/PR15044 ! 42. https://gcc.gnu.org/PR15057 ! 43. https://gcc.gnu.org/PR15064 ! 44. https://gcc.gnu.org/PR15142 ! 45. https://gcc.gnu.org/PR15159 ! 46. https://gcc.gnu.org/PR15165 ! 47. https://gcc.gnu.org/PR15193 ! 48. https://gcc.gnu.org/PR15209 ! 49. https://gcc.gnu.org/PR15227 ! 50. https://gcc.gnu.org/PR15285 ! 51. https://gcc.gnu.org/PR15299 ! 52. https://gcc.gnu.org/PR15329 ! 53. https://gcc.gnu.org/PR15550 ! 54. https://gcc.gnu.org/PR15554 ! 55. https://gcc.gnu.org/PR15640 ! 56. https://gcc.gnu.org/PR15666 ! 57. https://gcc.gnu.org/PR15696 ! 58. https://gcc.gnu.org/PR15701 ! 59. https://gcc.gnu.org/PR15761 ! 60. https://gcc.gnu.org/PR15829 ! 61. https://gcc.gnu.org/PR14538 ! 62. https://gcc.gnu.org/PR12391 ! 63. https://gcc.gnu.org/PR14649 ! 64. https://gcc.gnu.org/PR15004 ! 65. https://gcc.gnu.org/PR15749 ! 66. https://gcc.gnu.org/PR10646 ! 67. https://gcc.gnu.org/PR12077 ! 68. https://gcc.gnu.org/PR13598 ! 69. https://gcc.gnu.org/PR14211 ! 70. https://gcc.gnu.org/PR14220 ! 71. https://gcc.gnu.org/PR14245 ! 72. https://gcc.gnu.org/PR14340 ! 73. https://gcc.gnu.org/PR14600 ! 74. https://gcc.gnu.org/PR14668 ! 75. https://gcc.gnu.org/PR14775 ! 76. https://gcc.gnu.org/PR14821 ! 77. https://gcc.gnu.org/PR14930 ! 78. https://gcc.gnu.org/PR14932 ! 79. https://gcc.gnu.org/PR14950 ! 80. https://gcc.gnu.org/PR14962 ! 81. https://gcc.gnu.org/PR14975 ! 82. https://gcc.gnu.org/PR15002 ! 83. https://gcc.gnu.org/PR15025 ! 84. https://gcc.gnu.org/PR15046 ! 85. https://gcc.gnu.org/PR15069 ! 86. https://gcc.gnu.org/PR15074 ! 87. https://gcc.gnu.org/PR15083 ! 88. https://gcc.gnu.org/PR15096 ! 89. https://gcc.gnu.org/PR15287 ! 90. https://gcc.gnu.org/PR15317 ! 91. https://gcc.gnu.org/PR15337 ! 92. https://gcc.gnu.org/PR15361 ! 93. https://gcc.gnu.org/PR15412 ! 94. https://gcc.gnu.org/PR15427 ! 95. https://gcc.gnu.org/PR15471 ! 96. https://gcc.gnu.org/PR15503 ! 97. https://gcc.gnu.org/PR15507 ! 98. https://gcc.gnu.org/PR15542 ! 99. https://gcc.gnu.org/PR15565 ! 100. https://gcc.gnu.org/PR15625 ! 101. https://gcc.gnu.org/PR15629 ! 102. https://gcc.gnu.org/PR15742 ! 103. https://gcc.gnu.org/PR15775 ! 104. https://gcc.gnu.org/PR15821 ! 105. https://gcc.gnu.org/PR15862 ! 106. https://gcc.gnu.org/PR15875 ! 107. https://gcc.gnu.org/PR15877 ! 108. https://gcc.gnu.org/PR15947 ! 109. https://gcc.gnu.org/PR16020 ! 110. https://gcc.gnu.org/PR16154 ! 111. https://gcc.gnu.org/PR16174 ! 112. https://gcc.gnu.org/PR14315 ! 113. https://gcc.gnu.org/PR15151 ! 114. https://gcc.gnu.org/PR7993 ! 115. https://gcc.gnu.org/PR15228 ! 116. https://gcc.gnu.org/PR15345 ! 117. https://gcc.gnu.org/PR15945 ! 118. https://gcc.gnu.org/PR15526 ! 119. https://gcc.gnu.org/PR14690 ! 120. https://gcc.gnu.org/PR15112 ! 121. https://gcc.gnu.org/PR15067 ! 122. https://gcc.gnu.org/PR1963 ! 123. https://gcc.gnu.org/PR15717 ! 124. https://gcc.gnu.org/PR14782 ! 125. https://gcc.gnu.org/PR14828 ! 126. https://gcc.gnu.org/PR15202 ! 127. https://gcc.gnu.org/PR14610 ! 128. https://gcc.gnu.org/PR14813 ! 129. https://gcc.gnu.org/PR14857 ! 130. https://gcc.gnu.org/PR15598 ! 131. https://gcc.gnu.org/PR15653 ! 132. https://gcc.gnu.org/PR15189 ! 133. https://gcc.gnu.org/PR15331 ! 134. https://gcc.gnu.org/PR16144 ! 135. https://gcc.gnu.org/PR16176 ! 136. https://gcc.gnu.org/PR11591 ! 137. https://gcc.gnu.org/PR12028 ! 138. https://gcc.gnu.org/PR14478 ! 139. https://gcc.gnu.org/PR14567 ! 140. https://gcc.gnu.org/PR14715 ! 141. https://gcc.gnu.org/PR14902 ! 142. https://gcc.gnu.org/PR14924 ! 143. https://gcc.gnu.org/PR14960 ! 144. https://gcc.gnu.org/PR15106 ! 145. https://gcc.gnu.org/PR16026 ! 146. https://gcc.gnu.org/PR15191 ! 147. https://gcc.gnu.org/PR15662 ! 148. https://gcc.gnu.org/PR15054 ! 149. https://gcc.gnu.org/PR15783 ! 150. https://gcc.gnu.org/PR15626 ! 151. https://gcc.gnu.org/PR14326 ! 152. https://gcc.gnu.org/PR14723 ! 153. https://gcc.gnu.org/PR15290 ! 154. https://gcc.gnu.org/PR15250 ! 155. https://gcc.gnu.org/PR15551 ! 156. https://gcc.gnu.org/PR8309 ! 157. https://gcc.gnu.org/PR13250 ! 158. https://gcc.gnu.org/PR13803 ! 159. https://gcc.gnu.org/PR14093 ! 160. https://gcc.gnu.org/PR14457 ! 161. https://gcc.gnu.org/PR14542 ! 162. https://gcc.gnu.org/PR15100 ! 163. https://gcc.gnu.org/PR15296 ! 164. https://gcc.gnu.org/PR15396 ! 165. https://gcc.gnu.org/PR15782 ! 166. https://gcc.gnu.org/PR11610 ! 167. https://gcc.gnu.org/PR15488 ! 168. https://gcc.gnu.org/PR15489 ! 169. https://gcc.gnu.org/PR13928 ! 170. https://gcc.gnu.org/PR14150 ! 171. https://gcc.gnu.org/PR14949 ! 172. https://gcc.gnu.org/PR15123 ! 173. https://gcc.gnu.org/gcc-3.4/changes.html#GCC3.4.2 ! 174. https://gcc.gnu.org/PR16469 ! 175. https://gcc.gnu.org/PR16344 ! 176. https://gcc.gnu.org/PR16842 ! 177. https://gcc.gnu.org/PR12608 ! 178. https://gcc.gnu.org/PR14492 ! 179. https://gcc.gnu.org/PR15461 ! 180. https://gcc.gnu.org/PR15890 ! 181. https://gcc.gnu.org/PR16180 ! 182. https://gcc.gnu.org/PR16224 ! 183. https://gcc.gnu.org/PR16408 ! 184. https://gcc.gnu.org/PR16529 ! 185. https://gcc.gnu.org/PR16698 ! 186. https://gcc.gnu.org/PR16706 ! 187. https://gcc.gnu.org/PR16810 ! 188. https://gcc.gnu.org/PR16851 ! 189. https://gcc.gnu.org/PR16870 ! 190. https://gcc.gnu.org/PR16904 ! 191. https://gcc.gnu.org/PR16905 ! 192. https://gcc.gnu.org/PR16964 ! 193. https://gcc.gnu.org/PR17068 ! 194. https://gcc.gnu.org/PR16366 ! 195. https://gcc.gnu.org/PR15345 ! 196. https://gcc.gnu.org/PR16590 ! 197. https://gcc.gnu.org/PR16693 ! 198. https://gcc.gnu.org/PR17078 ! 199. https://gcc.gnu.org/PR13956 ! 200. https://gcc.gnu.org/PR16684 ! 201. https://gcc.gnu.org/PR12658 ! 202. https://gcc.gnu.org/PR13092 ! 203. https://gcc.gnu.org/PR15320 ! 204. https://gcc.gnu.org/PR16246 ! 205. https://gcc.gnu.org/PR16273 ! 206. https://gcc.gnu.org/PR16401 ! 207. https://gcc.gnu.org/PR16411 ! 208. https://gcc.gnu.org/PR16489 ! 209. https://gcc.gnu.org/PR16618 ! 210. https://gcc.gnu.org/PR16637 ! 211. https://gcc.gnu.org/PR16717 ! 212. https://gcc.gnu.org/PR16813 ! 213. https://gcc.gnu.org/PR16853 ! 214. https://gcc.gnu.org/PR16889 ! 215. https://gcc.gnu.org/PR16959 ! 216. https://gcc.gnu.org/PR7587 ! 217. https://gcc.gnu.org/PR16473 ! 218. https://gcc.gnu.org/PR16478 ! 219. https://gcc.gnu.org/PR10695 ! 220. https://gcc.gnu.org/PR16974 ! 221. https://gcc.gnu.org/PR16298 ! 222. https://gcc.gnu.org/PR17113 ! 223. https://gcc.gnu.org/PR14697 ! 224. https://gcc.gnu.org/PR15869 ! 225. https://gcc.gnu.org/PR16325 ! 226. https://gcc.gnu.org/PR16357 ! 227. https://gcc.gnu.org/PR16380 ! 228. https://gcc.gnu.org/PR16407 ! 229. https://gcc.gnu.org/PR16643 ! 230. https://gcc.gnu.org/PR15927 ! 231. https://gcc.gnu.org/PR15948 ! 232. https://gcc.gnu.org/PR17019 ! 233. https://gcc.gnu.org/PR16130 ! 234. https://gcc.gnu.org/PR16142 ! 235. https://gcc.gnu.org/PR16278 ! 236. https://gcc.gnu.org/PR16414 ! 237. https://gcc.gnu.org/PR16445 ! 238. https://gcc.gnu.org/PR16490 ! 239. https://gcc.gnu.org/PR16683 ! 240. https://gcc.gnu.org/PR16195 ! 241. https://gcc.gnu.org/PR16239 ! 242. https://gcc.gnu.org/PR16199 ! 243. https://gcc.gnu.org/PR16416 ! 244. https://gcc.gnu.org/PR16430 ! 245. https://gcc.gnu.org/PR16379 ! 246. https://gcc.gnu.org/PR17093 ! 247. https://gcc.gnu.org/PR17119 ! 248. https://gcc.gnu.org/PR15928 ! 249. https://gcc.gnu.org/PR16210 ! 250. https://gcc.gnu.org/PR15488 ! 251. https://gcc.gnu.org/PR16250 ! 252. https://gcc.gnu.org/gcc-3.4/changes.html#GCC3.4.3 ! 253. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.4.3 ! 254. https://gcc.gnu.org/PR17369 ! 255. https://gcc.gnu.org/PR17850 ! 256. https://gcc.gnu.org/PR13948 ! 257. https://gcc.gnu.org/PR14492 ! 258. https://gcc.gnu.org/PR16301 ! 259. https://gcc.gnu.org/PR16566 ! 260. https://gcc.gnu.org/PR17023 ! 261. https://gcc.gnu.org/PR17027 ! 262. https://gcc.gnu.org/PR17524 ! 263. https://gcc.gnu.org/PR17826 ! 264. https://gcc.gnu.org/PR15526 ! 265. https://gcc.gnu.org/PR16999 ! 266. https://gcc.gnu.org/PR17503 ! 267. https://gcc.gnu.org/PR17581 ! 268. https://gcc.gnu.org/PR18129 ! 269. https://gcc.gnu.org/PR10975 ! 270. https://gcc.gnu.org/PR11722 ! 271. https://gcc.gnu.org/PR14534 ! 272. https://gcc.gnu.org/PR15172 ! 273. https://gcc.gnu.org/PR15786 ! 274. https://gcc.gnu.org/PR16162 ! 275. https://gcc.gnu.org/PR16612 ! 276. https://gcc.gnu.org/PR16715 ! 277. https://gcc.gnu.org/PR16848 ! 278. https://gcc.gnu.org/PR17132 ! 279. https://gcc.gnu.org/PR17259 ! 280. https://gcc.gnu.org/PR17327 ! 281. https://gcc.gnu.org/PR17393 ! 282. https://gcc.gnu.org/PR17501 ! 283. https://gcc.gnu.org/PR17537 ! 284. https://gcc.gnu.org/PR17585 ! 285. https://gcc.gnu.org/PR17821 ! 286. https://gcc.gnu.org/PR17829 ! 287. https://gcc.gnu.org/PR17851 ! 288. https://gcc.gnu.org/PR17976 ! 289. https://gcc.gnu.org/PR18020 ! 290. https://gcc.gnu.org/PR18093 ! 291. https://gcc.gnu.org/PR18140 ! 292. https://gcc.gnu.org/PR17541 ! 293. https://gcc.gnu.org/PR17853 ! 294. https://gcc.gnu.org/PR17245 ! 295. https://gcc.gnu.org/PR17167 ! 296. https://gcc.gnu.org/PR17277 ! 297. https://gcc.gnu.org/PR17505 ! 298. https://gcc.gnu.org/PR17684 ! 299. https://gcc.gnu.org/PR17384 ! 300. https://gcc.gnu.org/PR17770 ! 301. https://gcc.gnu.org/PR11476 ! 302. https://gcc.gnu.org/PR14064 ! 303. https://gcc.gnu.org/PR14678 ! 304. https://gcc.gnu.org/PR15583 ! 305. https://gcc.gnu.org/PR15790 ! 306. https://gcc.gnu.org/PR15886 ! 307. https://gcc.gnu.org/PR16884 ! 308. https://gcc.gnu.org/PR13841 ! 309. https://gcc.gnu.org/PR15860 ! 310. https://gcc.gnu.org/PR17465 ! 311. https://gcc.gnu.org/PR17469 ! 312. https://gcc.gnu.org/PR18138 ! 313. https://gcc.gnu.org/PR15498 ! 314. https://gcc.gnu.org/PR15747 ! 315. https://gcc.gnu.org/PR16406 ! 316. https://gcc.gnu.org/gcc-3.4/changes.html#GCC3.4.4 ! 317. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.4.4 ! 318. https://gcc.gnu.org/gcc-3.4/changes.html#GCC3.4.5 ! 319. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.4.5 ! 320. https://gcc.gnu.org/PR24688 ! 321. https://gcc.gnu.org/PR17188 ! 322. https://gcc.gnu.org/PR20187 ! 323. https://gcc.gnu.org/PR21873 ! 324. https://gcc.gnu.org/PR21899 ! 325. https://gcc.gnu.org/PR22061 ! 326. https://gcc.gnu.org/PR22208 ! 327. https://gcc.gnu.org/PR22458 ! 328. https://gcc.gnu.org/PR22589 ! 329. https://gcc.gnu.org/PR24101 ! 330. https://gcc.gnu.org/PR10611 ! 331. https://gcc.gnu.org/PR13377 ! 332. https://gcc.gnu.org/PR16002 ! 333. https://gcc.gnu.org/PR17413 ! 334. https://gcc.gnu.org/PR17609 ! 335. https://gcc.gnu.org/PR17618 ! 336. https://gcc.gnu.org/PR18124 ! 337. https://gcc.gnu.org/PR18155 ! 338. https://gcc.gnu.org/PR18177 ! 339. https://gcc.gnu.org/PR18368 ! 340. https://gcc.gnu.org/PR18378 ! 341. https://gcc.gnu.org/PR18466 ! 342. https://gcc.gnu.org/PR18512 ! 343. https://gcc.gnu.org/PR18545 ! 344. https://gcc.gnu.org/PR18738 ! 345. https://gcc.gnu.org/PR18803 ! 346. https://gcc.gnu.org/PR19004 ! 347. https://gcc.gnu.org/PR19208 ! 348. https://gcc.gnu.org/PR19253 ! 349. https://gcc.gnu.org/PR19608 ! 350. https://gcc.gnu.org/PR19884 ! 351. https://gcc.gnu.org/PR20153 ! 352. https://gcc.gnu.org/PR20563 ! 353. https://gcc.gnu.org/PR20789 ! 354. https://gcc.gnu.org/PR21336 ! 355. https://gcc.gnu.org/PR21768 ! 356. https://gcc.gnu.org/PR21853 ! 357. https://gcc.gnu.org/PR21903 ! 358. https://gcc.gnu.org/PR21983 ! 359. https://gcc.gnu.org/PR21987 ! 360. https://gcc.gnu.org/PR22153 ! 361. https://gcc.gnu.org/PR22172 ! 362. https://gcc.gnu.org/PR21286 ! 363. https://gcc.gnu.org/PR22233 ! 364. https://gcc.gnu.org/PR22508 ! 365. https://gcc.gnu.org/PR22545 ! 366. https://gcc.gnu.org/PR23528 ! 367. https://gcc.gnu.org/PR23550 ! 368. https://gcc.gnu.org/PR23586 ! 369. https://gcc.gnu.org/PR23624 ! 370. https://gcc.gnu.org/PR23639 ! 371. https://gcc.gnu.org/PR23797 ! 372. https://gcc.gnu.org/PR23965 ! 373. https://gcc.gnu.org/PR24052 ! 374. https://gcc.gnu.org/PR24580 ! 375. https://gcc.gnu.org/PR24267 ! 376. https://gcc.gnu.org/PR17810 ! 377. https://gcc.gnu.org/PR17860 ! 378. https://gcc.gnu.org/PR21709 ! 379. https://gcc.gnu.org/PR21964 ! 380. https://gcc.gnu.org/PR22167 ! 381. https://gcc.gnu.org/PR22619 ! 382. https://gcc.gnu.org/PR23241 ! 383. https://gcc.gnu.org/PR23478 ! 384. https://gcc.gnu.org/PR24470 ! 385. https://gcc.gnu.org/PR24950 ! 386. https://gcc.gnu.org/PR14400 ! 387. https://gcc.gnu.org/PR14940 ! 388. https://gcc.gnu.org/PR20239 ! 389. https://gcc.gnu.org/PR15220 ! 390. https://gcc.gnu.org/PR19275 ! 391. https://gcc.gnu.org/PR21888 ! 392. https://gcc.gnu.org/PR15342 ! 393. https://gcc.gnu.org/PR23985 ! 394. https://gcc.gnu.org/PR16719 ! 395. https://gcc.gnu.org/PR21723 ! 396. https://gcc.gnu.org/PR21841 ! 397. https://gcc.gnu.org/PR23644 ! 398. https://gcc.gnu.org/PR24718 ! 399. https://gcc.gnu.org/PR18421 ! 400. https://gcc.gnu.org/PR20621 ! 401. https://gcc.gnu.org/PR18583 ! 402. https://gcc.gnu.org/PR20191 ! 403. https://gcc.gnu.org/PR22083 ! 404. https://gcc.gnu.org/PR23070 ! 405. https://gcc.gnu.org/PR23404 ! 406. https://gcc.gnu.org/PR23539 ! 407. https://gcc.gnu.org/PR24102 ! 408. https://gcc.gnu.org/PR24465 ! 409. https://gcc.gnu.org/PR19933 ! 410. https://gcc.gnu.org/PR21889 ! 411. https://gcc.gnu.org/PR19300 ! 412. https://gcc.gnu.org/PR20301 ! 413. https://gcc.gnu.org/PR20673 ! 414. https://gcc.gnu.org/PR18582 ! 415. https://gcc.gnu.org/PR19340 ! 416. https://gcc.gnu.org/PR21716 ! 417. https://gcc.gnu.org/PR24315 ! 418. https://gcc.gnu.org/gcc-3.4/changes.html#GCC3.4.6 ! 419. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.4.6 ! 420. https://gcc.gnu.org/onlinedocs/ ! 421. mailto:gcc-help@gcc.gnu.org ! 422. mailto:gcc@gcc.gnu.org ! 423. https://gcc.gnu.org/lists.html ! 424. https://www.fsf.org/ ! 425. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-3.3/index.html + GCC 3.3 Release Series (This release series is no longer supported.) *************** References *** 18071,18076 **** --- 18515,18521 ---- 21. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-3.3/changes.html + GCC 3.3 Release Series Changes, New Features, and Fixes *************** New Targets and Target Specific Improvem *** 18274,18280 **** + Sibcall optimizations added. * The support for H8 Tiny is added to the H8/300 port with -mn. ! Obsolete Systems Support for a number of older systems has been declared obsolete in GCC 3.3. Unless there is activity to revive them, the next release of GCC --- 18719,18725 ---- + Sibcall optimizations added. * The support for H8 Tiny is added to the H8/300 port with -mn. ! [8]Obsolete Systems Support for a number of older systems has been declared obsolete in GCC 3.3. Unless there is activity to revive them, the next release of GCC *************** GCC 3.3 *** 18376,18694 **** bootstrap failures ! * [8]10140 cross compiler build failures: missing __mempcpy (DUP: ! [9]10198,[10]10338) Internal compiler errors (multi-platform) ! * [11]3581 large string causes segmentation fault in cc1 ! * [12]4382 __builtin_{set,long}jmp with -O3 can crash the compiler ! * [13]5533 (c++) ICE when processing std::accumulate(begin, end, init, invalid_op) ! * [14]6387 -fpic -gdwarf-2 -g1 combination gives ICE in dwarf2out ! * [15]6412 (c++) ICE in retrieve_specialization ! * [16]6620 (c++) partial template specialization causes an ICE (segmentation fault) ! * [17]6663 (c++) ICE with attribute aligned ! * [18]7068 ICE with incomplete types ! * [19]7083 (c++) ICE using -gstabs with dodgy class derivation ! * [20]7647 (c++) ICE when data member has the name of the enclosing class ! * [21]7675 ICE in fixup_var_refs_1 ! * [22]7718 'complex' template instantiation causes ICE ! * [23]8116 (c++) ICE in member template function ! * [24]8358 (ada) Ada compiler accesses freed memory, crashes ! * [25]8511 (c++) ICE: (hopefully) reproducible cc1plus segmentation fault ! * [26]8564 (c++) ICE in find_function_data, in function.c ! * [27]8660 (c++) template overloading ICE in tsubst_expr, in cp/pt.c ! * [28]8766 (c++) ICE after failed initialization of static template variable ! * [29]8803 ICE in instantiate_virtual_regs_1, in function.c ! * [30]8846 (c++) ICE after diagnostic if fr_FR@euro locale is set ! * [31]8906 (c++) ICE (Segmentation fault) when parsing nested-class definition ! * [32]9216 (c++) ICE on missing template parameter ! * [33]9261 (c++) ICE in arg_assoc, in cp/decl2.c ! * [34]9263 (fortran) ICE caused by invalid PARAMETER in implied DO loop ! * [35]9429 (c++) ICE in template instantiation with a pointered new operator ! * [36]9516 Internal error when using a big array ! * [37]9600 (c++) ICE with typedefs in template class ! * [38]9629 (c++) virtual inheritance segfault ! * [39]9672 (c++) ICE: Error reporting routines re-entered ! * [40]9749 (c++) ICE in write_expression on invalid function prototype ! * [41]9794 (fortran) ICE: floating point exception during constant folding ! * [42]9829 (c++) Missing colon in nested namespace usage causes ICE ! * [43]9916 (c++) ICE with noreturn function in ?: statement ! * [44]9936 ICE with local function and variable-length 2d array ! * [45]10262 (c++) cc1plus crashes with large generated code ! * [46]10278 (c++) ICE in parser for invalid code ! * [47]10446 (c++) ICE on definition of nonexistent member function of nested class in a class template ! * [48]10451 (c++) ICE in grokdeclarator on spurious mutable declaration ! * [49]10506 (c++) ICE in build_new at cp/init.c with -fkeep-inline-functions and multiple inheritance ! * [50]10549 (c++) ICE in store_bit_field on bitfields that exceed the precision of the declared type Optimization bugs ! * [51]2001 Inordinately long compile times in reload CSE regs ! * [52]2391 Exponential compilation time explosion in combine ! * [53]2960 Duplicate loop conditions even with -Os ! * [54]4046 redundant conditional branch ! * [55]6405 Loop-unrolling related performance regressions ! * [56]6798 very long compile time with large case-statement ! * [57]6871 const objects shouldn't be moved to .bss ! * [58]6909 problem w/ -Os on modified loop-2c.c test case ! * [59]7189 gcc -O2 -Wall does not print ``control reaches end of non-void function'' warning ! * [60]7642 optimization problem with signbit() ! * [61]8634 incorrect code for inlining of memcpy under -O2 ! * [62]8750 Cygwin prolog generation erroneously emitting __alloca as regular function call C front end ! * [63]2161 long if-else cascade overflows parser stack ! * [64]4319 short accepted on typedef'd char ! * [65]8602 incorrect line numbers in warning messages when using inline functions ! * [66]9177 -fdump-translation-unit: C front end deletes function_decl AST nodes and breaks debugging dumps ! * [67]9853 miscompilation of non-constant structure initializer c++ compiler and library ! * [68]45 legal template specialization code is rejected (DUP: ! [69]3784) ! * [70]764 lookup failure: friend operator and dereferencing a pointer ! and templates (DUP: [71]5116) ! * [72]2862 gcc accepts invalid explicit instantiation syntax (DUP: 2863) ! * [73]3663 G++ doesn't check access control during template instantiation ! * [74]3797 gcc fails to emit explicit specialization of a template member ! * [75]3948 Two destructors are called when no copy destructor is defined (ABI change) ! * [76]4137 Conversion operator within template is not accepted ! * [77]4361 bogus ambiguity taking the address of a member template ! * [78]4802 g++ accepts illegal template code (access to private ! member; DUP: [79]5837) ! * [80]4803 inline function is used but never defined, and g++ does not object ! * [81]5094 Partial specialization cannot be friend? ! * [82]5730 complex::norm() -- huge slowdown from egcs-2.91.66 ! * [83]6713 Regression wrt 3.0.4: g++ -O2 leads to seg fault at run time ! * [84]7015 certain __asm__ constructs rejected ! * [85]7086 compile time regression (quadratic behavior in fixup_var_refs) ! * [86]7099 G++ doesn't set the noreturn attribute on std::exit and std::abort ! * [87]7247 copy constructor missing when inlining enabled (invalid optimization?) ! * [88]7441 string array initialization compilation time regression from seconds to minutes ! * [89]7768 __PRETTY_FUNCTION__ for template destructor is wrong ! * [90]7804 bad printing of floating point constant in warning message ! * [91]8099 Friend classes and template specializations ! * [92]8117 member function pointers and multiple inheritance ! * [93]8205 using declaration and multiple inheritance ! * [94]8645 unnecessary non-zero checks in stl_tree.h ! * [95]8724 explicit destructor call for incomplete class allowed ! * [96]8805 compile time regression with many member variables ! * [97]8691 -O3 and -fno-implicit-templates are incompatible ! * [98]8700 unhelpful error message for binding temp to reference ! * [99]8724 explicit destructor call for incomplete class allowed ! * [100]8949 numeric_limits<>::denorm_min() and is_iec559 problems ! * [101]9016 Failure to consistently constant fold "constant" C++ objects ! * [102]9053 g++ confused about ambiguity of overloaded function templates ! * [103]9152 undefined virtual thunks ! * [104]9182 basic_filebuf<> does not report errors in codecvt<>::out ! * [105]9297 data corruption due to codegen bug (when copying.) ! * [106]9318 i/ostream::operator>>/<<(streambuf*) broken ! * [107]9320 Incorrect usage of traits_type::int_type in stdio_filebuf ! * [108]9400 bogus -Wshadow warning: shadowed declaration of this in local classes ! * [109]9424 i/ostream::operator>>/<<(streambuf*) drops characters ! * [110]9425 filebuf::pbackfail broken (DUP: [111]9439) ! * [112]9474 GCC freezes in compiling a weird code mixing and ! * [113]9548 Incorrect results from setf(ios::fixed) and precision(-1) ! [114][DR 231] ! * [115]9555 ostream inserters fail to set badbit on exception ! * [116]9561 ostream inserters rethrow exception of wrong type ! * [117]9563 ostream::sentry returns true after a failed preparation ! * [118]9582 one-definition rule violation in std::allocator ! * [119]9622 __PRETTY_FUNCTION__ incorrect in template destructors ! * [120]9683 bug in initialization chains for static const variables from template classes ! * [121]9791 -Woverloaded-virtual reports hiding of destructor ! * [122]9817 collate::compare doesn't handle nul characters ! * [123]9825 filebuf::sputbackc breaks sbumpc ! * [124]9826 operator>>(basic_istream, basic_string) fails to compile with custom traits ! * [125]9924 Multiple using statements for builtin functions not allowed ! * [126]9946 destructor is not called for temporary object ! * [127]9964 filebuf::close() sometimes fails to close file ! * [128]9988 filebuf::overflow writes EOF to file ! * [129]10033 optimization breaks polymorphic references w/ typeid operator ! * [130]10097 filebuf::underflow drops characters ! * [131]10132 filebuf destructor can throw exceptions ! * [132]10180 gcc fails to warn about non-inlined function ! * [133]10199 method parametrized by template does not work everywhere ! * [134]10300 use of array-new (nothrow) in segfaults on NULL return ! * [135]10427 Stack corruption with variable-length automatic arrays and virtual destructors ! * [136]10503 Compilation never stops in fixed_type_or_null Objective-C ! * [137]5956 selectors aren't matched properly when added to the selector table Fortran compiler and library ! * [138]1832 list directed i/o overflow hangs, -fbounds-check doesn't detect ! * [139]3924 g77 generates code that is rejected by GAS if COFF debug info requested ! * [140]5634 doc: explain that configure --prefix=~/... does not work ! * [141]6367 multiple repeat counts confuse namelist read into array ! * [142]6491 Logical operations error on logicals when using -fugly-logint ! * [143]6742 Generation of C++ Prototype for FORTRAN and extern "C" ! * [144]7113 Failure of g77.f-torture/execute/f90-intrinsic-bit.f -Os on irix6.5 ! * [145]7236 OPEN(...,RECL=nnn,...) without ACCESS='DIRECT' should assume a direct access file ! * [146]7278 g77 "bug"; the executable misbehaves (with -O2 -fno-automatic) ! * [147]7384 DATE_AND_TIME milliseconds field inactive on Windows ! * [148]7388 Incorrect output with 0-based array of characters ! * [149]8587 Double complex zero ** double precision number -> NaN instead of zero ! * [150]9038 -ffixed-line-length-none -x f77-cpp-input gives: Warning: unknown register name line-length-none ! * [151]10197 Direct access files not unformatted by default Java compiler and library ! * [152]6005 gcj fails to build rhug on alpha ! * [153]6389 System.getProperty("") should always throw an IllegalArgumentException ! * [154]6576 java.util.ResourceBundle.getResource ignores locale ! * [155]6652 new java.io.File("").getCanonicalFile() throws exception ! * [156]7060 getMethod() doesn't search super interface ! * [157]7073 bytecode interpreter gives wrong answer for interface getSuperclass() ! * [158]7180 possible bug in javax.naming.spi.NamingManager.getPlusPath() ! * [159]7416 java.security startup refs "GNU libgcj.security" ! * [160]7570 Runtime.exec with null envp: child doesn't inherit parent ! env (DUP: [161]7578) ! * [162]7611 Internal error while compiling libjava with -O ! * [163]7709 NullPointerException in _Jv_ResolvePoolEntry ! * [164]7766 ZipInputStream.available returns 0 immediately after construction ! * [165]7785 Calendar.getTimeInMillis/setTimeInMillis should be public ! * [166]7786 TimeZone.getDSTSavings() from JDK1.4 not implemented ! * [167]8142 '$' in class names vs. dlopen 'dynamic string tokens' ! * [168]8234 ZipInputStream chokes when InputStream.read() returns small chunks ! * [169]8415 reflection bug: exception info for Method ! * [170]8481 java.Random.nextInt(int) may return negative ! * [171]8593 Error reading GZIPped files with BufferedReader ! * [172]8759 java.beans.Introspector has no flushCaches() or flushFromCaches() methods ! * [173]8997 spin() calls Thread.sleep ! * [174]9253 on win32, java.io.File.listFiles("C:\\") returns pwd instead of the root content of C: ! * [175]9254 java::lang::Object::wait(), threads-win32.cc returns wrong return codes ! * [176]9271 Severe bias in java.security.SecureRandom Ada compiler and library ! * [177]6767 make gnatlib-shared fails on -laddr2line ! * [178]9911 gnatmake fails to link when GCC configured with --with-sjlj-exceptions=yes ! * [179]10020 Can't bootstrap gcc on AIX with Ada enabled ! * [180]10546 Ada tasking not working on Red Hat 9 preprocessor ! * [181]7029 preprocessor should ignore #warning with -M ARM-specific ! * [182]2903 [arm] Optimization bug with long long arithmetic ! * [183]7873 arm-linux-gcc fails when assigning address to a bit field FreeBSD-specific ! * [184]7680 float functions undefined in math.h/cmath with #define _XOPEN_SOURCE HP-UX or HP-PA-specific ! * [185]8705 [HP-PA] ICE in emit_move_insn_1, in expr.c ! * [186]9986 [HP-UX] Incorrect transformation of fputs_unlocked to fputc_unlocked ! * [187]10056 [HP-PA] ICE at -O2 when building c++ code from doxygen m68hc11-specific ! * [188]6744 Bad assembler code generated: reference to pseudo register z ! * [189]7361 Internal compiler error in reload_cse_simplify_operands, in reload1.c MIPS-specific ! * [190]9496 [mips-linux] bug in optimizer? PowerPC-specific ! * [191]7067 -Os with -mcpu=powerpc optimizes for speed (?) instead of space ! * [192]8480 reload ICEs for LAPACK code on powerpc64-linux ! * [193]8784 [AIX] Internal compiler error in simplify_gen_subreg ! * [194]10315 [powerpc] ICE: in extract_insn, in recog.c SPARC-specific ! * [195]10267 (documentation) Wrong build instructions for *-*-solaris2* x86-specific (Intel/AMD) ! * [196]7916 ICE in instantiate_virtual_register_1 ! * [197]7926 (c++) i486 instructions in header files make c++ programs crash on i386 ! * [198]8555 ICE in gen_split_1231 ! * [199]8994 ICE with -O -march=pentium4 ! * [200]9426 ICE with -fssa -funroll-loops -fprofile-arcs ! * [201]9806 ICE in inline assembly with -fPIC flag ! * [202]10077 gcc -msse2 generates movd to move dwords between xmm regs ! * [203]10233 64-bit comparison only comparing bottom 32-bits ! * [204]10286 type-punning doesn't work with __m64 and -O ! * [205]10308 [x86] ICE with -O -fgcse or -O2 __________________________________________________________________ ! GCC 3.3.1 Bug Fixes --- 18821,19139 ---- bootstrap failures ! * [9]10140 cross compiler build failures: missing __mempcpy (DUP: ! [10]10198,[11]10338) Internal compiler errors (multi-platform) ! * [12]3581 large string causes segmentation fault in cc1 ! * [13]4382 __builtin_{set,long}jmp with -O3 can crash the compiler ! * [14]5533 (c++) ICE when processing std::accumulate(begin, end, init, invalid_op) ! * [15]6387 -fpic -gdwarf-2 -g1 combination gives ICE in dwarf2out ! * [16]6412 (c++) ICE in retrieve_specialization ! * [17]6620 (c++) partial template specialization causes an ICE (segmentation fault) ! * [18]6663 (c++) ICE with attribute aligned ! * [19]7068 ICE with incomplete types ! * [20]7083 (c++) ICE using -gstabs with dodgy class derivation ! * [21]7647 (c++) ICE when data member has the name of the enclosing class ! * [22]7675 ICE in fixup_var_refs_1 ! * [23]7718 'complex' template instantiation causes ICE ! * [24]8116 (c++) ICE in member template function ! * [25]8358 (ada) Ada compiler accesses freed memory, crashes ! * [26]8511 (c++) ICE: (hopefully) reproducible cc1plus segmentation fault ! * [27]8564 (c++) ICE in find_function_data, in function.c ! * [28]8660 (c++) template overloading ICE in tsubst_expr, in cp/pt.c ! * [29]8766 (c++) ICE after failed initialization of static template variable ! * [30]8803 ICE in instantiate_virtual_regs_1, in function.c ! * [31]8846 (c++) ICE after diagnostic if fr_FR@euro locale is set ! * [32]8906 (c++) ICE (Segmentation fault) when parsing nested-class definition ! * [33]9216 (c++) ICE on missing template parameter ! * [34]9261 (c++) ICE in arg_assoc, in cp/decl2.c ! * [35]9263 (fortran) ICE caused by invalid PARAMETER in implied DO loop ! * [36]9429 (c++) ICE in template instantiation with a pointered new operator ! * [37]9516 Internal error when using a big array ! * [38]9600 (c++) ICE with typedefs in template class ! * [39]9629 (c++) virtual inheritance segfault ! * [40]9672 (c++) ICE: Error reporting routines re-entered ! * [41]9749 (c++) ICE in write_expression on invalid function prototype ! * [42]9794 (fortran) ICE: floating point exception during constant folding ! * [43]9829 (c++) Missing colon in nested namespace usage causes ICE ! * [44]9916 (c++) ICE with noreturn function in ?: statement ! * [45]9936 ICE with local function and variable-length 2d array ! * [46]10262 (c++) cc1plus crashes with large generated code ! * [47]10278 (c++) ICE in parser for invalid code ! * [48]10446 (c++) ICE on definition of nonexistent member function of nested class in a class template ! * [49]10451 (c++) ICE in grokdeclarator on spurious mutable declaration ! * [50]10506 (c++) ICE in build_new at cp/init.c with -fkeep-inline-functions and multiple inheritance ! * [51]10549 (c++) ICE in store_bit_field on bitfields that exceed the precision of the declared type Optimization bugs ! * [52]2001 Inordinately long compile times in reload CSE regs ! * [53]2391 Exponential compilation time explosion in combine ! * [54]2960 Duplicate loop conditions even with -Os ! * [55]4046 redundant conditional branch ! * [56]6405 Loop-unrolling related performance regressions ! * [57]6798 very long compile time with large case-statement ! * [58]6871 const objects shouldn't be moved to .bss ! * [59]6909 problem w/ -Os on modified loop-2c.c test case ! * [60]7189 gcc -O2 -Wall does not print ``control reaches end of non-void function'' warning ! * [61]7642 optimization problem with signbit() ! * [62]8634 incorrect code for inlining of memcpy under -O2 ! * [63]8750 Cygwin prolog generation erroneously emitting __alloca as regular function call C front end ! * [64]2161 long if-else cascade overflows parser stack ! * [65]4319 short accepted on typedef'd char ! * [66]8602 incorrect line numbers in warning messages when using inline functions ! * [67]9177 -fdump-translation-unit: C front end deletes function_decl AST nodes and breaks debugging dumps ! * [68]9853 miscompilation of non-constant structure initializer c++ compiler and library ! * [69]45 legal template specialization code is rejected (DUP: ! [70]3784) ! * [71]764 lookup failure: friend operator and dereferencing a pointer ! and templates (DUP: [72]5116) ! * [73]2862 gcc accepts invalid explicit instantiation syntax (DUP: 2863) ! * [74]3663 G++ doesn't check access control during template instantiation ! * [75]3797 gcc fails to emit explicit specialization of a template member ! * [76]3948 Two destructors are called when no copy destructor is defined (ABI change) ! * [77]4137 Conversion operator within template is not accepted ! * [78]4361 bogus ambiguity taking the address of a member template ! * [79]4802 g++ accepts illegal template code (access to private ! member; DUP: [80]5837) ! * [81]4803 inline function is used but never defined, and g++ does not object ! * [82]5094 Partial specialization cannot be friend? ! * [83]5730 complex::norm() -- huge slowdown from egcs-2.91.66 ! * [84]6713 Regression wrt 3.0.4: g++ -O2 leads to seg fault at run time ! * [85]7015 certain __asm__ constructs rejected ! * [86]7086 compile time regression (quadratic behavior in fixup_var_refs) ! * [87]7099 G++ doesn't set the noreturn attribute on std::exit and std::abort ! * [88]7247 copy constructor missing when inlining enabled (invalid optimization?) ! * [89]7441 string array initialization compilation time regression from seconds to minutes ! * [90]7768 __PRETTY_FUNCTION__ for template destructor is wrong ! * [91]7804 bad printing of floating point constant in warning message ! * [92]8099 Friend classes and template specializations ! * [93]8117 member function pointers and multiple inheritance ! * [94]8205 using declaration and multiple inheritance ! * [95]8645 unnecessary non-zero checks in stl_tree.h ! * [96]8724 explicit destructor call for incomplete class allowed ! * [97]8805 compile time regression with many member variables ! * [98]8691 -O3 and -fno-implicit-templates are incompatible ! * [99]8700 unhelpful error message for binding temp to reference ! * [100]8724 explicit destructor call for incomplete class allowed ! * [101]8949 numeric_limits<>::denorm_min() and is_iec559 problems ! * [102]9016 Failure to consistently constant fold "constant" C++ objects ! * [103]9053 g++ confused about ambiguity of overloaded function templates ! * [104]9152 undefined virtual thunks ! * [105]9182 basic_filebuf<> does not report errors in codecvt<>::out ! * [106]9297 data corruption due to codegen bug (when copying.) ! * [107]9318 i/ostream::operator>>/<<(streambuf*) broken ! * [108]9320 Incorrect usage of traits_type::int_type in stdio_filebuf ! * [109]9400 bogus -Wshadow warning: shadowed declaration of this in local classes ! * [110]9424 i/ostream::operator>>/<<(streambuf*) drops characters ! * [111]9425 filebuf::pbackfail broken (DUP: [112]9439) ! * [113]9474 GCC freezes in compiling a weird code mixing and ! * [114]9548 Incorrect results from setf(ios::fixed) and precision(-1) ! [115][DR 231] ! * [116]9555 ostream inserters fail to set badbit on exception ! * [117]9561 ostream inserters rethrow exception of wrong type ! * [118]9563 ostream::sentry returns true after a failed preparation ! * [119]9582 one-definition rule violation in std::allocator ! * [120]9622 __PRETTY_FUNCTION__ incorrect in template destructors ! * [121]9683 bug in initialization chains for static const variables from template classes ! * [122]9791 -Woverloaded-virtual reports hiding of destructor ! * [123]9817 collate::compare doesn't handle nul characters ! * [124]9825 filebuf::sputbackc breaks sbumpc ! * [125]9826 operator>>(basic_istream, basic_string) fails to compile with custom traits ! * [126]9924 Multiple using statements for builtin functions not allowed ! * [127]9946 destructor is not called for temporary object ! * [128]9964 filebuf::close() sometimes fails to close file ! * [129]9988 filebuf::overflow writes EOF to file ! * [130]10033 optimization breaks polymorphic references w/ typeid operator ! * [131]10097 filebuf::underflow drops characters ! * [132]10132 filebuf destructor can throw exceptions ! * [133]10180 gcc fails to warn about non-inlined function ! * [134]10199 method parametrized by template does not work everywhere ! * [135]10300 use of array-new (nothrow) in segfaults on NULL return ! * [136]10427 Stack corruption with variable-length automatic arrays and virtual destructors ! * [137]10503 Compilation never stops in fixed_type_or_null Objective-C ! * [138]5956 selectors aren't matched properly when added to the selector table Fortran compiler and library ! * [139]1832 list directed i/o overflow hangs, -fbounds-check doesn't detect ! * [140]3924 g77 generates code that is rejected by GAS if COFF debug info requested ! * [141]5634 doc: explain that configure --prefix=~/... does not work ! * [142]6367 multiple repeat counts confuse namelist read into array ! * [143]6491 Logical operations error on logicals when using -fugly-logint ! * [144]6742 Generation of C++ Prototype for FORTRAN and extern "C" ! * [145]7113 Failure of g77.f-torture/execute/f90-intrinsic-bit.f -Os on irix6.5 ! * [146]7236 OPEN(...,RECL=nnn,...) without ACCESS='DIRECT' should assume a direct access file ! * [147]7278 g77 "bug"; the executable misbehaves (with -O2 -fno-automatic) ! * [148]7384 DATE_AND_TIME milliseconds field inactive on Windows ! * [149]7388 Incorrect output with 0-based array of characters ! * [150]8587 Double complex zero ** double precision number -> NaN instead of zero ! * [151]9038 -ffixed-line-length-none -x f77-cpp-input gives: Warning: unknown register name line-length-none ! * [152]10197 Direct access files not unformatted by default Java compiler and library ! * [153]6005 gcj fails to build rhug on alpha ! * [154]6389 System.getProperty("") should always throw an IllegalArgumentException ! * [155]6576 java.util.ResourceBundle.getResource ignores locale ! * [156]6652 new java.io.File("").getCanonicalFile() throws exception ! * [157]7060 getMethod() doesn't search super interface ! * [158]7073 bytecode interpreter gives wrong answer for interface getSuperclass() ! * [159]7180 possible bug in javax.naming.spi.NamingManager.getPlusPath() ! * [160]7416 java.security startup refs "GNU libgcj.security" ! * [161]7570 Runtime.exec with null envp: child doesn't inherit parent ! env (DUP: [162]7578) ! * [163]7611 Internal error while compiling libjava with -O ! * [164]7709 NullPointerException in _Jv_ResolvePoolEntry ! * [165]7766 ZipInputStream.available returns 0 immediately after construction ! * [166]7785 Calendar.getTimeInMillis/setTimeInMillis should be public ! * [167]7786 TimeZone.getDSTSavings() from JDK1.4 not implemented ! * [168]8142 '$' in class names vs. dlopen 'dynamic string tokens' ! * [169]8234 ZipInputStream chokes when InputStream.read() returns small chunks ! * [170]8415 reflection bug: exception info for Method ! * [171]8481 java.Random.nextInt(int) may return negative ! * [172]8593 Error reading GZIPped files with BufferedReader ! * [173]8759 java.beans.Introspector has no flushCaches() or flushFromCaches() methods ! * [174]8997 spin() calls Thread.sleep ! * [175]9253 on win32, java.io.File.listFiles("C:\\") returns pwd instead of the root content of C: ! * [176]9254 java::lang::Object::wait(), threads-win32.cc returns wrong return codes ! * [177]9271 Severe bias in java.security.SecureRandom Ada compiler and library ! * [178]6767 make gnatlib-shared fails on -laddr2line ! * [179]9911 gnatmake fails to link when GCC configured with --with-sjlj-exceptions=yes ! * [180]10020 Can't bootstrap gcc on AIX with Ada enabled ! * [181]10546 Ada tasking not working on Red Hat 9 preprocessor ! * [182]7029 preprocessor should ignore #warning with -M ARM-specific ! * [183]2903 [arm] Optimization bug with long long arithmetic ! * [184]7873 arm-linux-gcc fails when assigning address to a bit field FreeBSD-specific ! * [185]7680 float functions undefined in math.h/cmath with #define _XOPEN_SOURCE HP-UX or HP-PA-specific ! * [186]8705 [HP-PA] ICE in emit_move_insn_1, in expr.c ! * [187]9986 [HP-UX] Incorrect transformation of fputs_unlocked to fputc_unlocked ! * [188]10056 [HP-PA] ICE at -O2 when building c++ code from doxygen m68hc11-specific ! * [189]6744 Bad assembler code generated: reference to pseudo register z ! * [190]7361 Internal compiler error in reload_cse_simplify_operands, in reload1.c MIPS-specific ! * [191]9496 [mips-linux] bug in optimizer? PowerPC-specific ! * [192]7067 -Os with -mcpu=powerpc optimizes for speed (?) instead of space ! * [193]8480 reload ICEs for LAPACK code on powerpc64-linux ! * [194]8784 [AIX] Internal compiler error in simplify_gen_subreg ! * [195]10315 [powerpc] ICE: in extract_insn, in recog.c SPARC-specific ! * [196]10267 (documentation) Wrong build instructions for *-*-solaris2* x86-specific (Intel/AMD) ! * [197]7916 ICE in instantiate_virtual_register_1 ! * [198]7926 (c++) i486 instructions in header files make c++ programs crash on i386 ! * [199]8555 ICE in gen_split_1231 ! * [200]8994 ICE with -O -march=pentium4 ! * [201]9426 ICE with -fssa -funroll-loops -fprofile-arcs ! * [202]9806 ICE in inline assembly with -fPIC flag ! * [203]10077 gcc -msse2 generates movd to move dwords between xmm regs ! * [204]10233 64-bit comparison only comparing bottom 32-bits ! * [205]10286 type-punning doesn't work with __m64 and -O ! * [206]10308 [x86] ICE with -O -fgcse or -O2 __________________________________________________________________ ! [207]GCC 3.3.1 Bug Fixes *************** GCC 3.3.1 *** 18699,18962 **** Bootstrap failures ! * [206]11272 [Solaris] make bootstrap fails while building libstdc++ Internal compiler errors (multi-platform) ! * [207]5754 ICE on invalid nested template class ! * [208]6597 ICE in set_mem_alias_set compiling Qt with -O2 on ia64 and --enable-checking ! * [209]6949 (c++) ICE in tsubst_decl, in cp/pt.c ! * [210]7053 (c++) ICE when declaring a function already defined as a friend method of a template class ! * [211]8164 (c++) ICE when using different const expressions as template parameter ! * [212]8384 (c++) ICE in is_base_type, in dwarf2out.c ! * [213]9559 (c++) ICE with invalid initialization of a static const ! * [214]9649 (c++) ICE in finish_member_declaration, in cp/semantics.c when redeclaring a static member variable ! * [215]9864 (fortran) ICE in add_abstract_origin_attribute, in dwarfout.c with -g -O -finline-functions ! * [216]10432 (c++) ICE in poplevel, in cp/decl.c ! * [217]10475 ICE in subreg_highpart_offset for code with long long ! * [218]10635 (c++) ICE when dereferencing an incomplete type casted from a void pointer ! * [219]10661 (c++) ICE in instantiate_decl, in cp/pt.c while instantiating static member variables ! * [220]10700 ICE in copy_to_mode_reg on 64-bit targets ! * [221]10712 (c++) ICE in constructor_name_full, in cp/decl2.c ! * [222]10796 (c++) ICE when defining an enum with two values: -1 and MAX_INT_64BIT ! * [223]10890 ICE in merge_assigned_reloads building Linux 2.4.2x sched.c ! * [224]10939 (c++) ICE with template code ! * [225]10956 (c++) ICE when specializing a template member function of a template class, in tsubst, in cp/pt.c ! * [226]11041 (c++) ICE: const myclass &x = *x; (when operator*() defined) ! * [227]11059 (c++) ICE with empty union ! * [228]11083 (c++) ICE in commit_one_edge_insertion, in cfgrtl.c with -O2 -fnon-call-exceptions ! * [229]11105 (c++) ICE in mangle_conv_op_name_for_type ! * [230]11149 (c++) ICE on error when instantiation with call function of a base type ! * [231]11228 (c++) ICE on new-expression using array operator new and default-initialization ! * [232]11282 (c++) Infinite memory usage after syntax error ! * [233]11301 (fortran) ICE with -fno-globals ! * [234]11308 (c++) ICE when using an enum type name as if it were a class or namespace ! * [235]11473 (c++) ICE with -gstabs when empty struct inherits from an empty struct ! * [236]11503 (c++) ICE when instantiating template with ADDR_EXPR ! * [237]11513 (c++) ICE in push_template_decl_real, in cp/pt.c: template member functions Optimization bugs ! * [238]11198 -O2 -frename-registers generates wrong code (aliasing problem) ! * [239]11304 Wrong code production with -fomit-frame-pointer ! * [240]11381 volatile memory access optimized away ! * [241]11536 [strength-reduce] -O2 optimization produces wrong code ! * [242]11557 constant folding bug generates wrong code C front end ! * [243]5897 No warning for statement after return ! * [244]11279 DWARF-2 output mishandles large enums Preprocessor bugs ! * [245]11022 no warning for non-compatible macro redefinition C++ compiler and library ! * [246]2330 static_cast<>() to a private base is allowed ! * [247]5388 Incorrect message "operands to ?: have different types" ! * [248]5390 Libiberty fails to demangle multi-digit template parameters ! * [249]7877 Incorrect parameter passing to specializations of member function templates ! * [250]9393 Anonymous namespaces and compiling the same file twice ! * [251]10032 -pedantic converts some errors to warnings ! * [252]10468 const typeof(x) is non-const, but only in templates ! * [253]10527 confused error message with "new int()" parameter initializer ! * [254]10679 parameter MIN_INLINE_INSNS is not honored ! * [255]10682 gcc chokes on a typedef for an enum inside a class template ! * [256]10689 pow(std::complex(0),1/3) returns (nan, nan) instead of 0. ! * [257]10845 template member function (with nested template as parameter) cannot be called anymore if another unrelated template member function is defined ! * [258]10849 Cannot define an out-of-class specialization of a private nested template class ! * [259]10888 Suppress -Winline warnings for system headers ! * [260]10929 -Winline warns about functions for which no definition is visible ! * [261]10931 valid conversion static_cast(lvalue-of-type-int) is rejected ! * [262]10940 Bad code with explicit specialization ! * [263]10968 If member function implicitly instantiated, explicit instantiation of class fails to instantiate it ! * [264]10990 Cannot convert with dynamic_cast<> to a private base class from within a member function ! * [265]11039 Bad interaction between implicit typename deprecation and friendship ! * [266]11062 (libstdc++) avoid __attribute__ ((unused)); say "__unused__" instead ! * [267]11095 C++ iostream manipulator causes segfault when called with negative argument ! * [268]11098 g++ doesn't emit complete debugging information for local variables in destructors ! * [269]11137 GNU/Linux shared library constructors not called unless there's one global object ! * [270]11154 spurious ambiguity report for template class specialization ! * [271]11329 Compiler cannot find user defined implicit typecast ! * [272]11332 Spurious error with casts in ?: expression ! * [273]11431 static_cast behavior with subclasses when default constructor available ! * [274]11528 money_get facet does not accept "$.00" as valid ! * [275]11546 Type lookup problems in out-of-line definition of a class doubly nested from a template class ! * [276]11567 C++ code containing templated member function with same name as pure virtual member function results in linking failure ! * [277]11645 Failure to deal with using and private inheritance Java compiler and library ! * [278]5179 Qualified static field access doesn't initialize its class ! * [279]8204 gcj -O2 to native reorders certain instructions improperly ! * [280]10838 java.io.ObjectInputStream syntax error ! * [281]10886 The RMI registry that comes with GCJ does not work correctly ! * [282]11349 JNDI URL context factories not located correctly x86-specific (Intel/AMD) ! * [283]4823 ICE on inline assembly code ! * [284]8878 miscompilation with -O and SSE ! * [285]9815 (c++ library) atomicity.h - fails to compile with -O3 -masm=intel ! * [286]10402 (inline assembly) [x86] ICE in merge_assigned_reloads, in reload1.c ! * [287]10504 ICE with SSE2 code and -O3 -mcpu=pentium4 -msse2 ! * [288]10673 ICE for x86-64 on freebsd libc vfprintf.c source ! * [289]11044 [x86] out of range loop instructions for FP code on K6 ! * [290]11089 ICE: instantiate_virtual_regs_lossage while using SSE built-ins ! * [291]11420 [x86_64] gcc generates invalid asm code when "-O -fPIC" is used SPARC- or Solaris- specific ! * [292]9362 solaris 'as' dies when fed .s and "-gstabs" ! * [293]10142 [SPARC64] gcc produces wrong code when passing structures by value ! * [294]10663 New configure check aborts with Sun tools. ! * [295]10835 combinatorial explosion in scheduler on HyperSPARC ! * [296]10876 ICE in calculate_giv_inc when building KDE ! * [297]10955 wrong code at -O3 for structure argument in context of structure return ! * [298]11018 -mcpu=ultrasparc busts tar-1.13.25 ! * [299]11556 [sparc64] ICE in gen_reg_rtx() while compiling 2.6.x Linux kernel ia64 specific ! * [300]10907 gcc violates the ia64 ABI (GP must be preserved) ! * [301]11320 scheduler bug (in machine depended reorganization pass) ! * [302]11599 bug with conditional and __builtin_prefetch PowerPC specific ! * [303]9745 [powerpc] gcc mis-compiles libmcrypt (alias problem during loop) ! * [304]10871 error in rs6000_stack_info save_size computation ! * [305]11440 gcc mis-compiles c++ code (libkhtml) with -O2, -fno-gcse cures it m68k-specific ! * [306]7594 [m68k] ICE on legal code associated with simplify-rtx ! * [307]10557 [m68k] ICE in subreg_offset_representable_p ! * [308]11054 [m68k] ICE in reg_overlap_mentioned_p ARM-specific ! * [309]10834 [arm] GCC 3.3 still generates incorrect instructions for functions with __attribute__ ((interrupt ("IRQ"))) ! * [310]10842 [arm] Clobbered link register is copied to pc under certain circumstances ! * [311]11052 [arm] noce_process_if_block() can lose REG_INC notes ! * [312]11183 [arm] ICE in change_address_1 (3.3) / subreg_hard_regno (3.4) MIPS-specific ! * [313]11084 ICE in propagate_one_insn, in flow.c SH-specific ! * [314]10331 can't compile c++ part of gcc cross compiler for sh-elf ! * [315]10413 [SH] ICE in reload_cse_simplify_operands, in reload1.c ! * [316]11096 i686-linux to sh-linux cross compiler fails to compile C++ files GNU/Linux (or Hurd?) specific ! * [317]2873 Bogus fixinclude of stdio.h from glibc 2.2.3 UnixWare specific ! * [318]3163 configure bug: gcc/aclocal.m4 mmap test fails on UnixWare 7.1.1 Cygwin (or mingw) specific ! * [319]5287 ICE with dllimport attribute ! * [320]10148 [MingW/CygWin] Compiler dumps core DJGPP specific ! * [321]8787 GCC fails to emit .intel_syntax when invoked with -masm=intel on DJGPP Darwin (and MacOS X) specific ! * [322]10900 trampolines crash Documentation ! * [323]1607 (c++) Format attributes on methods undocumented ! * [324]4252 Invalid option `-fdump-translation-unit' ! * [325]4490 Clarify restrictions on -m96bit-long-double, -m128bit-long-double ! * [326]10355 document an issue with regparm attribute on some systems (e.g. Solaris) ! * [327]10726 (fortran) Documentation for function "IDate Intrinsic (Unix)" is wrong ! * [328]10805 document bug in old version of Sun assembler ! * [329]10815 warn against GNU binutils on AIX ! * [330]10877 document need for newer binutils on i?86-*-linux-gnu ! * [331]11280 Manual incorrect with respect to -freorder-blocks ! * [332]11466 Document -mlittle-endian and its restrictions for the sparc64 port Testsuite bugs (compiler itself is not affected) ! * [333]10737 newer bison causes g++.dg/parse/crash2.C to incorrectly report failure ! * [334]10810 gcc-3.3 fails make check: buffer overrun in test_demangle.c __________________________________________________________________ ! GCC 3.3.2 Bug Fixes --- 19144,19407 ---- Bootstrap failures ! * [208]11272 [Solaris] make bootstrap fails while building libstdc++ Internal compiler errors (multi-platform) ! * [209]5754 ICE on invalid nested template class ! * [210]6597 ICE in set_mem_alias_set compiling Qt with -O2 on ia64 and --enable-checking ! * [211]6949 (c++) ICE in tsubst_decl, in cp/pt.c ! * [212]7053 (c++) ICE when declaring a function already defined as a friend method of a template class ! * [213]8164 (c++) ICE when using different const expressions as template parameter ! * [214]8384 (c++) ICE in is_base_type, in dwarf2out.c ! * [215]9559 (c++) ICE with invalid initialization of a static const ! * [216]9649 (c++) ICE in finish_member_declaration, in cp/semantics.c when redeclaring a static member variable ! * [217]9864 (fortran) ICE in add_abstract_origin_attribute, in dwarfout.c with -g -O -finline-functions ! * [218]10432 (c++) ICE in poplevel, in cp/decl.c ! * [219]10475 ICE in subreg_highpart_offset for code with long long ! * [220]10635 (c++) ICE when dereferencing an incomplete type casted from a void pointer ! * [221]10661 (c++) ICE in instantiate_decl, in cp/pt.c while instantiating static member variables ! * [222]10700 ICE in copy_to_mode_reg on 64-bit targets ! * [223]10712 (c++) ICE in constructor_name_full, in cp/decl2.c ! * [224]10796 (c++) ICE when defining an enum with two values: -1 and MAX_INT_64BIT ! * [225]10890 ICE in merge_assigned_reloads building Linux 2.4.2x sched.c ! * [226]10939 (c++) ICE with template code ! * [227]10956 (c++) ICE when specializing a template member function of a template class, in tsubst, in cp/pt.c ! * [228]11041 (c++) ICE: const myclass &x = *x; (when operator*() defined) ! * [229]11059 (c++) ICE with empty union ! * [230]11083 (c++) ICE in commit_one_edge_insertion, in cfgrtl.c with -O2 -fnon-call-exceptions ! * [231]11105 (c++) ICE in mangle_conv_op_name_for_type ! * [232]11149 (c++) ICE on error when instantiation with call function of a base type ! * [233]11228 (c++) ICE on new-expression using array operator new and default-initialization ! * [234]11282 (c++) Infinite memory usage after syntax error ! * [235]11301 (fortran) ICE with -fno-globals ! * [236]11308 (c++) ICE when using an enum type name as if it were a class or namespace ! * [237]11473 (c++) ICE with -gstabs when empty struct inherits from an empty struct ! * [238]11503 (c++) ICE when instantiating template with ADDR_EXPR ! * [239]11513 (c++) ICE in push_template_decl_real, in cp/pt.c: template member functions Optimization bugs ! * [240]11198 -O2 -frename-registers generates wrong code (aliasing problem) ! * [241]11304 Wrong code production with -fomit-frame-pointer ! * [242]11381 volatile memory access optimized away ! * [243]11536 [strength-reduce] -O2 optimization produces wrong code ! * [244]11557 constant folding bug generates wrong code C front end ! * [245]5897 No warning for statement after return ! * [246]11279 DWARF-2 output mishandles large enums Preprocessor bugs ! * [247]11022 no warning for non-compatible macro redefinition C++ compiler and library ! * [248]2330 static_cast<>() to a private base is allowed ! * [249]5388 Incorrect message "operands to ?: have different types" ! * [250]5390 Libiberty fails to demangle multi-digit template parameters ! * [251]7877 Incorrect parameter passing to specializations of member function templates ! * [252]9393 Anonymous namespaces and compiling the same file twice ! * [253]10032 -pedantic converts some errors to warnings ! * [254]10468 const typeof(x) is non-const, but only in templates ! * [255]10527 confused error message with "new int()" parameter initializer ! * [256]10679 parameter MIN_INLINE_INSNS is not honored ! * [257]10682 gcc chokes on a typedef for an enum inside a class template ! * [258]10689 pow(std::complex(0),1/3) returns (nan, nan) instead of 0. ! * [259]10845 template member function (with nested template as parameter) cannot be called anymore if another unrelated template member function is defined ! * [260]10849 Cannot define an out-of-class specialization of a private nested template class ! * [261]10888 Suppress -Winline warnings for system headers ! * [262]10929 -Winline warns about functions for which no definition is visible ! * [263]10931 valid conversion static_cast(lvalue-of-type-int) is rejected ! * [264]10940 Bad code with explicit specialization ! * [265]10968 If member function implicitly instantiated, explicit instantiation of class fails to instantiate it ! * [266]10990 Cannot convert with dynamic_cast<> to a private base class from within a member function ! * [267]11039 Bad interaction between implicit typename deprecation and friendship ! * [268]11062 (libstdc++) avoid __attribute__ ((unused)); say "__unused__" instead ! * [269]11095 C++ iostream manipulator causes segfault when called with negative argument ! * [270]11098 g++ doesn't emit complete debugging information for local variables in destructors ! * [271]11137 GNU/Linux shared library constructors not called unless there's one global object ! * [272]11154 spurious ambiguity report for template class specialization ! * [273]11329 Compiler cannot find user defined implicit typecast ! * [274]11332 Spurious error with casts in ?: expression ! * [275]11431 static_cast behavior with subclasses when default constructor available ! * [276]11528 money_get facet does not accept "$.00" as valid ! * [277]11546 Type lookup problems in out-of-line definition of a class doubly nested from a template class ! * [278]11567 C++ code containing templated member function with same name as pure virtual member function results in linking failure ! * [279]11645 Failure to deal with using and private inheritance Java compiler and library ! * [280]5179 Qualified static field access doesn't initialize its class ! * [281]8204 gcj -O2 to native reorders certain instructions improperly ! * [282]10838 java.io.ObjectInputStream syntax error ! * [283]10886 The RMI registry that comes with GCJ does not work correctly ! * [284]11349 JNDI URL context factories not located correctly x86-specific (Intel/AMD) ! * [285]4823 ICE on inline assembly code ! * [286]8878 miscompilation with -O and SSE ! * [287]9815 (c++ library) atomicity.h - fails to compile with -O3 -masm=intel ! * [288]10402 (inline assembly) [x86] ICE in merge_assigned_reloads, in reload1.c ! * [289]10504 ICE with SSE2 code and -O3 -mcpu=pentium4 -msse2 ! * [290]10673 ICE for x86-64 on freebsd libc vfprintf.c source ! * [291]11044 [x86] out of range loop instructions for FP code on K6 ! * [292]11089 ICE: instantiate_virtual_regs_lossage while using SSE built-ins ! * [293]11420 [x86_64] gcc generates invalid asm code when "-O -fPIC" is used SPARC- or Solaris- specific ! * [294]9362 solaris 'as' dies when fed .s and "-gstabs" ! * [295]10142 [SPARC64] gcc produces wrong code when passing structures by value ! * [296]10663 New configure check aborts with Sun tools. ! * [297]10835 combinatorial explosion in scheduler on HyperSPARC ! * [298]10876 ICE in calculate_giv_inc when building KDE ! * [299]10955 wrong code at -O3 for structure argument in context of structure return ! * [300]11018 -mcpu=ultrasparc busts tar-1.13.25 ! * [301]11556 [sparc64] ICE in gen_reg_rtx() while compiling 2.6.x Linux kernel ia64 specific ! * [302]10907 gcc violates the ia64 ABI (GP must be preserved) ! * [303]11320 scheduler bug (in machine depended reorganization pass) ! * [304]11599 bug with conditional and __builtin_prefetch PowerPC specific ! * [305]9745 [powerpc] gcc mis-compiles libmcrypt (alias problem during loop) ! * [306]10871 error in rs6000_stack_info save_size computation ! * [307]11440 gcc mis-compiles c++ code (libkhtml) with -O2, -fno-gcse cures it m68k-specific ! * [308]7594 [m68k] ICE on legal code associated with simplify-rtx ! * [309]10557 [m68k] ICE in subreg_offset_representable_p ! * [310]11054 [m68k] ICE in reg_overlap_mentioned_p ARM-specific ! * [311]10834 [arm] GCC 3.3 still generates incorrect instructions for functions with __attribute__ ((interrupt ("IRQ"))) ! * [312]10842 [arm] Clobbered link register is copied to pc under certain circumstances ! * [313]11052 [arm] noce_process_if_block() can lose REG_INC notes ! * [314]11183 [arm] ICE in change_address_1 (3.3) / subreg_hard_regno (3.4) MIPS-specific ! * [315]11084 ICE in propagate_one_insn, in flow.c SH-specific ! * [316]10331 can't compile c++ part of gcc cross compiler for sh-elf ! * [317]10413 [SH] ICE in reload_cse_simplify_operands, in reload1.c ! * [318]11096 i686-linux to sh-linux cross compiler fails to compile C++ files GNU/Linux (or Hurd?) specific ! * [319]2873 Bogus fixinclude of stdio.h from glibc 2.2.3 UnixWare specific ! * [320]3163 configure bug: gcc/aclocal.m4 mmap test fails on UnixWare 7.1.1 Cygwin (or mingw) specific ! * [321]5287 ICE with dllimport attribute ! * [322]10148 [MingW/CygWin] Compiler dumps core DJGPP specific ! * [323]8787 GCC fails to emit .intel_syntax when invoked with -masm=intel on DJGPP Darwin (and MacOS X) specific ! * [324]10900 trampolines crash Documentation ! * [325]1607 (c++) Format attributes on methods undocumented ! * [326]4252 Invalid option `-fdump-translation-unit' ! * [327]4490 Clarify restrictions on -m96bit-long-double, -m128bit-long-double ! * [328]10355 document an issue with regparm attribute on some systems (e.g. Solaris) ! * [329]10726 (fortran) Documentation for function "IDate Intrinsic (Unix)" is wrong ! * [330]10805 document bug in old version of Sun assembler ! * [331]10815 warn against GNU binutils on AIX ! * [332]10877 document need for newer binutils on i?86-*-linux-gnu ! * [333]11280 Manual incorrect with respect to -freorder-blocks ! * [334]11466 Document -mlittle-endian and its restrictions for the sparc64 port Testsuite bugs (compiler itself is not affected) ! * [335]10737 newer bison causes g++.dg/parse/crash2.C to incorrectly report failure ! * [336]10810 gcc-3.3 fails make check: buffer overrun in test_demangle.c __________________________________________________________________ ! [337]GCC 3.3.2 Bug Fixes *************** GCC 3.3.2 *** 18967,19121 **** Bootstrap failures and problems ! * [335]8336 [SCO5] bootstrap config still tries to use COFF options ! * [336]9330 [alpha-osf] Bootstrap failure on Compaq Tru64 with --enable-threads=posix ! * [337]9631 [hppa64-linux] gcc-3.3 fails to bootstrap ! * [338]9877 fixincludes makes a bad sys/byteorder.h on svr5 (UnixWare 7.1.1) ! * [339]11687 xstormy16-elf build fails in libf2c ! * [340]12263 [SGI IRIX] bootstrap fails during compile of libf2c/libI77/backspace.c ! * [341]12490 buffer overflow in scan-decls.c (during Solaris 9 fix-header processing) Internal compiler errors (multi-platform) ! * [342]7277 Casting integers to vector types causes ICE ! * [343]7939 (c++) ICE on invalid function template specialization ! * [344]11063 (c++) ICE on parsing initialization list of const array member ! * [345]11207 ICE with negative index in array element designator ! * [346]11522 (fortran) g77 dwarf-2 ICE in add_abstract_origin_attribute ! * [347]11595 (c++) ICE on duplicate label definition ! * [348]11646 (c++) ICE in commit_one_edge_insertion with -fnon-call-exceptions -fgcse -O ! * [349]11665 ICE in struct initializer when taking address ! * [350]11852 (c++) ICE with bad struct initializer. ! * [351]11878 (c++) ICE in cp_expr_size ! * [352]11883 ICE with any -O on mercury-generated C code ! * [353]11991 (c++) ICE in cxx_incomplete_type_diagnostic, in cp/typeck2.c when applying typeid operator to template template parameter ! * [354]12146 ICE in lookup_template_function, in cp/pt.c ! * [355]12215 ICE in make_label_edge with -fnon-call-exceptions -fno-gcse -O2 ! * [356]12369 (c++) ICE with templates and friends ! * [357]12446 ICE in emit_move_insn on complicated array reference ! * [358]12510 ICE in final_scan_insn ! * [359]12544 ICE with large parameters used in nested functions C and optimization bugs ! * [360]9862 spurious warnings with -W -finline-functions ! * [361]10962 lookup_field is a linear search on a linked list (can be slow if large struct) ! * [362]11370 -Wunreachable-code gives false complaints ! * [363]11637 invalid assembly with -fnon-call-exceptions ! * [364]11885 Problem with bitfields in packed structs ! * [365]12082 Inappropriate unreachable code warnings ! * [366]12180 Inline optimization fails for variadic function ! * [367]12340 loop unroller + gcse produces wrong code C++ compiler and library ! * [368]3907 nested template parameter collides with member name ! * [369]5293 confusing message when binding a temporary to a reference ! * [370]5296 [DR115] Pointers to functions and to template functions behave differently in deduction ! * [371]7939 ICE on function template specialization ! * [372]8656 Unable to assign function with __attribute__ and pointer return type to an appropriate variable ! * [373]10147 Confusing error message for invalid template function argument ! * [374]11400 std::search_n() makes assumptions about Size parameter ! * [375]11409 issues with using declarations, overloading, and built-in functions ! * [376]11740 ctype::do_is(mask, wchar_t) doesn't handle multiple bits in mask ! * [377]11786 operator() call on variable in other namespace not recognized ! * [378]11867 static_cast ignores ambiguity ! * [379]11928 bug with conversion operators that are typedefs ! * [380]12114 Uninitialized memory accessed in dtor ! * [381]12163 static_cast + explicit constructor regression ! * [382]12181 Wrong code with comma operator and c++ ! * [383]12236 regparm and fastcall messes up parameters ! * [384]12266 incorrect instantiation of unneeded template during overload resolution ! * [385]12296 istream::peek() doesn't set eofbit ! * [386]12298 [sjlj exceptions] Stack unwind destroys not-yet-constructed object ! * [387]12369 ICE with templates and friends ! * [388]12337 apparently infinite loop in g++ ! * [389]12344 stdcall attribute ignored if function returns a pointer ! * [390]12451 missing(late) class forward declaration in cxxabi.h ! * [391]12486 g++ accepts invalid use of a qualified name x86 specific (Intel/AMD) ! * [392]8869 [x86 MMX] ICE with const variable optimization and MMX builtins ! * [393]9786 ICE in fixup_abnormal_edges with -fnon-call-exceptions -O2 ! * [394]11689 g++3.3 emits un-assembleable code for k6 architecture ! * [395]12116 [k6] Invalid assembly output values with X-MAME code ! * [396]12070 ICE converting between double and long double with -msoft-float ia64-specific ! * [397]11184 [ia64 hpux] ICE on __builtin_apply building libobjc ! * [398]11535 __builtin_return_address may not work on ia64 ! * [399]11693 [ia64] ICE in gen_nop_type ! * [400]12224 [ia64] Thread-local storage doesn't work PowerPC-specific ! * [401]11087 [powerpc64-linux] GCC miscompiles raid1.c from linux kernel ! * [402]11319 loop miscompiled on ppc32 ! * [403]11949 ICE Compiler segfault with ffmpeg -maltivec code SPARC-specific ! * [404]11662 wrong code for expr. with cast to long long and exclusive or ! * [405]11965 invalid assembler code for a shift < 32 operation ! * [406]12301 (c++) stack corruption when a returned expression throws an exception Alpha-specific ! * [407]11717 [alpha-linux] unrecognizable insn compiling for.c of kernel 2.4.22-pre8 HPUX-specific ! * [408]11313 problem with #pragma weak and static inline functions ! * [409]11712 __STDC_EXT__ not defined for C++ by default anymore? Solaris specific ! * [410]12166 Profiled programs crash if PROFDIR is set Solaris-x86 specific ! * [411]12101 i386 Solaris no longer works with GNU as? Miscellaneous embedded target-specific bugs ! * [412]10988 [m32r-elf] wrong blockmove code with -O3 ! * [413]11805 [h8300-unknown-coff] [H8300] ICE for simple code with -O2 ! * [414]11902 [sh4] spec file improperly inserts rpath even when none needed ! * [415]11903 [sh4] -pthread fails to link due to error in spec file on sh4 __________________________________________________________________ ! GCC 3.3.3 Minor features --- 19412,19566 ---- Bootstrap failures and problems ! * [338]8336 [SCO5] bootstrap config still tries to use COFF options ! * [339]9330 [alpha-osf] Bootstrap failure on Compaq Tru64 with --enable-threads=posix ! * [340]9631 [hppa64-linux] gcc-3.3 fails to bootstrap ! * [341]9877 fixincludes makes a bad sys/byteorder.h on svr5 (UnixWare 7.1.1) ! * [342]11687 xstormy16-elf build fails in libf2c ! * [343]12263 [SGI IRIX] bootstrap fails during compile of libf2c/libI77/backspace.c ! * [344]12490 buffer overflow in scan-decls.c (during Solaris 9 fix-header processing) Internal compiler errors (multi-platform) ! * [345]7277 Casting integers to vector types causes ICE ! * [346]7939 (c++) ICE on invalid function template specialization ! * [347]11063 (c++) ICE on parsing initialization list of const array member ! * [348]11207 ICE with negative index in array element designator ! * [349]11522 (fortran) g77 dwarf-2 ICE in add_abstract_origin_attribute ! * [350]11595 (c++) ICE on duplicate label definition ! * [351]11646 (c++) ICE in commit_one_edge_insertion with -fnon-call-exceptions -fgcse -O ! * [352]11665 ICE in struct initializer when taking address ! * [353]11852 (c++) ICE with bad struct initializer. ! * [354]11878 (c++) ICE in cp_expr_size ! * [355]11883 ICE with any -O on mercury-generated C code ! * [356]11991 (c++) ICE in cxx_incomplete_type_diagnostic, in cp/typeck2.c when applying typeid operator to template template parameter ! * [357]12146 ICE in lookup_template_function, in cp/pt.c ! * [358]12215 ICE in make_label_edge with -fnon-call-exceptions -fno-gcse -O2 ! * [359]12369 (c++) ICE with templates and friends ! * [360]12446 ICE in emit_move_insn on complicated array reference ! * [361]12510 ICE in final_scan_insn ! * [362]12544 ICE with large parameters used in nested functions C and optimization bugs ! * [363]9862 spurious warnings with -W -finline-functions ! * [364]10962 lookup_field is a linear search on a linked list (can be slow if large struct) ! * [365]11370 -Wunreachable-code gives false complaints ! * [366]11637 invalid assembly with -fnon-call-exceptions ! * [367]11885 Problem with bitfields in packed structs ! * [368]12082 Inappropriate unreachable code warnings ! * [369]12180 Inline optimization fails for variadic function ! * [370]12340 loop unroller + gcse produces wrong code C++ compiler and library ! * [371]3907 nested template parameter collides with member name ! * [372]5293 confusing message when binding a temporary to a reference ! * [373]5296 [DR115] Pointers to functions and to template functions behave differently in deduction ! * [374]7939 ICE on function template specialization ! * [375]8656 Unable to assign function with __attribute__ and pointer return type to an appropriate variable ! * [376]10147 Confusing error message for invalid template function argument ! * [377]11400 std::search_n() makes assumptions about Size parameter ! * [378]11409 issues with using declarations, overloading, and built-in functions ! * [379]11740 ctype::do_is(mask, wchar_t) doesn't handle multiple bits in mask ! * [380]11786 operator() call on variable in other namespace not recognized ! * [381]11867 static_cast ignores ambiguity ! * [382]11928 bug with conversion operators that are typedefs ! * [383]12114 Uninitialized memory accessed in dtor ! * [384]12163 static_cast + explicit constructor regression ! * [385]12181 Wrong code with comma operator and c++ ! * [386]12236 regparm and fastcall messes up parameters ! * [387]12266 incorrect instantiation of unneeded template during overload resolution ! * [388]12296 istream::peek() doesn't set eofbit ! * [389]12298 [sjlj exceptions] Stack unwind destroys not-yet-constructed object ! * [390]12369 ICE with templates and friends ! * [391]12337 apparently infinite loop in g++ ! * [392]12344 stdcall attribute ignored if function returns a pointer ! * [393]12451 missing(late) class forward declaration in cxxabi.h ! * [394]12486 g++ accepts invalid use of a qualified name x86 specific (Intel/AMD) ! * [395]8869 [x86 MMX] ICE with const variable optimization and MMX builtins ! * [396]9786 ICE in fixup_abnormal_edges with -fnon-call-exceptions -O2 ! * [397]11689 g++3.3 emits un-assembleable code for k6 architecture ! * [398]12116 [k6] Invalid assembly output values with X-MAME code ! * [399]12070 ICE converting between double and long double with -msoft-float ia64-specific ! * [400]11184 [ia64 hpux] ICE on __builtin_apply building libobjc ! * [401]11535 __builtin_return_address may not work on ia64 ! * [402]11693 [ia64] ICE in gen_nop_type ! * [403]12224 [ia64] Thread-local storage doesn't work PowerPC-specific ! * [404]11087 [powerpc64-linux] GCC miscompiles raid1.c from linux kernel ! * [405]11319 loop miscompiled on ppc32 ! * [406]11949 ICE Compiler segfault with ffmpeg -maltivec code SPARC-specific ! * [407]11662 wrong code for expr. with cast to long long and exclusive or ! * [408]11965 invalid assembler code for a shift < 32 operation ! * [409]12301 (c++) stack corruption when a returned expression throws an exception Alpha-specific ! * [410]11717 [alpha-linux] unrecognizable insn compiling for.c of kernel 2.4.22-pre8 HPUX-specific ! * [411]11313 problem with #pragma weak and static inline functions ! * [412]11712 __STDC_EXT__ not defined for C++ by default anymore? Solaris specific ! * [413]12166 Profiled programs crash if PROFDIR is set Solaris-x86 specific ! * [414]12101 i386 Solaris no longer works with GNU as? Miscellaneous embedded target-specific bugs ! * [415]10988 [m32r-elf] wrong blockmove code with -O3 ! * [416]11805 [h8300-unknown-coff] [H8300] ICE for simple code with -O2 ! * [417]11902 [sh4] spec file improperly inserts rpath even when none needed ! * [418]11903 [sh4] -pthread fails to link due to error in spec file on sh4 __________________________________________________________________ ! [419]GCC 3.3.3 Minor features *************** GCC 3.3.3 *** 19135,19193 **** Bootstrap failures and issues ! * [416]11890 Building cross gcc-3.3.1 for sparc-sun-solaris2.6 fails ! * [417]12399 boehm-gc fails (when building a cross compiler): libtool unable to infer tagged configuration ! * [418]13068 mklibgcc.in doesn't handle multi-level multilib subdirectories properly Internal compiler errors (multi-platform) ! * [419]10060 ICE (stack overflow) on huge file (300k lines) due to recursive behaviour of copy_rtx_if_shared, in emit_rtl.c ! * [420]10555 (c++) ICE on undefined template argument ! * [421]10706 (c++) ICE in mangle_class_name_for_template ! * [422]11496 (fortran) error in flow_loops_find when -funroll-loops active ! * [423]11741 ICE in pre_insert_copy_insn, in gcse.c ! * [424]12440 GCC crashes during compilation of quicktime4linux 2.0.0 ! * [425]12632 (fortran) -fbounds-check ICE ! * [426]12712 (c++) ICE on short legit C++ code fragment with gcc 3.3.2 ! * [427]12726 (c++) ICE (segfault) on trivial code ! * [428]12890 (c++) ICE on compilation of class with throwing method ! * [429]12900 (c++) ICE in rtl_verify_flow_info_1 ! * [430]13060 (fortran) ICE in fixup_var_refs_1, in function.c on correct code with -O2 -fno-force-mem ! * [431]13289 (c++) ICE in regenerate_decl_from_template on recursive template ! * [432]13318 ICE: floating point exception in the loop optimizer ! * [433]13392 (c++) ICE in convert_from_eh_region_ranges_1, in except.c ! * [434]13574 (c++) invalid array default initializer in class lets gcc consume all memory and die ! * [435]13475 ICE on SIMD variables with partial value initialization ! * [436]13797 (c++) ICE on invalid template parameter ! * [437]13824 (java) gcj SEGV with simple .java program C and optimization bugs ! * [438]8776 loop invariants are not removed (most likely) ! * [439]10339 [sparc,ppc,ppc64] Invalid optimization: replacing strncmp by memcmp ! * [440]11350 undefined labels with -Os -fPIC ! * [441]12826 Optimizer removes reference through volatile pointer ! * [442]12500 stabs debug info: void no longer a predefined / builtin type ! * [443]12941 builtin-bitops-1.c miscompilation (latent bug) ! * [444]12953 tree inliner bug (in inline_forbidden_p) and fix ! * [445]13041 linux-2.6/sound/core/oss/rate.c miscompiled ! * [446]13507 spurious printf format warning ! * [447]13382 Type information for const pointer disappears during optimization. ! * [448]13394 noreturn attribute ignored on recursive invokation ! * [449]13400 Compiled code crashes storing to read-only location ! * [450]13521 Endless loop in calculate_global_regs_live C++ compiler and library --- 19580,19638 ---- Bootstrap failures and issues ! * [420]11890 Building cross gcc-3.3.1 for sparc-sun-solaris2.6 fails ! * [421]12399 boehm-gc fails (when building a cross compiler): libtool unable to infer tagged configuration ! * [422]13068 mklibgcc.in doesn't handle multi-level multilib subdirectories properly Internal compiler errors (multi-platform) ! * [423]10060 ICE (stack overflow) on huge file (300k lines) due to recursive behaviour of copy_rtx_if_shared, in emit_rtl.c ! * [424]10555 (c++) ICE on undefined template argument ! * [425]10706 (c++) ICE in mangle_class_name_for_template ! * [426]11496 (fortran) error in flow_loops_find when -funroll-loops active ! * [427]11741 ICE in pre_insert_copy_insn, in gcse.c ! * [428]12440 GCC crashes during compilation of quicktime4linux 2.0.0 ! * [429]12632 (fortran) -fbounds-check ICE ! * [430]12712 (c++) ICE on short legit C++ code fragment with gcc 3.3.2 ! * [431]12726 (c++) ICE (segfault) on trivial code ! * [432]12890 (c++) ICE on compilation of class with throwing method ! * [433]12900 (c++) ICE in rtl_verify_flow_info_1 ! * [434]13060 (fortran) ICE in fixup_var_refs_1, in function.c on correct code with -O2 -fno-force-mem ! * [435]13289 (c++) ICE in regenerate_decl_from_template on recursive template ! * [436]13318 ICE: floating point exception in the loop optimizer ! * [437]13392 (c++) ICE in convert_from_eh_region_ranges_1, in except.c ! * [438]13574 (c++) invalid array default initializer in class lets gcc consume all memory and die ! * [439]13475 ICE on SIMD variables with partial value initialization ! * [440]13797 (c++) ICE on invalid template parameter ! * [441]13824 (java) gcj SEGV with simple .java program C and optimization bugs ! * [442]8776 loop invariants are not removed (most likely) ! * [443]10339 [sparc,ppc,ppc64] Invalid optimization: replacing strncmp by memcmp ! * [444]11350 undefined labels with -Os -fPIC ! * [445]12826 Optimizer removes reference through volatile pointer ! * [446]12500 stabs debug info: void no longer a predefined / builtin type ! * [447]12941 builtin-bitops-1.c miscompilation (latent bug) ! * [448]12953 tree inliner bug (in inline_forbidden_p) and fix ! * [449]13041 linux-2.6/sound/core/oss/rate.c miscompiled ! * [450]13507 spurious printf format warning ! * [451]13382 Type information for const pointer disappears during optimization. ! * [452]13394 noreturn attribute ignored on recursive invokation ! * [453]13400 Compiled code crashes storing to read-only location ! * [454]13521 Endless loop in calculate_global_regs_live C++ compiler and library *************** GCC 3.3.3 *** 19195,19424 **** that the ISO C++ standards committee has made concerning several defect reports (DRs). Links in the list below point to detailed discussion of the relevant defect report. ! * [451]2094 unimplemented: use of `ptrmem_cst' in template type unification ! * [452]2294 using declaration confusion ! * [453]5050 template instantiation depth exceeds limit: recursion problem? ! * [454]9371 Bad exception handling in i/ostream::operator>>/<<(streambuf*) ! * [455]9546 bad exception handling in ostream members ! * [456]10081 basic_ios::_M_cache_locale leaves NULL members in the face of unknown locales ! * [457]10093 [458][DR 61] Setting failbit in exceptions doesn't work ! * [459]10095 istream::operator>>(int&) sets ios::badbit when ios::failbit is set. ! * [460]11554 Warning about reordering of initializers doesn't mention location of constructor ! * [461]12297 istream::sentry::sentry() handles eof() incorrectly. ! * [462]12352 Exception safety problems in src/localename.cc ! * [463]12438 Memory leak in locale::combine() ! * [464]12540 Memory leak in locale::locale(const char*) ! * [465]12594 DRs [466]60 [TC] and [467]63 [TC] not implemented ! * [468]12657 Resolution of [469]DR 292 (WP) still unimplemented ! * [470]12696 memory eating infinite loop in diagnostics (error recovery problem) ! * [471]12815 Code compiled with optimization behaves unexpectedly ! * [472]12862 Conflicts between typedefs/enums and namespace member declarations ! * [473]12926 Wrong value after assignment in initialize list using bit-fields ! * [474]12967 Resolution of [475]DR 300 [WP] still unimplemented ! * [476]12971 Resolution of [477]DR 328 [WP] still unimplemented ! * [478]13007 basic_streambuf::pubimbue, imbue wrong ! * [479]13009 Implicitly-defined assignment operator writes to wrong memory ! * [480]13057 regparm attribute not applied to destructor ! * [481]13070 -Wformat option ignored in g++ ! * [482]13081 forward template declarations in let inlining fail ! * [483]13239 Assertion does not seem to work correctly anymore ! * [484]13262 "xxx is private within this context" when initializing a self-contained template class ! * [485]13290 simple typo in concept checking for std::generate_n ! * [486]13323 Template code does not compile in presence of typedef ! * [487]13369 __verify_grouping (and __add_grouping?) not correct ! * [488]13371 infinite loop with packed struct and inlining ! * [489]13445 Template argument replacement "dereferences" a typedef ! * [490]13461 Fails to access protected-ctor from public constant ! * [491]13462 Non-standard-conforming type set::pointer ! * [492]13478 gcc uses wrong constructor to initialize a const reference ! * [493]13544 "conflicting types" for enums in different scopes ! * [494]13650 string::compare should not (always) use traits_type::length() ! * [495]13683 bogus warning about passing non-PODs through ellipsis ! * [496]13688 Derived class is denied access to protected base class member class ! * [497]13774 Member variable cleared in virtual multiple inheritance class ! * [498]13884 Protect sstream.tcc from extern template use Java compiler and library ! * [499]10746 [win32] garbage collection crash in GCJ Objective-C compiler and library ! * [500]11433 Crash due to dereferencing null pointer when querying protocol Fortran compiler and library ! * [501]12633 logical expression gives incorrect result with -fugly-logint option ! * [502]13037 [gcse-lm] g77 generates incorrect code ! * [503]13213 Hex constant problem when compiling with -fugly-logint and -ftypeless-boz x86-specific (Intel/AMD) ! * [504]4490 ICE with -m128bit-long-double ! * [505]12292 [x86_64] ICE: RTL check: expected code `const_int', have `reg' in make_field_assignment, in combine.c ! * [506]12441 ICE: can't find a register to spill ! * [507]12943 array static-init failure under -fpic, -fPIC ! * [508]13608 Incorrect code with -O3 -ffast-math PowerPC-specific ! * [509]11598 testcase gcc.dg/20020118-1.c fails runtime check of __attribute__((aligned(16))) ! * [510]11793 ICE in extract_insn, in recog.c (const_vector's) ! * [511]12467 vmsumubm emitted when vmsummbm appropriate (typo in altivec.md) ! * [512]12537 g++ generates writeable text sections SPARC-specific ! * [513]12496 wrong result for __atomic_add(&value, -1) when using -O0 -m64 ! * [514]12865 mprotect call to make trampoline executable may fail ! * [515]13354 ICE in sparc_emit_set_const32 ARM-specific ! * [516]10467 [arm] ICE in pre_insert_copy_insn, ia64-specific ! * [517]11226 ICE passing struct arg with two floats ! * [518]11227 ICE for _Complex float, _Complex long double args ! * [519]12644 GCC 3.3.2 fails to compile glibc on ia64 ! * [520]13149 build gcc-3.3.2 1305 error:unrecognizable insn * Various fixes for libunwind Alpha-specific ! * [521]12654 Incorrect comparison code generated for Alpha ! * [522]12965 SEGV+ICE in cc1plus on alpha-linux with -O2 ! * [523]13031 ICE (unrecognizable insn) when building gnome-libs-1.4.2 HPPA-specific ! * [524]11634 [hppa] ICE in verify_local_live_at_start, in flow.c ! * [525]12158 [hppa] compilation does not terminate at -O1 S390-specific ! * [526]11992 Wrong built-in code for memcmp with length 1<<24: only (1<<24)-1 possible for CLCL-Instruction SH-specific ! * [527]9365 segfault in gen_far_branch (config/sh/sh.c) ! * [528]10392 optimizer generates faulty array indexing ! * [529]11322 SH profiler outputs multiple definitions of symbol ! * [530]13069 gcc/config/sh/rtems.h broken ! * [531]13302 Putting a va_list in a struct causes seg fault ! * [532]13585 Incorrect optimization of call to sfunc * Fix inappropriately exported libgcc functions from the shared library Other embedded target specific ! * [533]8916 [mcore] unsigned char assign gets hosed. ! * [534]11576 [h8300] ICE in change_address_1, in emit-rtl.c ! * [535]13122 [h8300] local variable gets corrupted by function call when -fomit-frame-pointer is given ! * [536]13256 [cris] strict_low_part mistreated in delay slots ! * [537]13373 [mcore] optimization with -frerun-cse-after-loop -fexpensive-optimizations produces wrong code on mcore GNU HURD-specific ! * [538]12561 gcc/config/t-gnu needs updating to work with --with-sysroot Tru64 Unix specific ! * [539]6243 testsuite fails almost all tests due to no libintl in LD_LIBRARY_PATH during test. ! * [540]11397 weak aliases broken on Tru64 UNIX AIX-specific ! * [541]12505 build failure due to defines of uchar in cpphash.h and sys/types.h ! * [542]13150 WEAK symbols not exported by collect2 IRIX-specific ! * [543]12666 fixincludes problem on IRIX 6.5.19m Solaris-specific ! * [544]12969 Including sys/byteorder.h breaks configure checks Testsuite problems (compiler is not affected) ! * [545]10819 testsuite creates CR+LF on compiler version lines in test summary files ! * [546]11612 abi_check not finding correct libgcc_s.so.1 Miscellaneous ! * [547]13211 using -###, incorrect warnings about unused linker file are produced __________________________________________________________________ ! GCC 3.3.4 ! This is the [548]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 3.3.4 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). __________________________________________________________________ ! GCC 3.3.5 ! This is the [549]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 3.3.5 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). __________________________________________________________________ ! GCC 3.3.6 ! This is the [550]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 3.3.6 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). For questions related to the use of GCC, please consult these web ! pages and the [551]GCC manuals. If that fails, the ! [552]gcc-help@gcc.gnu.org mailing list might help. Comments on these web pages and the development of GCC are welcome on our developer ! list at [553]gcc@gcc.gnu.org. All of [554]our lists have public archives. ! Copyright (C) [555]Free Software Foundation, Inc. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! These pages are [556]maintained by the GCC team. Last modified ! 2023-01-19. References --- 19640,19869 ---- that the ISO C++ standards committee has made concerning several defect reports (DRs). Links in the list below point to detailed discussion of the relevant defect report. ! * [455]2094 unimplemented: use of `ptrmem_cst' in template type unification ! * [456]2294 using declaration confusion ! * [457]5050 template instantiation depth exceeds limit: recursion problem? ! * [458]9371 Bad exception handling in i/ostream::operator>>/<<(streambuf*) ! * [459]9546 bad exception handling in ostream members ! * [460]10081 basic_ios::_M_cache_locale leaves NULL members in the face of unknown locales ! * [461]10093 [462][DR 61] Setting failbit in exceptions doesn't work ! * [463]10095 istream::operator>>(int&) sets ios::badbit when ios::failbit is set. ! * [464]11554 Warning about reordering of initializers doesn't mention location of constructor ! * [465]12297 istream::sentry::sentry() handles eof() incorrectly. ! * [466]12352 Exception safety problems in src/localename.cc ! * [467]12438 Memory leak in locale::combine() ! * [468]12540 Memory leak in locale::locale(const char*) ! * [469]12594 DRs [470]60 [TC] and [471]63 [TC] not implemented ! * [472]12657 Resolution of [473]DR 292 (WP) still unimplemented ! * [474]12696 memory eating infinite loop in diagnostics (error recovery problem) ! * [475]12815 Code compiled with optimization behaves unexpectedly ! * [476]12862 Conflicts between typedefs/enums and namespace member declarations ! * [477]12926 Wrong value after assignment in initialize list using bit-fields ! * [478]12967 Resolution of [479]DR 300 [WP] still unimplemented ! * [480]12971 Resolution of [481]DR 328 [WP] still unimplemented ! * [482]13007 basic_streambuf::pubimbue, imbue wrong ! * [483]13009 Implicitly-defined assignment operator writes to wrong memory ! * [484]13057 regparm attribute not applied to destructor ! * [485]13070 -Wformat option ignored in g++ ! * [486]13081 forward template declarations in let inlining fail ! * [487]13239 Assertion does not seem to work correctly anymore ! * [488]13262 "xxx is private within this context" when initializing a self-contained template class ! * [489]13290 simple typo in concept checking for std::generate_n ! * [490]13323 Template code does not compile in presence of typedef ! * [491]13369 __verify_grouping (and __add_grouping?) not correct ! * [492]13371 infinite loop with packed struct and inlining ! * [493]13445 Template argument replacement "dereferences" a typedef ! * [494]13461 Fails to access protected-ctor from public constant ! * [495]13462 Non-standard-conforming type set::pointer ! * [496]13478 gcc uses wrong constructor to initialize a const reference ! * [497]13544 "conflicting types" for enums in different scopes ! * [498]13650 string::compare should not (always) use traits_type::length() ! * [499]13683 bogus warning about passing non-PODs through ellipsis ! * [500]13688 Derived class is denied access to protected base class member class ! * [501]13774 Member variable cleared in virtual multiple inheritance class ! * [502]13884 Protect sstream.tcc from extern template use Java compiler and library ! * [503]10746 [win32] garbage collection crash in GCJ Objective-C compiler and library ! * [504]11433 Crash due to dereferencing null pointer when querying protocol Fortran compiler and library ! * [505]12633 logical expression gives incorrect result with -fugly-logint option ! * [506]13037 [gcse-lm] g77 generates incorrect code ! * [507]13213 Hex constant problem when compiling with -fugly-logint and -ftypeless-boz x86-specific (Intel/AMD) ! * [508]4490 ICE with -m128bit-long-double ! * [509]12292 [x86_64] ICE: RTL check: expected code `const_int', have `reg' in make_field_assignment, in combine.c ! * [510]12441 ICE: can't find a register to spill ! * [511]12943 array static-init failure under -fpic, -fPIC ! * [512]13608 Incorrect code with -O3 -ffast-math PowerPC-specific ! * [513]11598 testcase gcc.dg/20020118-1.c fails runtime check of __attribute__((aligned(16))) ! * [514]11793 ICE in extract_insn, in recog.c (const_vector's) ! * [515]12467 vmsumubm emitted when vmsummbm appropriate (typo in altivec.md) ! * [516]12537 g++ generates writeable text sections SPARC-specific ! * [517]12496 wrong result for __atomic_add(&value, -1) when using -O0 -m64 ! * [518]12865 mprotect call to make trampoline executable may fail ! * [519]13354 ICE in sparc_emit_set_const32 ARM-specific ! * [520]10467 [arm] ICE in pre_insert_copy_insn, ia64-specific ! * [521]11226 ICE passing struct arg with two floats ! * [522]11227 ICE for _Complex float, _Complex long double args ! * [523]12644 GCC 3.3.2 fails to compile glibc on ia64 ! * [524]13149 build gcc-3.3.2 1305 error:unrecognizable insn * Various fixes for libunwind Alpha-specific ! * [525]12654 Incorrect comparison code generated for Alpha ! * [526]12965 SEGV+ICE in cc1plus on alpha-linux with -O2 ! * [527]13031 ICE (unrecognizable insn) when building gnome-libs-1.4.2 HPPA-specific ! * [528]11634 [hppa] ICE in verify_local_live_at_start, in flow.c ! * [529]12158 [hppa] compilation does not terminate at -O1 S390-specific ! * [530]11992 Wrong built-in code for memcmp with length 1<<24: only (1<<24)-1 possible for CLCL-Instruction SH-specific ! * [531]9365 segfault in gen_far_branch (config/sh/sh.c) ! * [532]10392 optimizer generates faulty array indexing ! * [533]11322 SH profiler outputs multiple definitions of symbol ! * [534]13069 gcc/config/sh/rtems.h broken ! * [535]13302 Putting a va_list in a struct causes seg fault ! * [536]13585 Incorrect optimization of call to sfunc * Fix inappropriately exported libgcc functions from the shared library Other embedded target specific ! * [537]8916 [mcore] unsigned char assign gets hosed. ! * [538]11576 [h8300] ICE in change_address_1, in emit-rtl.c ! * [539]13122 [h8300] local variable gets corrupted by function call when -fomit-frame-pointer is given ! * [540]13256 [cris] strict_low_part mistreated in delay slots ! * [541]13373 [mcore] optimization with -frerun-cse-after-loop -fexpensive-optimizations produces wrong code on mcore GNU HURD-specific ! * [542]12561 gcc/config/t-gnu needs updating to work with --with-sysroot Tru64 Unix specific ! * [543]6243 testsuite fails almost all tests due to no libintl in LD_LIBRARY_PATH during test. ! * [544]11397 weak aliases broken on Tru64 UNIX AIX-specific ! * [545]12505 build failure due to defines of uchar in cpphash.h and sys/types.h ! * [546]13150 WEAK symbols not exported by collect2 IRIX-specific ! * [547]12666 fixincludes problem on IRIX 6.5.19m Solaris-specific ! * [548]12969 Including sys/byteorder.h breaks configure checks Testsuite problems (compiler is not affected) ! * [549]10819 testsuite creates CR+LF on compiler version lines in test summary files ! * [550]11612 abi_check not finding correct libgcc_s.so.1 Miscellaneous ! * [551]13211 using -###, incorrect warnings about unused linker file are produced __________________________________________________________________ ! [552]GCC 3.3.4 ! This is the [553]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 3.3.4 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). __________________________________________________________________ ! [554]GCC 3.3.5 ! This is the [555]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 3.3.5 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). __________________________________________________________________ ! [556]GCC 3.3.6 ! This is the [557]list of problem reports (PRs) from GCC's bug tracking system that are known to be fixed in the 3.3.6 release. This list might not be complete (that is, it is possible that some PRs that have been fixed are not listed here). For questions related to the use of GCC, please consult these web ! pages and the [558]GCC manuals. If that fails, the ! [559]gcc-help@gcc.gnu.org mailing list might help. Comments on these web pages and the development of GCC are welcome on our developer ! list at [560]gcc@gcc.gnu.org. All of [561]our lists have public archives. ! Copyright (C) [562]Free Software Foundation, Inc. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! These pages are [563]maintained by the GCC team. Last modified ! 2025-06-05. References *************** References *** 19427,19985 **** 3. https://gcc.gnu.org/gcc-3.3/changes.html#obsolete_systems 4. https://gcc.gnu.org/gcc-3.3/changes.html#nonnull_attribute 5. https://gcc.gnu.org/news/dfa.html ! 6. https://gcc.gnu.org/c99status.html 7. https://gcc.gnu.org/onlinedocs/gcc-3.3.6/g77/News.html ! 8. https://gcc.gnu.org/PR10140 ! 9. https://gcc.gnu.org/PR10198 ! 10. https://gcc.gnu.org/PR10338 ! 11. https://gcc.gnu.org/PR3581 ! 12. https://gcc.gnu.org/PR4382 ! 13. https://gcc.gnu.org/PR5533 ! 14. https://gcc.gnu.org/PR6387 ! 15. https://gcc.gnu.org/PR6412 ! 16. https://gcc.gnu.org/PR6620 ! 17. https://gcc.gnu.org/PR6663 ! 18. https://gcc.gnu.org/PR7068 ! 19. https://gcc.gnu.org/PR7083 ! 20. https://gcc.gnu.org/PR7647 ! 21. https://gcc.gnu.org/PR7675 ! 22. https://gcc.gnu.org/PR7718 ! 23. https://gcc.gnu.org/PR8116 ! 24. https://gcc.gnu.org/PR8358 ! 25. https://gcc.gnu.org/PR8511 ! 26. https://gcc.gnu.org/PR8564 ! 27. https://gcc.gnu.org/PR8660 ! 28. https://gcc.gnu.org/PR8766 ! 29. https://gcc.gnu.org/PR8803 ! 30. https://gcc.gnu.org/PR8846 ! 31. https://gcc.gnu.org/PR8906 ! 32. https://gcc.gnu.org/PR9216 ! 33. https://gcc.gnu.org/PR9261 ! 34. https://gcc.gnu.org/PR9263 ! 35. https://gcc.gnu.org/PR9429 ! 36. https://gcc.gnu.org/PR9516 ! 37. https://gcc.gnu.org/PR9600 ! 38. https://gcc.gnu.org/PR9629 ! 39. https://gcc.gnu.org/PR9672 ! 40. https://gcc.gnu.org/PR9749 ! 41. https://gcc.gnu.org/PR9794 ! 42. https://gcc.gnu.org/PR9829 ! 43. https://gcc.gnu.org/PR9916 ! 44. https://gcc.gnu.org/PR9936 ! 45. https://gcc.gnu.org/PR10262 ! 46. https://gcc.gnu.org/PR10278 ! 47. https://gcc.gnu.org/PR10446 ! 48. https://gcc.gnu.org/PR10451 ! 49. https://gcc.gnu.org/PR10506 ! 50. https://gcc.gnu.org/PR10549 ! 51. https://gcc.gnu.org/PR2001 ! 52. https://gcc.gnu.org/PR2391 ! 53. https://gcc.gnu.org/PR2960 ! 54. https://gcc.gnu.org/PR4046 ! 55. https://gcc.gnu.org/PR6405 ! 56. https://gcc.gnu.org/PR6798 ! 57. https://gcc.gnu.org/PR6871 ! 58. https://gcc.gnu.org/PR6909 ! 59. https://gcc.gnu.org/PR7189 ! 60. https://gcc.gnu.org/PR7642 ! 61. https://gcc.gnu.org/PR8634 ! 62. https://gcc.gnu.org/PR8750 ! 63. https://gcc.gnu.org/PR2161 ! 64. https://gcc.gnu.org/PR4319 ! 65. https://gcc.gnu.org/PR8602 ! 66. https://gcc.gnu.org/PR9177 ! 67. https://gcc.gnu.org/PR9853 ! 68. https://gcc.gnu.org/PR45 ! 69. https://gcc.gnu.org/PR3784 ! 70. https://gcc.gnu.org/PR764 ! 71. https://gcc.gnu.org/PR5116 ! 72. https://gcc.gnu.org/PR2862 ! 73. https://gcc.gnu.org/PR3663 ! 74. https://gcc.gnu.org/PR3797 ! 75. https://gcc.gnu.org/PR3948 ! 76. https://gcc.gnu.org/PR4137 ! 77. https://gcc.gnu.org/PR4361 ! 78. https://gcc.gnu.org/PR4802 ! 79. https://gcc.gnu.org/PR5837 ! 80. https://gcc.gnu.org/PR4803 ! 81. https://gcc.gnu.org/PR5094 ! 82. https://gcc.gnu.org/PR5730 ! 83. https://gcc.gnu.org/PR6713 ! 84. https://gcc.gnu.org/PR7015 ! 85. https://gcc.gnu.org/PR7086 ! 86. https://gcc.gnu.org/PR7099 ! 87. https://gcc.gnu.org/PR7247 ! 88. https://gcc.gnu.org/PR7441 ! 89. https://gcc.gnu.org/PR7768 ! 90. https://gcc.gnu.org/PR7804 ! 91. https://gcc.gnu.org/PR8099 ! 92. https://gcc.gnu.org/PR8117 ! 93. https://gcc.gnu.org/PR8205 ! 94. https://gcc.gnu.org/PR8645 ! 95. https://gcc.gnu.org/PR8724 ! 96. https://gcc.gnu.org/PR8805 ! 97. https://gcc.gnu.org/PR8691 ! 98. https://gcc.gnu.org/PR8700 ! 99. https://gcc.gnu.org/PR8724 ! 100. https://gcc.gnu.org/PR8949 ! 101. https://gcc.gnu.org/PR9016 ! 102. https://gcc.gnu.org/PR9053 ! 103. https://gcc.gnu.org/PR9152 ! 104. https://gcc.gnu.org/PR9182 ! 105. https://gcc.gnu.org/PR9297 ! 106. https://gcc.gnu.org/PR9318 ! 107. https://gcc.gnu.org/PR9320 ! 108. https://gcc.gnu.org/PR9400 ! 109. https://gcc.gnu.org/PR9424 ! 110. https://gcc.gnu.org/PR9425 ! 111. https://gcc.gnu.org/PR9439 ! 112. https://gcc.gnu.org/PR9474 ! 113. https://gcc.gnu.org/PR9548 ! 114. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#231 ! 115. https://gcc.gnu.org/PR9555 ! 116. https://gcc.gnu.org/PR9561 ! 117. https://gcc.gnu.org/PR9563 ! 118. https://gcc.gnu.org/PR9582 ! 119. https://gcc.gnu.org/PR9622 ! 120. https://gcc.gnu.org/PR9683 ! 121. https://gcc.gnu.org/PR9791 ! 122. https://gcc.gnu.org/PR9817 ! 123. https://gcc.gnu.org/PR9825 ! 124. https://gcc.gnu.org/PR9826 ! 125. https://gcc.gnu.org/PR9924 ! 126. https://gcc.gnu.org/PR9946 ! 127. https://gcc.gnu.org/PR9964 ! 128. https://gcc.gnu.org/PR9988 ! 129. https://gcc.gnu.org/PR10033 ! 130. https://gcc.gnu.org/PR10097 ! 131. https://gcc.gnu.org/PR10132 ! 132. https://gcc.gnu.org/PR10180 ! 133. https://gcc.gnu.org/PR10199 ! 134. https://gcc.gnu.org/PR10300 ! 135. https://gcc.gnu.org/PR10427 ! 136. https://gcc.gnu.org/PR10503 ! 137. https://gcc.gnu.org/PR5956 ! 138. https://gcc.gnu.org/PR1832 ! 139. https://gcc.gnu.org/PR3924 ! 140. https://gcc.gnu.org/PR5634 ! 141. https://gcc.gnu.org/PR6367 ! 142. https://gcc.gnu.org/PR6491 ! 143. https://gcc.gnu.org/PR6742 ! 144. https://gcc.gnu.org/PR7113 ! 145. https://gcc.gnu.org/PR7236 ! 146. https://gcc.gnu.org/PR7278 ! 147. https://gcc.gnu.org/PR7384 ! 148. https://gcc.gnu.org/PR7388 ! 149. https://gcc.gnu.org/PR8587 ! 150. https://gcc.gnu.org/PR9038 ! 151. https://gcc.gnu.org/PR10197 ! 152. https://gcc.gnu.org/PR6005 ! 153. https://gcc.gnu.org/PR6389 ! 154. https://gcc.gnu.org/PR6576 ! 155. https://gcc.gnu.org/PR6652 ! 156. https://gcc.gnu.org/PR7060 ! 157. https://gcc.gnu.org/PR7073 ! 158. https://gcc.gnu.org/PR7180 ! 159. https://gcc.gnu.org/PR7416 ! 160. https://gcc.gnu.org/PR7570 ! 161. https://gcc.gnu.org/PR7578 ! 162. https://gcc.gnu.org/PR7611 ! 163. https://gcc.gnu.org/PR7709 ! 164. https://gcc.gnu.org/PR7766 ! 165. https://gcc.gnu.org/PR7785 ! 166. https://gcc.gnu.org/PR7786 ! 167. https://gcc.gnu.org/PR8142 ! 168. https://gcc.gnu.org/PR8234 ! 169. https://gcc.gnu.org/PR8415 ! 170. https://gcc.gnu.org/PR8481 ! 171. https://gcc.gnu.org/PR8593 ! 172. https://gcc.gnu.org/PR8759 ! 173. https://gcc.gnu.org/PR8997 ! 174. https://gcc.gnu.org/PR9253 ! 175. https://gcc.gnu.org/PR9254 ! 176. https://gcc.gnu.org/PR9271 ! 177. https://gcc.gnu.org/PR6767 ! 178. https://gcc.gnu.org/PR9911 ! 179. https://gcc.gnu.org/PR10020 ! 180. https://gcc.gnu.org/PR10546 ! 181. https://gcc.gnu.org/PR7029 ! 182. https://gcc.gnu.org/PR2903 ! 183. https://gcc.gnu.org/PR7873 ! 184. https://gcc.gnu.org/PR7680 ! 185. https://gcc.gnu.org/PR8705 ! 186. https://gcc.gnu.org/PR9986 ! 187. https://gcc.gnu.org/PR10056 ! 188. https://gcc.gnu.org/PR6744 ! 189. https://gcc.gnu.org/PR7361 ! 190. https://gcc.gnu.org/PR9496 ! 191. https://gcc.gnu.org/PR7067 ! 192. https://gcc.gnu.org/PR8480 ! 193. https://gcc.gnu.org/PR8784 ! 194. https://gcc.gnu.org/PR10315 ! 195. https://gcc.gnu.org/PR10267 ! 196. https://gcc.gnu.org/PR7916 ! 197. https://gcc.gnu.org/PR7926 ! 198. https://gcc.gnu.org/PR8555 ! 199. https://gcc.gnu.org/PR8994 ! 200. https://gcc.gnu.org/PR9426 ! 201. https://gcc.gnu.org/PR9806 ! 202. https://gcc.gnu.org/PR10077 ! 203. https://gcc.gnu.org/PR10233 ! 204. https://gcc.gnu.org/PR10286 ! 205. https://gcc.gnu.org/PR10308 ! 206. https://gcc.gnu.org/PR11272 ! 207. https://gcc.gnu.org/PR5754 ! 208. https://gcc.gnu.org/PR6597 ! 209. https://gcc.gnu.org/PR6949 ! 210. https://gcc.gnu.org/PR7053 ! 211. https://gcc.gnu.org/PR8164 ! 212. https://gcc.gnu.org/PR8384 ! 213. https://gcc.gnu.org/PR9559 ! 214. https://gcc.gnu.org/PR9649 ! 215. https://gcc.gnu.org/PR9864 ! 216. https://gcc.gnu.org/PR10432 ! 217. https://gcc.gnu.org/PR10475 ! 218. https://gcc.gnu.org/PR10635 ! 219. https://gcc.gnu.org/PR10661 ! 220. https://gcc.gnu.org/PR10700 ! 221. https://gcc.gnu.org/PR10712 ! 222. https://gcc.gnu.org/PR10796 ! 223. https://gcc.gnu.org/PR10890 ! 224. https://gcc.gnu.org/PR10939 ! 225. https://gcc.gnu.org/PR10956 ! 226. https://gcc.gnu.org/PR11041 ! 227. https://gcc.gnu.org/PR11059 ! 228. https://gcc.gnu.org/PR11083 ! 229. https://gcc.gnu.org/PR11105 ! 230. https://gcc.gnu.org/PR11149 ! 231. https://gcc.gnu.org/PR11228 ! 232. https://gcc.gnu.org/PR11282 ! 233. https://gcc.gnu.org/PR11301 ! 234. https://gcc.gnu.org/PR11308 ! 235. https://gcc.gnu.org/PR11473 ! 236. https://gcc.gnu.org/PR11503 ! 237. https://gcc.gnu.org/PR11513 ! 238. https://gcc.gnu.org/PR11198 ! 239. https://gcc.gnu.org/PR11304 ! 240. https://gcc.gnu.org/PR11381 ! 241. https://gcc.gnu.org/PR11536 ! 242. https://gcc.gnu.org/PR11557 ! 243. https://gcc.gnu.org/PR5897 ! 244. https://gcc.gnu.org/PR11279 ! 245. https://gcc.gnu.org/PR11022 ! 246. https://gcc.gnu.org/PR2330 ! 247. https://gcc.gnu.org/PR5388 ! 248. https://gcc.gnu.org/PR5390 ! 249. https://gcc.gnu.org/PR7877 ! 250. https://gcc.gnu.org/PR9393 ! 251. https://gcc.gnu.org/PR10032 ! 252. https://gcc.gnu.org/PR10468 ! 253. https://gcc.gnu.org/PR10527 ! 254. https://gcc.gnu.org/PR10679 ! 255. https://gcc.gnu.org/PR10682 ! 256. https://gcc.gnu.org/PR10689 ! 257. https://gcc.gnu.org/PR10845 ! 258. https://gcc.gnu.org/PR10849 ! 259. https://gcc.gnu.org/PR10888 ! 260. https://gcc.gnu.org/PR10929 ! 261. https://gcc.gnu.org/PR10931 ! 262. https://gcc.gnu.org/PR10940 ! 263. https://gcc.gnu.org/PR10968 ! 264. https://gcc.gnu.org/PR10990 ! 265. https://gcc.gnu.org/PR11039 ! 266. https://gcc.gnu.org/PR11062 ! 267. https://gcc.gnu.org/PR11095 ! 268. https://gcc.gnu.org/PR11098 ! 269. https://gcc.gnu.org/PR11137 ! 270. https://gcc.gnu.org/PR11154 ! 271. https://gcc.gnu.org/PR11329 ! 272. https://gcc.gnu.org/PR11332 ! 273. https://gcc.gnu.org/PR11431 ! 274. https://gcc.gnu.org/PR11528 ! 275. https://gcc.gnu.org/PR11546 ! 276. https://gcc.gnu.org/PR11567 ! 277. https://gcc.gnu.org/PR11645 ! 278. https://gcc.gnu.org/PR5179 ! 279. https://gcc.gnu.org/PR8204 ! 280. https://gcc.gnu.org/PR10838 ! 281. https://gcc.gnu.org/PR10886 ! 282. https://gcc.gnu.org/PR11349 ! 283. https://gcc.gnu.org/PR4823 ! 284. https://gcc.gnu.org/PR8878 ! 285. https://gcc.gnu.org/PR9815 ! 286. https://gcc.gnu.org/PR10402 ! 287. https://gcc.gnu.org/PR10504 ! 288. https://gcc.gnu.org/PR10673 ! 289. https://gcc.gnu.org/PR11044 ! 290. https://gcc.gnu.org/PR11089 ! 291. https://gcc.gnu.org/PR11420 ! 292. https://gcc.gnu.org/PR9362 ! 293. https://gcc.gnu.org/PR10142 ! 294. https://gcc.gnu.org/PR10663 ! 295. https://gcc.gnu.org/PR10835 ! 296. https://gcc.gnu.org/PR10876 ! 297. https://gcc.gnu.org/PR10955 ! 298. https://gcc.gnu.org/PR11018 ! 299. https://gcc.gnu.org/PR11556 ! 300. https://gcc.gnu.org/PR10907 ! 301. https://gcc.gnu.org/PR11320 ! 302. https://gcc.gnu.org/PR11599 ! 303. https://gcc.gnu.org/PR9745 ! 304. https://gcc.gnu.org/PR10871 ! 305. https://gcc.gnu.org/PR11440 ! 306. https://gcc.gnu.org/PR7594 ! 307. https://gcc.gnu.org/PR10557 ! 308. https://gcc.gnu.org/PR11054 ! 309. https://gcc.gnu.org/PR10834 ! 310. https://gcc.gnu.org/PR10842 ! 311. https://gcc.gnu.org/PR11052 ! 312. https://gcc.gnu.org/PR11183 ! 313. https://gcc.gnu.org/PR11084 ! 314. https://gcc.gnu.org/PR10331 ! 315. https://gcc.gnu.org/PR10413 ! 316. https://gcc.gnu.org/PR11096 ! 317. https://gcc.gnu.org/PR2873 ! 318. https://gcc.gnu.org/PR3163 ! 319. https://gcc.gnu.org/PR5287 ! 320. https://gcc.gnu.org/PR10148 ! 321. https://gcc.gnu.org/PR8787 ! 322. https://gcc.gnu.org/PR10900 ! 323. https://gcc.gnu.org/PR1607 ! 324. https://gcc.gnu.org/PR4252 ! 325. https://gcc.gnu.org/PR4490 ! 326. https://gcc.gnu.org/PR10355 ! 327. https://gcc.gnu.org/PR10726 ! 328. https://gcc.gnu.org/PR10805 ! 329. https://gcc.gnu.org/PR10815 ! 330. https://gcc.gnu.org/PR10877 ! 331. https://gcc.gnu.org/PR11280 ! 332. https://gcc.gnu.org/PR11466 ! 333. https://gcc.gnu.org/PR10737 ! 334. https://gcc.gnu.org/PR10810 ! 335. https://gcc.gnu.org/PR8336 ! 336. https://gcc.gnu.org/PR9330 ! 337. https://gcc.gnu.org/PR9631 ! 338. https://gcc.gnu.org/PR9877 ! 339. https://gcc.gnu.org/PR11687 ! 340. https://gcc.gnu.org/PR12263 ! 341. https://gcc.gnu.org/PR12490 ! 342. https://gcc.gnu.org/PR7277 ! 343. https://gcc.gnu.org/PR7939 ! 344. https://gcc.gnu.org/PR11063 ! 345. https://gcc.gnu.org/PR11207 ! 346. https://gcc.gnu.org/PR11522 ! 347. https://gcc.gnu.org/PR11595 ! 348. https://gcc.gnu.org/PR11646 ! 349. https://gcc.gnu.org/PR11665 ! 350. https://gcc.gnu.org/PR11852 ! 351. https://gcc.gnu.org/PR11878 ! 352. https://gcc.gnu.org/PR11883 ! 353. https://gcc.gnu.org/PR11991 ! 354. https://gcc.gnu.org/PR12146 ! 355. https://gcc.gnu.org/PR12215 ! 356. https://gcc.gnu.org/PR12369 ! 357. https://gcc.gnu.org/PR12446 ! 358. https://gcc.gnu.org/PR12510 ! 359. https://gcc.gnu.org/PR12544 ! 360. https://gcc.gnu.org/PR9862 ! 361. https://gcc.gnu.org/PR10962 ! 362. https://gcc.gnu.org/PR11370 ! 363. https://gcc.gnu.org/PR11637 ! 364. https://gcc.gnu.org/PR11885 ! 365. https://gcc.gnu.org/PR12082 ! 366. https://gcc.gnu.org/PR12180 ! 367. https://gcc.gnu.org/PR12340 ! 368. https://gcc.gnu.org/PR3907 ! 369. https://gcc.gnu.org/PR5293 ! 370. https://gcc.gnu.org/PR5296 ! 371. https://gcc.gnu.org/PR7939 ! 372. https://gcc.gnu.org/PR8656 ! 373. https://gcc.gnu.org/PR10147 ! 374. https://gcc.gnu.org/PR11400 ! 375. https://gcc.gnu.org/PR11409 ! 376. https://gcc.gnu.org/PR11740 ! 377. https://gcc.gnu.org/PR11786 ! 378. https://gcc.gnu.org/PR11867 ! 379. https://gcc.gnu.org/PR11928 ! 380. https://gcc.gnu.org/PR12114 ! 381. https://gcc.gnu.org/PR12163 ! 382. https://gcc.gnu.org/PR12181 ! 383. https://gcc.gnu.org/PR12236 ! 384. https://gcc.gnu.org/PR12266 ! 385. https://gcc.gnu.org/PR12296 ! 386. https://gcc.gnu.org/PR12298 ! 387. https://gcc.gnu.org/PR12369 ! 388. https://gcc.gnu.org/PR12337 ! 389. https://gcc.gnu.org/PR12344 ! 390. https://gcc.gnu.org/PR12451 ! 391. https://gcc.gnu.org/PR12486 ! 392. https://gcc.gnu.org/PR8869 ! 393. https://gcc.gnu.org/PR9786 ! 394. https://gcc.gnu.org/PR11689 ! 395. https://gcc.gnu.org/PR12116 ! 396. https://gcc.gnu.org/PR12070 ! 397. https://gcc.gnu.org/PR11184 ! 398. https://gcc.gnu.org/PR11535 ! 399. https://gcc.gnu.org/PR11693 ! 400. https://gcc.gnu.org/PR12224 ! 401. https://gcc.gnu.org/PR11087 ! 402. https://gcc.gnu.org/PR11319 ! 403. https://gcc.gnu.org/PR11949 ! 404. https://gcc.gnu.org/PR11662 ! 405. https://gcc.gnu.org/PR11965 ! 406. https://gcc.gnu.org/PR12301 ! 407. https://gcc.gnu.org/PR11717 ! 408. https://gcc.gnu.org/PR11313 ! 409. https://gcc.gnu.org/PR11712 ! 410. https://gcc.gnu.org/PR12166 ! 411. https://gcc.gnu.org/PR12101 ! 412. https://gcc.gnu.org/PR10988 ! 413. https://gcc.gnu.org/PR11805 ! 414. https://gcc.gnu.org/PR11902 ! 415. https://gcc.gnu.org/PR11903 ! 416. https://gcc.gnu.org/PR11890 ! 417. https://gcc.gnu.org/PR12399 ! 418. https://gcc.gnu.org/PR13068 ! 419. https://gcc.gnu.org/PR10060 ! 420. https://gcc.gnu.org/PR10555 ! 421. https://gcc.gnu.org/PR10706 ! 422. https://gcc.gnu.org/PR11496 ! 423. https://gcc.gnu.org/PR11741 ! 424. https://gcc.gnu.org/PR12440 ! 425. https://gcc.gnu.org/PR12632 ! 426. https://gcc.gnu.org/PR12712 ! 427. https://gcc.gnu.org/PR12726 ! 428. https://gcc.gnu.org/PR12890 ! 429. https://gcc.gnu.org/PR12900 ! 430. https://gcc.gnu.org/PR13060 ! 431. https://gcc.gnu.org/PR13289 ! 432. https://gcc.gnu.org/PR13318 ! 433. https://gcc.gnu.org/PR13392 ! 434. https://gcc.gnu.org/PR13574 ! 435. https://gcc.gnu.org/PR13475 ! 436. https://gcc.gnu.org/PR13797 ! 437. https://gcc.gnu.org/PR13824 ! 438. https://gcc.gnu.org/PR8776 ! 439. https://gcc.gnu.org/PR10339 ! 440. https://gcc.gnu.org/PR11350 ! 441. https://gcc.gnu.org/PR12826 ! 442. https://gcc.gnu.org/PR12500 ! 443. https://gcc.gnu.org/PR12941 ! 444. https://gcc.gnu.org/PR12953 ! 445. https://gcc.gnu.org/PR13041 ! 446. https://gcc.gnu.org/PR13507 ! 447. https://gcc.gnu.org/PR13382 ! 448. https://gcc.gnu.org/PR13394 ! 449. https://gcc.gnu.org/PR13400 ! 450. https://gcc.gnu.org/PR13521 ! 451. https://gcc.gnu.org/PR2094 ! 452. https://gcc.gnu.org/PR2294 ! 453. https://gcc.gnu.org/PR5050 ! 454. https://gcc.gnu.org/PR9371 ! 455. https://gcc.gnu.org/PR9546 ! 456. https://gcc.gnu.org/PR10081 ! 457. https://gcc.gnu.org/PR10093 ! 458. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#61 ! 459. https://gcc.gnu.org/PR10095 ! 460. https://gcc.gnu.org/PR11554 ! 461. https://gcc.gnu.org/PR12297 ! 462. https://gcc.gnu.org/PR12352 ! 463. https://gcc.gnu.org/PR12438 ! 464. https://gcc.gnu.org/PR12540 ! 465. https://gcc.gnu.org/PR12594 ! 466. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#60 ! 467. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#63 ! 468. https://gcc.gnu.org/PR12657 ! 469. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#292 ! 470. https://gcc.gnu.org/PR12696 ! 471. https://gcc.gnu.org/PR12815 ! 472. https://gcc.gnu.org/PR12862 ! 473. https://gcc.gnu.org/PR12926 ! 474. https://gcc.gnu.org/PR12967 ! 475. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html ! 476. https://gcc.gnu.org/PR12971 ! 477. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#328 ! 478. https://gcc.gnu.org/PR13007 ! 479. https://gcc.gnu.org/PR13009 ! 480. https://gcc.gnu.org/PR13057 ! 481. https://gcc.gnu.org/PR13070 ! 482. https://gcc.gnu.org/PR13081 ! 483. https://gcc.gnu.org/PR13239 ! 484. https://gcc.gnu.org/PR13262 ! 485. https://gcc.gnu.org/PR13290 ! 486. https://gcc.gnu.org/PR13323 ! 487. https://gcc.gnu.org/PR13369 ! 488. https://gcc.gnu.org/PR13371 ! 489. https://gcc.gnu.org/PR13445 ! 490. https://gcc.gnu.org/PR13461 ! 491. https://gcc.gnu.org/PR13462 ! 492. https://gcc.gnu.org/PR13478 ! 493. https://gcc.gnu.org/PR13544 ! 494. https://gcc.gnu.org/PR13650 ! 495. https://gcc.gnu.org/PR13683 ! 496. https://gcc.gnu.org/PR13688 ! 497. https://gcc.gnu.org/PR13774 ! 498. https://gcc.gnu.org/PR13884 ! 499. https://gcc.gnu.org/PR10746 ! 500. https://gcc.gnu.org/PR11433 ! 501. https://gcc.gnu.org/PR12633 ! 502. https://gcc.gnu.org/PR13037 ! 503. https://gcc.gnu.org/PR13213 ! 504. https://gcc.gnu.org/PR4490 ! 505. https://gcc.gnu.org/PR12292 ! 506. https://gcc.gnu.org/PR12441 ! 507. https://gcc.gnu.org/PR12943 ! 508. https://gcc.gnu.org/PR13608 ! 509. https://gcc.gnu.org/PR11598 ! 510. https://gcc.gnu.org/PR11793 ! 511. https://gcc.gnu.org/PR12467 ! 512. https://gcc.gnu.org/PR12537 ! 513. https://gcc.gnu.org/PR12496 ! 514. https://gcc.gnu.org/PR12865 ! 515. https://gcc.gnu.org/PR13354 ! 516. https://gcc.gnu.org/PR10467 ! 517. https://gcc.gnu.org/PR11226 ! 518. https://gcc.gnu.org/PR11227 ! 519. https://gcc.gnu.org/PR12644 ! 520. https://gcc.gnu.org/PR13149 ! 521. https://gcc.gnu.org/PR12654 ! 522. https://gcc.gnu.org/PR12965 ! 523. https://gcc.gnu.org/PR13031 ! 524. https://gcc.gnu.org/PR11634 ! 525. https://gcc.gnu.org/PR12158 ! 526. https://gcc.gnu.org/PR11992 ! 527. https://gcc.gnu.org/PR9365 ! 528. https://gcc.gnu.org/PR10392 ! 529. https://gcc.gnu.org/PR11322 ! 530. https://gcc.gnu.org/PR13069 ! 531. https://gcc.gnu.org/PR13302 ! 532. https://gcc.gnu.org/PR13585 ! 533. https://gcc.gnu.org/PR8916 ! 534. https://gcc.gnu.org/PR11576 ! 535. https://gcc.gnu.org/PR13122 ! 536. https://gcc.gnu.org/PR13256 ! 537. https://gcc.gnu.org/PR13373 ! 538. https://gcc.gnu.org/PR12561 ! 539. https://gcc.gnu.org/PR6243 ! 540. https://gcc.gnu.org/PR11397 ! 541. https://gcc.gnu.org/PR12505 ! 542. https://gcc.gnu.org/PR13150 ! 543. https://gcc.gnu.org/PR12666 ! 544. https://gcc.gnu.org/PR12969 ! 545. https://gcc.gnu.org/PR10819 ! 546. https://gcc.gnu.org/PR11612 ! 547. https://gcc.gnu.org/PR13211 ! 548. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.3.4 ! 549. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.3.5 ! 550. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.3.6 ! 551. https://gcc.gnu.org/onlinedocs/ ! 552. mailto:gcc-help@gcc.gnu.org ! 553. mailto:gcc@gcc.gnu.org ! 554. https://gcc.gnu.org/lists.html ! 555. https://www.fsf.org/ ! 556. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-3.2/index.html GCC 3.2 Release Series (This release series is no longer supported.) --- 19872,20438 ---- 3. https://gcc.gnu.org/gcc-3.3/changes.html#obsolete_systems 4. https://gcc.gnu.org/gcc-3.3/changes.html#nonnull_attribute 5. https://gcc.gnu.org/news/dfa.html ! 6. https://gcc.gnu.org/projects/c-status.html 7. https://gcc.gnu.org/onlinedocs/gcc-3.3.6/g77/News.html ! 8. https://gcc.gnu.org/gcc-3.3/changes.html#obsolete_systems ! 9. https://gcc.gnu.org/PR10140 ! 10. https://gcc.gnu.org/PR10198 ! 11. https://gcc.gnu.org/PR10338 ! 12. https://gcc.gnu.org/PR3581 ! 13. https://gcc.gnu.org/PR4382 ! 14. https://gcc.gnu.org/PR5533 ! 15. https://gcc.gnu.org/PR6387 ! 16. https://gcc.gnu.org/PR6412 ! 17. https://gcc.gnu.org/PR6620 ! 18. https://gcc.gnu.org/PR6663 ! 19. https://gcc.gnu.org/PR7068 ! 20. https://gcc.gnu.org/PR7083 ! 21. https://gcc.gnu.org/PR7647 ! 22. https://gcc.gnu.org/PR7675 ! 23. https://gcc.gnu.org/PR7718 ! 24. https://gcc.gnu.org/PR8116 ! 25. https://gcc.gnu.org/PR8358 ! 26. https://gcc.gnu.org/PR8511 ! 27. https://gcc.gnu.org/PR8564 ! 28. https://gcc.gnu.org/PR8660 ! 29. https://gcc.gnu.org/PR8766 ! 30. https://gcc.gnu.org/PR8803 ! 31. https://gcc.gnu.org/PR8846 ! 32. https://gcc.gnu.org/PR8906 ! 33. https://gcc.gnu.org/PR9216 ! 34. https://gcc.gnu.org/PR9261 ! 35. https://gcc.gnu.org/PR9263 ! 36. https://gcc.gnu.org/PR9429 ! 37. https://gcc.gnu.org/PR9516 ! 38. https://gcc.gnu.org/PR9600 ! 39. https://gcc.gnu.org/PR9629 ! 40. https://gcc.gnu.org/PR9672 ! 41. https://gcc.gnu.org/PR9749 ! 42. https://gcc.gnu.org/PR9794 ! 43. https://gcc.gnu.org/PR9829 ! 44. https://gcc.gnu.org/PR9916 ! 45. https://gcc.gnu.org/PR9936 ! 46. https://gcc.gnu.org/PR10262 ! 47. https://gcc.gnu.org/PR10278 ! 48. https://gcc.gnu.org/PR10446 ! 49. https://gcc.gnu.org/PR10451 ! 50. https://gcc.gnu.org/PR10506 ! 51. https://gcc.gnu.org/PR10549 ! 52. https://gcc.gnu.org/PR2001 ! 53. https://gcc.gnu.org/PR2391 ! 54. https://gcc.gnu.org/PR2960 ! 55. https://gcc.gnu.org/PR4046 ! 56. https://gcc.gnu.org/PR6405 ! 57. https://gcc.gnu.org/PR6798 ! 58. https://gcc.gnu.org/PR6871 ! 59. https://gcc.gnu.org/PR6909 ! 60. https://gcc.gnu.org/PR7189 ! 61. https://gcc.gnu.org/PR7642 ! 62. https://gcc.gnu.org/PR8634 ! 63. https://gcc.gnu.org/PR8750 ! 64. https://gcc.gnu.org/PR2161 ! 65. https://gcc.gnu.org/PR4319 ! 66. https://gcc.gnu.org/PR8602 ! 67. https://gcc.gnu.org/PR9177 ! 68. https://gcc.gnu.org/PR9853 ! 69. https://gcc.gnu.org/PR45 ! 70. https://gcc.gnu.org/PR3784 ! 71. https://gcc.gnu.org/PR764 ! 72. https://gcc.gnu.org/PR5116 ! 73. https://gcc.gnu.org/PR2862 ! 74. https://gcc.gnu.org/PR3663 ! 75. https://gcc.gnu.org/PR3797 ! 76. https://gcc.gnu.org/PR3948 ! 77. https://gcc.gnu.org/PR4137 ! 78. https://gcc.gnu.org/PR4361 ! 79. https://gcc.gnu.org/PR4802 ! 80. https://gcc.gnu.org/PR5837 ! 81. https://gcc.gnu.org/PR4803 ! 82. https://gcc.gnu.org/PR5094 ! 83. https://gcc.gnu.org/PR5730 ! 84. https://gcc.gnu.org/PR6713 ! 85. https://gcc.gnu.org/PR7015 ! 86. https://gcc.gnu.org/PR7086 ! 87. https://gcc.gnu.org/PR7099 ! 88. https://gcc.gnu.org/PR7247 ! 89. https://gcc.gnu.org/PR7441 ! 90. https://gcc.gnu.org/PR7768 ! 91. https://gcc.gnu.org/PR7804 ! 92. https://gcc.gnu.org/PR8099 ! 93. https://gcc.gnu.org/PR8117 ! 94. https://gcc.gnu.org/PR8205 ! 95. https://gcc.gnu.org/PR8645 ! 96. https://gcc.gnu.org/PR8724 ! 97. https://gcc.gnu.org/PR8805 ! 98. https://gcc.gnu.org/PR8691 ! 99. https://gcc.gnu.org/PR8700 ! 100. https://gcc.gnu.org/PR8724 ! 101. https://gcc.gnu.org/PR8949 ! 102. https://gcc.gnu.org/PR9016 ! 103. https://gcc.gnu.org/PR9053 ! 104. https://gcc.gnu.org/PR9152 ! 105. https://gcc.gnu.org/PR9182 ! 106. https://gcc.gnu.org/PR9297 ! 107. https://gcc.gnu.org/PR9318 ! 108. https://gcc.gnu.org/PR9320 ! 109. https://gcc.gnu.org/PR9400 ! 110. https://gcc.gnu.org/PR9424 ! 111. https://gcc.gnu.org/PR9425 ! 112. https://gcc.gnu.org/PR9439 ! 113. https://gcc.gnu.org/PR9474 ! 114. https://gcc.gnu.org/PR9548 ! 115. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#231 ! 116. https://gcc.gnu.org/PR9555 ! 117. https://gcc.gnu.org/PR9561 ! 118. https://gcc.gnu.org/PR9563 ! 119. https://gcc.gnu.org/PR9582 ! 120. https://gcc.gnu.org/PR9622 ! 121. https://gcc.gnu.org/PR9683 ! 122. https://gcc.gnu.org/PR9791 ! 123. https://gcc.gnu.org/PR9817 ! 124. https://gcc.gnu.org/PR9825 ! 125. https://gcc.gnu.org/PR9826 ! 126. https://gcc.gnu.org/PR9924 ! 127. https://gcc.gnu.org/PR9946 ! 128. https://gcc.gnu.org/PR9964 ! 129. https://gcc.gnu.org/PR9988 ! 130. https://gcc.gnu.org/PR10033 ! 131. https://gcc.gnu.org/PR10097 ! 132. https://gcc.gnu.org/PR10132 ! 133. https://gcc.gnu.org/PR10180 ! 134. https://gcc.gnu.org/PR10199 ! 135. https://gcc.gnu.org/PR10300 ! 136. https://gcc.gnu.org/PR10427 ! 137. https://gcc.gnu.org/PR10503 ! 138. https://gcc.gnu.org/PR5956 ! 139. https://gcc.gnu.org/PR1832 ! 140. https://gcc.gnu.org/PR3924 ! 141. https://gcc.gnu.org/PR5634 ! 142. https://gcc.gnu.org/PR6367 ! 143. https://gcc.gnu.org/PR6491 ! 144. https://gcc.gnu.org/PR6742 ! 145. https://gcc.gnu.org/PR7113 ! 146. https://gcc.gnu.org/PR7236 ! 147. https://gcc.gnu.org/PR7278 ! 148. https://gcc.gnu.org/PR7384 ! 149. https://gcc.gnu.org/PR7388 ! 150. https://gcc.gnu.org/PR8587 ! 151. https://gcc.gnu.org/PR9038 ! 152. https://gcc.gnu.org/PR10197 ! 153. https://gcc.gnu.org/PR6005 ! 154. https://gcc.gnu.org/PR6389 ! 155. https://gcc.gnu.org/PR6576 ! 156. https://gcc.gnu.org/PR6652 ! 157. https://gcc.gnu.org/PR7060 ! 158. https://gcc.gnu.org/PR7073 ! 159. https://gcc.gnu.org/PR7180 ! 160. https://gcc.gnu.org/PR7416 ! 161. https://gcc.gnu.org/PR7570 ! 162. https://gcc.gnu.org/PR7578 ! 163. https://gcc.gnu.org/PR7611 ! 164. https://gcc.gnu.org/PR7709 ! 165. https://gcc.gnu.org/PR7766 ! 166. https://gcc.gnu.org/PR7785 ! 167. https://gcc.gnu.org/PR7786 ! 168. https://gcc.gnu.org/PR8142 ! 169. https://gcc.gnu.org/PR8234 ! 170. https://gcc.gnu.org/PR8415 ! 171. https://gcc.gnu.org/PR8481 ! 172. https://gcc.gnu.org/PR8593 ! 173. https://gcc.gnu.org/PR8759 ! 174. https://gcc.gnu.org/PR8997 ! 175. https://gcc.gnu.org/PR9253 ! 176. https://gcc.gnu.org/PR9254 ! 177. https://gcc.gnu.org/PR9271 ! 178. https://gcc.gnu.org/PR6767 ! 179. https://gcc.gnu.org/PR9911 ! 180. https://gcc.gnu.org/PR10020 ! 181. https://gcc.gnu.org/PR10546 ! 182. https://gcc.gnu.org/PR7029 ! 183. https://gcc.gnu.org/PR2903 ! 184. https://gcc.gnu.org/PR7873 ! 185. https://gcc.gnu.org/PR7680 ! 186. https://gcc.gnu.org/PR8705 ! 187. https://gcc.gnu.org/PR9986 ! 188. https://gcc.gnu.org/PR10056 ! 189. https://gcc.gnu.org/PR6744 ! 190. https://gcc.gnu.org/PR7361 ! 191. https://gcc.gnu.org/PR9496 ! 192. https://gcc.gnu.org/PR7067 ! 193. https://gcc.gnu.org/PR8480 ! 194. https://gcc.gnu.org/PR8784 ! 195. https://gcc.gnu.org/PR10315 ! 196. https://gcc.gnu.org/PR10267 ! 197. https://gcc.gnu.org/PR7916 ! 198. https://gcc.gnu.org/PR7926 ! 199. https://gcc.gnu.org/PR8555 ! 200. https://gcc.gnu.org/PR8994 ! 201. https://gcc.gnu.org/PR9426 ! 202. https://gcc.gnu.org/PR9806 ! 203. https://gcc.gnu.org/PR10077 ! 204. https://gcc.gnu.org/PR10233 ! 205. https://gcc.gnu.org/PR10286 ! 206. https://gcc.gnu.org/PR10308 ! 207. https://gcc.gnu.org/gcc-3.3/changes.html#GCC3.3.1 ! 208. https://gcc.gnu.org/PR11272 ! 209. https://gcc.gnu.org/PR5754 ! 210. https://gcc.gnu.org/PR6597 ! 211. https://gcc.gnu.org/PR6949 ! 212. https://gcc.gnu.org/PR7053 ! 213. https://gcc.gnu.org/PR8164 ! 214. https://gcc.gnu.org/PR8384 ! 215. https://gcc.gnu.org/PR9559 ! 216. https://gcc.gnu.org/PR9649 ! 217. https://gcc.gnu.org/PR9864 ! 218. https://gcc.gnu.org/PR10432 ! 219. https://gcc.gnu.org/PR10475 ! 220. https://gcc.gnu.org/PR10635 ! 221. https://gcc.gnu.org/PR10661 ! 222. https://gcc.gnu.org/PR10700 ! 223. https://gcc.gnu.org/PR10712 ! 224. https://gcc.gnu.org/PR10796 ! 225. https://gcc.gnu.org/PR10890 ! 226. https://gcc.gnu.org/PR10939 ! 227. https://gcc.gnu.org/PR10956 ! 228. https://gcc.gnu.org/PR11041 ! 229. https://gcc.gnu.org/PR11059 ! 230. https://gcc.gnu.org/PR11083 ! 231. https://gcc.gnu.org/PR11105 ! 232. https://gcc.gnu.org/PR11149 ! 233. https://gcc.gnu.org/PR11228 ! 234. https://gcc.gnu.org/PR11282 ! 235. https://gcc.gnu.org/PR11301 ! 236. https://gcc.gnu.org/PR11308 ! 237. https://gcc.gnu.org/PR11473 ! 238. https://gcc.gnu.org/PR11503 ! 239. https://gcc.gnu.org/PR11513 ! 240. https://gcc.gnu.org/PR11198 ! 241. https://gcc.gnu.org/PR11304 ! 242. https://gcc.gnu.org/PR11381 ! 243. https://gcc.gnu.org/PR11536 ! 244. https://gcc.gnu.org/PR11557 ! 245. https://gcc.gnu.org/PR5897 ! 246. https://gcc.gnu.org/PR11279 ! 247. https://gcc.gnu.org/PR11022 ! 248. https://gcc.gnu.org/PR2330 ! 249. https://gcc.gnu.org/PR5388 ! 250. https://gcc.gnu.org/PR5390 ! 251. https://gcc.gnu.org/PR7877 ! 252. https://gcc.gnu.org/PR9393 ! 253. https://gcc.gnu.org/PR10032 ! 254. https://gcc.gnu.org/PR10468 ! 255. https://gcc.gnu.org/PR10527 ! 256. https://gcc.gnu.org/PR10679 ! 257. https://gcc.gnu.org/PR10682 ! 258. https://gcc.gnu.org/PR10689 ! 259. https://gcc.gnu.org/PR10845 ! 260. https://gcc.gnu.org/PR10849 ! 261. https://gcc.gnu.org/PR10888 ! 262. https://gcc.gnu.org/PR10929 ! 263. https://gcc.gnu.org/PR10931 ! 264. https://gcc.gnu.org/PR10940 ! 265. https://gcc.gnu.org/PR10968 ! 266. https://gcc.gnu.org/PR10990 ! 267. https://gcc.gnu.org/PR11039 ! 268. https://gcc.gnu.org/PR11062 ! 269. https://gcc.gnu.org/PR11095 ! 270. https://gcc.gnu.org/PR11098 ! 271. https://gcc.gnu.org/PR11137 ! 272. https://gcc.gnu.org/PR11154 ! 273. https://gcc.gnu.org/PR11329 ! 274. https://gcc.gnu.org/PR11332 ! 275. https://gcc.gnu.org/PR11431 ! 276. https://gcc.gnu.org/PR11528 ! 277. https://gcc.gnu.org/PR11546 ! 278. https://gcc.gnu.org/PR11567 ! 279. https://gcc.gnu.org/PR11645 ! 280. https://gcc.gnu.org/PR5179 ! 281. https://gcc.gnu.org/PR8204 ! 282. https://gcc.gnu.org/PR10838 ! 283. https://gcc.gnu.org/PR10886 ! 284. https://gcc.gnu.org/PR11349 ! 285. https://gcc.gnu.org/PR4823 ! 286. https://gcc.gnu.org/PR8878 ! 287. https://gcc.gnu.org/PR9815 ! 288. https://gcc.gnu.org/PR10402 ! 289. https://gcc.gnu.org/PR10504 ! 290. https://gcc.gnu.org/PR10673 ! 291. https://gcc.gnu.org/PR11044 ! 292. https://gcc.gnu.org/PR11089 ! 293. https://gcc.gnu.org/PR11420 ! 294. https://gcc.gnu.org/PR9362 ! 295. https://gcc.gnu.org/PR10142 ! 296. https://gcc.gnu.org/PR10663 ! 297. https://gcc.gnu.org/PR10835 ! 298. https://gcc.gnu.org/PR10876 ! 299. https://gcc.gnu.org/PR10955 ! 300. https://gcc.gnu.org/PR11018 ! 301. https://gcc.gnu.org/PR11556 ! 302. https://gcc.gnu.org/PR10907 ! 303. https://gcc.gnu.org/PR11320 ! 304. https://gcc.gnu.org/PR11599 ! 305. https://gcc.gnu.org/PR9745 ! 306. https://gcc.gnu.org/PR10871 ! 307. https://gcc.gnu.org/PR11440 ! 308. https://gcc.gnu.org/PR7594 ! 309. https://gcc.gnu.org/PR10557 ! 310. https://gcc.gnu.org/PR11054 ! 311. https://gcc.gnu.org/PR10834 ! 312. https://gcc.gnu.org/PR10842 ! 313. https://gcc.gnu.org/PR11052 ! 314. https://gcc.gnu.org/PR11183 ! 315. https://gcc.gnu.org/PR11084 ! 316. https://gcc.gnu.org/PR10331 ! 317. https://gcc.gnu.org/PR10413 ! 318. https://gcc.gnu.org/PR11096 ! 319. https://gcc.gnu.org/PR2873 ! 320. https://gcc.gnu.org/PR3163 ! 321. https://gcc.gnu.org/PR5287 ! 322. https://gcc.gnu.org/PR10148 ! 323. https://gcc.gnu.org/PR8787 ! 324. https://gcc.gnu.org/PR10900 ! 325. https://gcc.gnu.org/PR1607 ! 326. https://gcc.gnu.org/PR4252 ! 327. https://gcc.gnu.org/PR4490 ! 328. https://gcc.gnu.org/PR10355 ! 329. https://gcc.gnu.org/PR10726 ! 330. https://gcc.gnu.org/PR10805 ! 331. https://gcc.gnu.org/PR10815 ! 332. https://gcc.gnu.org/PR10877 ! 333. https://gcc.gnu.org/PR11280 ! 334. https://gcc.gnu.org/PR11466 ! 335. https://gcc.gnu.org/PR10737 ! 336. https://gcc.gnu.org/PR10810 ! 337. https://gcc.gnu.org/gcc-3.3/changes.html#GCC3.3.2 ! 338. https://gcc.gnu.org/PR8336 ! 339. https://gcc.gnu.org/PR9330 ! 340. https://gcc.gnu.org/PR9631 ! 341. https://gcc.gnu.org/PR9877 ! 342. https://gcc.gnu.org/PR11687 ! 343. https://gcc.gnu.org/PR12263 ! 344. https://gcc.gnu.org/PR12490 ! 345. https://gcc.gnu.org/PR7277 ! 346. https://gcc.gnu.org/PR7939 ! 347. https://gcc.gnu.org/PR11063 ! 348. https://gcc.gnu.org/PR11207 ! 349. https://gcc.gnu.org/PR11522 ! 350. https://gcc.gnu.org/PR11595 ! 351. https://gcc.gnu.org/PR11646 ! 352. https://gcc.gnu.org/PR11665 ! 353. https://gcc.gnu.org/PR11852 ! 354. https://gcc.gnu.org/PR11878 ! 355. https://gcc.gnu.org/PR11883 ! 356. https://gcc.gnu.org/PR11991 ! 357. https://gcc.gnu.org/PR12146 ! 358. https://gcc.gnu.org/PR12215 ! 359. https://gcc.gnu.org/PR12369 ! 360. https://gcc.gnu.org/PR12446 ! 361. https://gcc.gnu.org/PR12510 ! 362. https://gcc.gnu.org/PR12544 ! 363. https://gcc.gnu.org/PR9862 ! 364. https://gcc.gnu.org/PR10962 ! 365. https://gcc.gnu.org/PR11370 ! 366. https://gcc.gnu.org/PR11637 ! 367. https://gcc.gnu.org/PR11885 ! 368. https://gcc.gnu.org/PR12082 ! 369. https://gcc.gnu.org/PR12180 ! 370. https://gcc.gnu.org/PR12340 ! 371. https://gcc.gnu.org/PR3907 ! 372. https://gcc.gnu.org/PR5293 ! 373. https://gcc.gnu.org/PR5296 ! 374. https://gcc.gnu.org/PR7939 ! 375. https://gcc.gnu.org/PR8656 ! 376. https://gcc.gnu.org/PR10147 ! 377. https://gcc.gnu.org/PR11400 ! 378. https://gcc.gnu.org/PR11409 ! 379. https://gcc.gnu.org/PR11740 ! 380. https://gcc.gnu.org/PR11786 ! 381. https://gcc.gnu.org/PR11867 ! 382. https://gcc.gnu.org/PR11928 ! 383. https://gcc.gnu.org/PR12114 ! 384. https://gcc.gnu.org/PR12163 ! 385. https://gcc.gnu.org/PR12181 ! 386. https://gcc.gnu.org/PR12236 ! 387. https://gcc.gnu.org/PR12266 ! 388. https://gcc.gnu.org/PR12296 ! 389. https://gcc.gnu.org/PR12298 ! 390. https://gcc.gnu.org/PR12369 ! 391. https://gcc.gnu.org/PR12337 ! 392. https://gcc.gnu.org/PR12344 ! 393. https://gcc.gnu.org/PR12451 ! 394. https://gcc.gnu.org/PR12486 ! 395. https://gcc.gnu.org/PR8869 ! 396. https://gcc.gnu.org/PR9786 ! 397. https://gcc.gnu.org/PR11689 ! 398. https://gcc.gnu.org/PR12116 ! 399. https://gcc.gnu.org/PR12070 ! 400. https://gcc.gnu.org/PR11184 ! 401. https://gcc.gnu.org/PR11535 ! 402. https://gcc.gnu.org/PR11693 ! 403. https://gcc.gnu.org/PR12224 ! 404. https://gcc.gnu.org/PR11087 ! 405. https://gcc.gnu.org/PR11319 ! 406. https://gcc.gnu.org/PR11949 ! 407. https://gcc.gnu.org/PR11662 ! 408. https://gcc.gnu.org/PR11965 ! 409. https://gcc.gnu.org/PR12301 ! 410. https://gcc.gnu.org/PR11717 ! 411. https://gcc.gnu.org/PR11313 ! 412. https://gcc.gnu.org/PR11712 ! 413. https://gcc.gnu.org/PR12166 ! 414. https://gcc.gnu.org/PR12101 ! 415. https://gcc.gnu.org/PR10988 ! 416. https://gcc.gnu.org/PR11805 ! 417. https://gcc.gnu.org/PR11902 ! 418. https://gcc.gnu.org/PR11903 ! 419. https://gcc.gnu.org/gcc-3.3/changes.html#GCC3.3.3 ! 420. https://gcc.gnu.org/PR11890 ! 421. https://gcc.gnu.org/PR12399 ! 422. https://gcc.gnu.org/PR13068 ! 423. https://gcc.gnu.org/PR10060 ! 424. https://gcc.gnu.org/PR10555 ! 425. https://gcc.gnu.org/PR10706 ! 426. https://gcc.gnu.org/PR11496 ! 427. https://gcc.gnu.org/PR11741 ! 428. https://gcc.gnu.org/PR12440 ! 429. https://gcc.gnu.org/PR12632 ! 430. https://gcc.gnu.org/PR12712 ! 431. https://gcc.gnu.org/PR12726 ! 432. https://gcc.gnu.org/PR12890 ! 433. https://gcc.gnu.org/PR12900 ! 434. https://gcc.gnu.org/PR13060 ! 435. https://gcc.gnu.org/PR13289 ! 436. https://gcc.gnu.org/PR13318 ! 437. https://gcc.gnu.org/PR13392 ! 438. https://gcc.gnu.org/PR13574 ! 439. https://gcc.gnu.org/PR13475 ! 440. https://gcc.gnu.org/PR13797 ! 441. https://gcc.gnu.org/PR13824 ! 442. https://gcc.gnu.org/PR8776 ! 443. https://gcc.gnu.org/PR10339 ! 444. https://gcc.gnu.org/PR11350 ! 445. https://gcc.gnu.org/PR12826 ! 446. https://gcc.gnu.org/PR12500 ! 447. https://gcc.gnu.org/PR12941 ! 448. https://gcc.gnu.org/PR12953 ! 449. https://gcc.gnu.org/PR13041 ! 450. https://gcc.gnu.org/PR13507 ! 451. https://gcc.gnu.org/PR13382 ! 452. https://gcc.gnu.org/PR13394 ! 453. https://gcc.gnu.org/PR13400 ! 454. https://gcc.gnu.org/PR13521 ! 455. https://gcc.gnu.org/PR2094 ! 456. https://gcc.gnu.org/PR2294 ! 457. https://gcc.gnu.org/PR5050 ! 458. https://gcc.gnu.org/PR9371 ! 459. https://gcc.gnu.org/PR9546 ! 460. https://gcc.gnu.org/PR10081 ! 461. https://gcc.gnu.org/PR10093 ! 462. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#61 ! 463. https://gcc.gnu.org/PR10095 ! 464. https://gcc.gnu.org/PR11554 ! 465. https://gcc.gnu.org/PR12297 ! 466. https://gcc.gnu.org/PR12352 ! 467. https://gcc.gnu.org/PR12438 ! 468. https://gcc.gnu.org/PR12540 ! 469. https://gcc.gnu.org/PR12594 ! 470. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#60 ! 471. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#63 ! 472. https://gcc.gnu.org/PR12657 ! 473. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#292 ! 474. https://gcc.gnu.org/PR12696 ! 475. https://gcc.gnu.org/PR12815 ! 476. https://gcc.gnu.org/PR12862 ! 477. https://gcc.gnu.org/PR12926 ! 478. https://gcc.gnu.org/PR12967 ! 479. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html ! 480. https://gcc.gnu.org/PR12971 ! 481. https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#328 ! 482. https://gcc.gnu.org/PR13007 ! 483. https://gcc.gnu.org/PR13009 ! 484. https://gcc.gnu.org/PR13057 ! 485. https://gcc.gnu.org/PR13070 ! 486. https://gcc.gnu.org/PR13081 ! 487. https://gcc.gnu.org/PR13239 ! 488. https://gcc.gnu.org/PR13262 ! 489. https://gcc.gnu.org/PR13290 ! 490. https://gcc.gnu.org/PR13323 ! 491. https://gcc.gnu.org/PR13369 ! 492. https://gcc.gnu.org/PR13371 ! 493. https://gcc.gnu.org/PR13445 ! 494. https://gcc.gnu.org/PR13461 ! 495. https://gcc.gnu.org/PR13462 ! 496. https://gcc.gnu.org/PR13478 ! 497. https://gcc.gnu.org/PR13544 ! 498. https://gcc.gnu.org/PR13650 ! 499. https://gcc.gnu.org/PR13683 ! 500. https://gcc.gnu.org/PR13688 ! 501. https://gcc.gnu.org/PR13774 ! 502. https://gcc.gnu.org/PR13884 ! 503. https://gcc.gnu.org/PR10746 ! 504. https://gcc.gnu.org/PR11433 ! 505. https://gcc.gnu.org/PR12633 ! 506. https://gcc.gnu.org/PR13037 ! 507. https://gcc.gnu.org/PR13213 ! 508. https://gcc.gnu.org/PR4490 ! 509. https://gcc.gnu.org/PR12292 ! 510. https://gcc.gnu.org/PR12441 ! 511. https://gcc.gnu.org/PR12943 ! 512. https://gcc.gnu.org/PR13608 ! 513. https://gcc.gnu.org/PR11598 ! 514. https://gcc.gnu.org/PR11793 ! 515. https://gcc.gnu.org/PR12467 ! 516. https://gcc.gnu.org/PR12537 ! 517. https://gcc.gnu.org/PR12496 ! 518. https://gcc.gnu.org/PR12865 ! 519. https://gcc.gnu.org/PR13354 ! 520. https://gcc.gnu.org/PR10467 ! 521. https://gcc.gnu.org/PR11226 ! 522. https://gcc.gnu.org/PR11227 ! 523. https://gcc.gnu.org/PR12644 ! 524. https://gcc.gnu.org/PR13149 ! 525. https://gcc.gnu.org/PR12654 ! 526. https://gcc.gnu.org/PR12965 ! 527. https://gcc.gnu.org/PR13031 ! 528. https://gcc.gnu.org/PR11634 ! 529. https://gcc.gnu.org/PR12158 ! 530. https://gcc.gnu.org/PR11992 ! 531. https://gcc.gnu.org/PR9365 ! 532. https://gcc.gnu.org/PR10392 ! 533. https://gcc.gnu.org/PR11322 ! 534. https://gcc.gnu.org/PR13069 ! 535. https://gcc.gnu.org/PR13302 ! 536. https://gcc.gnu.org/PR13585 ! 537. https://gcc.gnu.org/PR8916 ! 538. https://gcc.gnu.org/PR11576 ! 539. https://gcc.gnu.org/PR13122 ! 540. https://gcc.gnu.org/PR13256 ! 541. https://gcc.gnu.org/PR13373 ! 542. https://gcc.gnu.org/PR12561 ! 543. https://gcc.gnu.org/PR6243 ! 544. https://gcc.gnu.org/PR11397 ! 545. https://gcc.gnu.org/PR12505 ! 546. https://gcc.gnu.org/PR13150 ! 547. https://gcc.gnu.org/PR12666 ! 548. https://gcc.gnu.org/PR12969 ! 549. https://gcc.gnu.org/PR10819 ! 550. https://gcc.gnu.org/PR11612 ! 551. https://gcc.gnu.org/PR13211 ! 552. https://gcc.gnu.org/gcc-3.3/changes.html#GCC3.3.4 ! 553. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.3.4 ! 554. https://gcc.gnu.org/gcc-3.3/changes.html#GCC3.3.5 ! 555. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.3.5 ! 556. https://gcc.gnu.org/gcc-3.3/changes.html#GCC3.3.6 ! 557. https://gcc.gnu.org/bugzilla/buglist.cgi?bug_status=RESOLVED&resolution=FIXED&target_milestone=3.3.6 ! 558. https://gcc.gnu.org/onlinedocs/ ! 559. mailto:gcc-help@gcc.gnu.org ! 560. mailto:gcc@gcc.gnu.org ! 561. https://gcc.gnu.org/lists.html ! 562. https://www.fsf.org/ ! 563. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-3.2/index.html + GCC 3.2 Release Series (This release series is no longer supported.) *************** References *** 20070,20075 **** --- 20523,20529 ---- 17. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-3.2/changes.html + GCC 3.2 Release Series Changes, New Features, and Fixes *************** Caveats and New Features *** 20111,20117 **** C++ ! * GCC 3.2 fixed serveral differences between the C++ ABI implemented in GCC and the multi-vendor standard, but more have been found since the release. 3.2.1 adds a new warning, -Wabi, to warn about code which is affected by these bugs. We will fix these bugs in --- 20565,20571 ---- C++ ! * GCC 3.2 fixed several differences between the C++ ABI implemented in GCC and the multi-vendor standard, but more have been found since the release. 3.2.1 adds a new warning, -Wabi, to warn about code which is affected by these bugs. We will fix these bugs in *************** Caveats and New Features *** 20140,20146 **** * Fixed prefetch code generation __________________________________________________________________ ! GCC 3.2.3 3.2.3 is a bug fix release only; there are no new features that were not present in GCC 3.2.2. --- 20594,20600 ---- * Fixed prefetch code generation __________________________________________________________________ ! [4]GCC 3.2.3 3.2.3 is a bug fix release only; there are no new features that were not present in GCC 3.2.2. *************** GCC 3.2.3 *** 20155,20278 **** Internal Compiler Errors (multi-platform) ! * [4]3782: (c++) -quiet -fstats produces a segmentation fault in cc1plus ! * [5]6440: (c++) template specializations cause ICE ! * [6]7050: (c++) ICE on: (i ? get_string() : throw) ! * [7]7741: ICE on conflicting types (make_decl_rtl in varasm.c) ! * [8]7982: (c++) ICE due to infinite recursion (using STL set) ! * [9]8068: exceedingly high (infinite) memory usage ! * [10]8178: ICE with __builtin_ffs ! * [11]8396: ICE in copy_to_mode_reg, in explow.c ! * [12]8674: (c++) ICE in cp_expr_size, in cp/cp-lang.c ! * [13]9768: ICE when optimizing inline code at -O2 ! * [14]9798: (c++) Infinite recursion (segfault) in cp/decl.c:push_using_directive with recursive using directives ! * [15]9799: mismatching structure initializer with nested flexible array member: ICE ! * [16]9928: ICE on duplicate enum declaration ! * [17]10114: ICE in mem_loc_descriptor, in dwarf2out.c (affects sparc, alpha) ! * [18]10352: ICE in find_reloads_toplev ! * [19]10336: ICE with -Wunreachable-code C/optimizer bugs: ! * [20]8224: Incorrect joining of signed and unsigned division ! * [21]8613: -O2 produces wrong code with builtin strlen and postincrements ! * [22]8828: gcc reports some code is unreachable when it is not ! * [23]9226: GCSE breaking argument passing ! * [24]9853: miscompilation of non-constant structure initializer ! * [25]9797: C99-style struct initializers are miscompiled ! * [26]9967: Some standard C function calls should not be replaced when optimizing for size ! * [27]10116: ce2: invalid merge of join_bb in the context of switch statements ! * [28]10171: wrong code for inlined function ! * [29]10175: -Wunreachable-code doesn't work for single lines C++ compiler and library: ! * [30]8316: Confusing diagnostic for code that misuses conversion operators ! * [31]9169: filebuf output fails if codecvt<>::out returns noconv ! * [32]9420: incomplete type incorrectly reported ! * [33]9459: typeof in return type specification of template not supported ! * [34]9507: filebuf::open handles ios_base::ate incorrectly ! * [35]9538: Out-of-bounds memory access in streambuf::sputbackc ! * [36]9602: Total confusion about template/friend/virtual/abstract ! * [37]9993: destructor not called for local object created within and returned from infinite loop ! * [38]10167: ieee_1003.1-2001 locale specialisations on a glibc-2.3.2 system Java compiler and library: ! * [39]9652: libgcj build fails on irix6.5.1[78] ! * [40]10144: gas on solaris complains about bad .stabs lines for java, native as unaffected x86-specific (Intel/AMD): ! * [41]8746: gcc miscompiles Linux kernel ppa driver on x86 ! * [42]9888: -mcpu=k6 -Os produces out of range loop instructions ! * [43]9638: Cross-build for target i386-elf and i586-pc-linux-gnu failed ! * [44]9954: Cross-build for target i586-pc-linux-gnu (--with-newlib) failed SPARC-specific: ! * [45]7784: [Sparc] ICE in extract_insn, in recog.c ! * [46]7796: sparc extra failure with -m64 on execute/930921-1.c in unroll.c ! * [47]8281: ICE when compiling with -O2 -fPIC for Ultrasparc ! * [48]8366: [Sparc] C testsuite failure with -m64 -fpic -O in execute/loop-2d.c ! * [49]8726: gcc -O2 miscompiles Samba 2.2.7 on 32-bit sparc ! * [50]9414: Scheduling bug on Ultrasparc ! * [51]10067: GCC-3.2.2 outputs invalid asm on sparc64 m68k-specific: ! * [52]7248: broken "inclusive or" code ! * [53]8343: m68k-elf/rtems ICE at instantiate_virtual_regs_1 PowerPC-specific: ! * [54]9732: Wrong code with -O2 -fPIC ! * [55]10073: ICE: powerpc cannot split insn Alpha-specific: ! * [56]7702: optimization problem on a DEC alpha under OSF1 ! * [57]9671: gcc.3.2.2 does not build on a HP Tru64 Unix v5.1B system HP-specific: ! * [58]8694: breaks on HP-UX 10.20 (DUP: 9275) ! * [59]9953: (ada) gcc 3.2.x can't build 3.3-branch ada on HP-UX 10 (missing symbol) ! * [60]10271: Floating point args don't get reloaded across function calls with -O2 MIPS specific: ! * [61]6362: mips-irix6 gcc-3.1 C testsuite failure with -mips4 in compile/920501-4.c CRIS specific: ! * [62]10377: gcc-3.2.2 creates bad assembler code for cris Miscellaneous and minor bugs: ! * [63]6955: collect2 says "core dumped" when there is no core __________________________________________________________________ ! GCC 3.2.2 Beginning with 3.2.2, GCC's Makefile suite supports redirection of make install by means of the DESTDIR variable. Parts of the GCC tree have --- 20609,20732 ---- Internal Compiler Errors (multi-platform) ! * [5]3782: (c++) -quiet -fstats produces a segmentation fault in cc1plus ! * [6]6440: (c++) template specializations cause ICE ! * [7]7050: (c++) ICE on: (i ? get_string() : throw) ! * [8]7741: ICE on conflicting types (make_decl_rtl in varasm.c) ! * [9]7982: (c++) ICE due to infinite recursion (using STL set) ! * [10]8068: exceedingly high (infinite) memory usage ! * [11]8178: ICE with __builtin_ffs ! * [12]8396: ICE in copy_to_mode_reg, in explow.c ! * [13]8674: (c++) ICE in cp_expr_size, in cp/cp-lang.c ! * [14]9768: ICE when optimizing inline code at -O2 ! * [15]9798: (c++) Infinite recursion (segfault) in cp/decl.c:push_using_directive with recursive using directives ! * [16]9799: mismatching structure initializer with nested flexible array member: ICE ! * [17]9928: ICE on duplicate enum declaration ! * [18]10114: ICE in mem_loc_descriptor, in dwarf2out.c (affects sparc, alpha) ! * [19]10352: ICE in find_reloads_toplev ! * [20]10336: ICE with -Wunreachable-code C/optimizer bugs: ! * [21]8224: Incorrect joining of signed and unsigned division ! * [22]8613: -O2 produces wrong code with builtin strlen and postincrements ! * [23]8828: gcc reports some code is unreachable when it is not ! * [24]9226: GCSE breaking argument passing ! * [25]9853: miscompilation of non-constant structure initializer ! * [26]9797: C99-style struct initializers are miscompiled ! * [27]9967: Some standard C function calls should not be replaced when optimizing for size ! * [28]10116: ce2: invalid merge of join_bb in the context of switch statements ! * [29]10171: wrong code for inlined function ! * [30]10175: -Wunreachable-code doesn't work for single lines C++ compiler and library: ! * [31]8316: Confusing diagnostic for code that misuses conversion operators ! * [32]9169: filebuf output fails if codecvt<>::out returns noconv ! * [33]9420: incomplete type incorrectly reported ! * [34]9459: typeof in return type specification of template not supported ! * [35]9507: filebuf::open handles ios_base::ate incorrectly ! * [36]9538: Out-of-bounds memory access in streambuf::sputbackc ! * [37]9602: Total confusion about template/friend/virtual/abstract ! * [38]9993: destructor not called for local object created within and returned from infinite loop ! * [39]10167: ieee_1003.1-2001 locale specialisations on a glibc-2.3.2 system Java compiler and library: ! * [40]9652: libgcj build fails on irix6.5.1[78] ! * [41]10144: gas on solaris complains about bad .stabs lines for java, native as unaffected x86-specific (Intel/AMD): ! * [42]8746: gcc miscompiles Linux kernel ppa driver on x86 ! * [43]9888: -mcpu=k6 -Os produces out of range loop instructions ! * [44]9638: Cross-build for target i386-elf and i586-pc-linux-gnu failed ! * [45]9954: Cross-build for target i586-pc-linux-gnu (--with-newlib) failed SPARC-specific: ! * [46]7784: [Sparc] ICE in extract_insn, in recog.c ! * [47]7796: sparc extra failure with -m64 on execute/930921-1.c in unroll.c ! * [48]8281: ICE when compiling with -O2 -fPIC for Ultrasparc ! * [49]8366: [Sparc] C testsuite failure with -m64 -fpic -O in execute/loop-2d.c ! * [50]8726: gcc -O2 miscompiles Samba 2.2.7 on 32-bit sparc ! * [51]9414: Scheduling bug on Ultrasparc ! * [52]10067: GCC-3.2.2 outputs invalid asm on sparc64 m68k-specific: ! * [53]7248: broken "inclusive or" code ! * [54]8343: m68k-elf/rtems ICE at instantiate_virtual_regs_1 PowerPC-specific: ! * [55]9732: Wrong code with -O2 -fPIC ! * [56]10073: ICE: powerpc cannot split insn Alpha-specific: ! * [57]7702: optimization problem on a DEC alpha under OSF1 ! * [58]9671: gcc.3.2.2 does not build on a HP Tru64 Unix v5.1B system HP-specific: ! * [59]8694: breaks on HP-UX 10.20 (DUP: 9275) ! * [60]9953: (ada) gcc 3.2.x can't build 3.3-branch ada on HP-UX 10 (missing symbol) ! * [61]10271: Floating point args don't get reloaded across function calls with -O2 MIPS specific: ! * [62]6362: mips-irix6 gcc-3.1 C testsuite failure with -mips4 in compile/920501-4.c CRIS specific: ! * [63]10377: gcc-3.2.2 creates bad assembler code for cris Miscellaneous and minor bugs: ! * [64]6955: collect2 says "core dumped" when there is no core __________________________________________________________________ ! [65]GCC 3.2.2 Beginning with 3.2.2, GCC's Makefile suite supports redirection of make install by means of the DESTDIR variable. Parts of the GCC tree have *************** GCC 3.2.2 *** 20299,20421 **** Internal Compiler Errors (multi-platform) ! * [64]5919: (c++) ICE when passing variable array to template function ! * [65]7129: (c++) ICE with min/max assignment operators (?=) ! * [66]7507: ICE with -O2 when address of called function is a complicated expression ! * [67]7622: ICE with nested inline functions if function's address is taken ! * [68]7681: (fortran) ICE in compensate_edge, in reg-stack.c (also PR ! [69]9258) ! * [70]8031: (c++) ICE in code comparing typeids and casting from virtual base ! * [71]8275: ICE in simplify_subreg ! * [72]8332: (c++) builtin strlen/template interaction causes ICE ! * [73]8372: (c++) ICE on explicit call of destructor ! * [74]8439: (c, not c++) empty struct causes ICE ! * [75]8442: (c++) ICE with nested template classes ! * [76]8518: ICE when compiling mplayer ("extern inline" issue) ! * [77]8615: (c++) ICE with out-of-range character constant template argument ! * [78]8663: (c++) ICE in cp_expr_size, at cp-lang.c:307 ! * [79]8799: (c++) ICE: error reporting routines re-entered ! * [80]9328: (c++) ICE with typeof(X) for overloaded X ! * [81]9465: (preprocessor) cpp -traditional ICE on null bytes C++ (compiler and library) bugs ! * [82]47: scoping in nested classes is broken ! * [83]6745: problems with iostream rdbuf() member function ! * [84]8214: conversion from const char* const to char* sometimes accepted illegally ! * [85]8493: builtin strlen and overload resolution (same bug as ! [86]8332) ! * [87]8503: strange behaviour of function types ! * [88]8727: compiler confused by inheritance from an anonymous struct ! * [89]7445: poor performance of std::locale::classic() in multi-threaded applications ! * [90]8230: mishandling of overflow in vector::resize ! * [91]8399: sync_with_stdio(false) breaks unformatted input ! * [92]8662: illegal access of private member of unnamed class is accepted ! * [93]8707: "make distclean" fails in libstdc++-v3 directory ! * [94]8708: __USE_MALLOC doesn't work ! * [95]8790: Use of non-thread-safe strtok in src/localename.cc ! * [96]8887: Bug in date formats with --enable-clocale=generic ! * [97]9076: Call Frame Instructions are not handled correctly during unwind operation ! * [98]9151: std::setprecision limited to 16 digits when outputting a double to a stream ! * [99]9168: codecvt overwrites output buffers ! * [100]9269: libstdc++ headers: explicit specialization of function must precede its first use ! * [101]9322: return value of basic_streambuf<>::getloc affected by locale::global ! * [102]9433: segfault in runtime support for dynamic_cast C and optimizer bugs ! * [103]8032: GCC incorrectly initializes static structs that have flexible arrays ! * [104]8639: simple arithmetic expression broken ! * [105]8794: optimization improperly eliminates certain expressions ! * [106]8832: traditional "asm volatile" code is illegally optimized ! * [107]8988: loop optimizer bug: with -O2, code is generated that segfaults (found on i386, bug present for all platforms) ! * [108]9492: structure copy clobbers subsequent stores to structure Objective-C bugs ! * [109]9267: Objective-C parser won't build with newer bison versions (e.g. 1.875) Ada bugs ! * [110]8344: Ada build problem due to conflict between gcc/final.o, gcc/ada/final.o Preprocessor bugs ! * [111]8524: _Pragma within macros is improperly expanded ! * [112]8880: __WCHAR_TYPE__ macro incorrectly set to "long int" with -fshort-wchar ARM-specific ! * [113]9090: arm ICE with >= -O2; regression from gcc-2.95 x86-specific (Intel/AMD) ! * [114]8588: ICE in extract_insn, at recog.c:NNNN (shift instruction) ! * [115]8599: loop unroll bug with -march=k6-3 ! * [116]9506: ABI breakage in structure return (affects BSD and Cygwin, but not GNU/Linux) FreeBSD 5.0 specific ! * [117]9484: GCC 3.2.1 Bootstrap failure on FreeBSD 5.0 RTEMS-specific ! * [118]9292: hppa1.1-rtems configurery problems ! * [119]9293: [m68k-elf/rtems] config/m68k/t-crtstuff bug ! * [120]9295: [mips-rtems] config/mips/rtems.h init/fini issue ! * [121]9296: gthr-rtems regression ! * [122]9316: powerpc-rtems: extending multilibs HP-PA specific ! * [123]9493: ICE with -O2 when building a simple function Documentation ! * [124]7341: hyperlink to gcov in GCC documentation doesn't work ! * [125]8947: Please add a warning about "-malign-double" in docs ! * [126]7448, [127]8882: typo cleanups __________________________________________________________________ ! GCC 3.2.1 3.2.1 adds a new warning, -Wabi. This option warns when GNU C++ generates code that is known not to be binary-compatible with the --- 20753,20875 ---- Internal Compiler Errors (multi-platform) ! * [66]5919: (c++) ICE when passing variable array to template function ! * [67]7129: (c++) ICE with min/max assignment operators (?=) ! * [68]7507: ICE with -O2 when address of called function is a complicated expression ! * [69]7622: ICE with nested inline functions if function's address is taken ! * [70]7681: (fortran) ICE in compensate_edge, in reg-stack.c (also PR ! [71]9258) ! * [72]8031: (c++) ICE in code comparing typeids and casting from virtual base ! * [73]8275: ICE in simplify_subreg ! * [74]8332: (c++) builtin strlen/template interaction causes ICE ! * [75]8372: (c++) ICE on explicit call of destructor ! * [76]8439: (c, not c++) empty struct causes ICE ! * [77]8442: (c++) ICE with nested template classes ! * [78]8518: ICE when compiling mplayer ("extern inline" issue) ! * [79]8615: (c++) ICE with out-of-range character constant template argument ! * [80]8663: (c++) ICE in cp_expr_size, at cp-lang.c:307 ! * [81]8799: (c++) ICE: error reporting routines re-entered ! * [82]9328: (c++) ICE with typeof(X) for overloaded X ! * [83]9465: (preprocessor) cpp -traditional ICE on null bytes C++ (compiler and library) bugs ! * [84]47: scoping in nested classes is broken ! * [85]6745: problems with iostream rdbuf() member function ! * [86]8214: conversion from const char* const to char* sometimes accepted illegally ! * [87]8493: builtin strlen and overload resolution (same bug as ! [88]8332) ! * [89]8503: strange behaviour of function types ! * [90]8727: compiler confused by inheritance from an anonymous struct ! * [91]7445: poor performance of std::locale::classic() in multi-threaded applications ! * [92]8230: mishandling of overflow in vector::resize ! * [93]8399: sync_with_stdio(false) breaks unformatted input ! * [94]8662: illegal access of private member of unnamed class is accepted ! * [95]8707: "make distclean" fails in libstdc++-v3 directory ! * [96]8708: __USE_MALLOC doesn't work ! * [97]8790: Use of non-thread-safe strtok in src/localename.cc ! * [98]8887: Bug in date formats with --enable-clocale=generic ! * [99]9076: Call Frame Instructions are not handled correctly during unwind operation ! * [100]9151: std::setprecision limited to 16 digits when outputting a double to a stream ! * [101]9168: codecvt overwrites output buffers ! * [102]9269: libstdc++ headers: explicit specialization of function must precede its first use ! * [103]9322: return value of basic_streambuf<>::getloc affected by locale::global ! * [104]9433: segfault in runtime support for dynamic_cast C and optimizer bugs ! * [105]8032: GCC incorrectly initializes static structs that have flexible arrays ! * [106]8639: simple arithmetic expression broken ! * [107]8794: optimization improperly eliminates certain expressions ! * [108]8832: traditional "asm volatile" code is illegally optimized ! * [109]8988: loop optimizer bug: with -O2, code is generated that segfaults (found on i386, bug present for all platforms) ! * [110]9492: structure copy clobbers subsequent stores to structure Objective-C bugs ! * [111]9267: Objective-C parser won't build with newer bison versions (e.g. 1.875) Ada bugs ! * [112]8344: Ada build problem due to conflict between gcc/final.o, gcc/ada/final.o Preprocessor bugs ! * [113]8524: _Pragma within macros is improperly expanded ! * [114]8880: __WCHAR_TYPE__ macro incorrectly set to "long int" with -fshort-wchar ARM-specific ! * [115]9090: arm ICE with >= -O2; regression from gcc-2.95 x86-specific (Intel/AMD) ! * [116]8588: ICE in extract_insn, at recog.c:NNNN (shift instruction) ! * [117]8599: loop unroll bug with -march=k6-3 ! * [118]9506: ABI breakage in structure return (affects BSD and Cygwin, but not GNU/Linux) FreeBSD 5.0 specific ! * [119]9484: GCC 3.2.1 Bootstrap failure on FreeBSD 5.0 RTEMS-specific ! * [120]9292: hppa1.1-rtems configurery problems ! * [121]9293: [m68k-elf/rtems] config/m68k/t-crtstuff bug ! * [122]9295: [mips-rtems] config/mips/rtems.h init/fini issue ! * [123]9296: gthr-rtems regression ! * [124]9316: powerpc-rtems: extending multilibs HP-PA specific ! * [125]9493: ICE with -O2 when building a simple function Documentation ! * [126]7341: hyperlink to gcov in GCC documentation doesn't work ! * [127]8947: Please add a warning about "-malign-double" in docs ! * [128]7448, [129]8882: typo cleanups __________________________________________________________________ ! [130]GCC 3.2.1 3.2.1 adds a new warning, -Wabi. This option warns when GNU C++ generates code that is known not to be binary-compatible with the *************** GCC 3.2.1 *** 20430,20436 **** the new warning there are no new features that were not present in GCC 3.2. ! In addition, the previous fix for [128]PR 7445 (poor performance of std::locale::classic() in multi-threaded applications) was reverted ("unfixed"), because the "fix" was not thread-safe. --- 20884,20890 ---- the new warning there are no new features that were not present in GCC 3.2. ! In addition, the previous fix for [131]PR 7445 (poor performance of std::locale::classic() in multi-threaded applications) was reverted ("unfixed"), because the "fix" was not thread-safe. *************** GCC 3.2.1 *** 20445,20627 **** Internal Compiler Errors (multi-platform) ! * [129]2521: (c++) ICE in build_ptrmemfunc, in cp/typeck.c ! * [130]5661: (c++) ICE instantiating template on array of unknown size (bad code) ! * [131]6419: (c++) ICE in make_decl_rtl for "longest" attribute on 64-bit platforms ! * [132]6994: (c++) ICE in find_function_data ! * [133]7150: preprocessor: GCC -dM -E gives an ICE ! * [134]7160: ICE when optimizing branches without a return value ! * [135]7228: (c++) ICE when using member template and template function ! * [136]7266: (c++) ICE with -pedantic on missing typename ! * [137]7353: ICE from use of "Naming Types" extension, see above ! * [138]7411: ICE in instantiate_virtual_regs_1, in function.c ! * [139]7478: (c++) ICE on static_cast inside template ! * [140]7526: preprocessor core dump when _Pragma implies #pragma dependency ! * [141]7721: (c++) ICE on simple (but incorrect) template ([142]7803 is a duplicate) ! * [143]7754: (c++) ICE on union with template parameter ! * [144]7788: (c++) redeclaring a definition as an incomplete class causes ICE ! * [145]8031: (c++) ICE in comptypes, in cp/typeck.c ! * [146]8055: preprocessor dies with SIG11 when building FreeBSD kernel ! * [147]8067: (c++) ICE due to mishandling of __FUNCTION__ and related variables ! * [148]8134: (c++) ICE in force_store_init_value on legal code ! * [149]8149: (c++) ICE on incomplete type ! * [150]8160: (c++) ICE in build_modify_expr, in cp/typeck.c: array initialization C++ (compiler and library) bugs ! * [151]5607: No pointer adjustment in covariant return types ! * [152]6579: Infinite loop with statement expressions in member initialization ! * [153]6803: Default copy constructor bug in GCC 3.1 ! * [154]7176: g++ confused by friend and static member with same name ! * [155]7188: Segfault with template class and recursive (incorrect) initializer list ! * [156]7306: Regression: GCC 3.x fails to compile code with virtual inheritance if a method has a variable number of arguments ! * [157]7461: ctype::classic_table() returns offset array on Cygwin ! * [158]7524: f(const float arg[3]) fails ! * [159]7584: Erroneous ambiguous base error on using declaration ! * [160]7676: Member template overloading problem ! * [161]7679: infinite loop when a right parenthesis is missing ! * [162]7811: default locale not taken from environment ! * [163]7961: compare( char *) implemented incorrectly in basic_string<> ! * [164]8071: basic_ostream::operator<<(streambuf*) loops forever if ! streambuf::underflow() leaves gptr() NULL (dups: [165]8127, ! [166]6745) ! * [167]8096: deque::at() throws std::range_error instead of std::out_of_range ! * [168]8127: cout << cin.rdbuf() infinite loop ! * [169]8218: Excessively large memory consumed for classes with large array members ! * [170]8287: GCC 3.2: Destructor called for non-constructed local object ! * [171]8347: empty vector range used in string construction causes core dump ! * [172]8348: fail() flag is set in istringstream when eof() flag is set ! * [173]8391: regression: infinite loop in cp/decl2.c(finish_file) C and optimizer bugs ! * [174]6627: -fno-align-functions doesn't seem to disable function alignment ! * [175]6631: life_analysis misoptimizes code to initialize fields of a structure ! * [176]7102: unsigned char division results in floating exception ! * [177]7120: Run once loop should *always* be unrolled (pessimization) ! * [178]7209: Bug involving array referencing and ?: operator ! * [179]7515: invalid inlining of global function with -O3 ! * [180]7814: incorrect scheduling for glibc-2.2.92 strcpy test ! * [181]8467: bug in sibling call optimization Preprocessor bugs ! * [182]4890: incorrect line markers from the traditional preprocessor ! * [183]7357: -M option omits system headers files (making it the same as -MM) ! * [184]7358: Changes to Sun's make Dependencies ! * [185]7602: C++ header files found in CPLUS_INCLUDE_PATH treated as C headers ! * [186]7862: Interrupting GCC -MD removes .d file but not .o ! * [187]8190: Failed compilation deletes -MD dependency file ! * [188]8524: _Pragma within macro is improperly expanded x86 specific (Intel/AMD) ! * [189]5351: (i686-only) function pass-by-value structure copy ! corrupts stack ([190]7591 is a duplicate) ! * [191]6845, [192]7034, [193]7124, [194]7174: ICE's with -march=pentium3/pentium2/athlon (these are all the same underlying bug, in MMX register use) ! * [195]7134, [196]7375, [197]7390: ICE with -march=athlon (maybe same as above?) ! * [198]6890: xmmintrin.h, _MM_TRANSPOSE4_PS is broken ! * [199]6981: wrong code in 64-bit manipulation on x86 ! * [200]7242: GCC -mcpu=pentium[23] doesn't define __tune_pentiumpro__ macro ! * [201]7396: ix86: cmpgt_ss, cmpge_ss, cmpngt_ss, and cmpnge_ss SSE intrinsics are broken ! * [202]7630: GCC 3.2 breaks on Mozilla 1.0's JS sources with -march=pentium4 ! * [203]7693: Typo in i386 mmintrin.h header ! * [204]7723: ICE - Pentium3 sse - GCC 3.2 ! * [205]7951: ICE on -march=pentium4 -O2 -mfpmath=sse ! * [206]8146: (i686 only) gcc 3.2 miscompiles gcc 2.95.3 PowerPC specific ! * [207]5967: GCC bug when profiling nested functions on powerpc ! * [208]6984: wrong code generated with -O2, -O3, -Os for do-while loop on PowerPC ! * [209]7114: PowerPC: ICE building strcoll.op from glibc-2.2.5 ! * [210]7130: miscompiled code for GCC-3.1 on powerpc-unknown-linux-gnu with -funroll-all-loops ! * [211]7133: PowerPC ICE: unrecognizable insn ! * [212]7380: ICE in extract_insn, at recog.c:2148 ! * [213]8252: ICE on Altivec code with optimization turned on ! * [214]8451: Altivec ICE in GCC 3.2 HP/PA specific ! * [215]7250: __ashrdi3 returns wrong value on 32 bit hppa SPARC specific ! * [216]6668: when using --disable-multilib, libgcc_s.so is installed in the wrong place on sparc-solaris ! * [217]7151: ICE when compiling for UltraSPARC ! * [218]7335: SPARC: ICE in verify_wide_reg (flow.c:557) with long double and -O1 ! * [219]7842: [REGRESSION] SPARC code gen bug ARM specific ! * [220]7856: [arm] invalid offset in constant pool reference ! * [221]7967: optimization produces wrong code (ARM) Alpha specific ! * [222]7374: __builtin_fabsl broken on alpha IBM s390 specific ! * [223]7370: ICE in fixup_var_refs_1 on s390x ! * [224]7409: loop optimization bug on s390x-linux-gnu ! * [225]8232: s390x: ICE when using bcmp with int length argument SCO specific ! * [226]7623: SCO OpenServer build fails with machmode.def: undefined symbol: BITS_PER_UNIT m68k/Coldfire specific ! * [227]8314: crtbegin, crtend need to be multilib'ed for this platform Documentation ! * [228]761: Document some undocumented options ! * [229]5610: Fix documentation about invoking SSE instructions (-mfpmath=sse) ! * [230]7484: List -Wmissing-declarations as C-only option ! * [231]7531: -mcmodel not documented for x86-64 ! * [232]8120: Update documentation of bad use of ## __________________________________________________________________ ! GCC 3.2 3.2 is a small bug fix release, but there is a change to the application binary interface (ABI), hence the change to the second part --- 20899,21081 ---- Internal Compiler Errors (multi-platform) ! * [132]2521: (c++) ICE in build_ptrmemfunc, in cp/typeck.c ! * [133]5661: (c++) ICE instantiating template on array of unknown size (bad code) ! * [134]6419: (c++) ICE in make_decl_rtl for "longest" attribute on 64-bit platforms ! * [135]6994: (c++) ICE in find_function_data ! * [136]7150: preprocessor: GCC -dM -E gives an ICE ! * [137]7160: ICE when optimizing branches without a return value ! * [138]7228: (c++) ICE when using member template and template function ! * [139]7266: (c++) ICE with -pedantic on missing typename ! * [140]7353: ICE from use of "Naming Types" extension, see above ! * [141]7411: ICE in instantiate_virtual_regs_1, in function.c ! * [142]7478: (c++) ICE on static_cast inside template ! * [143]7526: preprocessor core dump when _Pragma implies #pragma dependency ! * [144]7721: (c++) ICE on simple (but incorrect) template ([145]7803 is a duplicate) ! * [146]7754: (c++) ICE on union with template parameter ! * [147]7788: (c++) redeclaring a definition as an incomplete class causes ICE ! * [148]8031: (c++) ICE in comptypes, in cp/typeck.c ! * [149]8055: preprocessor dies with SIG11 when building FreeBSD kernel ! * [150]8067: (c++) ICE due to mishandling of __FUNCTION__ and related variables ! * [151]8134: (c++) ICE in force_store_init_value on legal code ! * [152]8149: (c++) ICE on incomplete type ! * [153]8160: (c++) ICE in build_modify_expr, in cp/typeck.c: array initialization C++ (compiler and library) bugs ! * [154]5607: No pointer adjustment in covariant return types ! * [155]6579: Infinite loop with statement expressions in member initialization ! * [156]6803: Default copy constructor bug in GCC 3.1 ! * [157]7176: g++ confused by friend and static member with same name ! * [158]7188: Segfault with template class and recursive (incorrect) initializer list ! * [159]7306: Regression: GCC 3.x fails to compile code with virtual inheritance if a method has a variable number of arguments ! * [160]7461: ctype::classic_table() returns offset array on Cygwin ! * [161]7524: f(const float arg[3]) fails ! * [162]7584: Erroneous ambiguous base error on using declaration ! * [163]7676: Member template overloading problem ! * [164]7679: infinite loop when a right parenthesis is missing ! * [165]7811: default locale not taken from environment ! * [166]7961: compare( char *) implemented incorrectly in basic_string<> ! * [167]8071: basic_ostream::operator<<(streambuf*) loops forever if ! streambuf::underflow() leaves gptr() NULL (dups: [168]8127, ! [169]6745) ! * [170]8096: deque::at() throws std::range_error instead of std::out_of_range ! * [171]8127: cout << cin.rdbuf() infinite loop ! * [172]8218: Excessively large memory consumed for classes with large array members ! * [173]8287: GCC 3.2: Destructor called for non-constructed local object ! * [174]8347: empty vector range used in string construction causes core dump ! * [175]8348: fail() flag is set in istringstream when eof() flag is set ! * [176]8391: regression: infinite loop in cp/decl2.c(finish_file) C and optimizer bugs ! * [177]6627: -fno-align-functions doesn't seem to disable function alignment ! * [178]6631: life_analysis misoptimizes code to initialize fields of a structure ! * [179]7102: unsigned char division results in floating exception ! * [180]7120: Run once loop should *always* be unrolled (pessimization) ! * [181]7209: Bug involving array referencing and ?: operator ! * [182]7515: invalid inlining of global function with -O3 ! * [183]7814: incorrect scheduling for glibc-2.2.92 strcpy test ! * [184]8467: bug in sibling call optimization Preprocessor bugs ! * [185]4890: incorrect line markers from the traditional preprocessor ! * [186]7357: -M option omits system headers files (making it the same as -MM) ! * [187]7358: Changes to Sun's make Dependencies ! * [188]7602: C++ header files found in CPLUS_INCLUDE_PATH treated as C headers ! * [189]7862: Interrupting GCC -MD removes .d file but not .o ! * [190]8190: Failed compilation deletes -MD dependency file ! * [191]8524: _Pragma within macro is improperly expanded x86 specific (Intel/AMD) ! * [192]5351: (i686-only) function pass-by-value structure copy ! corrupts stack ([193]7591 is a duplicate) ! * [194]6845, [195]7034, [196]7124, [197]7174: ICE's with -march=pentium3/pentium2/athlon (these are all the same underlying bug, in MMX register use) ! * [198]7134, [199]7375, [200]7390: ICE with -march=athlon (maybe same as above?) ! * [201]6890: xmmintrin.h, _MM_TRANSPOSE4_PS is broken ! * [202]6981: wrong code in 64-bit manipulation on x86 ! * [203]7242: GCC -mcpu=pentium[23] doesn't define __tune_pentiumpro__ macro ! * [204]7396: ix86: cmpgt_ss, cmpge_ss, cmpngt_ss, and cmpnge_ss SSE intrinsics are broken ! * [205]7630: GCC 3.2 breaks on Mozilla 1.0's JS sources with -march=pentium4 ! * [206]7693: Typo in i386 mmintrin.h header ! * [207]7723: ICE - Pentium3 sse - GCC 3.2 ! * [208]7951: ICE on -march=pentium4 -O2 -mfpmath=sse ! * [209]8146: (i686 only) gcc 3.2 miscompiles gcc 2.95.3 PowerPC specific ! * [210]5967: GCC bug when profiling nested functions on powerpc ! * [211]6984: wrong code generated with -O2, -O3, -Os for do-while loop on PowerPC ! * [212]7114: PowerPC: ICE building strcoll.op from glibc-2.2.5 ! * [213]7130: miscompiled code for GCC-3.1 on powerpc-unknown-linux-gnu with -funroll-all-loops ! * [214]7133: PowerPC ICE: unrecognizable insn ! * [215]7380: ICE in extract_insn, at recog.c:2148 ! * [216]8252: ICE on Altivec code with optimization turned on ! * [217]8451: Altivec ICE in GCC 3.2 HP/PA specific ! * [218]7250: __ashrdi3 returns wrong value on 32 bit hppa SPARC specific ! * [219]6668: when using --disable-multilib, libgcc_s.so is installed in the wrong place on sparc-solaris ! * [220]7151: ICE when compiling for UltraSPARC ! * [221]7335: SPARC: ICE in verify_wide_reg (flow.c:557) with long double and -O1 ! * [222]7842: [REGRESSION] SPARC code gen bug ARM specific ! * [223]7856: [arm] invalid offset in constant pool reference ! * [224]7967: optimization produces wrong code (ARM) Alpha specific ! * [225]7374: __builtin_fabsl broken on alpha IBM s390 specific ! * [226]7370: ICE in fixup_var_refs_1 on s390x ! * [227]7409: loop optimization bug on s390x-linux-gnu ! * [228]8232: s390x: ICE when using bcmp with int length argument SCO specific ! * [229]7623: SCO OpenServer build fails with machmode.def: undefined symbol: BITS_PER_UNIT m68k/Coldfire specific ! * [230]8314: crtbegin, crtend need to be multilib'ed for this platform Documentation ! * [231]761: Document some undocumented options ! * [232]5610: Fix documentation about invoking SSE instructions (-mfpmath=sse) ! * [233]7484: List -Wmissing-declarations as C-only option ! * [234]7531: -mcmodel not documented for x86-64 ! * [235]8120: Update documentation of bad use of ## __________________________________________________________________ ! [236]GCC 3.2 3.2 is a small bug fix release, but there is a change to the application binary interface (ABI), hence the change to the second part *************** GCC 3.2 *** 20635,20998 **** C++ ! * [233]7320: g++ 3.2 relocation problem ! * [234]7470: vtable: virtual function pointers not in declaration order libstdc++ ! * [235]6410: Trouble with non-ASCII monetary symbols and wchar_t ! * [236]6503, [237]6642, [238]7186: Problems with comparing or subtracting various types of const and non-const iterators ! * [239]7216: ambiguity with basic_iostream::traits_type ! * [240]7220: problem with basic_istream::ignore(0,delimiter) ! * [241]7222: locale::operator==() doesn't work on std::locale("") ! * [242]7286: placement operator delete issue ! * [243]7442: cxxabi.h does not match the C++ ABI ! * [244]7445: poor performance of std::locale::classic() in multi-threaded applications x86-64 specific ! * [245]7291: off-by-one in generated inline bzero code for x86-64 For questions related to the use of GCC, please consult these web ! pages and the [246]GCC manuals. If that fails, the ! [247]gcc-help@gcc.gnu.org mailing list might help. Comments on these web pages and the development of GCC are welcome on our developer ! list at [248]gcc@gcc.gnu.org. All of [249]our lists have public archives. ! Copyright (C) [250]Free Software Foundation, Inc. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! These pages are [251]maintained by the GCC team. Last modified ! 2022-10-26. References 1. https://gcc.gnu.org/gcc-3.2/changes.html#3.2.3 2. https://gcc.gnu.org/gcc-3.1/changes.html 3. https://gcc.gnu.org/gcc-3.2/c++-abi.html ! 4. https://gcc.gnu.org/PR3782 ! 5. https://gcc.gnu.org/PR6440 ! 6. https://gcc.gnu.org/PR7050 ! 7. https://gcc.gnu.org/PR7741 ! 8. https://gcc.gnu.org/PR7982 ! 9. https://gcc.gnu.org/PR8068 ! 10. https://gcc.gnu.org/PR8178 ! 11. https://gcc.gnu.org/PR8396 ! 12. https://gcc.gnu.org/PR8674 ! 13. https://gcc.gnu.org/PR9768 ! 14. https://gcc.gnu.org/PR9798 ! 15. https://gcc.gnu.org/PR9799 ! 16. https://gcc.gnu.org/PR9928 ! 17. https://gcc.gnu.org/PR10114 ! 18. https://gcc.gnu.org/PR10352 ! 19. https://gcc.gnu.org/PR10336 ! 20. https://gcc.gnu.org/PR8224 ! 21. https://gcc.gnu.org/PR8613 ! 22. https://gcc.gnu.org/PR8828 ! 23. https://gcc.gnu.org/PR9226 ! 24. https://gcc.gnu.org/PR9853 ! 25. https://gcc.gnu.org/PR9797 ! 26. https://gcc.gnu.org/PR9967 ! 27. https://gcc.gnu.org/PR10116 ! 28. https://gcc.gnu.org/PR10171 ! 29. https://gcc.gnu.org/PR10175 ! 30. https://gcc.gnu.org/PR8316 ! 31. https://gcc.gnu.org/PR9169 ! 32. https://gcc.gnu.org/PR9420 ! 33. https://gcc.gnu.org/PR9459 ! 34. https://gcc.gnu.org/PR9507 ! 35. https://gcc.gnu.org/PR9538 ! 36. https://gcc.gnu.org/PR9602 ! 37. https://gcc.gnu.org/PR9993 ! 38. https://gcc.gnu.org/PR10167 ! 39. https://gcc.gnu.org/PR9652 ! 40. https://gcc.gnu.org/PR10144 ! 41. https://gcc.gnu.org/PR8746 ! 42. https://gcc.gnu.org/PR9888 ! 43. https://gcc.gnu.org/PR9638 ! 44. https://gcc.gnu.org/PR9954 ! 45. https://gcc.gnu.org/PR7784 ! 46. https://gcc.gnu.org/PR7796 ! 47. https://gcc.gnu.org/PR8281 ! 48. https://gcc.gnu.org/PR8366 ! 49. https://gcc.gnu.org/PR8726 ! 50. https://gcc.gnu.org/PR9414 ! 51. https://gcc.gnu.org/PR10067 ! 52. https://gcc.gnu.org/PR7248 ! 53. https://gcc.gnu.org/PR8343 ! 54. https://gcc.gnu.org/PR9732 ! 55. https://gcc.gnu.org/PR10073 ! 56. https://gcc.gnu.org/PR7702 ! 57. https://gcc.gnu.org/PR9671 ! 58. https://gcc.gnu.org/PR8694 ! 59. https://gcc.gnu.org/PR9953 ! 60. https://gcc.gnu.org/PR10271 ! 61. https://gcc.gnu.org/PR6362 ! 62. https://gcc.gnu.org/PR10377 ! 63. https://gcc.gnu.org/PR6955 ! 64. https://gcc.gnu.org/PR5919 ! 65. https://gcc.gnu.org/PR7129 ! 66. https://gcc.gnu.org/PR7507 ! 67. https://gcc.gnu.org/PR7622 ! 68. https://gcc.gnu.org/PR7681 ! 69. https://gcc.gnu.org/PR9528 ! 70. https://gcc.gnu.org/PR8031 ! 71. https://gcc.gnu.org/PR8275 ! 72. https://gcc.gnu.org/PR8332 ! 73. https://gcc.gnu.org/PR8372 ! 74. https://gcc.gnu.org/PR8439 ! 75. https://gcc.gnu.org/PR8442 ! 76. https://gcc.gnu.org/PR8518 ! 77. https://gcc.gnu.org/PR8615 ! 78. https://gcc.gnu.org/PR8663 ! 79. https://gcc.gnu.org/PR8799 ! 80. https://gcc.gnu.org/PR9328 ! 81. https://gcc.gnu.org/PR9465 ! 82. https://gcc.gnu.org/PR47 ! 83. https://gcc.gnu.org/PR6745 ! 84. https://gcc.gnu.org/PR8214 ! 85. https://gcc.gnu.org/PR8493 ! 86. https://gcc.gnu.org/PR8332 ! 87. https://gcc.gnu.org/PR8503 ! 88. https://gcc.gnu.org/PR8727 ! 89. https://gcc.gnu.org/PR7445 ! 90. https://gcc.gnu.org/PR8230 ! 91. https://gcc.gnu.org/PR8399 ! 92. https://gcc.gnu.org/PR8662 ! 93. https://gcc.gnu.org/PR8707 ! 94. https://gcc.gnu.org/PR8708 ! 95. https://gcc.gnu.org/PR8790 ! 96. https://gcc.gnu.org/PR8887 ! 97. https://gcc.gnu.org/PR9076 ! 98. https://gcc.gnu.org/PR9151 ! 99. https://gcc.gnu.org/PR9168 ! 100. https://gcc.gnu.org/PR9269 ! 101. https://gcc.gnu.org/PR9322 ! 102. https://gcc.gnu.org/PR9433 ! 103. https://gcc.gnu.org/PR8032 ! 104. https://gcc.gnu.org/PR8639 ! 105. https://gcc.gnu.org/PR8794 ! 106. https://gcc.gnu.org/PR8832 ! 107. https://gcc.gnu.org/PR8988 ! 108. https://gcc.gnu.org/PR9492 ! 109. https://gcc.gnu.org/PR9267 ! 110. https://gcc.gnu.org/PR8344 ! 111. https://gcc.gnu.org/PR8524 ! 112. https://gcc.gnu.org/PR8880 ! 113. https://gcc.gnu.org/PR9090 ! 114. https://gcc.gnu.org/PR8588 ! 115. https://gcc.gnu.org/PR8599 ! 116. https://gcc.gnu.org/PR9506 ! 117. https://gcc.gnu.org/PR9484 ! 118. https://gcc.gnu.org/PR9292 ! 119. https://gcc.gnu.org/PR9293 ! 120. https://gcc.gnu.org/PR9295 ! 121. https://gcc.gnu.org/PR9296 ! 122. https://gcc.gnu.org/PR9316 ! 123. https://gcc.gnu.org/PR9493 ! 124. https://gcc.gnu.org/PR7341 ! 125. https://gcc.gnu.org/PR8947 ! 126. https://gcc.gnu.org/PR7448 ! 127. https://gcc.gnu.org/PR8882 ! 128. https://gcc.gnu.org/PR7445 ! 129. https://gcc.gnu.org/PR2521 ! 130. https://gcc.gnu.org/PR5661 ! 131. https://gcc.gnu.org/PR6419 ! 132. https://gcc.gnu.org/PR6994 ! 133. https://gcc.gnu.org/PR7150 ! 134. https://gcc.gnu.org/PR7160 ! 135. https://gcc.gnu.org/PR7228 ! 136. https://gcc.gnu.org/PR7266 ! 137. https://gcc.gnu.org/PR7353 ! 138. https://gcc.gnu.org/PR7411 ! 139. https://gcc.gnu.org/PR7478 ! 140. https://gcc.gnu.org/PR7526 ! 141. https://gcc.gnu.org/PR7721 ! 142. https://gcc.gnu.org/PR7803 ! 143. https://gcc.gnu.org/PR7754 ! 144. https://gcc.gnu.org/PR7788 ! 145. https://gcc.gnu.org/PR8031 ! 146. https://gcc.gnu.org/PR8055 ! 147. https://gcc.gnu.org/PR8067 ! 148. https://gcc.gnu.org/PR8134 ! 149. https://gcc.gnu.org/PR8149 ! 150. https://gcc.gnu.org/PR8160 ! 151. https://gcc.gnu.org/PR5607 ! 152. https://gcc.gnu.org/PR6579 ! 153. https://gcc.gnu.org/PR6803 ! 154. https://gcc.gnu.org/PR7176 ! 155. https://gcc.gnu.org/PR7188 ! 156. https://gcc.gnu.org/PR7306 ! 157. https://gcc.gnu.org/PR7461 ! 158. https://gcc.gnu.org/PR7524 ! 159. https://gcc.gnu.org/PR7584 ! 160. https://gcc.gnu.org/PR7676 ! 161. https://gcc.gnu.org/PR7679 ! 162. https://gcc.gnu.org/PR7811 ! 163. https://gcc.gnu.org/PR7961 ! 164. https://gcc.gnu.org/PR8071 ! 165. https://gcc.gnu.org/PR8127 ! 166. https://gcc.gnu.org/PR6745 ! 167. https://gcc.gnu.org/PR8096 168. https://gcc.gnu.org/PR8127 ! 169. https://gcc.gnu.org/PR8218 ! 170. https://gcc.gnu.org/PR8287 ! 171. https://gcc.gnu.org/PR8347 ! 172. https://gcc.gnu.org/PR8348 ! 173. https://gcc.gnu.org/PR8391 ! 174. https://gcc.gnu.org/PR6627 ! 175. https://gcc.gnu.org/PR6631 ! 176. https://gcc.gnu.org/PR7102 ! 177. https://gcc.gnu.org/PR7120 ! 178. https://gcc.gnu.org/PR7209 ! 179. https://gcc.gnu.org/PR7515 ! 180. https://gcc.gnu.org/PR7814 ! 181. https://gcc.gnu.org/PR8467 ! 182. https://gcc.gnu.org/PR4890 ! 183. https://gcc.gnu.org/PR7357 ! 184. https://gcc.gnu.org/PR7358 ! 185. https://gcc.gnu.org/PR7602 ! 186. https://gcc.gnu.org/PR7862 ! 187. https://gcc.gnu.org/PR8190 ! 188. https://gcc.gnu.org/PR8524 ! 189. https://gcc.gnu.org/PR5351 ! 190. https://gcc.gnu.org/PR7591 ! 191. https://gcc.gnu.org/PR6845 ! 192. https://gcc.gnu.org/PR7034 ! 193. https://gcc.gnu.org/PR7124 ! 194. https://gcc.gnu.org/PR7174 ! 195. https://gcc.gnu.org/PR7134 ! 196. https://gcc.gnu.org/PR7375 ! 197. https://gcc.gnu.org/PR7390 ! 198. https://gcc.gnu.org/PR6890 ! 199. https://gcc.gnu.org/PR6981 ! 200. https://gcc.gnu.org/PR7242 ! 201. https://gcc.gnu.org/PR7396 ! 202. https://gcc.gnu.org/PR7630 ! 203. https://gcc.gnu.org/PR7693 ! 204. https://gcc.gnu.org/PR7723 ! 205. https://gcc.gnu.org/PR7951 ! 206. https://gcc.gnu.org/PR8146 ! 207. https://gcc.gnu.org/PR5967 ! 208. https://gcc.gnu.org/PR6984 ! 209. https://gcc.gnu.org/PR7114 ! 210. https://gcc.gnu.org/PR7130 ! 211. https://gcc.gnu.org/PR7133 ! 212. https://gcc.gnu.org/PR7380 ! 213. https://gcc.gnu.org/PR8252 ! 214. https://gcc.gnu.org/PR8451 ! 215. https://gcc.gnu.org/PR7250 ! 216. https://gcc.gnu.org/PR6668 ! 217. https://gcc.gnu.org/PR7151 ! 218. https://gcc.gnu.org/PR7335 ! 219. https://gcc.gnu.org/PR7842 ! 220. https://gcc.gnu.org/PR7856 ! 221. https://gcc.gnu.org/PR7967 ! 222. https://gcc.gnu.org/PR7374 ! 223. https://gcc.gnu.org/PR7370 ! 224. https://gcc.gnu.org/PR7409 ! 225. https://gcc.gnu.org/PR8232 ! 226. https://gcc.gnu.org/PR7623 ! 227. https://gcc.gnu.org/PR8314 ! 228. https://gcc.gnu.org/PR761 ! 229. https://gcc.gnu.org/PR5610 ! 230. https://gcc.gnu.org/PR7484 ! 231. https://gcc.gnu.org/PR7531 ! 232. https://gcc.gnu.org/PR8120 ! 233. https://gcc.gnu.org/PR7320 ! 234. https://gcc.gnu.org/PR7470 ! 235. https://gcc.gnu.org/PR6410 ! 236. https://gcc.gnu.org/PR6503 ! 237. https://gcc.gnu.org/PR6642 ! 238. https://gcc.gnu.org/PR7186 ! 239. https://gcc.gnu.org/PR7216 ! 240. https://gcc.gnu.org/PR7220 ! 241. https://gcc.gnu.org/PR7222 ! 242. https://gcc.gnu.org/PR7286 ! 243. https://gcc.gnu.org/PR7442 ! 244. https://gcc.gnu.org/PR7445 ! 245. https://gcc.gnu.org/PR7291 ! 246. https://gcc.gnu.org/onlinedocs/ ! 247. mailto:gcc-help@gcc.gnu.org ! 248. mailto:gcc@gcc.gnu.org ! 249. https://gcc.gnu.org/lists.html ! 250. https://www.fsf.org/ ! 251. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-3.1/index.html GCC 3.1 (This release series is no longer supported.) July 27, 2002 ! The [1]GNU project and the GCC developers are pleased to announce the release of GCC 3.1.1. The links below still apply to GCC 3.1.1. May 15, 2002 ! The [2]GNU project and the GCC developers are pleased to announce the release of GCC 3.1. GCC used to stand for the GNU C Compiler, but since the compiler supports several other languages aside from C, it now stands for the GNU Compiler Collection. ! A list of [3]successful builds is updated as new information becomes available. The GCC developers would like to thank the numerous people that have ! contributed [4]new features, improvements, bug fixes, and other changes ! as well as test results to GCC. This [5]amazing group of volunteers is what makes GCC successful. ! For additional information about GCC please refer to the [6]GCC project ! web site or contact the [7]GCC development mailing list. ! To obtain GCC please use [8]our mirror sites, or our CVS server. __________________________________________________________________ For questions related to the use of GCC, please consult these web ! pages and the [9]GCC manuals. If that fails, the ! [10]gcc-help@gcc.gnu.org mailing list might help. Comments on these web pages and the development of GCC are welcome on our developer ! list at [11]gcc@gcc.gnu.org. All of [12]our lists have public archives. ! Copyright (C) [13]Free Software Foundation, Inc. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! These pages are [14]maintained by the GCC team. Last modified ! 2022-10-26. References ! 1. http://www.gnu.org/ ! 2. http://www.gnu.org/ ! 3. https://gcc.gnu.org/gcc-3.1/buildstat.html ! 4. https://gcc.gnu.org/gcc-3.1/changes.html ! 5. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html ! 6. https://gcc.gnu.org/index.html ! 7. mailto:gcc@gcc.gnu.org ! 8. https://gcc.gnu.org/mirrors.html ! 9. https://gcc.gnu.org/onlinedocs/ ! 10. mailto:gcc-help@gcc.gnu.org ! 11. mailto:gcc@gcc.gnu.org ! 12. https://gcc.gnu.org/lists.html ! 13. https://www.fsf.org/ ! 14. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-3.1/changes.html GCC 3.1 Release Series Changes, New Features, and Fixes --- 21089,21457 ---- C++ ! * [237]7320: g++ 3.2 relocation problem ! * [238]7470: vtable: virtual function pointers not in declaration order libstdc++ ! * [239]6410: Trouble with non-ASCII monetary symbols and wchar_t ! * [240]6503, [241]6642, [242]7186: Problems with comparing or subtracting various types of const and non-const iterators ! * [243]7216: ambiguity with basic_iostream::traits_type ! * [244]7220: problem with basic_istream::ignore(0,delimiter) ! * [245]7222: locale::operator==() doesn't work on std::locale("") ! * [246]7286: placement operator delete issue ! * [247]7442: cxxabi.h does not match the C++ ABI ! * [248]7445: poor performance of std::locale::classic() in multi-threaded applications x86-64 specific ! * [249]7291: off-by-one in generated inline bzero code for x86-64 For questions related to the use of GCC, please consult these web ! pages and the [250]GCC manuals. If that fails, the ! [251]gcc-help@gcc.gnu.org mailing list might help. Comments on these web pages and the development of GCC are welcome on our developer ! list at [252]gcc@gcc.gnu.org. All of [253]our lists have public archives. ! Copyright (C) [254]Free Software Foundation, Inc. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! These pages are [255]maintained by the GCC team. Last modified ! 2025-04-08. References 1. https://gcc.gnu.org/gcc-3.2/changes.html#3.2.3 2. https://gcc.gnu.org/gcc-3.1/changes.html 3. https://gcc.gnu.org/gcc-3.2/c++-abi.html ! 4. https://gcc.gnu.org/gcc-3.2/changes.html#GCC3.2.3 ! 5. https://gcc.gnu.org/PR3782 ! 6. https://gcc.gnu.org/PR6440 ! 7. https://gcc.gnu.org/PR7050 ! 8. https://gcc.gnu.org/PR7741 ! 9. https://gcc.gnu.org/PR7982 ! 10. https://gcc.gnu.org/PR8068 ! 11. https://gcc.gnu.org/PR8178 ! 12. https://gcc.gnu.org/PR8396 ! 13. https://gcc.gnu.org/PR8674 ! 14. https://gcc.gnu.org/PR9768 ! 15. https://gcc.gnu.org/PR9798 ! 16. https://gcc.gnu.org/PR9799 ! 17. https://gcc.gnu.org/PR9928 ! 18. https://gcc.gnu.org/PR10114 ! 19. https://gcc.gnu.org/PR10352 ! 20. https://gcc.gnu.org/PR10336 ! 21. https://gcc.gnu.org/PR8224 ! 22. https://gcc.gnu.org/PR8613 ! 23. https://gcc.gnu.org/PR8828 ! 24. https://gcc.gnu.org/PR9226 ! 25. https://gcc.gnu.org/PR9853 ! 26. https://gcc.gnu.org/PR9797 ! 27. https://gcc.gnu.org/PR9967 ! 28. https://gcc.gnu.org/PR10116 ! 29. https://gcc.gnu.org/PR10171 ! 30. https://gcc.gnu.org/PR10175 ! 31. https://gcc.gnu.org/PR8316 ! 32. https://gcc.gnu.org/PR9169 ! 33. https://gcc.gnu.org/PR9420 ! 34. https://gcc.gnu.org/PR9459 ! 35. https://gcc.gnu.org/PR9507 ! 36. https://gcc.gnu.org/PR9538 ! 37. https://gcc.gnu.org/PR9602 ! 38. https://gcc.gnu.org/PR9993 ! 39. https://gcc.gnu.org/PR10167 ! 40. https://gcc.gnu.org/PR9652 ! 41. https://gcc.gnu.org/PR10144 ! 42. https://gcc.gnu.org/PR8746 ! 43. https://gcc.gnu.org/PR9888 ! 44. https://gcc.gnu.org/PR9638 ! 45. https://gcc.gnu.org/PR9954 ! 46. https://gcc.gnu.org/PR7784 ! 47. https://gcc.gnu.org/PR7796 ! 48. https://gcc.gnu.org/PR8281 ! 49. https://gcc.gnu.org/PR8366 ! 50. https://gcc.gnu.org/PR8726 ! 51. https://gcc.gnu.org/PR9414 ! 52. https://gcc.gnu.org/PR10067 ! 53. https://gcc.gnu.org/PR7248 ! 54. https://gcc.gnu.org/PR8343 ! 55. https://gcc.gnu.org/PR9732 ! 56. https://gcc.gnu.org/PR10073 ! 57. https://gcc.gnu.org/PR7702 ! 58. https://gcc.gnu.org/PR9671 ! 59. https://gcc.gnu.org/PR8694 ! 60. https://gcc.gnu.org/PR9953 ! 61. https://gcc.gnu.org/PR10271 ! 62. https://gcc.gnu.org/PR6362 ! 63. https://gcc.gnu.org/PR10377 ! 64. https://gcc.gnu.org/PR6955 ! 65. https://gcc.gnu.org/gcc-3.2/changes.html#GCC3.2.2 ! 66. https://gcc.gnu.org/PR5919 ! 67. https://gcc.gnu.org/PR7129 ! 68. https://gcc.gnu.org/PR7507 ! 69. https://gcc.gnu.org/PR7622 ! 70. https://gcc.gnu.org/PR7681 ! 71. https://gcc.gnu.org/PR9528 ! 72. https://gcc.gnu.org/PR8031 ! 73. https://gcc.gnu.org/PR8275 ! 74. https://gcc.gnu.org/PR8332 ! 75. https://gcc.gnu.org/PR8372 ! 76. https://gcc.gnu.org/PR8439 ! 77. https://gcc.gnu.org/PR8442 ! 78. https://gcc.gnu.org/PR8518 ! 79. https://gcc.gnu.org/PR8615 ! 80. https://gcc.gnu.org/PR8663 ! 81. https://gcc.gnu.org/PR8799 ! 82. https://gcc.gnu.org/PR9328 ! 83. https://gcc.gnu.org/PR9465 ! 84. https://gcc.gnu.org/PR47 ! 85. https://gcc.gnu.org/PR6745 ! 86. https://gcc.gnu.org/PR8214 ! 87. https://gcc.gnu.org/PR8493 ! 88. https://gcc.gnu.org/PR8332 ! 89. https://gcc.gnu.org/PR8503 ! 90. https://gcc.gnu.org/PR8727 ! 91. https://gcc.gnu.org/PR7445 ! 92. https://gcc.gnu.org/PR8230 ! 93. https://gcc.gnu.org/PR8399 ! 94. https://gcc.gnu.org/PR8662 ! 95. https://gcc.gnu.org/PR8707 ! 96. https://gcc.gnu.org/PR8708 ! 97. https://gcc.gnu.org/PR8790 ! 98. https://gcc.gnu.org/PR8887 ! 99. https://gcc.gnu.org/PR9076 ! 100. https://gcc.gnu.org/PR9151 ! 101. https://gcc.gnu.org/PR9168 ! 102. https://gcc.gnu.org/PR9269 ! 103. https://gcc.gnu.org/PR9322 ! 104. https://gcc.gnu.org/PR9433 ! 105. https://gcc.gnu.org/PR8032 ! 106. https://gcc.gnu.org/PR8639 ! 107. https://gcc.gnu.org/PR8794 ! 108. https://gcc.gnu.org/PR8832 ! 109. https://gcc.gnu.org/PR8988 ! 110. https://gcc.gnu.org/PR9492 ! 111. https://gcc.gnu.org/PR9267 ! 112. https://gcc.gnu.org/PR8344 ! 113. https://gcc.gnu.org/PR8524 ! 114. https://gcc.gnu.org/PR8880 ! 115. https://gcc.gnu.org/PR9090 ! 116. https://gcc.gnu.org/PR8588 ! 117. https://gcc.gnu.org/PR8599 ! 118. https://gcc.gnu.org/PR9506 ! 119. https://gcc.gnu.org/PR9484 ! 120. https://gcc.gnu.org/PR9292 ! 121. https://gcc.gnu.org/PR9293 ! 122. https://gcc.gnu.org/PR9295 ! 123. https://gcc.gnu.org/PR9296 ! 124. https://gcc.gnu.org/PR9316 ! 125. https://gcc.gnu.org/PR9493 ! 126. https://gcc.gnu.org/PR7341 ! 127. https://gcc.gnu.org/PR8947 ! 128. https://gcc.gnu.org/PR7448 ! 129. https://gcc.gnu.org/PR8882 ! 130. https://gcc.gnu.org/gcc-3.2/changes.html#GCC3.2.1 ! 131. https://gcc.gnu.org/PR7445 ! 132. https://gcc.gnu.org/PR2521 ! 133. https://gcc.gnu.org/PR5661 ! 134. https://gcc.gnu.org/PR6419 ! 135. https://gcc.gnu.org/PR6994 ! 136. https://gcc.gnu.org/PR7150 ! 137. https://gcc.gnu.org/PR7160 ! 138. https://gcc.gnu.org/PR7228 ! 139. https://gcc.gnu.org/PR7266 ! 140. https://gcc.gnu.org/PR7353 ! 141. https://gcc.gnu.org/PR7411 ! 142. https://gcc.gnu.org/PR7478 ! 143. https://gcc.gnu.org/PR7526 ! 144. https://gcc.gnu.org/PR7721 ! 145. https://gcc.gnu.org/PR7803 ! 146. https://gcc.gnu.org/PR7754 ! 147. https://gcc.gnu.org/PR7788 ! 148. https://gcc.gnu.org/PR8031 ! 149. https://gcc.gnu.org/PR8055 ! 150. https://gcc.gnu.org/PR8067 ! 151. https://gcc.gnu.org/PR8134 ! 152. https://gcc.gnu.org/PR8149 ! 153. https://gcc.gnu.org/PR8160 ! 154. https://gcc.gnu.org/PR5607 ! 155. https://gcc.gnu.org/PR6579 ! 156. https://gcc.gnu.org/PR6803 ! 157. https://gcc.gnu.org/PR7176 ! 158. https://gcc.gnu.org/PR7188 ! 159. https://gcc.gnu.org/PR7306 ! 160. https://gcc.gnu.org/PR7461 ! 161. https://gcc.gnu.org/PR7524 ! 162. https://gcc.gnu.org/PR7584 ! 163. https://gcc.gnu.org/PR7676 ! 164. https://gcc.gnu.org/PR7679 ! 165. https://gcc.gnu.org/PR7811 ! 166. https://gcc.gnu.org/PR7961 ! 167. https://gcc.gnu.org/PR8071 168. https://gcc.gnu.org/PR8127 ! 169. https://gcc.gnu.org/PR6745 ! 170. https://gcc.gnu.org/PR8096 ! 171. https://gcc.gnu.org/PR8127 ! 172. https://gcc.gnu.org/PR8218 ! 173. https://gcc.gnu.org/PR8287 ! 174. https://gcc.gnu.org/PR8347 ! 175. https://gcc.gnu.org/PR8348 ! 176. https://gcc.gnu.org/PR8391 ! 177. https://gcc.gnu.org/PR6627 ! 178. https://gcc.gnu.org/PR6631 ! 179. https://gcc.gnu.org/PR7102 ! 180. https://gcc.gnu.org/PR7120 ! 181. https://gcc.gnu.org/PR7209 ! 182. https://gcc.gnu.org/PR7515 ! 183. https://gcc.gnu.org/PR7814 ! 184. https://gcc.gnu.org/PR8467 ! 185. https://gcc.gnu.org/PR4890 ! 186. https://gcc.gnu.org/PR7357 ! 187. https://gcc.gnu.org/PR7358 ! 188. https://gcc.gnu.org/PR7602 ! 189. https://gcc.gnu.org/PR7862 ! 190. https://gcc.gnu.org/PR8190 ! 191. https://gcc.gnu.org/PR8524 ! 192. https://gcc.gnu.org/PR5351 ! 193. https://gcc.gnu.org/PR7591 ! 194. https://gcc.gnu.org/PR6845 ! 195. https://gcc.gnu.org/PR7034 ! 196. https://gcc.gnu.org/PR7124 ! 197. https://gcc.gnu.org/PR7174 ! 198. https://gcc.gnu.org/PR7134 ! 199. https://gcc.gnu.org/PR7375 ! 200. https://gcc.gnu.org/PR7390 ! 201. https://gcc.gnu.org/PR6890 ! 202. https://gcc.gnu.org/PR6981 ! 203. https://gcc.gnu.org/PR7242 ! 204. https://gcc.gnu.org/PR7396 ! 205. https://gcc.gnu.org/PR7630 ! 206. https://gcc.gnu.org/PR7693 ! 207. https://gcc.gnu.org/PR7723 ! 208. https://gcc.gnu.org/PR7951 ! 209. https://gcc.gnu.org/PR8146 ! 210. https://gcc.gnu.org/PR5967 ! 211. https://gcc.gnu.org/PR6984 ! 212. https://gcc.gnu.org/PR7114 ! 213. https://gcc.gnu.org/PR7130 ! 214. https://gcc.gnu.org/PR7133 ! 215. https://gcc.gnu.org/PR7380 ! 216. https://gcc.gnu.org/PR8252 ! 217. https://gcc.gnu.org/PR8451 ! 218. https://gcc.gnu.org/PR7250 ! 219. https://gcc.gnu.org/PR6668 ! 220. https://gcc.gnu.org/PR7151 ! 221. https://gcc.gnu.org/PR7335 ! 222. https://gcc.gnu.org/PR7842 ! 223. https://gcc.gnu.org/PR7856 ! 224. https://gcc.gnu.org/PR7967 ! 225. https://gcc.gnu.org/PR7374 ! 226. https://gcc.gnu.org/PR7370 ! 227. https://gcc.gnu.org/PR7409 ! 228. https://gcc.gnu.org/PR8232 ! 229. https://gcc.gnu.org/PR7623 ! 230. https://gcc.gnu.org/PR8314 ! 231. https://gcc.gnu.org/PR761 ! 232. https://gcc.gnu.org/PR5610 ! 233. https://gcc.gnu.org/PR7484 ! 234. https://gcc.gnu.org/PR7531 ! 235. https://gcc.gnu.org/PR8120 ! 236. https://gcc.gnu.org/gcc-3.2/changes.html#GCC3.2 ! 237. https://gcc.gnu.org/PR7320 ! 238. https://gcc.gnu.org/PR7470 ! 239. https://gcc.gnu.org/PR6410 ! 240. https://gcc.gnu.org/PR6503 ! 241. https://gcc.gnu.org/PR6642 ! 242. https://gcc.gnu.org/PR7186 ! 243. https://gcc.gnu.org/PR7216 ! 244. https://gcc.gnu.org/PR7220 ! 245. https://gcc.gnu.org/PR7222 ! 246. https://gcc.gnu.org/PR7286 ! 247. https://gcc.gnu.org/PR7442 ! 248. https://gcc.gnu.org/PR7445 ! 249. https://gcc.gnu.org/PR7291 ! 250. https://gcc.gnu.org/onlinedocs/ ! 251. mailto:gcc-help@gcc.gnu.org ! 252. mailto:gcc@gcc.gnu.org ! 253. https://gcc.gnu.org/lists.html ! 254. https://www.fsf.org/ ! 255. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-3.1/index.html + GCC 3.1 (This release series is no longer supported.) July 27, 2002 ! The GNU project and the GCC developers are pleased to announce the release of GCC 3.1.1. The links below still apply to GCC 3.1.1. May 15, 2002 ! The [1]GNU project and the GCC developers are pleased to announce the release of GCC 3.1. GCC used to stand for the GNU C Compiler, but since the compiler supports several other languages aside from C, it now stands for the GNU Compiler Collection. ! A list of [2]successful builds is updated as new information becomes available. The GCC developers would like to thank the numerous people that have ! contributed [3]new features, improvements, bug fixes, and other changes ! as well as test results to GCC. This [4]amazing group of volunteers is what makes GCC successful. ! For additional information about GCC please refer to the [5]GCC project ! web site or contact the [6]GCC development mailing list. ! To obtain GCC please use [7]our mirror sites, or our CVS server. __________________________________________________________________ For questions related to the use of GCC, please consult these web ! pages and the [8]GCC manuals. If that fails, the ! [9]gcc-help@gcc.gnu.org mailing list might help. Comments on these web pages and the development of GCC are welcome on our developer ! list at [10]gcc@gcc.gnu.org. All of [11]our lists have public archives. ! Copyright (C) [12]Free Software Foundation, Inc. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! These pages are [13]maintained by the GCC team. Last modified ! 2024-07-04. References ! 1. https://www.gnu.org/ ! 2. https://gcc.gnu.org/gcc-3.1/buildstat.html ! 3. https://gcc.gnu.org/gcc-3.1/changes.html ! 4. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html ! 5. https://gcc.gnu.org/index.html ! 6. mailto:gcc@gcc.gnu.org ! 7. https://gcc.gnu.org/mirrors.html ! 8. https://gcc.gnu.org/onlinedocs/ ! 9. mailto:gcc-help@gcc.gnu.org ! 10. mailto:gcc@gcc.gnu.org ! 11. https://gcc.gnu.org/lists.html ! 12. https://www.fsf.org/ ! 13. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-3.1/changes.html + GCC 3.1 Release Series Changes, New Features, and Fixes *************** New Targets and Target Specific Improvem *** 21210,21216 **** + For those targets that support it, -mfpmath=sse will cause the compiler to generate SSE/SSE2 instructions for floating point math instead of x87 instructions. Usually, this will lead to ! quicker code — especially on the Pentium 4. Note that only scalar floating point instructions are used and GCC does not exploit SIMD features yet. + Prefetch support has been added to the Pentium III, Pentium 4, --- 21669,21675 ---- + For those targets that support it, -mfpmath=sse will cause the compiler to generate SSE/SSE2 instructions for floating point math instead of x87 instructions. Usually, this will lead to ! quicker code -- especially on the Pentium 4. Note that only scalar floating point instructions are used and GCC does not exploit SIMD features yet. + Prefetch support has been added to the Pentium III, Pentium 4, *************** New Targets and Target Specific Improvem *** 21226,21232 **** to stabilize for 3.2. The support is written to conform to Motorola's AltiVec specs. See -maltivec. ! Obsolete Systems Support for a number of older systems has been declared obsolete in GCC 3.1. Unless there is activity to revive them, the next release of GCC --- 21685,21691 ---- to stabilize for 3.2. The support is written to conform to Motorola's AltiVec specs. See -maltivec. ! [8]Obsolete Systems Support for a number of older systems has been declared obsolete in GCC 3.1. Unless there is activity to revive them, the next release of GCC *************** Documentation improvements *** 21315,21350 **** For questions related to the use of GCC, please consult these web ! pages and the [8]GCC manuals. If that fails, the ! [9]gcc-help@gcc.gnu.org mailing list might help. Comments on these web pages and the development of GCC are welcome on our developer ! list at [10]gcc@gcc.gnu.org. All of [11]our lists have public archives. ! Copyright (C) [12]Free Software Foundation, Inc. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! These pages are [13]maintained by the GCC team. Last modified ! 2022-10-26. References 1. https://gcc.gnu.org/ml/gcc/2002-07/msg01208.html 2. https://gcc.gnu.org/news/profiledriven.html 3. https://gcc.gnu.org/benchmarks/ ! 4. https://gcc.gnu.org/c99status.html 5. https://gcc.gnu.org/onlinedocs/libstdc++/faq.html 6. https://gcc.gnu.org/onlinedocs/gcc-3.1.1/g77/News.html 7. https://www.adacore.com/ ! 8. https://gcc.gnu.org/onlinedocs/ ! 9. mailto:gcc-help@gcc.gnu.org ! 10. mailto:gcc@gcc.gnu.org ! 11. https://gcc.gnu.org/lists.html ! 12. https://www.fsf.org/ ! 13. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-3.0/index.html GCC 3.0.4 (This release series is no longer supported.) --- 21774,21811 ---- For questions related to the use of GCC, please consult these web ! pages and the [9]GCC manuals. If that fails, the ! [10]gcc-help@gcc.gnu.org mailing list might help. Comments on these web pages and the development of GCC are welcome on our developer ! list at [11]gcc@gcc.gnu.org. All of [12]our lists have public archives. ! Copyright (C) [13]Free Software Foundation, Inc. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. ! These pages are [14]maintained by the GCC team. Last modified ! 2025-06-05. References 1. https://gcc.gnu.org/ml/gcc/2002-07/msg01208.html 2. https://gcc.gnu.org/news/profiledriven.html 3. https://gcc.gnu.org/benchmarks/ ! 4. https://gcc.gnu.org/projects/c-status.html 5. https://gcc.gnu.org/onlinedocs/libstdc++/faq.html 6. https://gcc.gnu.org/onlinedocs/gcc-3.1.1/g77/News.html 7. https://www.adacore.com/ ! 8. https://gcc.gnu.org/gcc-3.1/changes.html#obsolete_systems ! 9. https://gcc.gnu.org/onlinedocs/ ! 10. mailto:gcc-help@gcc.gnu.org ! 11. mailto:gcc@gcc.gnu.org ! 12. https://gcc.gnu.org/lists.html ! 13. https://www.fsf.org/ ! 14. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-3.0/index.html + GCC 3.0.4 (This release series is no longer supported.) *************** Previous 3.0.x Releases *** 21399,21409 **** provided this notice is preserved. These pages are [14]maintained by the GCC team. Last modified ! 2022-10-26. References ! 1. http://www.gnu.org/ 2. https://gcc.gnu.org/gcc-3.0/features.html 3. https://gcc.gnu.org/gcc-3.0/buildstat.html 4. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html --- 21860,21870 ---- provided this notice is preserved. These pages are [14]maintained by the GCC team. Last modified ! 2024-07-04. References ! 1. https://www.gnu.org/ 2. https://gcc.gnu.org/gcc-3.0/features.html 3. https://gcc.gnu.org/gcc-3.0/buildstat.html 4. https://gcc.gnu.org/onlinedocs/gcc/Contributors.html *************** References *** 21419,21424 **** --- 21880,21886 ---- 14. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-3.0/features.html + GCC 3.0 New Features Additional changes in GCC 3.0.4 *************** Other significant improvements *** 21589,21595 **** provided this notice is preserved. These pages are [18]maintained by the GCC team. Last modified ! 2022-10-26. References --- 22051,22057 ---- provided this notice is preserved. These pages are [18]maintained by the GCC team. Last modified ! 2025-06-05. References *************** References *** 21601,21607 **** 6. https://gcc.gnu.org/gcc-3.0/c++features.html 7. https://gcc.gnu.org/news/inlining.html 8. https://gcc.gnu.org/news/dependencies.html ! 9. https://gcc.gnu.org/c99status.html 10. https://gcc.gnu.org/onlinedocs/gcc-3.4.6/g77/News.html 11. https://gcc.gnu.org/gcc-3.0/libgcc.html 12. https://gcc.gnu.org/gcc-2.95/features.html --- 22063,22069 ---- 6. https://gcc.gnu.org/gcc-3.0/c++features.html 7. https://gcc.gnu.org/news/inlining.html 8. https://gcc.gnu.org/news/dependencies.html ! 9. https://gcc.gnu.org/projects/c-status.html 10. https://gcc.gnu.org/onlinedocs/gcc-3.4.6/g77/News.html 11. https://gcc.gnu.org/gcc-3.0/libgcc.html 12. https://gcc.gnu.org/gcc-2.95/features.html *************** References *** 21613,21618 **** --- 22075,22081 ---- 18. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-3.0/caveats.html + GCC 3.0 Caveats * -fstrict-aliasing is now part of -O2 and higher optimization *************** References *** 21672,21677 **** --- 22135,22141 ---- 7. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-2.95/index.html + GCC 2.95 (This release series is no longer supported.) *************** References *** 21761,21766 **** --- 22225,22231 ---- 15. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-2.95/features.html + GCC 2.95 New Features * General Optimizer Improvements: *************** Additional Changes in GCC 2.95.3 *** 22004,22010 **** provided this notice is preserved. These pages are [22]maintained by the GCC team. Last modified ! 2023-09-02. References --- 22469,22475 ---- provided this notice is preserved. These pages are [22]maintained by the GCC team. Last modified ! 2025-06-05. References *************** References *** 22019,22025 **** 9. https://gcc.gnu.org/onlinedocs/gcc-3.4.6/g77/News.html 10. https://gcc.gnu.org/news/gcj-announce.txt 11. https://gcc.gnu.org/news/javaannounce.html ! 12. https://gcc.gnu.org/c99status.html 13. https://gcc.gnu.org/news/chill.html 14. https://gcc.gnu.org/news/sparc.html 15. https://gcc.gnu.org/news/egcs-vcg.html --- 22484,22490 ---- 9. https://gcc.gnu.org/onlinedocs/gcc-3.4.6/g77/News.html 10. https://gcc.gnu.org/news/gcj-announce.txt 11. https://gcc.gnu.org/news/javaannounce.html ! 12. https://gcc.gnu.org/projects/c-status.html 13. https://gcc.gnu.org/news/chill.html 14. https://gcc.gnu.org/news/sparc.html 15. https://gcc.gnu.org/news/egcs-vcg.html *************** References *** 22032,22037 **** --- 22497,22503 ---- 22. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/gcc-2.95/caveats.html + GCC 2.95 Caveats * GCC 2.95 will issue an error for invalid asm statements that had *************** References *** 22099,22104 **** --- 22565,22571 ---- 7. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/egcs-1.1/index.html + EGCS 1.1 September 3, 1998: We are pleased to announce the release of EGCS 1.1. *************** References *** 22327,22332 **** --- 22794,22800 ---- 15. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/egcs-1.1/features.html + EGCS 1.1 new features * Integrated GNU Fortran (g77) compiler and runtime library with *************** References *** 22420,22425 **** --- 22888,22894 ---- 10. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/egcs-1.1/caveats.html + EGCS 1.1 Caveats * EGCS has an integrated libstdc++, but does not have an integrated *************** References *** 22469,22474 **** --- 22938,22944 ---- 6. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/egcs-1.0/index.html + EGCS 1.0 December 3, 1997: We are pleased to announce the release of EGCS 1.0. *************** References *** 22668,22673 **** --- 23138,23144 ---- 10. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/egcs-1.0/features.html + EGCS 1.0 features * Core compiler is based on the gcc2 development tree from Aug 2, *************** References *** 22731,22736 **** --- 23202,23208 ---- 8. https://gcc.gnu.org/about.html ====================================================================== http://gcc.gnu.org/egcs-1.0/caveats.html + EGCS 1.0 Caveats * EGCS has an integrated libstdc++, but does not have an integrated diff -Nrcpad gcc-12.4.0/c++tools/ChangeLog gcc-12.5.0-RC-20250704/c++tools/ChangeLog *** gcc-12.4.0/c++tools/ChangeLog Thu Jun 20 08:09:01 2024 --- gcc-12.5.0-RC-20250704/c++tools/ChangeLog Fri Jul 4 07:24:41 2025 *************** *** 1,3 **** --- 1,9 ---- + 2025-04-20 John David Anglin + + PR other/107616 + * server.cc (server): Don't call FD_ISSET when HAVE_PSELECT + and HAVE_SELECT are zero. + 2024-06-20 Release Manager * GCC 12.4.0 released. diff -Nrcpad gcc-12.4.0/c++tools/server.cc gcc-12.5.0-RC-20250704/c++tools/server.cc *** gcc-12.4.0/c++tools/server.cc Thu Jun 20 08:08:05 2024 --- gcc-12.5.0-RC-20250704/c++tools/server.cc Fri Jul 4 07:24:41 2025 *************** server (bool ipv6, int sock_fd, module_r *** 753,760 **** --- 753,762 ---- } } + #if defined (HAVE_PSELECT) || defined (HAVE_SELECT) if (active < 0 && sock_fd >= 0 && FD_ISSET (sock_fd, &readers)) active = -1; + #endif } if (active >= 0) diff -Nrcpad gcc-12.4.0/fixincludes/fixincl.x gcc-12.5.0-RC-20250704/fixincludes/fixincl.x *** gcc-12.4.0/fixincludes/fixincl.x Thu Jun 20 08:08:05 2024 --- gcc-12.5.0-RC-20250704/fixincludes/fixincl.x Fri Jul 4 07:24:41 2025 *************** *** 2,12 **** * * DO NOT EDIT THIS FILE (fixincl.x) * ! * It has been AutoGen-ed March 30, 2024 at 04:03:59 PM by AutoGen 5.18.7 * From the definitions inclhack.def * and the template file fixincl */ ! /* DO NOT SVN-MERGE THIS FILE, EITHER Sat Mar 30 16:03:59 GMT 2024 * * You must regenerate it. Use the ./genfixes script. * --- 2,12 ---- * * DO NOT EDIT THIS FILE (fixincl.x) * ! * It has been AutoGen-ed July 3, 2025 at 01:13:03 PM by AutoGen 5.18.16 * From the definitions inclhack.def * and the template file fixincl */ ! /* DO NOT SVN-MERGE THIS FILE, EITHER Thu Jul 3 13:13:03 BST 2025 * * You must regenerate it. Use the ./genfixes script. * *************** tSCC zApple_Local_Stdio_Fn_DeprecationNa *** 2619,2625 **** * File name selection pattern */ tSCC zApple_Local_Stdio_Fn_DeprecationList[] = ! "stdio.h\0"; /* * Machine/OS name selection pattern */ --- 2619,2625 ---- * File name selection pattern */ tSCC zApple_Local_Stdio_Fn_DeprecationList[] = ! "stdio.h\0_stdio.h\0"; /* * Machine/OS name selection pattern */ diff -Nrcpad gcc-12.4.0/fixincludes/inclhack.def gcc-12.5.0-RC-20250704/fixincludes/inclhack.def *** gcc-12.4.0/fixincludes/inclhack.def Thu Jun 20 08:08:05 2024 --- gcc-12.5.0-RC-20250704/fixincludes/inclhack.def Fri Jul 4 07:24:41 2025 *************** fix = { *** 1273,1278 **** --- 1273,1279 ---- hackname = apple_local_stdio_fn_deprecation; mach = "*-*-*darwin2*"; files = stdio.h; + files = _stdio.h; select = "__deprecated_msg([^\n]*)$"; c_fix = format; c_fix_arg = "#if defined(__APPLE_LOCAL_DEPRECATIONS)\n" diff -Nrcpad gcc-12.4.0/gcc/BASE-VER gcc-12.5.0-RC-20250704/gcc/BASE-VER *** gcc-12.4.0/gcc/BASE-VER Thu Jun 20 08:09:01 2024 --- gcc-12.5.0-RC-20250704/gcc/BASE-VER Fri Jul 4 07:24:41 2025 *************** *** 1 **** ! 12.4.0 --- 1 ---- ! 12.4.1 diff -Nrcpad gcc-12.4.0/gcc/ChangeLog gcc-12.5.0-RC-20250704/gcc/ChangeLog *** gcc-12.4.0/gcc/ChangeLog Thu Jun 20 08:09:01 2024 --- gcc-12.5.0-RC-20250704/gcc/ChangeLog Fri Jul 4 07:24:41 2025 *************** *** 1,3 **** --- 1,1907 ---- + 2025-07-02 Jan Hubicka + + Backported from master: + 2024-07-29 Jan Hubicka + + PR ipa/116055 + * ipa-modref.cc (analyze_function): Do not ICE when flags regress. + + 2025-07-02 Jan Hubicka + + Backported from master: + 2022-06-24 Jan Hubicka + + PR ipa/106057 + * tree-ssa-alias.cc (stmt_kills_ref_p): Check for external throw. + + 2025-07-02 Richard Biener + + Backported from master: + 2025-02-28 Richard Biener + + PR middle-end/66279 + * gimplify.cc (gimplify_asm_expr): Copy TREE_PURPOSE before + rewriting it for "+" processing. + + 2025-06-25 Haochen Jiang + + * config/i386/i386.h (PTA_ALDERLAKE): Use PTA_GOLDMONT_PLUS + as base to remove PTA_CLDEMOTE. + * doc/invoke.texi: Update texi file. + + 2025-06-24 Richard Biener + + Backported from master: + 2025-04-10 Richard Biener + + PR middle-end/119706 + * gimple-expr.cc (is_gimple_mem_ref_addr): Also allow + POLY_INT_CST. + + 2025-06-24 Richard Biener + + Backported from master: + 2025-04-01 Richard Biener + + PR tree-optimization/119534 + * tree-vect-stmts.cc (get_load_store_type): Reject + VECTOR_BOOLEAN_TYPE_P offset vector type for emulated gathers. + + 2025-06-24 Richard Biener + + Backported from master: + 2025-03-06 Richard Biener + + PR middle-end/119119 + * gimplify.cc (is_gimple_mem_rhs_or_call): All empty CTORs + are OK when not a register type. + + 2025-06-24 Richard Biener + + Backported from master: + 2025-03-03 Richard Biener + + PR tree-optimization/119057 + * tree-vect-loop.cc (check_reduction_path): Add argument + specifying whether we're analyzing the inner loop of a + double reduction. Do not allow extra uses outside of the + double reduction cycle in this case. + (vect_is_simple_reduction): Adjust. + + 2025-06-24 Richard Biener + + Backported from master: + 2025-01-28 Richard Biener + + PR tree-optimization/117424 + * tree-eh.cc (tree_could_trap_p): Verify the base is + fully contained within a decl. + + 2025-06-24 Richard Biener + + Backported from master: + 2025-02-04 Richard Biener + + PR tree-optimization/117113 + * gimple-loop-jam.cc (unroll_jam_possible_p): Detect when + we cannot handle virtual SSA update. + + 2025-06-24 Richard Biener + + Backported from master: + 2025-03-06 Richard Biener + + PR lto/114501 + * ipa-free-lang-data.cc (find_decls_types_r): Explicitly + handle CONSTRUCTORs as walk_tree handling of those is + incomplete. + + 2025-06-24 Richard Biener + + Backported from master: + 2025-02-04 Richard Biener + + PR lto/113207 + * ipa-free-lang-data.cc (free_lang_data_in_type): First drop + const/volatile qualifiers from function argument types, + then build a simplified type. + + 2025-06-24 Richard Biener + + Backported from master: + 2025-01-28 Richard Biener + + PR tree-optimization/112859 + * tree-loop-distribution.cc + (loop_distribution::pg_add_dependence_edges): Add comment. + + 2025-06-24 Richard Biener + + Backported from master: + 2025-01-27 Richard Biener + + PR tree-optimization/112859 + PR tree-optimization/115347 + * tree-loop-distribution.cc + (loop_distribution::pg_add_dependence_edges): For a zero + distance vector still make sure to not have an inner + loop with zero distance. + + 2025-06-24 Richard Biener + + Backported from master: + 2025-02-28 Richard Biener + + PR ipa/111245 + * ipa-modref.cc (modref_access_analysis::analyze_store): Do + not guard the check of whether the stmt could throw by + cfun->can_throw_non_call_exceptions. + + 2025-06-24 Richard Biener + + Backported from master: + 2024-05-17 Richard Biener + + PR middle-end/115110 + * tree-ssa-alias.cc (view_converted_memref_p): Fix. + + 2025-06-24 Richard Biener + + Backported from master: + 2024-07-31 Richard Biener + + PR middle-end/101478 + * gimplify.cc (gimplify_addr_expr): Check we still have an + ADDR_EXPR before calling recompute_tree_invariant_for_addr_expr. + + 2025-06-24 Richard Biener + + Backported from master: + 2025-02-28 Richard Biener + + PR tree-optimization/87984 + * tree-ssa-dom.cc (dom_opt_dom_walker::optimize_stmt): Do + not perform redundant store elimination to hard register + variables. + * tree-ssa-sccvn.cc (eliminate_dom_walker::eliminate_stmt): + Likewise. + + 2025-06-24 Richard Biener + + Backported from master: + 2023-08-24 Richard Biener + + PR tree-optimization/111125 + * tree-vect-slp.cc (vect_slp_function): Split at novector + loop entry, do not push blocks in novector loops. + + 2025-06-17 Richard Earnshaw + + Backported from master: + 2025-03-25 Richard Earnshaw + + PR middle-end/117811 + * optabs.cc (expand_binop_directly): Remove LAST as an argument, + instead record the last insn on entry. Only delete insns if + we need to restart and restart by calling ourself, not expand_binop. + (expand_binop): Update callers to expand_binop_directly. If it + fails to expand the operation, delete back to LAST. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2025-04-17 Jakub Jelinek + + PR target/119834 + * config/s390/s390.md (define_split after *cpymem_short): Use + (clobber (match_scratch N)) instead of (clobber (scratch)). Use + (match_dup 4) and operands[4] instead of (match_dup 3) and operands[3] + in the last of those. + (define_split after *clrmem_short): Use (clobber (match_scratch N)) + instead of (clobber (scratch)). + (define_split after *cmpmem_short): Likewise. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2025-02-10 Jakub Jelinek + + PR target/118623 + * config/i386/i386.md (*bt): Represent bt as + compare:CCC of const0_rtx and zero_extract rather than + zero_extract and const0_rtx. + (*jcc_bt): Likewise. Use LTU and GEU as flags test + instead of EQ and NE. + (*jcc_bt_1): Likewise. + (*jcc_bt_mask): Likewise. + (Help combine recognize bt followed by cmov splitter): Likewise. + (*bt_setcqi): Likewise. + (*bt_setncqi): Likewise. + (*bt_setnc): Likewise. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2024-12-05 Jakub Jelinek + + PR rtl-optimization/113994 + PR rtl-optimization/116799 + * loop-doloop.cc: Include targhooks.h. + (doloop_optimize): Also punt on intersection of modified + with df_get_live_in (desc->out_edge->dest). + (doloop_optimize_loops): Call df_analyze. Use + LI_ONLY_INNERMOST or LI_FROM_INNERMOST instead of 0 as + second loops_list argument. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2024-02-06 Jakub Jelinek + + PR sanitizer/110676 + * gimple-fold.cc (gimple_fold_builtin_strlen): For -fsanitize=address + reset maxlen to sizetype maximum. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2025-04-22 Jakub Jelinek + + PR target/119327 + * config/rs6000/rs6000.cc (rs6000_can_inline_p): Ignore also + OPTION_MASK_SAVE_TOC_INDIRECT differences. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2025-04-14 Jakub Jelinek + + PR rtl-optimization/119785 + * expmed.cc (init_expmed): Always pass QImode rather than mode to + set_src_cost passed to set_zero_cost. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2025-04-14 Jakub Jelinek + + PR driver/119727 + * configure.ac (HOST_HAS_PERSONALITY_ADDR_NO_RANDOMIZE): New check. + * gcc.cc: Include sys/personality.h if + HOST_HAS_PERSONALITY_ADDR_NO_RANDOMIZE is defined. + (try_generate_repro): Call + personality (personality (0xffffffffU) | ADDR_NO_RANDOMIZE) + if HOST_HAS_PERSONALITY_ADDR_NO_RANDOMIZE is defined. + * config.in: Regenerate. + * configure: Regenerate. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2025-04-12 Jakub Jelinek + + PR driver/119727 + * gcc.cc (files_equal_p): Rewritten using fopen/fgets/fclose instead + of open/fstat/read/close. At the start of lines, ignore lowercase + hexadecimal addresses followed by space. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2025-04-04 Jakub Jelinek + + PR lto/119625 + * lto-opts.cc (lto_write_options): If neither flag_pic nor + flag_pie are set, check first for flag_pie and only later + for flag_pic rather than the other way around, use a temporary + variable. If flag_cf_protection is not set, don't append anything + if flag_cf_protection is none of CF_{NONE,FULL,BRANCH,RETURN} and + use a temporary variable. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2025-04-01 Jakub Jelinek + + PR rtl-optimization/119291 + * combine.cc (try_combine): For splitting of PARALLEL with + 2 independent SETs into i2 and i3 sets check reg_used_between_p + of the SET_DESTs rather than just modified_between_p. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2025-03-22 Jakub Jelinek + + * gimplify.cc (warn_switch_unreachable_and_auto_init_r): Add missing + space in the middle of diagnostics. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2025-03-11 Jakub Jelinek + + PR c/119183 + * tree.cc (skip_simple_arithmetic): If first operand of binary + expr is TREE_CONSTANT or TREE_READONLY with no side-effects, call + tree_invariant_p on that operand first instead of on the second. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2025-02-24 Jakub Jelinek + + PR tree-optimization/118915 + * tree-ssa-reassoc.cc (optimize_range_tests_to_bit_test): For + highj == NULL_TREE use TYPE_MAX_VALUE (TREE_TYPE (lowj)) rather + than TYPE_MAX_VALUE (type). + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2025-02-08 Jakub Jelinek + + PR target/118776 + * config/i386/sse.md (3_mask): Use VI1248_AVX512VLBW + iterator rather than VI48_AVX512VL. + (3): Rename to ... + (*avx512bw_3): ... this. Use + nonimmediate_operand rather than register_operand predicate and %v + rather than v constraint for operand 1 and adjust condition to reject + MEMs in both operand 1 and 2. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2025-01-31 Jakub Jelinek + + PR ipa/117432 + * ipa-icf-gimple.cc (func_checker::compare_asm_inputs_outputs): + Also return_false if operands have incompatible types. + (func_checker::compare_gimple_call): Check fntype1 vs. fntype2 + compatibility for all non-internal calls and assume fntype1 and + fntype2 are non-NULL for those. For calls to non-prototyped + calls or for stdarg_p functions after the last named argument (if any) + check type compatibility of call arguments. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2025-01-23 Jakub Jelinek + + PR middle-end/114877 + * builtins.cc (fold_builtin_frexp): Handle rvc_nan and rvc_inf cases + like rvc_zero, return passed in arg and set *exp = 0. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2024-12-14 Jakub Jelinek + + PR middle-end/118024 + * gimple-ssa-warn-access.cc (matching_alloc_calls_p): Walk malloc + attributes of alloc_decl and dealloc_decl in separate loops rather + than in lock-step. Use common_deallocs.contains rather than + common_deallocs.add in the second loop. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2024-11-28 Jakub Jelinek + + PR target/117642 + * doc/extend.texi: Remove documentation of warning for unimplemented + __sync_* operations, such warning has never been implemented. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2024-11-26 Jakub Jelinek + + PR middle-end/102674 + * builtins.cc (fold_builtin_fpclassify): Use real_from_string3 rather + than real_from_string. Use "1E%d" format string rather than "0x1p%d" + for decimal float minimum. Formatting fixes. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2024-11-26 Jakub Jelinek + + PR middle-end/43374 + * real.cc (get_max_float): Handle decimal float. + * builtins.cc (fold_builtin_interclass_mathfn): Use + real_from_string3 rather than real_from_string. Use + "1E%d" format string rather than "0x1p%d" for decimal + float minimum. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2024-11-06 Jakub Jelinek + + PR tree-optimization/117439 + * gimple-ssa-store-merging.cc (encode_tree_to_bitpos): For + empty_ctor_p use !sub_byte_op_p even if bitlen doesn't have an + integral mode. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2024-10-30 Jakub Jelinek + + PR target/117296 + * function.cc (assign_parms): Call do_pending_stack_adjust. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2024-10-25 Jakub Jelinek + + PR middle-end/117249 + * tree-ssa-structalias.cc (insert_vi_for_tree): Move put calls out of + gcc_assert. + * lto-cgraph.cc (lto_symtab_encoder_delete_node): Likewise. + * gimple-ssa-strength-reduction.cc (get_alternative_base, + add_cand_for_stmt): Likewise. + * tree-eh.cc (add_stmt_to_eh_lp_fn): Likewise. + * except.cc (duplicate_eh_regions_1): Likewise. + * tree-ssa-reassoc.cc (insert_operand_rank): Likewise. + * config/nvptx/nvptx.cc (nvptx_expand_call): Use == rather than = in + gcc_assert. + * genautomata.cc (output_default_latencies): Move j++ side-effect + outside of gcc_assert. + * tree-ssa-loop-ivopts.cc (get_alias_ptr_type_for_ptr_address): Use + == rather than = in gcc_assert. + * cgraph.cc (symbol_table::create_edge): Move ++edges_max_uid + side-effect outside of gcc_assert. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2024-09-20 Uros Bizjak + Jakub Jelinek + + PR target/116738 + * config/i386/subst.md (mask_scalar_operand_arg34, + mask_scalar_expand_op3, round_saeonly_scalar_mask_arg3): New + subst attributes. + * config/i386/sse.md + (_vm3): + Change from define_insn to define_expand, rename the old define_insn + to ... + (*_vm3): + ... this. + (_ieee_vm3): + New define_insn. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2024-08-09 Jakub Jelinek + + PR target/116287 + * config/i386/i386.cc (ix86_fold_builtin) : + When folding into zero without checking whether first argument is + constant, use omit_one_operand. + (ix86_fold_builtin) : Likewise. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2024-07-23 Jakub Jelinek + Andrew Pinski + + PR tree-optimization/116034 + * tree-ssa.cc (maybe_rewrite_mem_ref_base): Only use IMAGPART_EXPR + if MEM_REF offset is equal to element type size. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2024-07-17 Jakub Jelinek + + PR middle-end/115527 + * gimple-fold.cc (clear_padding_flush): Introduce endsize + variable and use it instead of wordsize when comparing it against + nonzero_last. + (clear_padding_type): Increment off by sz. + + 2025-06-10 Martin Jambor + + Backported from master: + 2025-05-14 Martin Jambor + + PR tree-optimization/111873 + * tree-sra.cc (sra_modify_expr): When processing a load which has + a type-incompatible replacement, do not store the contents of the + replacement into the original aggregate when that aggregate is + const. + + 2025-05-30 Richard Sandiford + + Backported from master: + 2025-04-24 Richard Sandiford + + PR target/119610 + * config/aarch64/aarch64.cc (aarch64_allocate_and_probe_stack_space): + Add a bytes_below_sp parameter and use it to calculate the CFA + offsets. Attach the first SVE CFA note to the move into the + associated temporary register. + (aarch64_allocate_and_probe_stack_space): Update calls accordingly. + Start out with bytes_per_sp set to the frame size and decrement + it after each allocation. + + 2025-05-28 Andreas Krebbel + + Backported from master: + 2024-04-23 Andreas Krebbel + + PR target/114676 + * config/s390/s390-c.cc (s390_expand_overloaded_builtin): Use a + MEM_REF with an addend of type ptr_type_node. + + 2025-05-27 Stefan Schulze Frielinghaus + + Backported from master: + 2025-05-14 Stefan Schulze Frielinghaus + + * config/s390/vector.md: Fix tf_to_fprx2 by using vlr instead of + ldr. + + 2025-05-12 Andrew Pinski + + Backported from master: + 2025-01-12 Andrew Pinski + + PR middle-end/118411 + * final.cc (get_attr_length_1): Handle asm for CALL_INSN + and JUMP_INSNs. + + 2025-05-05 John David Anglin + + * config/pa/pa-linux.h (NEED_INDICATE_EXEC_STACK): Define to 1. + + 2025-05-01 Alex Coplan + + Backported from master: + 2025-03-12 Alex Coplan + + PR rtl-optimization/116564 + * df-problems.cc (df_simulate_defs): For partial defs, mark the + register live (treat it as a RMW operation). + + 2025-04-30 Martin Jambor + + Backported from master: + 2025-04-07 Martin Jambor + + PR tree-optimization/118924 + * tree-sra.cc (create_total_scalarization_access): Set + grp_same_access_path flag to zero. + + 2025-04-30 Georg-Johann Lay + + Backported from master: + 2025-04-30 Georg-Johann Lay + + * config/avr/avr.md (xload__libgcc): Clobber R21, Z. + + 2025-04-29 Stefan Schulze Frielinghaus + + Backported from master: + 2025-03-21 Stefan Schulze Frielinghaus + + PR target/119235 + * config/s390/s390.cc (s390_hard_regno_mode_ok): Accept only + Pmode for registers AP/FP/RA. + + 2025-04-25 Richard Sandiford + + Backported from master: + 2025-04-10 Richard Sandiford + + PR tree-optimization/119399 + * tree-data-ref.cc (create_waw_or_war_checks): Use a MINUS_EXPR + on two converted pointers, rather than converting a POINTER_DIFF_EXPR + on the pointers. + + 2025-04-25 Richard Sandiford + + Backported from master: + 2025-03-07 Richard Sandiford + + PR tree-optimization/116125 + * tree-vect-data-refs.cc (vect_prune_runtime_alias_test_list): Make + the dr_with_seg_len alignment fields describe tha access sizes as + well as the pointer alignment. + * tree-data-ref.cc (create_intersect_range_checks): Don't compensate + for invalid alignment fields here. + + 2025-04-16 Andrew Pinski + + Backported from master: + 2024-08-20 Andrew Pinski + + PR tree-optimization/116412 + * gimple-match-head.cc (gimple_extract): Return false if op0 + was not a SSA name nor a min invariant for REALPART_EXPR/IMAGPART_EXPR/VCE + and BIT_FIELD_REF. + + 2025-04-16 Andrew Pinski + + Backported from master: + 2025-03-09 Andrew Pinski + + PR tree-optimization/118922 + * tree-ssa-phiopt.cc (value_replacement): Set empty_or_with_defined_p + to false when there is phi nodes for the middle bb. + + 2025-04-16 Andrew Pinski + + Backported from master: + 2024-10-28 Andrew Pinski + + PR middle-end/111285 + * tree-vect-generic.cc (do_unop): Use a signed type for the + operand if the operation was ABSU_EXPR. + + 2025-04-16 Andrew Pinski + + Backported from master: + 2024-10-02 Andrew Pinski + + PR tree-optimization/116922 + * gimple-ssa-backprop.cc (remove_unused_var): Handle phi + nodes correctly. + + 2025-04-16 Andrew Pinski + + Backported from master: + 2024-12-04 Andrew Pinski + + PR tree-optimization/117243 + PR tree-optimization/116749 + * tree-ssa-phiopt.cc (replace_phi_edge_with_variable): Reset loop + estimates if the cond_block was an exit to a loop. + + 2025-04-13 Richard Biener + + Backported from master: + 2025-04-09 Richard Biener + + PR rtl-optimization/119689 + PR rtl-optimization/115568 + * lra-remat.cc (create_cands): Use prev_nonnote_nondebug_insn + to check whether insn2 is directly before insn. + + 2025-04-13 Vladimir N. Makarov + + Backported from master: + 2025-02-05 Vladimir N. Makarov + + PR rtl-optimization/115568 + * lra-remat.cc (create_cands): Check that output reload insn is + adjacent to given insn. Update a comment. + + 2025-04-04 Richard Biener + + Backported from master: + 2024-03-06 Richard Biener + + PR tree-optimization/114246 + * tree-ssa-dse.cc (increment_start_addr): Strip useless + type conversions from the adjusted address. + + 2025-04-04 Richard Biener + + Backported from master: + 2024-07-18 Richard Biener + + PR middle-end/115641 + * fold-const.cc (decode_field_reference): If the inner + reference isn't something we can take the address of, fail. + + 2025-04-04 Richard Biener + + Backported from master: + 2024-10-13 Richard Biener + + PR tree-optimization/116481 + * pointer-query.cc (build_printable_array_type): + Build an array types with function or method element type + manually to avoid bogus diagnostic. + + 2025-04-04 Richard Biener + + Backported from master: + 2024-09-30 Richard Biener + + PR tree-optimization/116850 + * gimple-ssa-isolate-paths.cc (bb_split_points): New global. + (insert_trap): Delay BB splitting if post-doms are computed. + (find_explicit_erroneous_behavior): Process delayed BB + splitting after releasing post dominators. + (gimple_ssa_isolate_erroneous_paths): Do not free post-dom + info here. + + 2025-04-04 Richard Biener + + Backported from master: + 2025-01-13 Richard Biener + Stefan Schulze Frielinghaus + + PR tree-optimization/117119 + * tree-data-ref.cc (initialize_matrix_A): Check whether + an INTEGER_CST fits in HWI, otherwise return chrec_dont_know. + + 2025-04-04 Richard Biener + + Backported from master: + 2024-11-20 Richard Biener + + PR tree-optimization/117574 + * tree-ssa-loop-niter.cc (number_of_iterations_lt_to_ne): + Use the obvious may_be_zero condition. + + 2025-04-04 Richard Biener + + Backported from master: + 2024-12-10 Richard Biener + + PR tree-optimization/117912 + * tree-ssa-sccvn.cc (copy_reference_ops_from_ref): For addresses + of zero-sized components do not set ->off if the object size pass + didn't run. + For OOB ARRAY_REF accesses in address expressions avoid setting + ->off if the object size pass didn't run. + (valueize_refs_1): Likewise. + + 2025-04-04 Richard Biener + + Backported from master: + 2025-02-03 Richard Biener + + PR tree-optimization/118717 + * tree-ssa-phiopt.cc (cond_if_else_store_replacement_1): + Do not common stores referencing abnormal SSA names. + * tree-ssa-sink.cc (sink_common_stores_to_bb): Likewise. + + 2025-04-01 Andrew Carlotti + + PR target/119372 + * config/aarch64/aarch64.cc + (aarch64_expand_epilogue): Use TARGET_PAUTH. + * config/aarch64/aarch64.md: Update comment. + (cherry-picked from commit 20385cb92cbd4a1934661ab97a162c1e25935836) + + 2025-03-11 Richard Sandiford + + Backported from master: + 2025-03-04 Richard Sandiford + + PR tree-optimization/118976 + * fold-const.cc (const_unop): Use ~ rather than - for BIT_NOT_EXPR. + * config/aarch64/aarch64.cc (aarch64_test_sve_folding): New function. + (aarch64_run_selftests): Run it. + + 2025-03-11 Richard Sandiford + + Backported from master: + 2024-10-14 Richard Sandiford + + PR target/116999 + PR target/117045 + * config/aarch64/aarch64-sve-builtins-base.cc + (svwhilelx_impl::fold): Check for WHILELTs of the minimum value + and WHILELEs of the maximum value. Fold them to all-false and + all-true respectively. + + 2025-03-11 Richard Sandiford + + Backported from master: + 2024-08-21 Richard Sandiford + + PR testsuite/116238 + * config/aarch64/aarch64.cc (aarch64_hard_regno_caller_save_mode): + Only return SImode if we can convert to and from it. + + 2025-03-07 Christophe Lyon + + Backported from master: + 2025-03-07 Christophe Lyon + + PR target/115485 + * config/arm/arm.cc (require_pic_register): Fix typos in + comment. Handle fixed arm_pic_register. + + 2025-03-05 Uros Bizjak + + Backported from master: + 2025-03-03 Uros Bizjak + + PR rtl-optimization/118739 + * combine.cc (distribute_notes) : Correct the + logic when the register is used by I3. + + 2025-02-26 Stefan Schulze Frielinghaus + + Backported from master: + 2025-02-13 Stefan Schulze Frielinghaus + + PR target/118835 + * config/s390/s390.cc (s390_valid_shift_count): Reject shift + count operands which do not trivially fit the scheme of + address operands. + + 2025-02-11 H.J. Lu + + Backported from master: + 2025-02-11 H.J. Lu + + PR target/118825 + * config/i386/i386.h (ASM_OUTPUT_SYMBOL_REF): Replace x with + SYM. + + 2025-02-04 Lewis Hyatt + + PR middle-end/115913 + * optc-save-gen.awk (cl_optimization_compare): Skip options with + CL_WARNING flag. + + 2025-01-24 Peter Bergner + + Backported from master: + 2025-01-16 Peter Bergner + + * config/rs6000/rs6000-builtin.cc (rs6000_expand_builtin): Return + const0_rtx when there is an error. + + 2025-01-24 Peter Bergner + + Backported from master: + 2025-01-16 Peter Bergner + + * config/rs6000/rs6000-builtin.cc (rs6000_expand_builtin): Use correct + array size for the loop limit. + * config/rs6000/rs6000-builtins.def: Fix field size for PMASK operand. + + 2025-01-23 John David Anglin + + * config/pa/pa32-regs.h (ADDITIONAL_REGISTER_NAMES): Change + register 86 name to "%fr31L". + + 2025-01-21 Jan Hubicka + + Backported from master: + 2024-09-03 Jan Hubicka + + * config/i386/x86-tune.def (X86_TUNE_USE_GATHER_2PARTS): Disable for + ZNVER5. + (X86_TUNE_USE_SCATTER_2PARTS): Disable for ZNVER5. + (X86_TUNE_USE_GATHER_4PARTS): Disable for ZNVER5. + (X86_TUNE_USE_SCATTER_4PARTS): Disable for ZNVER5. + (X86_TUNE_USE_GATHER_8PARTS): Disable for ZNVER5. + (X86_TUNE_USE_SCATTER_8PARTS): Disable for ZNVER5. + + 2025-01-20 Uros Bizjak + + PR target/118067 + * config/i386/i386.md (*movdi_internal): + Disable alternatives from/to mask registers without AVX512BW. + (*movsi_internal): Ditto. + + 2025-01-17 Eugene Rozenfeld + + Backported from master: + 2025-01-16 Eugene Rozenfeld + + PR gcov-profile/116743 + * auto-profile.cc (afdo_annotate_cfg): Fix mismatch between the call graph node count + and the entry block count. + + 2025-01-17 Richard Biener + + Backported from master: + 2024-11-12 Richard Biener + + PR tree-optimization/117417 + * tree-ssa-forwprop.cc (pass_forwprop::execute): Avoid + decomposing BIT_FIELD_REF complex load. + + 2025-01-17 Richard Biener + + Backported from master: + 2024-10-28 Richard Biener + + PR tree-optimization/117307 + * tree-vect-data-refs.cc (vect_analyze_data_ref_accesses): + Properly compute STMT_VINFO_SLP_VECT_ONLY. Set it on all + parts of a split group. + + 2025-01-17 Richard Biener + + Backported from master: + 2024-10-22 Richard Biener + + PR tree-optimization/117254 + * gimple-ssa-warn-access.cc (maybe_warn_nonstring_arg): + Check the array domain max is constant before using it. + + 2025-01-17 Richard Biener + + Backported from master: + 2024-10-12 Richard Biener + + PR tree-optimization/117104 + * match.pd ((cmp:c (minmax:c @0 @1) @0) -> (out @0 @1)): Properly + guard the vector case. + + 2025-01-17 Jakub Jelinek + + Backported from master: + 2024-10-15 Jakub Jelinek + + PR middle-end/116891 + * match.pd ((negate (fmas@3 @0 @1 @2)) -> (IFN_FNMS @0 @1 @2)): + Only enable for !HONOR_SIGN_DEPENDENT_ROUNDING. + ((negate (IFN_FMS@3 @0 @1 @2)) -> (IFN_FNMA @0 @1 @2)): Likewise. + ((negate (IFN_FNMA@3 @0 @1 @2)) -> (IFN_FMS @0 @1 @2)): Likewise. + + 2025-01-17 Richard Biener + + Backported from master: + 2024-10-14 Richard Biener + + PR middle-end/116891 + * match.pd ((negate (IFN_FNMS@3 @0 @1 @2)) -> (IFN_FMA @0 @1 @2)): + Only enable for !HONOR_SIGN_DEPENDENT_ROUNDING. + + 2025-01-17 Richard Biener + + Backported from master: + 2024-09-19 Richard Biener + + PR tree-optimization/116768 + * tree-data-ref.cc (build_classic_dist_vector_1): Revert + PR101009 change. + * tree-chrec.cc (eq_evolutions_p): Make sure (sizetype)1 + and (int)1 compare equal. + + 2025-01-17 Richard Biener + + Backported from master: + 2024-10-14 Richard Biener + + PR tree-optimization/116290 + * tree-loop-distribution.cc (determine_reduction_stmt_1): PHIs + have no debug variants. Start with first non-debug real stmt. + * tree-ssa-loop-ivopts.cc (find_givs_in_bb): Do not analyze + debug stmts. + + 2025-01-17 Richard Biener + + Backported from master: + 2023-01-09 Richard Biener + + PR middle-end/69482 + * cfgexpand.cc (discover_nonconstant_array_refs_r): Volatile + qualified accesses also force objects to memory. + + 2025-01-14 Jan Hubicka + + Backported from master: + 2024-09-04 Jan Hubicka + + * config/i386/x86-tune-costs.h (znver5_cost): Update instruction + costs. + + 2025-01-10 Richard Biener + + Backported from master: + 2024-07-24 Richard Biener + + PR tree-optimization/116057 + * tree-ssa-ccp.cc (likely_value): Also walk CTORs in stmt + operands to look for constants. + + 2025-01-10 Richard Biener + + Backported from master: + 2024-06-27 Richard Biener + + PR tree-optimization/115669 + * tree-vect-slp.cc (vect_build_slp_tree_2): Do not reassociate + chains that participate in a reduction. + + 2025-01-10 Richard Biener + + Backported from master: + 2024-06-26 Richard Biener + + PR tree-optimization/115646 + * tree-call-cdce.cc (check_pow): Check for bit_sz values + as allowed by transform. + + 2025-01-10 Sam James + + * doc/cpp.texi (Common Predefined Macros): Fix syntax. + + 2025-01-07 Jan Hubicka + + Backported from master: + 2024-09-03 Jan Hubicka + + * config/i386/i386.cc (ix86_reassociation_width): Update for Znver5. + * config/i386/x86-tune-costs.h (znver5_costs): Update reassociation + widths. + + 2025-01-07 Jan Hubicka + + Backported from master: + 2024-09-03 Jan Hubicka + + * config/i386/i386.h (TARGET_FUSE_MOV_AND_ALU): New tune. + * config/i386/x86-tune-sched.cc (ix86_issue_rate): Updat for znver5. + (ix86_adjust_cost): Add TODO about znver5 memory latency. + (ix86_fuse_mov_alu_p): New. + (ix86_macro_fusion_pair_p): Use it. + * config/i386/x86-tune.def (X86_TUNE_FUSE_ALU_AND_BRANCH): Add ZNVER5. + (X86_TUNE_FUSE_MOV_AND_ALU): New tune; + + 2024-12-05 Georg-Johann Lay + + Backported from master: + 2024-12-05 Georg-Johann Lay + + PR target/64242 + * config/avr/avr.md (nonlocal_goto): Don't restore + hard_frame_pointer_rtx directly, but copy it to local + register, and only set hard_frame_pointer_rtx from it + after emit_stack_restore(). + + 2024-12-02 Andre Vieira + + Backported from master: + 2024-12-02 Andre Vieira + + * config/arm/arm_mve.h: Add Runtime Library Exception. + * config/arm/arm_mve_types.h: Likewise. + + 2024-11-27 Martin Jambor + + Backported from master: + 2024-11-15 Martin Jambor + + PR tree-optimization/117142 + * tree-sra.cc (scan_function): Disqualify any candidate passed to + a function returning twice. + + 2024-11-26 liuhongt + + Backported from master: + 2024-11-25 liuhongt + + PR target/117562 + * config/i386/sse.md (vec_unpacks_hi_v4sf): Initialize + operands[2] with CONST0_RTX. + + 2024-11-23 Georg-Johann Lay + + Backported from master: + 2024-11-23 Georg-Johann Lay + + PR target/117744 + * config/avr/avr.cc (out_movqi_r_mr): Fix code when a load + only partially clobbers an address register due to + changing the address register temporally to accommodate for + faked addressing modes. + + 2024-11-19 Uros Bizjak + + Backported from master: + 2024-11-18 Uros Bizjak + + PR target/117357 + * config/i386/i386.md (*rsqrtsf2_sse): + Also enable for !TARGET_SSE_MATH. + + 2024-11-18 Georg-Johann Lay + + Backported from master: + 2024-11-18 Georg-Johann Lay + + PR target/117659 + * config/avr/avr.cc (avr_out_ashlpsi3) [case 16]: Use %A1 as + input (instead of bogus %A0). + + 2024-11-13 John David Anglin + + PR target/117525 + * config/pa/pa.md (fix_truncsfsi2): Remove inner `fix:SF`. + (fix_truncdfsi2, fix_truncsfdi2, fix_truncdfdi2, + fixuns_truncsfsi2, fixuns_truncdfsi2, fixuns_truncsfdi2, + fixuns_truncdfdi2): Likewise. + + 2024-11-13 Hu, Lin1 + + Backported from master: + 2024-11-13 Hu, Lin1 + + PR target/117418 + * config/i386/i386-expand.cc (ix86_expand_builtin): Convert + pointer's mode according to Pmode. + + 2024-11-12 John David Anglin + + * config/pa/pa.md (decrement_and_branch_until_zero): Fix + constraint. + + 2024-11-04 Andrew MacLeod + + PR tree-optimization/117398 + * gimple-range-edge.cc (gimple_outgoing_range::calc_switch_ranges): + Check for VARYING and don't call invert () on it. + + 2024-10-30 liuhongt + + Backported from master: + 2024-10-30 liuhongt + + PR target/117318 + * config/i386/sse.md (*avx512vl_v2div2qi2_mask_store_1): + Rename to .. + (avx512vl_v2div2qi2_mask_store_1): .. this. + (avx512vl_v2div2qi2_mask_store_2): Change to + define_expand. + (*avx512vl_v4qi2_mask_store_1): Rename to .. + (avx512vl_v4qi2_mask_store_1): .. this. + (avx512vl_v4qi2_mask_store_2): Change to + define_expand. + (*avx512vl_v8qi2_mask_store_1): Rename to .. + (avx512vl_v8qi2_mask_store_1): .. this. + (avx512vl_v8qi2_mask_store_2): Change to + define_expand. + (*avx512vl_v4hi2_mask_store_1): Rename to .. + (avx512vl_v4hi2_mask_store_1): .. this. + (avx512vl_v4hi2_mask_store_2): Change to + define_expand. + (*avx512vl_v2div2hi2_mask_store_1): Rename to .. + (avx512vl_v2div2hi2_mask_store_1): .. this. + (avx512vl_v2div2hi2_mask_store_2): Change to + define_expand. + (*avx512vl_v2div2si2_mask_store_1): Rename to .. + (avx512vl_v2div2si2_mask_store_1): .. this. + (avx512vl_v2div2si2_mask_store_2): Change to + define_expand. + (*avx512f_v8div16qi2_mask_store_1): Rename to .. + (avx512f_v8div16qi2_mask_store_1): .. this. + (avx512f_v8div16qi2_mask_store_2): Change to + define_expand. + + 2024-10-29 Eric Botcazou + + PR rtl-optimization/117327 + * reorg.cc (find_end_label): Do not return a dangling label at the + end of the function and adjust commentary. + + 2024-10-29 Peter Bergner + + Backported from master: + 2024-08-23 Peter Bergner + + PR target/116415 + * config/rs6000/rs6000.h (TI_OR_PTI_MODE): New define. + * config/rs6000/rs6000-p8swap.cc (rs6000_analyze_swaps): Use it to + handle PTImode identically to TImode. + + 2024-10-24 liuhongt + + Backported from master: + 2024-10-23 liuhongt + + PR target/117240 + * config/i386/i386-builtin.def: Add avx/avx512f to vaes + ymm/zmm builtins. + + 2024-10-21 Jeevitha + + Backported from master: + 2024-10-21 Jeevitha + + * config/rs6000/amo.h (enum _AMO_LD): Correct the function code for + _AMO_LD_DEC_BOUNDED. + + 2024-10-21 liuhongt + + Backported from master: + 2024-10-21 liuhongt + + PR target/117159 + * config/i386/sse.md + (*_cmp3_zero_extend): + Change from define_insn_and_split to define_insn. + (*_cmp3_zero_extend): + Ditto. + (*_ucmp3_zero_extend): + Ditto. + (*_ucmp3_zero_extend): + Ditto. + (*_cmp3_zero_extend_2): + Split to the zero_extend pattern. + (*_cmp3_zero_extend_2): + Ditto. + (*_ucmp3_zero_extend_2): + Ditto. + (*_ucmp3_zero_extend_2): + Ditto. + + 2024-10-16 Uros Bizjak + + Backported from master: + 2024-10-15 Uros Bizjak + + PR target/117116 + * config/i386/i386-expand.cc (expand_vector_set): Force "val" + into a register before VEC_MERGE/VEC_DUPLICATE RTX is generated + if it doesn't satisfy nonimmediate_operand predicate. + + 2024-10-14 Jan Hubicka + + Backported from master: + 2024-07-22 Jan Hubicka + + PR ipa/111613 + * ipa-modref.cc (analyze_parms): Do not preserve EAF_NO_DIRECT_READ and + EAF_NO_INDIRECT_READ from past flags. + + 2024-10-14 Jan Hubicka + + Backported from master: + 2024-07-22 Jan Hubicka + + PR ipa/109985 + * ipa-modref.cc (modref_summary::useful_p): Fix handling of ECF_NOVOPS. + (modref_access_analysis::process_fnspec): Likevise. + (modref_access_analysis::analyze_call): Likevise. + (propagate_unknown_call): Likevise. + (modref_propagate_in_scc): Likevise. + (modref_propagate_flags_in_scc): Likewise. + (ipa_merge_modref_summary_after_inlining): Likewise. + + 2024-10-14 Jan Hubicka + + Backported from master: + 2024-05-16 Jan Hubicka + + PR ipa/113787 + * ipa-fnsummary.cc (points_to_local_or_readonly_memory_p): Do not + look into TARGET_MEM_REFS with constant opreand 0. + + 2024-10-14 Jan Hubicka + + Backported from master: + 2024-07-22 Jan Hubicka + + PR ipa/115033 + * ipa-modref.cc (modref_eaf_analysis::analyze_ssa_name): Fix checking of + EAF flags when analysing values dereferenced as function parameters. + + 2024-10-14 Jan Hubicka + + Backported from master: + 2024-07-22 Jan Hubicka + + PR ipa/114207 + * ipa-prop.cc (unadjusted_ptr_and_unit_offset): Fix accounting of offsets in ADDR_EXPR. + + 2024-10-14 Aldy Hernandez + + Backported from master: + 2023-05-23 Aldy Hernandez + + PR tree-optimization/109934 + * value-range.cc (irange::invert): Remove buggy special case. + + 2024-10-05 John David Anglin + + * config/pa/pa.md: Fix indirect_got constraint. + + 2024-10-04 H.J. Lu + + Backported from master: + 2024-10-04 H.J. Lu + + PR target/116962 + * config/i386/i386.cc (ix86_stack_protect_runtime_enabled_p): New + function. + (TARGET_STACK_PROTECT_RUNTIME_ENABLED_P): New. + + 2024-10-02 Richard Biener + + Backported from master: + 2024-09-18 Richard Biener + + PR tree-optimization/116585 + * tree-data-ref.cc (split_constant_offset_1): When either + operand is subject to abnormal coalescing do no further + processing. + + 2024-09-30 Jan Hubicka + + Backported from master: + 2024-09-03 Jan Hubicka + + * config/i386/x86-tune.def (X86_TUNE_AVOID_128FMA_CHAINS): Enable for + znver5. + (X86_TUNE_AVOID_256FMA_CHAINS): Likewise. + (X86_TUNE_AVOID_512FMA_CHAINS): Likewise. + + 2024-09-28 Richard Biener + + Backported from master: + 2024-07-16 Richard Biener + + * config/i386/x86-tune-costs.h (znver5_cost): Update unaligned + load and store cost from the aligned costs. + + 2024-09-28 Jan Hubicka + + Backported from master: + 2024-03-18 Jan Hubicka + Karthiban Anbazhagan + + * common/config/i386/cpuinfo.h (get_amd_cpu): Recognize znver5. + * common/config/i386/i386-common.cc (processor_names): Add znver5. + (processor_alias_table): Likewise. + * common/config/i386/i386-cpuinfo.h (processor_types): Add new zen + family. + (processor_subtypes): Add znver5. + * config.gcc (x86_64-*-* |...): Likewise. + * config/i386/driver-i386.cc (host_detect_local_cpu): Let + march=native detect znver5 cpu's. + * config/i386/i386-c.cc (ix86_target_macros_internal): Add + znver5. + * config/i386/i386-options.cc (m_ZNVER5): New definition + (processor_cost_table): Add znver5. + * config/i386/i386.cc (ix86_reassociation_width): Likewise. + * config/i386/i386.h (processor_type): Add PROCESSOR_ZNVER5 + (PTA_ZNVER5): New definition. + * config/i386/i386.md (define_attr "cpu"): Add znver5. + (Scheduling descriptions) Add znver5.md. + * config/i386/x86-tune-costs.h (znver5_cost): New definition. + * config/i386/x86-tune-sched.cc (ix86_issue_rate): Add znver5. + (ix86_adjust_cost): Likewise. + * config/i386/x86-tune.def (avx512_move_by_pieces): Add m_ZNVER5. + (avx512_store_by_pieces): Add m_ZNVER5. + * doc/extend.texi: Add znver5. + * doc/invoke.texi: Likewise. + * config/i386/znver4.md: Rename to zn4zn5.md; combine znver4 and znver5 Scheduler. + * config/i386/zn4zn5.md: New file. + + 2024-09-28 H.J. Lu + + Backported from master: + 2024-09-25 H.J. Lu + + PR target/116839 + * config/i386/i386.cc (ix86_rewrite_tls_address_1): Make it + static. Return if TLS address is thread register plus an integer + register. + + 2024-09-27 Stefan Schulze Frielinghaus + + Backported from master: + 2024-09-13 Stefan Schulze Frielinghaus + + PR target/115860 + * config/s390/s390.cc (print_operand): Remove operand specifier + %V. + * config/s390/s390.md (UNSPEC_TF_TO_FPRX2): New. + * config/s390/vector.md (*tf_to_fprx2_0): Remove. + (*tf_to_fprx2_1): Remove. + (tf_to_fprx2): New. + + 2024-09-27 Stefan Schulze Frielinghaus + + Backported from master: + 2024-09-13 Stefan Schulze Frielinghaus + + * config/s390/s390.cc (s390_mem_constraint): Check displacement + for AQ and AR constraints. + + 2024-09-20 Eric Botcazou + + * ipa-modref.cc (modref_eaf_analysis::analyze_ssa_name): Always + process both the load and the store of a memory copy operation. + + 2024-09-20 Stefan Schulze Frielinghaus + + Backported from master: + 2024-09-12 Stefan Schulze Frielinghaus + + * config/s390/s390-protos.h (s390_gen_lowpart_subreg): Remove. + * config/s390/s390.cc (s390_gen_lowpart_subreg): Remove. + (s390_expand_insv): Use adjust_address() and emit a + strict_low_part only in case of a natural subreg. + * config/s390/s390.md: Use gen_lowpart() instead of + s390_gen_lowpart_subreg(). + + 2024-09-19 Haochen Jiang + + * doc/invoke.texi: Add corei7, corei7-avx, core-avx-i, + core-avx2, atom, and slm. Reorder the -march documentation by + splitting them into date-to-now products, P-core, E-core and + Xeon Phi. Refine the product names in documentation. + + 2024-09-15 H.J. Lu + + Backported from master: + 2024-09-08 H.J. Lu + + PR target/116621 + * config/i386/i386.cc (ix86_gimplify_va_arg): Don't use temp for + a PARALLEL BLKmode container of an EXPR_LIST expression in a + TImode register. + + 2024-09-05 H.J. Lu + + Backported from master: + 2024-09-03 H.J. Lu + + PR ipa/116410 + * ipa-modref.cc (analyze_parms): Always analyze function parameter + for LTO. + + 2024-09-03 Haochen Jiang + + * config/i386/avx512fp16intrin.h + (_mm512_mask_fpclass_ph_mask): Correct mask type to __mmask32. + (_mm512_fpclass_ph_mask): Ditto. + + 2024-09-02 liuhongt + + Backported from master: + 2024-08-30 liuhongt + + PR target/116512 + * config/i386/i386.cc (ix86_check_avx_upper_register): Iterate + subrtx to scan for avx upper register. + (ix86_check_avx_upper_stores): Inline old + ix86_check_avx_upper_register. + (ix86_avx_u128_mode_needed): Ditto, and replace + FOR_EACH_SUBRTX with call to new + ix86_check_avx_upper_register. + + 2024-08-22 liuhongt + + Backported from master: + 2024-08-22 liuhongt + + * config/i386/i386-options.cc (ix86_option_override_internal): + set ix86_{move_max,store_max} to PVW_AVX256 when TARGET_AVX + instead of PVW_AVX128. + + 2024-08-16 Richard Sandiford + + Backported from master: + 2024-04-05 Richard Sandiford + + PR target/114603 + * config/aarch64/aarch64-sve.md (@aarch64_pred_cnot): Replace + with... + (@aarch64_ptrue_cnot): ...this, requiring operand 1 to be + a ptrue. + (*cnot): Require operand 1 to be a ptrue. + * config/aarch64/aarch64-sve-builtins-base.cc (svcnot_impl::expand): + Use aarch64_ptrue_cnot for _x operations that are predicated + with a ptrue. Represent other _x operations as fully-defined _m + operations. + + 2024-08-16 Richard Sandiford + + Backported from master: + 2024-04-08 Richard Sandiford + + PR target/114607 + * config/aarch64/aarch64-sve-builtins-base.cc + (svusdot_impl::expand): Fix botched attempt to swap the operands + for svsudot. + + 2024-08-12 liuhongt + + Backported from master: + 2024-07-30 liuhongt + + PR target/116043 + * config/i386/constraints.md (Bk): Refine to + define_special_memory_constraint. + + 2024-08-06 John David Anglin + + PR target/113384 + * config/pa/pa.cc (hppa_legitimize_address): Add check to + ensure constant is an integral multiple of shift the value. + + 2024-08-06 Andrew Pinski + + Backported from master: + 2024-08-06 Andrew Pinski + + PR target/116189 + * config/sh/sh.cc (sh_recog_treg_set_expr): Don't call make_insn_raw, + make the insn with a fake uid. + + 2024-07-29 Haochen Jiang + + * config/i386/avx512dqintrin.h (_mm_reduce_round_sd): Use + _mm_setzero_pd instead of _mm_avx512_setzero_pd. + (_mm_reduce_round_ss): Use _mm_setzero_ps instead of + _mm_avx512_setzero_ps. + + 2024-07-29 Haochen Jiang + + * config/i386/avx512dqintrin.h + (_mm_mask_fpclass_ss_mask): Correct operand order. + (_mm_mask_fpclass_sd_mask): Ditto. + (_mm256_maskz_reduce_round_ss): Use __builtin_ia32_reducess_mask_round + instead of __builtin_ia32_reducesd_mask_round. + (_mm_reduce_round_sd): Use -1 as mask since it is non-mask. + (_mm_reduce_round_ss): Ditto. + * config/i386/avx512vlbwintrin.h + (_mm256_mask_alignr_epi8): Correct operand usage. + (_mm_mask_alignr_epi8): Ditto. + * config/i386/avx512vlintrin.h (_mm_mask_alignr_epi64): Ditto. + + 2024-07-24 Peter Bergner + + Backported from master: + 2024-07-17 Peter Bergner + + PR target/114759 + * config/rs6000/rs6000.cc (rs6000_option_override_internal): Disallow + CPUs and ABIs that do no support the ROP protection insns. + * config/rs6000/rs6000-logue.cc (rs6000_stack_info): Remove now + unneeded tests. + (rs6000_emit_prologue): Likewise. + Remove unneeded gcc_assert. + (rs6000_emit_epilogue): Likewise. + * config/rs6000/rs6000.md: Likewise. + + 2024-07-24 Peter Bergner + + Backported from master: + 2024-07-17 Peter Bergner + + PR target/114759 + * config/rs6000/rs6000-logue.cc (rs6000_stack_info): Use TARGET_POWER8. + (rs6000_emit_prologue): Likewise. + * config/rs6000/rs6000.md (hashchk): Likewise. + (hashst): Likewise. + Fix whitespace. + + 2024-07-24 Peter Bergner + + Backported from master: + 2024-06-17 Peter Bergner + + PR target/115389 + * config/rs6000/rs6000-logue.cc (rs6000_stack_info): Compute + rop_hash_save_offset for non-Altivec compiles. + + 2024-07-24 Peter Bergner + + Backported from master: + 2024-06-08 Peter Bergner + + * config/rs6000/rs6000-logue.cc (rs6000_stack_info): Update comment. + + 2024-07-23 Richard Biener + + Backported from master: + 2024-07-16 Richard Biener + + PR tree-optimization/115843 + * config/i386/x86-tune-costs.h (znver4_cost): Update unaligned + load and store cost from the aligned costs. + + 2024-07-22 Maciej W. Rozycki + + Backported from master: + 2024-06-29 Maciej W. Rozycki + + PR rtl-optimization/115565 + * cse.cc (record_jump_cond): Use INT_MIN rather than -1 for + `comparison_qty' if !REG_P. + + 2024-07-20 Siddhesh Poyarekar + + Backported from master: + 2024-07-20 Siddhesh Poyarekar + + * opt-suggestions.cc + (option_proposer::build_option_suggestions): Pull OPTB + definition out of the innermost loop. + + 2024-07-20 René Rebe + + Backported from master: + 2024-07-18 René Rebe + Peter Bergner + + PR target/97367 + * config/rs6000/rs6000.cc (rs6000_machine_from_flags): Do not consider + OPTION_MASK_ALTIVEC. + (emit_asm_machine): For Altivec compiles, emit a ".machine altivec". + + 2024-07-20 Stefan Schulze Frielinghaus + + * config/s390/3931.md (vlbr, vstbr, vrepi): Remove. + * config/s390/s390.md (xdee): Add FPRX2 mapping. + * config/s390/vector.md (bhfgq): Add TF mapping. + + 2024-07-19 LIU Hao + + Backported from master: + 2024-07-18 LIU Hao + + PR rtl-optimization/115049 + * varasm.cc (decl_binds_to_current_def_p): Add a check for COMDAT + declarations too, like weak ones. + + 2024-07-18 Uros Bizjak + + Backported from master: + 2024-07-17 Uros Bizjak + + PR target/115526 + * config/alpha/alpha.md (movdi_er_high_g): Add cannot_copy attribute. + (movdi_er_tlsgd): Ditto. + (movdi_er_tlsldm): Ditto. + (call_value_osf_): Ditto. + + 2024-07-16 Stefan Schulze Frielinghaus + + Backported from master: + 2024-07-12 Stefan Schulze Frielinghaus + + * config/s390/vector.md (mov): Fix output template for + movv1qi. + + 2024-07-16 Stefan Schulze Frielinghaus + + Backported from master: + 2024-07-12 Stefan Schulze Frielinghaus + + * config/s390/s390.md (*icjump_64): Allow raw CC comparisons, + i.e., any constant integer between 0 and 15 for CC comparisons. + + 2024-07-15 liuhongt + + Backported from master: + 2024-07-15 liuhongt + + PR target/115872 + * tree-ssa-ccp.cc (convert_atomic_bit_not): Remove use_stmt after use_nop_stmt is removed. + (optimize_atomic_bit_test_and): Ditto. + + 2024-07-11 Andre Vieira + + Backported from master: + 2024-07-11 Andre Vieira + + PR target/115611 + * config/arm/mve.md (mve_vec_setv2di_internal): Fix printing of input + scalar register pair when lane = 1. + + 2024-07-10 Uros Bizjak + + Backported from master: + 2024-07-10 Uros Bizjak + + PR middle-end/115836 + * expmed.cc (emit_store_flag_1): Move calculation of + scode just before its only usage site. + + 2024-07-05 Wilco Dijkstra + + Backported from master: + 2023-11-30 Wilco Dijkstra + + PR target/103100 + * config/aarch64/aarch64.md (cpymemdi): Remove pattern condition. + (setmemdi): Likewise. + * config/aarch64/aarch64.cc (aarch64_expand_cpymem): Support + strict-align. Cleanup condition for using MOPS. + (aarch64_expand_setmem): Likewise. + + 2024-07-05 Georg-Johann Lay + + Backported from master: + 2024-07-05 Georg-Johann Lay + + PR target/87376 + * config/avr/avr-dimode.md: Use "nop_general_operand" instead + of "general_operand" as predicate for all input operands. + + 2024-07-04 Kyrylo Tkachov + + Backported from master: + 2024-07-03 Kyrylo Tkachov + + PR target/115475 + * config/aarch64/aarch64-c.cc (aarch64_update_cpp_builtins): + Define __ARM_FEATURE_SVE_BF16 for TARGET_SVE_BF16. + + 2024-07-04 Kyrylo Tkachov + + Backported from master: + 2024-07-03 Kyrylo Tkachov + + PR target/115457 + * config/aarch64/aarch64-c.cc (aarch64_update_cpp_builtins): + Define __ARM_FEATURE_BF16 for TARGET_BF16_FP. + + 2024-07-03 John David Anglin + + PR target/115691 + * config/pa/pa.md: Remove incorrect xmpyu patterns. + + 2024-07-03 Georg-Johann Lay + + Backported from master: + 2024-07-03 Georg-Johann Lay + + PR target/98762 + * config/avr/avr.cc (avr_out_movqi_r_mr_reg_disp_tiny): Properly + restore the base register when it is partially clobbered. + + 2024-07-03 Kewen Lin + + Backported from master: + 2024-06-26 Kewen Lin + Xionghu Luo + + PR target/106069 + PR target/115355 + * config/rs6000/altivec.md (altivec_vmrghh_direct): Rename to ... + (altivec_vmrghh_direct_be): ... this. Add condition BYTES_BIG_ENDIAN. + (altivec_vmrghh_direct_le): New define_insn. + (altivec_vmrglh_direct): Rename to ... + (altivec_vmrglh_direct_be): ... this. Add condition BYTES_BIG_ENDIAN. + (altivec_vmrglh_direct_le): New define_insn. + (altivec_vmrghh): Adjust by calling gen_altivec_vmrghh_direct_be + for BE and gen_altivec_vmrglh_direct_le for LE. + (altivec_vmrglh): Adjust by calling gen_altivec_vmrglh_direct_be + for BE and gen_altivec_vmrghh_direct_le for LE. + (vec_widen_umult_hi_v16qi): Adjust the call to + gen_altivec_vmrghh_direct by gen_altivec_vmrghh for BE + and by gen_altivec_vmrglh for LE. + (vec_widen_smult_hi_v16qi): Likewise. + (vec_widen_umult_lo_v16qi): Adjust the call to + gen_altivec_vmrglh_direct by gen_altivec_vmrglh for BE + and by gen_altivec_vmrghh for LE. + (vec_widen_smult_lo_v16qi): Likewise. + * config/rs6000/rs6000.cc (altivec_expand_vec_perm_const): Replace + CODE_FOR_altivec_vmrghh_direct by + CODE_FOR_altivec_vmrghh_direct_be for BE and + CODE_FOR_altivec_vmrghh_direct_le for LE. And replace + CODE_FOR_altivec_vmrglh_direct by + CODE_FOR_altivec_vmrglh_direct_be for BE and + CODE_FOR_altivec_vmrglh_direct_le for LE. + + 2024-07-03 Kewen Lin + + Backported from master: + 2024-06-26 Kewen Lin + Xionghu Luo + + PR target/106069 + PR target/115355 + * config/rs6000/altivec.md (altivec_vmrghb_direct): Rename to ... + (altivec_vmrghb_direct_be): ... this. Add condition BYTES_BIG_ENDIAN. + (altivec_vmrghb_direct_le): New define_insn. + (altivec_vmrglb_direct): Rename to ... + (altivec_vmrglb_direct_be): ... this. Add condition BYTES_BIG_ENDIAN. + (altivec_vmrglb_direct_le): New define_insn. + (altivec_vmrghb): Adjust by calling gen_altivec_vmrghb_direct_be + for BE and gen_altivec_vmrglb_direct_le for LE. + (altivec_vmrglb): Adjust by calling gen_altivec_vmrglb_direct_be + for BE and gen_altivec_vmrghb_direct_le for LE. + * config/rs6000/rs6000.cc (altivec_expand_vec_perm_const): Replace + CODE_FOR_altivec_vmrghb_direct by + CODE_FOR_altivec_vmrghb_direct_be for BE and + CODE_FOR_altivec_vmrghb_direct_le for LE. And replace + CODE_FOR_altivec_vmrglb_direct by + CODE_FOR_altivec_vmrglb_direct_be for BE and + CODE_FOR_altivec_vmrglb_direct_le for LE. + + 2024-07-01 Georg-Johann Lay + + Backported from master: + 2024-07-01 Georg-Johann Lay + + PR target/88236 + PR target/115726 + * config/avr/avr.md (mov) [avr_mem_memx_p]: Expand in such a + way that the destination does not overlap with any hard register + clobbered / used by xload8qi_A resp. xload_A. + * config/avr/avr.cc (avr_out_xload): Avoid early-clobber + situation for Z by executing just one load when the output register + overlaps with Z. + + 2024-06-28 Kewen Lin + + Backported from master: + 2024-06-21 Kewen Lin + Xionghu Luo + + PR target/106069 + PR target/115355 + * config/rs6000/altivec.md (altivec_vmrghw_direct_): Rename + to ... + (altivec_vmrghw_direct__be): ... this. Add the condition + BYTES_BIG_ENDIAN. + (altivec_vmrghw_direct__le): New define_insn. + (altivec_vmrglw_direct_): Rename to ... + (altivec_vmrglw_direct__be): ... this. Add the condition + BYTES_BIG_ENDIAN. + (altivec_vmrglw_direct__le): New define_insn. + (altivec_vmrghw): Adjust by calling gen_altivec_vmrghw_direct_v4si_be + for BE and gen_altivec_vmrglw_direct_v4si_le for LE. + (altivec_vmrglw): Adjust by calling gen_altivec_vmrglw_direct_v4si_be + for BE and gen_altivec_vmrghw_direct_v4si_le for LE. + (vec_widen_umult_hi_v8hi): Adjust the call to + gen_altivec_vmrghw_direct_v4si by gen_altivec_vmrghw for BE + and by gen_altivec_vmrglw for LE. + (vec_widen_smult_hi_v8hi): Likewise. + (vec_widen_umult_lo_v8hi): Adjust the call to + gen_altivec_vmrglw_direct_v4si by gen_altivec_vmrglw for BE + and by gen_altivec_vmrghw for LE + (vec_widen_smult_lo_v8hi): Likewise. + * config/rs6000/rs6000.cc (altivec_expand_vec_perm_const): Replace + CODE_FOR_altivec_vmrghw_direct_v4si by + CODE_FOR_altivec_vmrghw_direct_v4si_be for BE and + CODE_FOR_altivec_vmrghw_direct_v4si_le for LE. And replace + CODE_FOR_altivec_vmrglw_direct_v4si by + CODE_FOR_altivec_vmrglw_direct_v4si_be for BE and + CODE_FOR_altivec_vmrglw_direct_v4si_le for LE. + * config/rs6000/vsx.md (vsx_xxmrghw_): Adjust by calling + gen_altivec_vmrghw_direct_v4si_be for BE and + gen_altivec_vmrglw_direct_v4si_le for LE. + (vsx_xxmrglw_): Adjust by calling + gen_altivec_vmrglw_direct_v4si_be for BE and + gen_altivec_vmrghw_direct_v4si_le for LE. + + 2024-06-27 Kyrylo Tkachov + + * config/aarch64/aarch64-cores.def (grace): New entry. + * config/aarch64/aarch64-tune.md: Regenerate. + * doc/invoke.texi (AArch64 Options): Document the above. + + 2024-06-24 Kewen Lin + + Backported from master: + 2024-05-29 Kewen Lin + + PR target/114846 + * config/rs6000/rs6000-logue.cc (rs6000_emit_epilogue): As + EPILOGUE_TYPE_EH_RETURN would be passed as epilogue_type directly + now, adjust the relevant handlings on it. + * config/rs6000/rs6000.md (eh_return expander): Append by calling + gen_eh_return_internal and emit_barrier. + (eh_return_internal): New define_insn_and_split, call function + rs6000_emit_epilogue with epilogue type EPILOGUE_TYPE_EH_RETURN. + + 2024-06-20 Jakub Jelinek + + Backported from master: + 2024-06-17 Jakub Jelinek + + PR driver/115440 + * opts-common.cc (add_misspelling_candidates): If opt1 is non-NULL, + add a space and opt1 to the alternative suggestion text. + 2024-06-20 Release Manager * GCC 12.4.0 released. diff -Nrcpad gcc-12.4.0/gcc/DATESTAMP gcc-12.5.0-RC-20250704/gcc/DATESTAMP *** gcc-12.4.0/gcc/DATESTAMP Thu Jun 20 08:08:05 2024 --- gcc-12.5.0-RC-20250704/gcc/DATESTAMP Fri Jul 4 07:24:41 2025 *************** *** 1 **** ! 20240620 --- 1 ---- ! 20250704 diff -Nrcpad gcc-12.4.0/gcc/ada/ChangeLog gcc-12.5.0-RC-20250704/gcc/ada/ChangeLog *** gcc-12.4.0/gcc/ada/ChangeLog Thu Jun 20 08:09:01 2024 --- gcc-12.5.0-RC-20250704/gcc/ada/ChangeLog Fri Jul 4 07:24:41 2025 *************** *** 1,3 **** --- 1,88 ---- + 2025-04-30 Eric Botcazou + + PR ada/112958 + * Makefile.rtl (LIBGNAT_TARGET_PAIRS) [x86 FreeBSD]: Add specific + version of s-dorepr.adb. + * libgnat/s-dorepr__freebsd.adb: New file. + + 2025-04-04 Eric Botcazou + + * libgnat/a-ngcoar.adb (Eigensystem): Adjust notation and fix the + layout of the real symmetric matrix in the main comment. Adjust + the layout of the associated code accordingly and correctly turn + the 2Nx1 real vectors into Nx1 complex ones. + (Eigenvalues): Minor similar tweaks. + * libgnat/a-ngrear.adb (Jacobi): Minor tweaks in the main comment. + Adjust notation and corresponding parameter names of functions. + Fix call to Unit_Matrix routine. Adjust the comment describing + the various kinds of iterations to match the implementation. + + 2025-01-05 Estevan Castilho (Tevo) + + * libgnarl/s-taprop__dummy.adb: Remove use clause for + System.Parameters. + (Unlock): Remove Global_Lock formal parameter. + (Write_Lock): Likewise. + + 2025-01-05 Eric Botcazou + + PR ada/118234 + * exp_aggr.adb (Convert_To_Assignments): In the case of a + component association, call Is_Container_Aggregate on the parent's + parent. + (Expand_Array_Aggregate): Likewise. + + 2025-01-05 Eric Botcazou + + PR ada/118234 + * exp_aggr.adb (Convert_To_Assignments): Tweak comment. + (Expand_Array_Aggregate): Do not delay the expansion if the parent + node is a container aggregate. + + 2025-01-05 Marc Poulhiès + + PR ada/118234 + * exp_aggr.adb (Convert_To_Assignments): Do not mark node for + delayed expansion if parent type has the Aggregate aspect. + * sem_util.adb (Is_Container_Aggregate): Move... + * sem_util.ads (Is_Container_Aggregate): ... here and make it + public. + + 2024-12-12 Eric Botcazou + + PR ada/117996 + * libgnat/a-ngrear.adb (Jacobi): Remove default value for + Compute_Vectors formal parameter. + (Sort_Eigensystem): Add Compute_Vectors formal parameter. Do not + modify the Vectors if Compute_Vectors is False. + (Eigensystem): Pass True as Compute_Vectors to Sort_Eigensystem. + (Eigenvalues): Pass False as Compute_Vectors to Sort_Eigensystem. + + 2024-11-26 Arsen Arsenović + + Backported from master: + 2024-08-19 Arsen Arsenović + + PR ada/115917 + * gnatvsn.ads: Add note about the duplication of this value in + version.c. + * version.c (VER_LEN_MAX): Define to the same value as + Gnatvsn.Ver_Len_Max. + (gnat_version_string): Use VER_LEN_MAX as bound. + + 2024-11-04 Eric Botcazou + + * checks.adb (Selected_Length_Checks.Get_E_Length): For a + component of a record with discriminants and if the expression is + a selected component, try to build an actual subtype from its + prefix instead of from the discriminal. + + 2024-10-14 Steve Baird + + PR ada/114593 + * sem_res.adb (Valid_Conversion): Test In_Instance instead of + In_Instance_Body. + 2024-06-20 Release Manager * GCC 12.4.0 released. diff -Nrcpad gcc-12.4.0/gcc/ada/Makefile.rtl gcc-12.5.0-RC-20250704/gcc/ada/Makefile.rtl *** gcc-12.4.0/gcc/ada/Makefile.rtl Thu Jun 20 08:08:05 2024 --- gcc-12.5.0-RC-20250704/gcc/ada/Makefile.rtl Fri Jul 4 07:24:41 2025 *************** ifeq ($(strip $(filter-out %86 freebsd%, *** 1805,1810 **** --- 1805,1811 ---- $(TRASYM_DWARF_UNIX_PAIRS) \ $(ATOMICS_TARGET_PAIRS) \ $(X86_TARGET_PAIRS) \ + s-dorepr.adb True); ! Sort_Eigensystem (Values, Vectors); end Eigensystem; ----------------- --- 487,493 ---- is begin Jacobi (A, Values, Vectors, Compute_Vectors => True); ! Sort_Eigensystem (Values, Vectors, Compute_Vectors => True); end Eigensystem; ----------------- *************** package body Ada.Numerics.Generic_Real_A *** 500,506 **** Vectors : Real_Matrix (1 .. 0, 1 .. 0); begin Jacobi (A, Values, Vectors, Compute_Vectors => False); ! Sort_Eigensystem (Values, Vectors); end; end return; end Eigenvalues; --- 501,507 ---- Vectors : Real_Matrix (1 .. 0, 1 .. 0); begin Jacobi (A, Values, Vectors, Compute_Vectors => False); ! Sort_Eigensystem (Values, Vectors, Compute_Vectors => False); end; end return; end Eigenvalues; *************** package body Ada.Numerics.Generic_Real_A *** 522,536 **** (A : Real_Matrix; Values : out Real_Vector; Vectors : out Real_Matrix; ! Compute_Vectors : Boolean := True) is ! -- This subprogram uses Carl Gustav Jacob Jacobi's iterative method ! -- for computing eigenvalues and eigenvectors and is based on -- Rutishauser's implementation. -- The given real symmetric matrix is transformed iteratively to -- diagonal form through a sequence of appropriately chosen elementary ! -- orthogonal transformations, called Jacobi rotations here. -- The Jacobi method produces a systematic decrease of the sum of the -- squares of off-diagonal elements. Convergence to zero is quadratic, --- 523,537 ---- (A : Real_Matrix; Values : out Real_Vector; Vectors : out Real_Matrix; ! Compute_Vectors : Boolean) is ! -- This subprogram uses Carl Gustav Jacob Jacobi's cyclic iterative ! -- method for computing eigenvalues and eigenvectors and is based on -- Rutishauser's implementation. -- The given real symmetric matrix is transformed iteratively to -- diagonal form through a sequence of appropriately chosen elementary ! -- orthogonal transformations, called Jacobi rotations. -- The Jacobi method produces a systematic decrease of the sum of the -- squares of off-diagonal elements. Convergence to zero is quadratic, *************** package body Ada.Numerics.Generic_Real_A *** 541,581 **** -- best choice here, even though for large matrices other methods will -- be significantly more efficient in both time and space. ! -- While the eigensystem computations are absolutely foolproof for all -- real symmetric matrices, in presence of invalid values, or similar ! -- exceptional situations it might not. In such cases the results cannot ! -- be trusted and Constraint_Error is raised. -- Note: this implementation needs temporary storage for 2 * N + N**2 -- values of type Real. ! Max_Iterations : constant := 50; ! N : constant Natural := Length (A); subtype Square_Matrix is Real_Matrix (1 .. N, 1 .. N); ! -- In order to annihilate the M (Row, Col) element, the ! -- rotation parameters Cos and Sin are computed as ! -- follows: ! -- Theta = Cot (2.0 * Phi) ! -- = (Diag (Col) - Diag (Row)) / (2.0 * M (Row, Col)) ! -- Then Tan (Phi) as the smaller root (in modulus) of ! -- T**2 + 2 * T * Theta = 1 (or 0.5 / Theta, if Theta is large) ! function Compute_Tan (Theta : Real) return Real is ! (Real'Copy_Sign (1.0 / (abs Theta + Sqrt (1.0 + Theta**2)), Theta)); function Compute_Tan (P, H : Real) return Real is ! (if Is_Tiny (P, Compared_To => H) then P / H ! else Compute_Tan (Theta => H / (2.0 * P))); pragma Annotate (CodePeer, False_Positive, "divide by zero", "H, P /= 0"); function Sum_Strict_Upper (M : Square_Matrix) return Real; ! -- Return the sum of all elements in the strict upper triangle of M ---------------------- -- Sum_Strict_Upper -- --- 542,585 ---- -- best choice here, even though for large matrices other methods will -- be significantly more efficient in both time and space. ! -- While the eigensystem computation is absolutely foolproof for all -- real symmetric matrices, in presence of invalid values, or similar ! -- exceptional situations, it may not be. In such cases, the results ! -- cannot be trusted and Constraint_Error is raised. -- Note: this implementation needs temporary storage for 2 * N + N**2 -- values of type Real. ! Max_Iterations : constant := 50; ! N : constant Natural := Length (A); subtype Square_Matrix is Real_Matrix (1 .. N, 1 .. N); ! -- In order to annihilate the M (Row, Col) element, the rotation angle ! -- Theta is chosen as follows: ! -- Cot (2.0 * Theta) = (Diag (Col) - Diag (Row)) / (2.0 * M (Row, Col)) ! -- If C = Cot (2.0 * Theta), then Tan (Theta) is computed as the smaller ! -- root (in modulus) of: ! -- X**2 + 2 * C * X - 1 = 0 ! -- or else as 0.5 / C, if C is large. ! ! function Compute_Tan (C : Real) return Real is ! (Real'Copy_Sign (1.0 / (abs C + Sqrt (1.0 + C**2)), C)); function Compute_Tan (P, H : Real) return Real is ! (if Is_Tiny (P, Compared_To => H) ! then P / H ! else Compute_Tan (C => H / (2.0 * P))); pragma Annotate (CodePeer, False_Positive, "divide by zero", "H, P /= 0"); function Sum_Strict_Upper (M : Square_Matrix) return Real; ! -- Return the sum of the absolute value of all the elements in the ! -- strict upper triangle of M. ---------------------- -- Sum_Strict_Upper -- *************** package body Ada.Numerics.Generic_Real_A *** 594,604 **** return Sum; end Sum_Strict_Upper; M : Square_Matrix := A; -- Work space for solving eigensystem - Threshold : Real; - Sum : Real; Diag : Real_Vector (1 .. N); Diag_Adj : Real_Vector (1 .. N); -- The vector Diag_Adj indicates the amount of change in each value, -- while Diag tracks the value itself and Values holds the values as --- 598,610 ---- return Sum; end Sum_Strict_Upper; + -- Local variables + M : Square_Matrix := A; -- Work space for solving eigensystem Diag : Real_Vector (1 .. N); Diag_Adj : Real_Vector (1 .. N); + Sum : Real; + Threshold : Real; -- The vector Diag_Adj indicates the amount of change in each value, -- while Diag tracks the value itself and Values holds the values as *************** package body Ada.Numerics.Generic_Real_A *** 620,641 **** raise Constraint_Error with "matrix not symmetric"; end if; -- Note: Only the locally declared matrix M and vectors (Diag, Diag_Adj) -- have lower bound equal to 1. The Vectors matrix may have -- different bounds, so take care indexing elements. Assignment -- as a whole is fine as sliding is automatic in that case. ! Vectors := (if not Compute_Vectors then [1 .. 0 => [1 .. 0 => 0.0]] ! else Unit_Matrix (Vectors'Length (1), Vectors'Length (2))); ! Values := Diagonal (M); Sweep : for Iteration in 1 .. Max_Iterations loop ! -- The first three iterations, perform rotation for any non-zero ! -- element. After this, rotate only for those that are not much ! -- smaller than the average off-diagnal element. After the fifth ! -- iteration, additionally zero out off-diagonal elements that are ! -- very small compared to elements on the diagonal with the same -- column or row index. Sum := Sum_Strict_Upper (M); --- 626,649 ---- raise Constraint_Error with "matrix not symmetric"; end if; + Values := Diagonal (M); + -- Note: Only the locally declared matrix M and vectors (Diag, Diag_Adj) -- have lower bound equal to 1. The Vectors matrix may have -- different bounds, so take care indexing elements. Assignment -- as a whole is fine as sliding is automatic in that case. ! Vectors := (if Compute_Vectors ! then Unit_Matrix (N) ! else [1 .. 0 => [1 .. 0 => 0.0]]); Sweep : for Iteration in 1 .. Max_Iterations loop ! -- During the first three iterations, perform the rotation only for ! -- elements that are not much smaller than the average off-diagonal ! -- element. After this, rotate for any non-zero elements. After the ! -- fifth iteration, additionally zero out off-diagonal elements that ! -- are very small compared to elements on the diagonal with the same -- column or row index. Sum := Sum_Strict_Upper (M); *************** package body Ada.Numerics.Generic_Real_A *** 644,651 **** Threshold := (if Iteration < 4 then 0.2 * Sum / Real (N**2) else 0.0); ! -- Iterate over all off-diagonal elements, rotating any that have ! -- an absolute value that exceeds the threshold. Diag := Values; Diag_Adj := [others => 0.0]; -- Accumulates adjustments to Diag --- 652,659 ---- Threshold := (if Iteration < 4 then 0.2 * Sum / Real (N**2) else 0.0); ! -- Iterate over all off-diagonal elements, rotating any that have an ! -- absolute value that exceeds the threshold. Diag := Values; Diag_Adj := [others => 0.0]; -- Accumulates adjustments to Diag *************** package body Ada.Numerics.Generic_Real_A *** 653,663 **** for Row in 1 .. N - 1 loop for Col in Row + 1 .. N loop ! -- If, before the rotation M (Row, Col) is tiny compared to -- Diag (Row) and Diag (Col), rotation is skipped. This is -- meaningful, as it produces no larger error than would be -- produced anyhow if the rotation had been performed. ! -- Suppress this optimization in the first four sweeps, so -- that this procedure can be used for computing eigenvectors -- of perturbed diagonal matrices. --- 661,671 ---- for Row in 1 .. N - 1 loop for Col in Row + 1 .. N loop ! -- If, before the rotation, M (Row, Col) is tiny compared to -- Diag (Row) and Diag (Col), rotation is skipped. This is -- meaningful, as it produces no larger error than would be -- produced anyhow if the rotation had been performed. ! -- Suppress this optimization in the first four iterations, so -- that this procedure can be used for computing eigenvectors -- of perturbed diagonal matrices. *************** package body Ada.Numerics.Generic_Real_A *** 669,676 **** elsif abs M (Row, Col) > Threshold then Perform_Rotation : declare ! Tan : constant Real := Compute_Tan (M (Row, Col), ! Diag (Col) - Diag (Row)); Cos : constant Real := 1.0 / Sqrt (1.0 + Tan**2); Sin : constant Real := Tan * Cos; Tau : constant Real := Sin / (1.0 + Cos); --- 677,684 ---- elsif abs M (Row, Col) > Threshold then Perform_Rotation : declare ! Tan : constant Real := ! Compute_Tan (M (Row, Col), Diag (Col) - Diag (Row)); Cos : constant Real := 1.0 / Sqrt (1.0 + Tan**2); Sin : constant Real := Tan * Cos; Tau : constant Real := Sin / (1.0 + Cos); *************** package body Ada.Numerics.Generic_Real_A *** 709,715 **** Values := Values + Diag_Adj; end loop Sweep; ! -- All normal matrices with valid values should converge perfectly. if Sum /= 0.0 then raise Constraint_Error with "eigensystem solution does not converge"; --- 717,723 ---- Values := Values + Diag_Adj; end loop Sweep; ! -- All normal matrices with valid values should converge perfectly if Sum /= 0.0 then raise Constraint_Error with "eigensystem solution does not converge"; *************** package body Ada.Numerics.Generic_Real_A *** 731,738 **** ---------------------- procedure Sort_Eigensystem ! (Values : in out Real_Vector; ! Vectors : in out Real_Matrix) is procedure Swap (Left, Right : Integer); -- Swap Values (Left) with Values (Right), and also swap the --- 739,747 ---- ---------------------- procedure Sort_Eigensystem ! (Values : in out Real_Vector; ! Vectors : in out Real_Matrix; ! Compute_Vectors : Boolean) is procedure Swap (Left, Right : Integer); -- Swap Values (Left) with Values (Right), and also swap the *************** package body Ada.Numerics.Generic_Real_A *** 748,755 **** procedure Swap (Left, Right : Integer) is begin Swap (Values (Left), Values (Right)); ! Swap_Column (Vectors, Left - Values'First + Vectors'First (2), ! Right - Values'First + Vectors'First (2)); end Swap; begin --- 757,766 ---- procedure Swap (Left, Right : Integer) is begin Swap (Values (Left), Values (Right)); ! if Compute_Vectors then ! Swap_Column (Vectors, Left - Values'First + Vectors'First (2), ! Right - Values'First + Vectors'First (2)); ! end if; end Swap; begin diff -Nrcpad gcc-12.4.0/gcc/ada/libgnat/s-dorepr__freebsd.adb gcc-12.5.0-RC-20250704/gcc/ada/libgnat/s-dorepr__freebsd.adb *** gcc-12.4.0/gcc/ada/libgnat/s-dorepr__freebsd.adb Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/ada/libgnat/s-dorepr__freebsd.adb Fri Jul 4 07:24:41 2025 *************** *** 0 **** --- 1,172 ---- + ------------------------------------------------------------------------------ + -- -- + -- GNAT COMPILER COMPONENTS -- + -- -- + -- S Y S T E M . D O U B L E _ R E A L . P R O D U C T -- + -- -- + -- B o d y -- + -- -- + -- Copyright (C) 2021-2025, Free Software Foundation, Inc. -- + -- -- + -- GNAT is free software; you can redistribute it and/or modify it under -- + -- terms of the GNU General Public License as published by the Free Soft- -- + -- ware Foundation; either version 3, or (at your option) any later ver- -- + -- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- + -- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- + -- or FITNESS FOR A PARTICULAR PURPOSE. -- + -- -- + -- As a special exception under Section 7 of GPL version 3, you are granted -- + -- additional permissions described in the GCC Runtime Library Exception, -- + -- version 3.1, as published by the Free Software Foundation. -- + -- -- + -- You should have received a copy of the GNU General Public License and -- + -- a copy of the GCC Runtime Library Exception along with this program; -- + -- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -- + -- . -- + -- -- + -- GNAT was originally developed by the GNAT team at New York University. -- + -- Extensive contributions were provided by Ada Core Technologies Inc. -- + -- -- + ------------------------------------------------------------------------------ + + -- This is the x86/FreeBSD version of the separate package body + + with Interfaces; use Interfaces; + + separate (System.Double_Real) + + package body Product is + + procedure Split (N : Num; Hi : out Num; Lo : out Num); + -- Compute high part and low part of N + + ----------- + -- Split -- + ----------- + + -- We use a bit manipulation algorithm instead of Veltkamp's splitting + -- because it is faster and has the property that the magnitude of the + -- high part is never larger than that of the input number, which will + -- avoid spurious overflows in the Two_Prod algorithm. + + -- See the recent paper by Claude-Pierre Jeannerod, Jean-Michel Muller + -- and Paul Zimmermann: On various ways to split a floating-point number + -- ARITH 2018 - 25th IEEE Symposium on Computer Arithmetic, Jun 2018, + -- Amherst (MA), United States, pages 53-60. + + procedure Split (N : Num; Hi : out Num; Lo : out Num) is + X : Num; + + begin + -- Spill the input into the appropriate (maybe larger) bit container, + -- mask out the low bits and reload the modified value. + + case Num'Machine_Mantissa is + when 24 => + declare + Rep32 : aliased Interfaces.Unsigned_32; + Temp : Num := N with Address => Rep32'Address; + pragma Annotate (CodePeer, Modified, Rep32); + + begin + -- Mask out the low 12 bits + + Rep32 := Rep32 and 16#FFFFF000#; + + X := Temp; + end; + + when 53 => + declare + Rep64 : aliased array (1 .. 2) of Interfaces.Unsigned_64; + Temp : Num := N with Address => Rep64'Address; + pragma Annotate (CodePeer, Modified, Rep64); + + begin + -- Mask out the low 27 bits + + Rep64 (1) := Rep64 (1) and 16#FFFFFFFFF8000000#; + + X := Temp; + end; + + when 64 => + declare + Rep80 : aliased array (1 .. 2) of Interfaces.Unsigned_64; + Temp : Num := N with Address => Rep80'Address; + pragma Annotate (CodePeer, Modified, Rep80); + + begin + -- Mask out the low 32 bits + + if System.Default_Bit_Order = High_Order_First then + Rep80 (1) := Rep80 (1) and 16#FFFFFFFFFFFF0000#; + Rep80 (2) := Rep80 (2) and 16#0000FFFFFFFFFFFF#; + else + Rep80 (1) := Rep80 (1) and 16#FFFFFFFF00000000#; + end if; + + X := Temp; + end; + + when others => + raise Program_Error; + end case; + + -- Deal with denormalized numbers + + if X = 0.0 then + Hi := N; + Lo := 0.0; + else + Hi := X; + Lo := N - X; + end if; + end Split; + + -------------- + -- Two_Prod -- + -------------- + + function Two_Prod (A, B : Num) return Double_T is + P : constant Num := A * B; + + Ahi, Alo, Bhi, Blo, E : Num; + + begin + if Is_Infinity (P) or else Is_Zero (P) then + return (P, 0.0); + + else + Split (A, Ahi, Alo); + Split (B, Bhi, Blo); + + E := ((Ahi * Bhi - P) + Ahi * Blo + Alo * Bhi) + Alo * Blo; + + return (P, E); + end if; + end Two_Prod; + + ------------- + -- Two_Sqr -- + ------------- + + function Two_Sqr (A : Num) return Double_T is + Q : constant Num := A * A; + + Hi, Lo, E : Num; + + begin + if Is_Infinity (Q) or else Is_Zero (Q) then + return (Q, 0.0); + + else + Split (A, Hi, Lo); + + E := ((Hi * Hi - Q) + 2.0 * Hi * Lo) + Lo * Lo; + + return (Q, E); + end if; + end Two_Sqr; + + end Product; diff -Nrcpad gcc-12.4.0/gcc/ada/sem_res.adb gcc-12.5.0-RC-20250704/gcc/ada/sem_res.adb *** gcc-12.4.0/gcc/ada/sem_res.adb Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/ada/sem_res.adb Fri Jul 4 07:24:41 2025 *************** package body Sem_Res is *** 14273,14279 **** -- If it was legal in the generic, it's legal in the instance ! elsif In_Instance_Body then return True; -- If both are tagged types, check legality of view conversions --- 14273,14279 ---- -- If it was legal in the generic, it's legal in the instance ! elsif In_Instance then return True; -- If both are tagged types, check legality of view conversions diff -Nrcpad gcc-12.4.0/gcc/ada/sem_util.adb gcc-12.5.0-RC-20250704/gcc/ada/sem_util.adb *** gcc-12.4.0/gcc/ada/sem_util.adb Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/ada/sem_util.adb Fri Jul 4 07:24:41 2025 *************** package body Sem_Util is *** 130,138 **** -- Determine whether arbitrary entity Id denotes an atomic object as per -- RM C.6(7). - function Is_Container_Aggregate (Exp : Node_Id) return Boolean; - -- Is the given expression a container aggregate? - generic with function Is_Effectively_Volatile_Entity (Id : Entity_Id) return Boolean; --- 130,135 ---- diff -Nrcpad gcc-12.4.0/gcc/ada/sem_util.ads gcc-12.5.0-RC-20250704/gcc/ada/sem_util.ads *** gcc-12.4.0/gcc/ada/sem_util.ads Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/ada/sem_util.ads Fri Jul 4 07:24:41 2025 *************** package Sem_Util is *** 1531,1536 **** --- 1531,1539 ---- -- integer for use in compile-time checking. Note: Level is restricted to -- be non-dynamic. + function Is_Container_Aggregate (Exp : Node_Id) return Boolean; + -- Is the given expression a container aggregate? + function Is_Newly_Constructed (Exp : Node_Id; Context_Requires_NC : Boolean) return Boolean; -- Indicates whether a given expression is "newly constructed" (RM 4.4). diff -Nrcpad gcc-12.4.0/gcc/ada/version.c gcc-12.5.0-RC-20250704/gcc/ada/version.c *** gcc-12.4.0/gcc/ada/version.c Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/ada/version.c Fri Jul 4 07:24:41 2025 *************** *** 31,34 **** #include "version.h" ! char gnat_version_string[] = version_string; --- 31,37 ---- #include "version.h" ! /* Logically a reference to Gnatvsn.Ver_Len_Max. Please keep in sync. */ ! #define VER_LEN_MAX 256 ! ! char gnat_version_string[VER_LEN_MAX] = version_string; diff -Nrcpad gcc-12.4.0/gcc/auto-profile.cc gcc-12.5.0-RC-20250704/gcc/auto-profile.cc *** gcc-12.4.0/gcc/auto-profile.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/auto-profile.cc Fri Jul 4 07:24:41 2025 *************** afdo_annotate_cfg (const stmt_set &promo *** 1537,1544 **** if (s == NULL) return; - cgraph_node::get (current_function_decl)->count - = profile_count::from_gcov_type (s->head_count ()).afdo (); ENTRY_BLOCK_PTR_FOR_FN (cfun)->count = profile_count::from_gcov_type (s->head_count ()).afdo (); EXIT_BLOCK_PTR_FOR_FN (cfun)->count = profile_count::zero ().afdo (); --- 1537,1542 ---- *************** afdo_annotate_cfg (const stmt_set &promo *** 1577,1582 **** --- 1575,1582 ---- /* Calculate, propagate count and probability information on CFG. */ afdo_calculate_branch_prob (&annotated_bb); } + cgraph_node::get(current_function_decl)->count + = ENTRY_BLOCK_PTR_FOR_FN(cfun)->count; update_max_bb_count (); profile_status_for_fn (cfun) = PROFILE_READ; if (flag_value_profile_transformations) diff -Nrcpad gcc-12.4.0/gcc/builtins.cc gcc-12.5.0-RC-20250704/gcc/builtins.cc *** gcc-12.4.0/gcc/builtins.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/builtins.cc Fri Jul 4 07:24:41 2025 *************** fold_builtin_frexp (location_t loc, tree *** 8632,8645 **** switch (value->cl) { case rvc_zero: /* For +-0, return (*exp = 0, +-0). */ exp = integer_zero_node; frac = arg0; break; - case rvc_nan: - case rvc_inf: - /* For +-NaN or +-Inf, *exp is unspecified, return arg0. */ - return omit_one_operand_loc (loc, rettype, arg0, arg1); case rvc_normal: { /* Since the frexp function always expects base 2, and in --- 8632,8647 ---- switch (value->cl) { case rvc_zero: + case rvc_nan: + case rvc_inf: /* For +-0, return (*exp = 0, +-0). */ + /* For +-NaN or +-Inf, *exp is unspecified, but something should + be stored there so that it isn't read from uninitialized object. + As glibc and newlib store *exp = 0 for +-Inf/NaN, storing + 0 here as well is easiest. */ exp = integer_zero_node; frac = arg0; break; case rvc_normal: { /* Since the frexp function always expects base 2, and in *************** fold_builtin_interclass_mathfn (location *** 8762,8768 **** arg = fold_build1_loc (loc, NOP_EXPR, type, arg); } get_max_float (REAL_MODE_FORMAT (mode), buf, sizeof (buf), false); ! real_from_string (&r, buf); result = build_call_expr (isgr_fn, 2, fold_build1_loc (loc, ABS_EXPR, type, arg), build_real (type, r)); --- 8764,8770 ---- arg = fold_build1_loc (loc, NOP_EXPR, type, arg); } get_max_float (REAL_MODE_FORMAT (mode), buf, sizeof (buf), false); ! real_from_string3 (&r, buf, mode); result = build_call_expr (isgr_fn, 2, fold_build1_loc (loc, ABS_EXPR, type, arg), build_real (type, r)); *************** fold_builtin_interclass_mathfn (location *** 8786,8792 **** arg = fold_build1_loc (loc, NOP_EXPR, type, arg); } get_max_float (REAL_MODE_FORMAT (mode), buf, sizeof (buf), false); ! real_from_string (&r, buf); result = build_call_expr (isle_fn, 2, fold_build1_loc (loc, ABS_EXPR, type, arg), build_real (type, r)); --- 8788,8794 ---- arg = fold_build1_loc (loc, NOP_EXPR, type, arg); } get_max_float (REAL_MODE_FORMAT (mode), buf, sizeof (buf), false); ! real_from_string3 (&r, buf, mode); result = build_call_expr (isle_fn, 2, fold_build1_loc (loc, ABS_EXPR, type, arg), build_real (type, r)); *************** fold_builtin_interclass_mathfn (location *** 8825,8833 **** arg = fold_build1_loc (loc, ABS_EXPR, type, arg); get_max_float (REAL_MODE_FORMAT (mode), buf, sizeof (buf), false); ! real_from_string (&rmax, buf); ! sprintf (buf, "0x1p%d", REAL_MODE_FORMAT (orig_mode)->emin - 1); ! real_from_string (&rmin, buf); max_exp = build_real (type, rmax); min_exp = build_real (type, rmin); --- 8827,8838 ---- arg = fold_build1_loc (loc, ABS_EXPR, type, arg); get_max_float (REAL_MODE_FORMAT (mode), buf, sizeof (buf), false); ! real_from_string3 (&rmax, buf, mode); ! if (DECIMAL_FLOAT_MODE_P (mode)) ! sprintf (buf, "1E%d", REAL_MODE_FORMAT (orig_mode)->emin - 1); ! else ! sprintf (buf, "0x1p%d", REAL_MODE_FORMAT (orig_mode)->emin - 1); ! real_from_string3 (&rmin, buf, orig_mode); max_exp = build_real (type, rmax); min_exp = build_real (type, rmin); *************** fold_builtin_fpclassify (location_t loc, *** 9005,9033 **** (x == 0 ? FP_ZERO : FP_SUBNORMAL))). */ tmp = fold_build2_loc (loc, EQ_EXPR, integer_type_node, arg, ! build_real (type, dconst0)); res = fold_build3_loc (loc, COND_EXPR, integer_type_node, ! tmp, fp_zero, fp_subnormal); ! sprintf (buf, "0x1p%d", REAL_MODE_FORMAT (mode)->emin - 1); ! real_from_string (&r, buf); tmp = fold_build2_loc (loc, GE_EXPR, integer_type_node, ! arg, build_real (type, r)); ! res = fold_build3_loc (loc, COND_EXPR, integer_type_node, tmp, fp_normal, res); if (tree_expr_maybe_infinite_p (arg)) { real_inf (&r); tmp = fold_build2_loc (loc, EQ_EXPR, integer_type_node, arg, ! build_real (type, r)); res = fold_build3_loc (loc, COND_EXPR, integer_type_node, tmp, ! fp_infinite, res); } if (tree_expr_maybe_nan_p (arg)) { tmp = fold_build2_loc (loc, ORDERED_EXPR, integer_type_node, arg, arg); ! res = fold_build3_loc (loc, COND_EXPR, integer_type_node, tmp, res, fp_nan); } return res; --- 9010,9043 ---- (x == 0 ? FP_ZERO : FP_SUBNORMAL))). */ tmp = fold_build2_loc (loc, EQ_EXPR, integer_type_node, arg, ! build_real (type, dconst0)); res = fold_build3_loc (loc, COND_EXPR, integer_type_node, ! tmp, fp_zero, fp_subnormal); ! if (DECIMAL_FLOAT_MODE_P (mode)) ! sprintf (buf, "1E%d", REAL_MODE_FORMAT (mode)->emin - 1); ! else ! sprintf (buf, "0x1p%d", REAL_MODE_FORMAT (mode)->emin - 1); ! real_from_string3 (&r, buf, mode); tmp = fold_build2_loc (loc, GE_EXPR, integer_type_node, ! arg, build_real (type, r)); ! res = fold_build3_loc (loc, COND_EXPR, integer_type_node, tmp, ! fp_normal, res); if (tree_expr_maybe_infinite_p (arg)) { real_inf (&r); tmp = fold_build2_loc (loc, EQ_EXPR, integer_type_node, arg, ! build_real (type, r)); res = fold_build3_loc (loc, COND_EXPR, integer_type_node, tmp, ! fp_infinite, res); } if (tree_expr_maybe_nan_p (arg)) { tmp = fold_build2_loc (loc, ORDERED_EXPR, integer_type_node, arg, arg); ! res = fold_build3_loc (loc, COND_EXPR, integer_type_node, tmp, ! res, fp_nan); } return res; diff -Nrcpad gcc-12.4.0/gcc/c/ChangeLog gcc-12.5.0-RC-20250704/gcc/c/ChangeLog *** gcc-12.4.0/gcc/c/ChangeLog Thu Jun 20 08:09:01 2024 --- gcc-12.5.0-RC-20250704/gcc/c/ChangeLog Fri Jul 4 07:24:42 2025 *************** *** 1,3 **** --- 1,32 ---- + 2025-06-13 Jakub Jelinek + + Backported from master: + 2025-04-02 Jakub Jelinek + + PR c/119582 + * c-typeck.cc (pointer_diff, build_binary_op): Call c_fully_fold on + __sanitizer_ptr_sub or __sanitizer_ptr_cmp arguments. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2025-02-25 Jakub Jelinek + + PR c/119000 + * c-parser.cc (c_parser_omp_atomic): For omp write call + default_function_array_read_conversion on the rhs expression. + Merge the two adjacent if (code == NOP_EXPR) blocks. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2024-11-27 Jakub Jelinek + + PR c/117745 + * c-parser.cc (c_parser_sizeof_expression): If type_name is NULL, + just expr.set_error () and goto sizeof_expr instead of doing error + recovery manually. + 2024-06-20 Release Manager * GCC 12.4.0 released. diff -Nrcpad gcc-12.4.0/gcc/c/c-parser.cc gcc-12.5.0-RC-20250704/gcc/c/c-parser.cc *** gcc-12.4.0/gcc/c/c-parser.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/c/c-parser.cc Fri Jul 4 07:24:42 2025 *************** c_parser_sizeof_expression (c_parser *pa *** 8311,8323 **** finish = parser->tokens_buf[0].location; if (type_name == NULL) { ! struct c_expr ret; ! c_inhibit_evaluation_warnings--; ! in_sizeof--; ! ret.set_error (); ! ret.original_code = ERROR_MARK; ! ret.original_type = NULL; ! return ret; } if (c_parser_next_token_is (parser, CPP_OPEN_BRACE)) { --- 8311,8321 ---- finish = parser->tokens_buf[0].location; if (type_name == NULL) { ! /* Let c_expr_sizeof_expr call pop_maybe_used and fill in c_expr ! for parsing error; the parsing of the expression could have ! called record_maybe_used_decl. */ ! expr.set_error (); ! goto sizeof_expr; } if (c_parser_next_token_is (parser, CPP_OPEN_BRACE)) { *************** c_parser_omp_atomic (location_t loc, c_p *** 18322,18330 **** goto saw_error; if (code == NOP_EXPR) { ! lhs = c_parser_expression (parser).value; ! lhs = c_fully_fold (lhs, false, NULL); ! if (lhs == error_mark_node) goto saw_error; } else --- 18320,18335 ---- goto saw_error; if (code == NOP_EXPR) { ! eloc = c_parser_peek_token (parser)->location; ! expr = c_parser_expression (parser); ! expr = default_function_array_read_conversion (eloc, expr); ! /* atomic write is represented by OMP_ATOMIC with NOP_EXPR ! opcode. */ ! code = OMP_ATOMIC; ! lhs = v; ! v = NULL_TREE; ! rhs = c_fully_fold (expr.value, false, NULL); ! if (rhs == error_mark_node) goto saw_error; } else *************** c_parser_omp_atomic (location_t loc, c_p *** 18337,18351 **** if (non_lvalue_p) lhs = non_lvalue (lhs); } - if (code == NOP_EXPR) - { - /* atomic write is represented by OMP_ATOMIC with NOP_EXPR - opcode. */ - code = OMP_ATOMIC; - rhs = lhs; - lhs = v; - v = NULL_TREE; - } goto done; case OMP_ATOMIC_CAPTURE_NEW: if (c_parser_next_token_is (parser, CPP_OPEN_BRACE)) --- 18342,18347 ---- diff -Nrcpad gcc-12.4.0/gcc/c/c-typeck.cc gcc-12.5.0-RC-20250704/gcc/c/c-typeck.cc *** gcc-12.4.0/gcc/c/c-typeck.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/c/c-typeck.cc Fri Jul 4 07:24:42 2025 *************** pointer_diff (location_t loc, tree op0, *** 4021,4028 **** if (current_function_decl != NULL_TREE && sanitize_flags_p (SANITIZE_POINTER_SUBTRACT)) { ! op0 = save_expr (op0); ! op1 = save_expr (op1); tree tt = builtin_decl_explicit (BUILT_IN_ASAN_POINTER_SUBTRACT); *instrument_expr = build_call_expr_loc (loc, tt, 2, op0, op1); --- 4021,4028 ---- if (current_function_decl != NULL_TREE && sanitize_flags_p (SANITIZE_POINTER_SUBTRACT)) { ! op0 = save_expr (c_fully_fold (op0, false, NULL)); ! op1 = save_expr (c_fully_fold (op1, false, NULL)); tree tt = builtin_decl_explicit (BUILT_IN_ASAN_POINTER_SUBTRACT); *instrument_expr = build_call_expr_loc (loc, tt, 2, op0, op1); *************** build_binary_op (location_t location, en *** 12533,12540 **** && current_function_decl != NULL_TREE && sanitize_flags_p (SANITIZE_POINTER_COMPARE)) { ! op0 = save_expr (op0); ! op1 = save_expr (op1); tree tt = builtin_decl_explicit (BUILT_IN_ASAN_POINTER_COMPARE); instrument_expr = build_call_expr_loc (location, tt, 2, op0, op1); --- 12533,12540 ---- && current_function_decl != NULL_TREE && sanitize_flags_p (SANITIZE_POINTER_COMPARE)) { ! op0 = save_expr (c_fully_fold (op0, false, NULL)); ! op1 = save_expr (c_fully_fold (op1, false, NULL)); tree tt = builtin_decl_explicit (BUILT_IN_ASAN_POINTER_COMPARE); instrument_expr = build_call_expr_loc (location, tt, 2, op0, op1); diff -Nrcpad gcc-12.4.0/gcc/c-family/ChangeLog gcc-12.5.0-RC-20250704/gcc/c-family/ChangeLog *** gcc-12.4.0/gcc/c-family/ChangeLog Thu Jun 20 08:09:01 2024 --- gcc-12.5.0-RC-20250704/gcc/c-family/ChangeLog Fri Jul 4 07:24:41 2025 *************** *** 1,3 **** --- 1,32 ---- + 2025-06-13 Jakub Jelinek + + Backported from master: + 2024-11-26 Jakub Jelinek + + PR middle-end/43374 + * c-cppbuiltin.cc (builtin_define_decimal_float_constants): Use + get_max_float. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2024-10-22 Jakub Jelinek + + PR c/117230 + * c-warn.cc (sizeof_pointer_memaccess_warning): Only compare + TYPE_PRECISION of TREE_TYPE (type) to precision of char if + TREE_TYPE (type) is integral type. + + 2024-06-20 Jakub Jelinek + + Backported from master: + 2024-06-17 Jakub Jelinek + + PR c/115290 + * c-warn.cc (do_warn_array_compare): Use %E rather than %D for + printing op0 and op1; if those operands aren't decls, also print + parens around them. + 2024-06-20 Release Manager * GCC 12.4.0 released. diff -Nrcpad gcc-12.4.0/gcc/c-family/c-cppbuiltin.cc gcc-12.5.0-RC-20250704/gcc/c-family/c-cppbuiltin.cc *** gcc-12.4.0/gcc/c-family/c-cppbuiltin.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/c-family/c-cppbuiltin.cc Fri Jul 4 07:24:42 2025 *************** builtin_define_decimal_float_constants ( *** 361,377 **** /* Compute the maximum representable value. */ sprintf (name, "__%s_MAX__", name_prefix); ! p = buf; ! for (digits = fmt->p; digits; digits--) ! { ! *p++ = '9'; ! if (digits == fmt->p) ! *p++ = '.'; ! } ! *p = 0; ! /* fmt->p plus 1, to account for the decimal point and fmt->emax ! minus 1 because the digits are nines, not 1.0. */ ! sprintf (&buf[fmt->p + 1], "E%d%s", fmt->emax - 1, suffix); builtin_define_with_value (name, buf, 0); /* Compute epsilon (the difference between 1 and least value greater --- 361,368 ---- /* Compute the maximum representable value. */ sprintf (name, "__%s_MAX__", name_prefix); ! get_max_float (fmt, buf, sizeof (buf) - strlen (suffix), false); ! strcat (buf, suffix); builtin_define_with_value (name, buf, 0); /* Compute epsilon (the difference between 1 and least value greater diff -Nrcpad gcc-12.4.0/gcc/c-family/c-warn.cc gcc-12.5.0-RC-20250704/gcc/c-family/c-warn.cc *** gcc-12.4.0/gcc/c-family/c-warn.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/c-family/c-warn.cc Fri Jul 4 07:24:42 2025 *************** sizeof_pointer_memaccess_warning (locati *** 943,950 **** "argument to % in %qD call is the same " "expression as the destination; did you mean to " "remove the addressof?", callee); ! else if ((TYPE_PRECISION (TREE_TYPE (type)) ! == TYPE_PRECISION (char_type_node)) || strop) warning_at (loc, OPT_Wsizeof_pointer_memaccess, "argument to % in %qD call is the same " --- 943,951 ---- "argument to % in %qD call is the same " "expression as the destination; did you mean to " "remove the addressof?", callee); ! else if ((INTEGRAL_TYPE_P (TREE_TYPE (type)) ! && (TYPE_PRECISION (TREE_TYPE (type)) ! == TYPE_PRECISION (char_type_node))) || strop) warning_at (loc, OPT_Wsizeof_pointer_memaccess, "argument to % in %qD call is the same " *************** sizeof_pointer_memaccess_warning (locati *** 983,990 **** "argument to % in %qD call is the same " "expression as the source; did you mean to " "remove the addressof?", callee); ! else if ((TYPE_PRECISION (TREE_TYPE (type)) ! == TYPE_PRECISION (char_type_node)) || strop) warning_at (loc, OPT_Wsizeof_pointer_memaccess, "argument to % in %qD call is the same " --- 984,992 ---- "argument to % in %qD call is the same " "expression as the source; did you mean to " "remove the addressof?", callee); ! else if ((INTEGRAL_TYPE_P (TREE_TYPE (type)) ! && (TYPE_PRECISION (TREE_TYPE (type)) ! == TYPE_PRECISION (char_type_node))) || strop) warning_at (loc, OPT_Wsizeof_pointer_memaccess, "argument to % in %qD call is the same " *************** sizeof_pointer_memaccess_warning (locati *** 1023,1030 **** "argument to % in %qD call is the same " "expression as the first source; did you mean to " "remove the addressof?", callee); ! else if ((TYPE_PRECISION (TREE_TYPE (type)) ! == TYPE_PRECISION (char_type_node)) || strop) warning_at (loc, OPT_Wsizeof_pointer_memaccess, "argument to % in %qD call is the same " --- 1025,1033 ---- "argument to % in %qD call is the same " "expression as the first source; did you mean to " "remove the addressof?", callee); ! else if ((INTEGRAL_TYPE_P (TREE_TYPE (type)) ! && (TYPE_PRECISION (TREE_TYPE (type)) ! == TYPE_PRECISION (char_type_node))) || strop) warning_at (loc, OPT_Wsizeof_pointer_memaccess, "argument to % in %qD call is the same " *************** sizeof_pointer_memaccess_warning (locati *** 1063,1070 **** "argument to % in %qD call is the same " "expression as the second source; did you mean to " "remove the addressof?", callee); ! else if ((TYPE_PRECISION (TREE_TYPE (type)) ! == TYPE_PRECISION (char_type_node)) || strop) warning_at (loc, OPT_Wsizeof_pointer_memaccess, "argument to % in %qD call is the same " --- 1066,1074 ---- "argument to % in %qD call is the same " "expression as the second source; did you mean to " "remove the addressof?", callee); ! else if ((INTEGRAL_TYPE_P (TREE_TYPE (type)) ! && (TYPE_PRECISION (TREE_TYPE (type)) ! == TYPE_PRECISION (char_type_node))) || strop) warning_at (loc, OPT_Wsizeof_pointer_memaccess, "argument to % in %qD call is the same " *************** do_warn_array_compare (location_t locati *** 3806,3815 **** /* C doesn't allow +arr. */ if (c_dialect_cxx ()) inform (location, "use unary %<+%> which decays operands to pointers " ! "or %<&%D[0] %s &%D[0]%> to compare the addresses", ! op0, op_symbol_code (code), op1); else ! inform (location, "use %<&%D[0] %s &%D[0]%> to compare the addresses", ! op0, op_symbol_code (code), op1); } } --- 3810,3824 ---- /* C doesn't allow +arr. */ if (c_dialect_cxx ()) inform (location, "use unary %<+%> which decays operands to pointers " ! "or %<&%s%E%s[0] %s &%s%E%s[0]%> to compare the addresses", ! DECL_P (op0) ? "" : "(", op0, DECL_P (op0) ? "" : ")", ! op_symbol_code (code), ! DECL_P (op1) ? "" : "(", op1, DECL_P (op1) ? "" : ")"); else ! inform (location, ! "use %<&%s%E%s[0] %s &%s%E%s[0]%> to compare the addresses", ! DECL_P (op0) ? "" : "(", op0, DECL_P (op0) ? "" : ")", ! op_symbol_code (code), ! DECL_P (op1) ? "" : "(", op1, DECL_P (op1) ? "" : ")"); } } diff -Nrcpad gcc-12.4.0/gcc/cfgexpand.cc gcc-12.5.0-RC-20250704/gcc/cfgexpand.cc *** gcc-12.4.0/gcc/cfgexpand.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/cfgexpand.cc Fri Jul 4 07:24:42 2025 *************** discover_nonconstant_array_refs_r (tree *** 6311,6316 **** --- 6311,6325 ---- if (IS_TYPE_OR_DECL_P (t)) *walk_subtrees = 0; + else if (REFERENCE_CLASS_P (t) && TREE_THIS_VOLATILE (t)) + { + t = get_base_address (t); + if (t && DECL_P (t) + && DECL_MODE (t) != BLKmode + && !TREE_ADDRESSABLE (t)) + bitmap_set_bit (forced_stack_vars, DECL_UID (t)); + *walk_subtrees = 0; + } else if (TREE_CODE (t) == ARRAY_REF || TREE_CODE (t) == ARRAY_RANGE_REF) { while (((TREE_CODE (t) == ARRAY_REF || TREE_CODE (t) == ARRAY_RANGE_REF) diff -Nrcpad gcc-12.4.0/gcc/cgraph.cc gcc-12.5.0-RC-20250704/gcc/cgraph.cc *** gcc-12.4.0/gcc/cgraph.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/cgraph.cc Fri Jul 4 07:24:42 2025 *************** symbol_table::create_edge (cgraph_node * *** 892,898 **** edge->m_summary_id = -1; edges_count++; ! gcc_assert (++edges_max_uid != 0); edge->m_uid = edges_max_uid; edge->aux = NULL; edge->caller = caller; --- 892,899 ---- edge->m_summary_id = -1; edges_count++; ! ++edges_max_uid; ! gcc_assert (edges_max_uid != 0); edge->m_uid = edges_max_uid; edge->aux = NULL; edge->caller = caller; diff -Nrcpad gcc-12.4.0/gcc/combine.cc gcc-12.5.0-RC-20250704/gcc/combine.cc *** gcc-12.4.0/gcc/combine.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/combine.cc Fri Jul 4 07:24:42 2025 *************** try_combine (rtx_insn *i3, rtx_insn *i2, *** 3987,4004 **** rtx set1 = XVECEXP (newpat, 0, 1); /* Normally, it doesn't matter which of the two is done first, but ! one which uses any regs/memory set in between i2 and i3 can't ! be first. The PARALLEL might also have been pre-existing in i3, ! so we need to make sure that we won't wrongly hoist a SET to i2 ! that would conflict with a death note present in there, or would ! have its dest modified between i2 and i3. */ if (!modified_between_p (SET_SRC (set1), i2, i3) && !(REG_P (SET_DEST (set1)) && find_reg_note (i2, REG_DEAD, SET_DEST (set1))) && !(GET_CODE (SET_DEST (set1)) == SUBREG && find_reg_note (i2, REG_DEAD, SUBREG_REG (SET_DEST (set1)))) ! && !modified_between_p (SET_DEST (set1), i2, i3) /* If I3 is a jump, ensure that set0 is a jump so that we do not create invalid RTL. */ && (!JUMP_P (i3) || SET_DEST (set0) == pc_rtx) --- 3987,4005 ---- rtx set1 = XVECEXP (newpat, 0, 1); /* Normally, it doesn't matter which of the two is done first, but ! one which uses any regs/memory set or used in between i2 and i3 ! can't be first. The PARALLEL might also have been pre-existing ! in i3, so we need to make sure that we won't wrongly hoist a SET ! to i2 that would conflict with a death note present in there, or ! would have its dest modified or used between i2 and i3. */ if (!modified_between_p (SET_SRC (set1), i2, i3) && !(REG_P (SET_DEST (set1)) && find_reg_note (i2, REG_DEAD, SET_DEST (set1))) && !(GET_CODE (SET_DEST (set1)) == SUBREG && find_reg_note (i2, REG_DEAD, SUBREG_REG (SET_DEST (set1)))) ! && SET_DEST (set1) != pc_rtx ! && !reg_used_between_p (SET_DEST (set1), i2, i3) /* If I3 is a jump, ensure that set0 is a jump so that we do not create invalid RTL. */ && (!JUMP_P (i3) || SET_DEST (set0) == pc_rtx) *************** try_combine (rtx_insn *i3, rtx_insn *i2, *** 4013,4019 **** && !(GET_CODE (SET_DEST (set0)) == SUBREG && find_reg_note (i2, REG_DEAD, SUBREG_REG (SET_DEST (set0)))) ! && !modified_between_p (SET_DEST (set0), i2, i3) /* If I3 is a jump, ensure that set1 is a jump so that we do not create invalid RTL. */ && (!JUMP_P (i3) || SET_DEST (set1) == pc_rtx) --- 4014,4021 ---- && !(GET_CODE (SET_DEST (set0)) == SUBREG && find_reg_note (i2, REG_DEAD, SUBREG_REG (SET_DEST (set0)))) ! && SET_DEST (set0) != pc_rtx ! && !reg_used_between_p (SET_DEST (set0), i2, i3) /* If I3 is a jump, ensure that set1 is a jump so that we do not create invalid RTL. */ && (!JUMP_P (i3) || SET_DEST (set1) == pc_rtx) *************** distribute_notes (rtx notes, rtx_insn *f *** 14324,14337 **** /* Otherwise, if this register is used by I3, then this register now dies here, so we must put a REG_DEAD note here unless there is one already. */ ! else if (reg_referenced_p (XEXP (note, 0), PATTERN (i3)) ! && ! (REG_P (XEXP (note, 0)) ! ? find_regno_note (i3, REG_DEAD, ! REGNO (XEXP (note, 0))) ! : find_reg_note (i3, REG_DEAD, XEXP (note, 0)))) { ! PUT_REG_NOTE_KIND (note, REG_DEAD); ! place = i3; } /* A SET or CLOBBER of the REG_UNUSED reg has been removed, --- 14326,14340 ---- /* Otherwise, if this register is used by I3, then this register now dies here, so we must put a REG_DEAD note here unless there is one already. */ ! else if (reg_referenced_p (XEXP (note, 0), PATTERN (i3))) { ! if (! (REG_P (XEXP (note, 0)) ! ? find_regno_note (i3, REG_DEAD, REGNO (XEXP (note, 0))) ! : find_reg_note (i3, REG_DEAD, XEXP (note, 0)))) ! { ! PUT_REG_NOTE_KIND (note, REG_DEAD); ! place = i3; ! } } /* A SET or CLOBBER of the REG_UNUSED reg has been removed, diff -Nrcpad gcc-12.4.0/gcc/common/config/i386/cpuinfo.h gcc-12.5.0-RC-20250704/gcc/common/config/i386/cpuinfo.h *** gcc-12.4.0/gcc/common/config/i386/cpuinfo.h Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/common/config/i386/cpuinfo.h Fri Jul 4 07:24:42 2025 *************** get_amd_cpu (struct __processor_model *c *** 282,287 **** --- 282,303 ---- cpu_model->__cpu_subtype = AMDFAM19H_ZNVER3; } break; + case 0x1a: + cpu_model->__cpu_type = AMDFAM1AH; + if (model <= 0x77) + { + cpu = "znver5"; + CHECK___builtin_cpu_is ("znver5"); + cpu_model->__cpu_subtype = AMDFAM1AH_ZNVER5; + } + else if (has_cpu_feature (cpu_model, cpu_features2, + FEATURE_AVX512VP2INTERSECT)) + { + cpu = "znver5"; + CHECK___builtin_cpu_is ("znver5"); + cpu_model->__cpu_subtype = AMDFAM1AH_ZNVER5; + } + break; default: break; } diff -Nrcpad gcc-12.4.0/gcc/common/config/i386/i386-common.cc gcc-12.5.0-RC-20250704/gcc/common/config/i386/i386-common.cc *** gcc-12.4.0/gcc/common/config/i386/i386-common.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/common/config/i386/i386-common.cc Fri Jul 4 07:24:42 2025 *************** const char *const processor_names[] = *** 1831,1837 **** "znver1", "znver2", "znver3", ! "znver4" }; /* Guarantee that the array is aligned with enum processor_type. */ --- 1831,1838 ---- "znver1", "znver2", "znver3", ! "znver4", ! "znver5" }; /* Guarantee that the array is aligned with enum processor_type. */ *************** const pta processor_alias_table[] = *** 2067,2072 **** --- 2068,2076 ---- {"znver4", PROCESSOR_ZNVER4, CPU_ZNVER4, PTA_ZNVER4, M_CPU_SUBTYPE (AMDFAM19H_ZNVER4), P_PROC_AVX512F}, + {"znver5", PROCESSOR_ZNVER5, CPU_ZNVER5, + PTA_ZNVER5, + M_CPU_SUBTYPE (AMDFAM1AH_ZNVER5), P_PROC_AVX512F}, {"btver1", PROCESSOR_BTVER1, CPU_GENERIC, PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3 | PTA_SSSE3 | PTA_SSE4A | PTA_ABM | PTA_CX16 | PTA_PRFCHW diff -Nrcpad gcc-12.4.0/gcc/common/config/i386/i386-cpuinfo.h gcc-12.5.0-RC-20250704/gcc/common/config/i386/i386-cpuinfo.h *** gcc-12.4.0/gcc/common/config/i386/i386-cpuinfo.h Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/common/config/i386/i386-cpuinfo.h Fri Jul 4 07:24:42 2025 *************** enum processor_types *** 58,63 **** --- 58,64 ---- INTEL_GOLDMONT_PLUS, INTEL_TREMONT, AMDFAM19H, + AMDFAM1AH, CPU_TYPE_MAX, BUILTIN_CPU_TYPE_MAX = CPU_TYPE_MAX }; *************** enum processor_subtypes *** 92,97 **** --- 93,99 ---- AMDFAM19H_ZNVER3, INTEL_COREI7_ROCKETLAKE, AMDFAM19H_ZNVER4, + AMDFAM1AH_ZNVER5, CPU_SUBTYPE_MAX }; diff -Nrcpad gcc-12.4.0/gcc/config/aarch64/aarch64-c.cc gcc-12.5.0-RC-20250704/gcc/config/aarch64/aarch64-c.cc *** gcc-12.4.0/gcc/config/aarch64/aarch64-c.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/config/aarch64/aarch64-c.cc Fri Jul 4 07:24:42 2025 *************** aarch64_update_cpp_builtins (cpp_reader *** 200,205 **** --- 200,210 ---- "__ARM_FEATURE_BF16_VECTOR_ARITHMETIC", pfile); aarch64_def_or_undef (TARGET_BF16_FP, "__ARM_FEATURE_BF16_SCALAR_ARITHMETIC", pfile); + aarch64_def_or_undef (TARGET_BF16_FP, + "__ARM_FEATURE_BF16", pfile); + aarch64_def_or_undef (TARGET_SVE_BF16, + "__ARM_FEATURE_SVE_BF16", pfile); + aarch64_def_or_undef (TARGET_LS64, "__ARM_FEATURE_LS64", pfile); aarch64_def_or_undef (AARCH64_ISA_RCPC, "__ARM_FEATURE_RCPC", pfile); diff -Nrcpad gcc-12.4.0/gcc/config/aarch64/aarch64-cores.def gcc-12.5.0-RC-20250704/gcc/config/aarch64/aarch64-cores.def *** gcc-12.4.0/gcc/config/aarch64/aarch64-cores.def Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/config/aarch64/aarch64-cores.def Fri Jul 4 07:24:42 2025 *************** AARCH64_CORE("cobalt-100", cobalt100, *** 176,180 **** --- 176,181 ---- AARCH64_CORE("demeter", demeter, cortexa57, 9A, AARCH64_FL_FOR_ARCH9 | AARCH64_FL_I8MM | AARCH64_FL_BF16 | AARCH64_FL_SVE2_BITPERM | AARCH64_FL_RNG | AARCH64_FL_MEMTAG | AARCH64_FL_PROFILE, neoversev2, 0x41, 0xd4f, -1) AARCH64_CORE("neoverse-v2", neoversev2, cortexa57, 9A, AARCH64_FL_FOR_ARCH9 | AARCH64_FL_I8MM | AARCH64_FL_BF16 | AARCH64_FL_SVE2_BITPERM | AARCH64_FL_RNG | AARCH64_FL_MEMTAG | AARCH64_FL_PROFILE, neoversev2, 0x41, 0xd4f, -1) + AARCH64_CORE("grace", grace, cortexa57, 9A, AARCH64_FL_FOR_ARCH9 | AARCH64_FL_I8MM | AARCH64_FL_BF16 | AARCH64_FL_SVE2_BITPERM | AARCH64_FL_CRYPTO | AARCH64_FL_SHA3 | AARCH64_FL_SM4 | AARCH64_FL_SVE2_AES | AARCH64_FL_SVE2_SHA3 | AARCH64_FL_SVE2_SM4 | AARCH64_FL_PROFILE, neoversev2, 0x41, 0xd4f, -1) #undef AARCH64_CORE diff -Nrcpad gcc-12.4.0/gcc/config/aarch64/aarch64-sve-builtins-base.cc gcc-12.5.0-RC-20250704/gcc/config/aarch64/aarch64-sve-builtins-base.cc *** gcc-12.4.0/gcc/config/aarch64/aarch64-sve-builtins-base.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/config/aarch64/aarch64-sve-builtins-base.cc Fri Jul 4 07:24:42 2025 *************** public: *** 494,508 **** expand (function_expander &e) const OVERRIDE { machine_mode mode = e.vector_mode (0); ! if (e.pred == PRED_x) ! { ! /* The pattern for CNOT includes an UNSPEC_PRED_Z, so needs ! a ptrue hint. */ ! e.add_ptrue_hint (0, e.gp_mode (0)); ! return e.use_pred_x_insn (code_for_aarch64_pred_cnot (mode)); ! } ! return e.use_cond_insn (code_for_cond_cnot (mode), 0); } }; --- 494,515 ---- expand (function_expander &e) const OVERRIDE { machine_mode mode = e.vector_mode (0); ! machine_mode pred_mode = e.gp_mode (0); ! /* The underlying _x pattern is effectively: ! dst = src == 0 ? 1 : 0 ! ! rather than an UNSPEC_PRED_X. Using this form allows autovec ! constructs to be matched by combine, but it means that the ! predicate on the src == 0 comparison must be all-true. ! ! For simplicity, represent other _x operations as fully-defined _m ! operations rather than using a separate bespoke pattern. */ ! if (e.pred == PRED_x ! && gen_lowpart (pred_mode, e.args[0]) == CONSTM1_RTX (pred_mode)) ! return e.use_pred_x_insn (code_for_aarch64_ptrue_cnot (mode)); ! return e.use_cond_insn (code_for_cond_cnot (mode), ! e.pred == PRED_x ? 1 : 0); } }; *************** public: *** 2359,2365 **** version) is through the USDOT instruction but with the second and third inputs swapped. */ if (m_su) ! e.rotate_inputs_left (1, 2); /* The ACLE function has the same order requirements as for svdot. While there's no requirement for the RTL pattern to have the same sort of order as that for dot_prod, it's easier to read. --- 2366,2372 ---- version) is through the USDOT instruction but with the second and third inputs swapped. */ if (m_su) ! e.rotate_inputs_left (1, 3); /* The ACLE function has the same order requirements as for svdot. While there's no requirement for the RTL pattern to have the same sort of order as that for dot_prod, it's easier to read. *************** public: *** 2405,2411 **** : while_comparison (unspec_for_sint, unspec_for_uint), m_eq_p (eq_p) {} ! /* Try to fold a call by treating its arguments as constants of type T. */ template gimple * fold_type (gimple_folder &f) const --- 2412,2420 ---- : while_comparison (unspec_for_sint, unspec_for_uint), m_eq_p (eq_p) {} ! /* Try to fold a call by treating its arguments as constants of type T. ! We have already filtered out the degenerate cases of X .LT. MIN ! and X .LE. MAX. */ template gimple * fold_type (gimple_folder &f) const *************** public: *** 2458,2463 **** --- 2467,2479 ---- gimple * fold (gimple_folder &f) const OVERRIDE { + /* Filter out cases where the condition is always true or always false. */ + tree arg1 = gimple_call_arg (f.call, 1); + if (!m_eq_p && operand_equal_p (arg1, TYPE_MIN_VALUE (TREE_TYPE (arg1)))) + return f.fold_to_pfalse (); + if (m_eq_p && operand_equal_p (arg1, TYPE_MAX_VALUE (TREE_TYPE (arg1)))) + return f.fold_to_ptrue (); + if (f.type_suffix (1).unsigned_p) return fold_type (f); else diff -Nrcpad gcc-12.4.0/gcc/config/aarch64/aarch64-sve.md gcc-12.5.0-RC-20250704/gcc/config/aarch64/aarch64-sve.md *** gcc-12.4.0/gcc/config/aarch64/aarch64-sve.md Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/config/aarch64/aarch64-sve.md Fri Jul 4 07:24:42 2025 *************** *** 3205,3228 **** ;; - CNOT ;; ------------------------------------------------------------------------- ! ;; Predicated logical inverse. ! (define_expand "@aarch64_pred_cnot" [(set (match_operand:SVE_FULL_I 0 "register_operand") (unspec:SVE_FULL_I [(unspec: [(match_operand: 1 "register_operand") ! (match_operand:SI 2 "aarch64_sve_ptrue_flag") (eq: ! (match_operand:SVE_FULL_I 3 "register_operand") ! (match_dup 4))] UNSPEC_PRED_Z) ! (match_dup 5) ! (match_dup 4)] UNSPEC_SEL))] "TARGET_SVE" { ! operands[4] = CONST0_RTX (mode); ! operands[5] = CONST1_RTX (mode); } ) --- 3205,3228 ---- ;; - CNOT ;; ------------------------------------------------------------------------- ! ;; Logical inverse, predicated with a ptrue. ! (define_expand "@aarch64_ptrue_cnot" [(set (match_operand:SVE_FULL_I 0 "register_operand") (unspec:SVE_FULL_I [(unspec: [(match_operand: 1 "register_operand") ! (const_int SVE_KNOWN_PTRUE) (eq: ! (match_operand:SVE_FULL_I 2 "register_operand") ! (match_dup 3))] UNSPEC_PRED_Z) ! (match_dup 4) ! (match_dup 3)] UNSPEC_SEL))] "TARGET_SVE" { ! operands[3] = CONST0_RTX (mode); ! operands[4] = CONST1_RTX (mode); } ) *************** *** 3231,3237 **** (unspec:SVE_I [(unspec: [(match_operand: 1 "register_operand" "Upl, Upl") ! (match_operand:SI 5 "aarch64_sve_ptrue_flag") (eq: (match_operand:SVE_I 2 "register_operand" "0, w") (match_operand:SVE_I 3 "aarch64_simd_imm_zero"))] --- 3231,3237 ---- (unspec:SVE_I [(unspec: [(match_operand: 1 "register_operand" "Upl, Upl") ! (const_int SVE_KNOWN_PTRUE) (eq: (match_operand:SVE_I 2 "register_operand" "0, w") (match_operand:SVE_I 3 "aarch64_simd_imm_zero"))] diff -Nrcpad gcc-12.4.0/gcc/config/aarch64/aarch64-tune.md gcc-12.5.0-RC-20250704/gcc/config/aarch64/aarch64-tune.md *** gcc-12.4.0/gcc/config/aarch64/aarch64-tune.md Thu Jun 20 08:10:28 2024 --- gcc-12.5.0-RC-20250704/gcc/config/aarch64/aarch64-tune.md Fri Jul 4 07:24:47 2025 *************** *** 1,5 **** ;; -*- buffer-read-only: t -*- ;; Generated automatically by gentune.sh from aarch64-cores.def (define_attr "tune" ! "cortexa34,cortexa35,cortexa53,cortexa57,cortexa72,cortexa73,thunderx,thunderxt88p1,thunderxt88,octeontx,octeontxt81,octeontxt83,thunderxt81,thunderxt83,ampere1,ampere1a,emag,xgene1,falkor,qdf24xx,exynosm1,phecda,thunderx2t99p1,vulcan,thunderx2t99,cortexa55,cortexa75,cortexa76,cortexa76ae,cortexa77,cortexa78,cortexa78ae,cortexa78c,cortexa65,cortexa65ae,cortexx1,ares,neoversen1,neoversee1,octeontx2,octeontx2t98,octeontx2t96,octeontx2t93,octeontx2f95,octeontx2f95n,octeontx2f95mm,a64fx,tsv110,thunderx3t110,zeus,neoversev1,neoverse512tvb,saphira,cortexa57cortexa53,cortexa72cortexa53,cortexa73cortexa35,cortexa73cortexa53,cortexa75cortexa55,cortexa76cortexa55,cortexr82,cortexa510,cortexa710,cortexx2,neoversen2,cobalt100,demeter,neoversev2" (const (symbol_ref "((enum attr_tune) aarch64_tune)"))) --- 1,5 ---- ;; -*- buffer-read-only: t -*- ;; Generated automatically by gentune.sh from aarch64-cores.def (define_attr "tune" ! "cortexa34,cortexa35,cortexa53,cortexa57,cortexa72,cortexa73,thunderx,thunderxt88p1,thunderxt88,octeontx,octeontxt81,octeontxt83,thunderxt81,thunderxt83,ampere1,ampere1a,emag,xgene1,falkor,qdf24xx,exynosm1,phecda,thunderx2t99p1,vulcan,thunderx2t99,cortexa55,cortexa75,cortexa76,cortexa76ae,cortexa77,cortexa78,cortexa78ae,cortexa78c,cortexa65,cortexa65ae,cortexx1,ares,neoversen1,neoversee1,octeontx2,octeontx2t98,octeontx2t96,octeontx2t93,octeontx2f95,octeontx2f95n,octeontx2f95mm,a64fx,tsv110,thunderx3t110,zeus,neoversev1,neoverse512tvb,saphira,cortexa57cortexa53,cortexa72cortexa53,cortexa73cortexa35,cortexa73cortexa53,cortexa75cortexa55,cortexa76cortexa55,cortexr82,cortexa510,cortexa710,cortexx2,neoversen2,cobalt100,demeter,neoversev2,grace" (const (symbol_ref "((enum attr_tune) aarch64_tune)"))) diff -Nrcpad gcc-12.4.0/gcc/config/aarch64/aarch64.cc gcc-12.5.0-RC-20250704/gcc/config/aarch64/aarch64.cc *** gcc-12.4.0/gcc/config/aarch64/aarch64.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/config/aarch64/aarch64.cc Fri Jul 4 07:24:42 2025 *************** aarch64_hard_regno_caller_save_mode (uns *** 4229,4238 **** unnecessarily significant. */ if (PR_REGNUM_P (regno)) return mode; ! if (known_ge (GET_MODE_SIZE (mode), 4)) ! return mode; ! else return SImode; } /* Return true if I's bits are consecutive ones from the MSB. */ --- 4229,4239 ---- unnecessarily significant. */ if (PR_REGNUM_P (regno)) return mode; ! if (known_lt (GET_MODE_SIZE (mode), 4) ! && REG_CAN_CHANGE_MODE_P (regno, mode, SImode) ! && REG_CAN_CHANGE_MODE_P (regno, SImode, mode)) return SImode; + return mode; } /* Return true if I's bits are consecutive ones from the MSB. */ *************** aarch64_stack_clash_protection_alloca_pr *** 9391,9403 **** /* Allocate POLY_SIZE bytes of stack space using TEMP1 and TEMP2 as scratch ! registers. If POLY_SIZE is not large enough to require a probe this function ! will only adjust the stack. When allocating the stack space ! FRAME_RELATED_P is then used to indicate if the allocation is frame related. ! FINAL_ADJUSTMENT_P indicates whether we are allocating the area below ! the saved registers. If we are then we ensure that any allocation ! larger than the ABI defined buffer needs a probe so that the ! invariant of having a 1KB buffer is maintained. We emit barriers after each stack adjustment to prevent optimizations from breaking the invariant that we never drop the stack more than a page. This --- 9392,9407 ---- /* Allocate POLY_SIZE bytes of stack space using TEMP1 and TEMP2 as scratch ! registers, given that the stack pointer is currently BYTES_BELOW_SP bytes ! above the bottom of the static frame. ! ! If POLY_SIZE is not large enough to require a probe this function will only ! adjust the stack. When allocating the stack space FRAME_RELATED_P is then ! used to indicate if the allocation is frame related. FINAL_ADJUSTMENT_P ! indicates whether we are allocating the area below the saved registers. ! If we are then we ensure that any allocation larger than the ABI defined ! buffer needs a probe so that the invariant of having a 1KB buffer is ! maintained. We emit barriers after each stack adjustment to prevent optimizations from breaking the invariant that we never drop the stack more than a page. This *************** aarch64_stack_clash_protection_alloca_pr *** 9410,9415 **** --- 9414,9420 ---- static void aarch64_allocate_and_probe_stack_space (rtx temp1, rtx temp2, poly_int64 poly_size, + poly_int64 bytes_below_sp, bool frame_related_p, bool final_adjustment_p) { *************** aarch64_allocate_and_probe_stack_space ( *** 9470,9477 **** aarch64_add_offset (Pmode, temp1, CONST0_RTX (Pmode), poly_size, temp1, temp2, false, true); ! rtx_insn *insn = get_last_insn (); ! if (frame_related_p) { /* This is done to provide unwinding information for the stack --- 9475,9482 ---- aarch64_add_offset (Pmode, temp1, CONST0_RTX (Pmode), poly_size, temp1, temp2, false, true); ! auto initial_cfa_offset = frame.frame_size - bytes_below_sp; ! auto final_cfa_offset = initial_cfa_offset + poly_size; if (frame_related_p) { /* This is done to provide unwinding information for the stack *************** aarch64_allocate_and_probe_stack_space ( *** 9481,9508 **** The tie will expand to nothing but the optimizers will not touch the instruction. */ rtx stack_ptr_copy = gen_rtx_REG (Pmode, STACK_CLASH_SVE_CFA_REGNUM); ! emit_move_insn (stack_ptr_copy, stack_pointer_rtx); emit_insn (gen_stack_tie (stack_ptr_copy, stack_pointer_rtx)); /* We want the CFA independent of the stack pointer for the duration of the loop. */ ! add_reg_note (insn, REG_CFA_DEF_CFA, stack_ptr_copy); RTX_FRAME_RELATED_P (insn) = 1; } rtx probe_const = gen_int_mode (min_probe_threshold, Pmode); rtx guard_const = gen_int_mode (guard_size, Pmode); ! insn = emit_insn (gen_probe_sve_stack_clash (Pmode, stack_pointer_rtx, ! stack_pointer_rtx, temp1, ! probe_const, guard_const)); /* Now reset the CFA register if needed. */ if (frame_related_p) { add_reg_note (insn, REG_CFA_DEF_CFA, ! gen_rtx_PLUS (Pmode, stack_pointer_rtx, ! gen_int_mode (poly_size, Pmode))); RTX_FRAME_RELATED_P (insn) = 1; } --- 9486,9516 ---- The tie will expand to nothing but the optimizers will not touch the instruction. */ rtx stack_ptr_copy = gen_rtx_REG (Pmode, STACK_CLASH_SVE_CFA_REGNUM); ! auto *insn = emit_move_insn (stack_ptr_copy, stack_pointer_rtx); emit_insn (gen_stack_tie (stack_ptr_copy, stack_pointer_rtx)); /* We want the CFA independent of the stack pointer for the duration of the loop. */ ! add_reg_note (insn, REG_CFA_DEF_CFA, ! plus_constant (Pmode, stack_ptr_copy, ! initial_cfa_offset)); RTX_FRAME_RELATED_P (insn) = 1; } rtx probe_const = gen_int_mode (min_probe_threshold, Pmode); rtx guard_const = gen_int_mode (guard_size, Pmode); ! auto *insn ! = emit_insn (gen_probe_sve_stack_clash (Pmode, stack_pointer_rtx, ! stack_pointer_rtx, temp1, ! probe_const, guard_const)); /* Now reset the CFA register if needed. */ if (frame_related_p) { add_reg_note (insn, REG_CFA_DEF_CFA, ! plus_constant (Pmode, stack_pointer_rtx, ! final_cfa_offset)); RTX_FRAME_RELATED_P (insn) = 1; } *************** aarch64_allocate_and_probe_stack_space ( *** 9548,9559 **** We can determine which allocation we are doing by looking at the value of FRAME_RELATED_P since the final allocations are not frame related. */ if (frame_related_p) { /* We want the CFA independent of the stack pointer for the duration of the loop. */ add_reg_note (insn, REG_CFA_DEF_CFA, ! plus_constant (Pmode, temp1, rounded_size)); RTX_FRAME_RELATED_P (insn) = 1; } --- 9556,9568 ---- We can determine which allocation we are doing by looking at the value of FRAME_RELATED_P since the final allocations are not frame related. */ + auto cfa_offset = frame.frame_size - (bytes_below_sp - rounded_size); if (frame_related_p) { /* We want the CFA independent of the stack pointer for the duration of the loop. */ add_reg_note (insn, REG_CFA_DEF_CFA, ! plus_constant (Pmode, temp1, cfa_offset)); RTX_FRAME_RELATED_P (insn) = 1; } *************** aarch64_allocate_and_probe_stack_space ( *** 9575,9581 **** if (frame_related_p) { add_reg_note (insn, REG_CFA_DEF_CFA, ! plus_constant (Pmode, stack_pointer_rtx, rounded_size)); RTX_FRAME_RELATED_P (insn) = 1; } --- 9584,9590 ---- if (frame_related_p) { add_reg_note (insn, REG_CFA_DEF_CFA, ! plus_constant (Pmode, stack_pointer_rtx, cfa_offset)); RTX_FRAME_RELATED_P (insn) = 1; } *************** aarch64_expand_prologue (void) *** 9791,9807 **** code below does not handle it for -fstack-clash-protection. */ gcc_assert (known_eq (initial_adjust, 0) || callee_adjust == 0); /* Will only probe if the initial adjustment is larger than the guard less the amount of the guard reserved for use by the caller's outgoing args. */ aarch64_allocate_and_probe_stack_space (tmp0_rtx, tmp1_rtx, initial_adjust, ! true, false); if (callee_adjust != 0) ! aarch64_push_regs (reg1, reg2, callee_adjust); ! ! /* The offset of the current SP from the bottom of the static frame. */ ! poly_int64 bytes_below_sp = frame_size - initial_adjust - callee_adjust; if (emit_frame_chain) { --- 9800,9820 ---- code below does not handle it for -fstack-clash-protection. */ gcc_assert (known_eq (initial_adjust, 0) || callee_adjust == 0); + /* The offset of the current SP from the bottom of the static frame. */ + poly_int64 bytes_below_sp = frame_size; + /* Will only probe if the initial adjustment is larger than the guard less the amount of the guard reserved for use by the caller's outgoing args. */ aarch64_allocate_and_probe_stack_space (tmp0_rtx, tmp1_rtx, initial_adjust, ! bytes_below_sp, true, false); ! bytes_below_sp -= initial_adjust; if (callee_adjust != 0) ! { ! aarch64_push_regs (reg1, reg2, callee_adjust); ! bytes_below_sp -= callee_adjust; ! } if (emit_frame_chain) { *************** aarch64_expand_prologue (void) *** 9863,9868 **** --- 9876,9882 ---- || known_eq (initial_adjust, 0)); aarch64_allocate_and_probe_stack_space (tmp1_rtx, tmp0_rtx, sve_callee_adjust, + bytes_below_sp, !frame_pointer_needed, false); bytes_below_sp -= sve_callee_adjust; } *************** aarch64_expand_prologue (void) *** 9874,9882 **** /* We may need to probe the final adjustment if it is larger than the guard that is assumed by the called. */ - gcc_assert (known_eq (bytes_below_sp, final_adjust)); aarch64_allocate_and_probe_stack_space (tmp1_rtx, tmp0_rtx, final_adjust, !frame_pointer_needed, true); if (emit_frame_chain && maybe_ne (final_adjust, 0)) emit_insn (gen_stack_tie (stack_pointer_rtx, hard_frame_pointer_rtx)); } --- 9888,9898 ---- /* We may need to probe the final adjustment if it is larger than the guard that is assumed by the called. */ aarch64_allocate_and_probe_stack_space (tmp1_rtx, tmp0_rtx, final_adjust, + bytes_below_sp, !frame_pointer_needed, true); + bytes_below_sp -= final_adjust; + gcc_assert (known_eq (bytes_below_sp, 0)); if (emit_frame_chain && maybe_ne (final_adjust, 0)) emit_insn (gen_stack_tie (stack_pointer_rtx, hard_frame_pointer_rtx)); } *************** aarch64_expand_epilogue (bool for_sibcal *** 10047,10058 **** 1) Sibcalls don't return in a normal way, so if we're about to call one we must authenticate. ! 2) The RETAA instruction is not available before ARMv8.3-A, so if we are ! generating code for !TARGET_ARMV8_3 we can't use it and must explicitly authenticate. */ if (aarch64_return_address_signing_enabled () ! && (for_sibcall || !TARGET_ARMV8_3)) { switch (aarch64_ra_sign_key) { --- 10063,10074 ---- 1) Sibcalls don't return in a normal way, so if we're about to call one we must authenticate. ! 2) The RETAA instruction is not available without FEAT_PAuth, so if we ! are generating code for !TARGET_PAUTH we can't use it and must explicitly authenticate. */ if (aarch64_return_address_signing_enabled () ! && (for_sibcall || !TARGET_PAUTH)) { switch (aarch64_ra_sign_key) { *************** aarch64_expand_cpymem (rtx *operands) *** 24782,24808 **** int mode_bits; rtx dst = operands[0]; rtx src = operands[1]; rtx base; machine_mode cur_mode = BLKmode; ! /* Variable-sized memcpy can go through the MOPS expansion if available. */ ! if (!CONST_INT_P (operands[2])) return aarch64_expand_cpymem_mops (operands); ! unsigned HOST_WIDE_INT size = INTVAL (operands[2]); ! ! /* Try to inline up to 256 bytes or use the MOPS threshold if available. */ ! unsigned HOST_WIDE_INT max_copy_size ! = TARGET_MOPS ? aarch64_mops_memcpy_size_threshold : 256; ! bool size_p = optimize_function_for_size_p (cfun); ! /* Large constant-sized cpymem should go through MOPS when possible. ! It should be a win even for size optimization in the general case. ! For speed optimization the choice between MOPS and the SIMD sequence ! depends on the size of the copy, rather than number of instructions, ! alignment etc. */ ! if (size > max_copy_size) return aarch64_expand_cpymem_mops (operands); int copy_bits = 256; --- 24798,24820 ---- int mode_bits; rtx dst = operands[0]; rtx src = operands[1]; + unsigned align = UINTVAL (operands[3]); rtx base; machine_mode cur_mode = BLKmode; + bool size_p = optimize_function_for_size_p (cfun); ! /* Variable-sized or strict-align copies may use the MOPS expansion. */ ! if (!CONST_INT_P (operands[2]) || (STRICT_ALIGNMENT && align < 16)) return aarch64_expand_cpymem_mops (operands); ! unsigned HOST_WIDE_INT size = UINTVAL (operands[2]); ! /* Try to inline up to 256 bytes. */ ! unsigned max_copy_size = 256; ! unsigned mops_threshold = aarch64_mops_memcpy_size_threshold; ! /* Large copies use MOPS when available or a library call. */ ! if (size > max_copy_size || (TARGET_MOPS && size > mops_threshold)) return aarch64_expand_cpymem_mops (operands); int copy_bits = 256; *************** aarch64_expand_setmem (rtx *operands) *** 24966,24977 **** unsigned HOST_WIDE_INT len; rtx dst = operands[0]; rtx val = operands[2], src; rtx base; machine_mode cur_mode = BLKmode, next_mode; ! /* If we don't have SIMD registers or the size is variable use the MOPS ! inlined sequence if possible. */ ! if (!CONST_INT_P (operands[1]) || !TARGET_SIMD) return aarch64_expand_setmem_mops (operands); bool size_p = optimize_function_for_size_p (cfun); --- 24978,24990 ---- unsigned HOST_WIDE_INT len; rtx dst = operands[0]; rtx val = operands[2], src; + unsigned align = UINTVAL (operands[3]); rtx base; machine_mode cur_mode = BLKmode, next_mode; ! /* Variable-sized or strict-align memset may use the MOPS expansion. */ ! if (!CONST_INT_P (operands[1]) || !TARGET_SIMD ! || (STRICT_ALIGNMENT && align < 16)) return aarch64_expand_setmem_mops (operands); bool size_p = optimize_function_for_size_p (cfun); *************** aarch64_expand_setmem (rtx *operands) *** 24979,24988 **** /* Default the maximum to 256-bytes when considering only libcall vs SIMD broadcast sequence. */ unsigned max_set_size = 256; ! len = INTVAL (operands[1]); ! if (len > max_set_size && !TARGET_MOPS) ! return false; int cst_val = !!(CONST_INT_P (val) && (INTVAL (val) != 0)); /* The MOPS sequence takes: --- 24992,25004 ---- /* Default the maximum to 256-bytes when considering only libcall vs SIMD broadcast sequence. */ unsigned max_set_size = 256; + unsigned mops_threshold = aarch64_mops_memset_size_threshold; ! len = UINTVAL (operands[1]); ! ! /* Large memset uses MOPS when available or a library call. */ ! if (len > max_set_size || (TARGET_MOPS && len > mops_threshold)) ! return aarch64_expand_setmem_mops (operands); int cst_val = !!(CONST_INT_P (val) && (INTVAL (val) != 0)); /* The MOPS sequence takes: *************** aarch64_expand_setmem (rtx *operands) *** 24995,25006 **** the arguments + 1 for the call. */ unsigned libcall_cost = 4; - /* Upper bound check. For large constant-sized setmem use the MOPS sequence - when available. */ - if (TARGET_MOPS - && len >= (unsigned HOST_WIDE_INT) aarch64_mops_memset_size_threshold) - return aarch64_expand_setmem_mops (operands); - /* Attempt a sequence with a vector broadcast followed by stores. Count the number of operations involved to see if it's worth it against the alternatives. A simple counter simd_ops on the --- 25011,25016 ---- *************** aarch64_expand_setmem (rtx *operands) *** 25042,25051 **** simd_ops++; n -= mode_bits; ! /* Do certain trailing copies as overlapping if it's going to be ! cheaper. i.e. less instructions to do so. For instance doing a 15 ! byte copy it's more efficient to do two overlapping 8 byte copies than ! 8 + 4 + 2 + 1. Only do this when -mstrict-align is not supplied. */ if (n > 0 && n < copy_limit / 2 && !STRICT_ALIGNMENT) { next_mode = smallest_mode_for_size (n, MODE_INT); --- 25052,25059 ---- simd_ops++; n -= mode_bits; ! /* Emit trailing writes using overlapping unaligned accesses ! (when !STRICT_ALIGNMENT) - this is smaller and faster. */ if (n > 0 && n < copy_limit / 2 && !STRICT_ALIGNMENT) { next_mode = smallest_mode_for_size (n, MODE_INT); *************** aarch64_test_fractional_cost () *** 27548,27553 **** --- 27556,27571 ---- ASSERT_EQ (cf (1, 2).as_double (), 0.5); } + /* Test SVE arithmetic folding. */ + + static void + aarch64_test_sve_folding () + { + tree res = fold_unary (BIT_NOT_EXPR, ssizetype, + ssize_int (poly_int64 (1, 1))); + ASSERT_TRUE (operand_equal_p (res, ssize_int (poly_int64 (-2, -1)))); + } + /* Run all target-specific selftests. */ static void *************** aarch64_run_selftests (void) *** 27555,27560 **** --- 27573,27579 ---- { aarch64_test_loading_full_dump (); aarch64_test_fractional_cost (); + aarch64_test_sve_folding (); } } // namespace selftest diff -Nrcpad gcc-12.4.0/gcc/config/aarch64/aarch64.md gcc-12.5.0-RC-20250704/gcc/config/aarch64/aarch64.md *** gcc-12.4.0/gcc/config/aarch64/aarch64.md Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/config/aarch64/aarch64.md Fri Jul 4 07:24:42 2025 *************** *** 1637,1643 **** (match_operand:BLK 1 "memory_operand") (match_operand:DI 2 "general_operand") (match_operand:DI 3 "immediate_operand")] ! "!STRICT_ALIGNMENT || TARGET_MOPS" { if (aarch64_expand_cpymem (operands)) DONE; --- 1637,1643 ---- (match_operand:BLK 1 "memory_operand") (match_operand:DI 2 "general_operand") (match_operand:DI 3 "immediate_operand")] ! "" { if (aarch64_expand_cpymem (operands)) DONE; *************** *** 1734,1740 **** (match_operand:QI 2 "nonmemory_operand")) ;; Value (use (match_operand:DI 1 "general_operand")) ;; Length (match_operand 3 "immediate_operand")] ;; Align ! "TARGET_SIMD || TARGET_MOPS" { if (aarch64_expand_setmem (operands)) DONE; --- 1734,1740 ---- (match_operand:QI 2 "nonmemory_operand")) ;; Value (use (match_operand:DI 1 "general_operand")) ;; Length (match_operand 3 "immediate_operand")] ;; Align ! "" { if (aarch64_expand_setmem (operands)) DONE; *************** *** 7124,7134 **** [(set_attr "type" "f_cvtf2i")] ) ! ;; Pointer authentication patterns are always provided. In architecture ! ;; revisions prior to ARMv8.3-A these HINT instructions operate as NOPs. ;; This lets the user write portable software which authenticates pointers ! ;; when run on something which implements ARMv8.3-A, and which runs ! ;; correctly, but does not authenticate pointers, where ARMv8.3-A is not ;; implemented. ;; Signing/Authenticating R30 using SP as the salt. --- 7124,7134 ---- [(set_attr "type" "f_cvtf2i")] ) ! ;; Pointer authentication patterns are always provided. On targets that ! ;; don't implement FEAT_PAuth these HINT instructions operate as NOPs. ;; This lets the user write portable software which authenticates pointers ! ;; when run on something which implements FEAT_PAuth, and which runs ! ;; correctly, but does not authenticate pointers, where FEAT_PAuth is not ;; implemented. ;; Signing/Authenticating R30 using SP as the salt. diff -Nrcpad gcc-12.4.0/gcc/config/alpha/alpha.md gcc-12.5.0-RC-20250704/gcc/config/alpha/alpha.md *** gcc-12.4.0/gcc/config/alpha/alpha.md Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/config/alpha/alpha.md Fri Jul 4 07:24:42 2025 *************** *** 3933,3939 **** else return "ldq %0,%2(%1)\t\t!literal!%3"; } ! [(set_attr "type" "ldsym")]) (define_split [(set (match_operand:DI 0 "register_operand") --- 3933,3940 ---- else return "ldq %0,%2(%1)\t\t!literal!%3"; } ! [(set_attr "type" "ldsym") ! (set_attr "cannot_copy" "true")]) (define_split [(set (match_operand:DI 0 "register_operand") *************** *** 3957,3963 **** return "lda %0,%2(%1)\t\t!tlsgd"; else return "lda %0,%2(%1)\t\t!tlsgd!%3"; ! }) (define_insn "movdi_er_tlsldm" [(set (match_operand:DI 0 "register_operand" "=r") --- 3958,3965 ---- return "lda %0,%2(%1)\t\t!tlsgd"; else return "lda %0,%2(%1)\t\t!tlsgd!%3"; ! } ! [(set_attr "cannot_copy" "true")]) (define_insn "movdi_er_tlsldm" [(set (match_operand:DI 0 "register_operand" "=r") *************** *** 3970,3976 **** return "lda %0,%&(%1)\t\t!tlsldm"; else return "lda %0,%&(%1)\t\t!tlsldm!%2"; ! }) (define_insn "*movdi_er_gotdtp" [(set (match_operand:DI 0 "register_operand" "=r") --- 3972,3979 ---- return "lda %0,%&(%1)\t\t!tlsldm"; else return "lda %0,%&(%1)\t\t!tlsldm!%2"; ! } ! [(set_attr "cannot_copy" "true")]) (define_insn "*movdi_er_gotdtp" [(set (match_operand:DI 0 "register_operand" "=r") *************** *** 5939,5944 **** --- 5942,5948 ---- "HAVE_AS_TLS" "ldq $27,%1($29)\t\t!literal!%2\;jsr $26,($27),%1\t\t!lituse_!%2\;ldah $29,0($26)\t\t!gpdisp!%*\;lda $29,0($29)\t\t!gpdisp!%*" [(set_attr "type" "jsr") + (set_attr "cannot_copy" "true") (set_attr "length" "16")]) ;; We must use peep2 instead of a split because we need accurate life diff -Nrcpad gcc-12.4.0/gcc/config/arm/arm.cc gcc-12.5.0-RC-20250704/gcc/config/arm/arm.cc *** gcc-12.4.0/gcc/config/arm/arm.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/config/arm/arm.cc Fri Jul 4 07:24:42 2025 *************** legitimate_pic_operand_p (rtx x) *** 7954,7961 **** /* Record that the current function needs a PIC register. If PIC_REG is null, a new pseudo is allocated as PIC register, otherwise PIC_REG is used. In ! both case cfun->machine->pic_reg is initialized if we have not already done ! so. COMPUTE_NOW decide whether and where to set the PIC register. If true, PIC register is reloaded in the current position of the instruction stream irregardless of whether it was loaded before. Otherwise, it is only loaded if not already done so (crtl->uses_pic_offset_table is null). Note that --- 7954,7961 ---- /* Record that the current function needs a PIC register. If PIC_REG is null, a new pseudo is allocated as PIC register, otherwise PIC_REG is used. In ! both cases cfun->machine->pic_reg is initialized if we have not already done ! so. COMPUTE_NOW decides whether and where to set the PIC register. If true, PIC register is reloaded in the current position of the instruction stream irregardless of whether it was loaded before. Otherwise, it is only loaded if not already done so (crtl->uses_pic_offset_table is null). Note that *************** require_pic_register (rtx pic_reg, bool *** 7975,7980 **** --- 7975,7981 ---- if (!crtl->uses_pic_offset_table || compute_now) { gcc_assert (can_create_pseudo_p () + || (arm_pic_register != INVALID_REGNUM) || (pic_reg != NULL_RTX && REG_P (pic_reg) && GET_MODE (pic_reg) == Pmode)); diff -Nrcpad gcc-12.4.0/gcc/config/arm/arm_mve.h gcc-12.5.0-RC-20250704/gcc/config/arm/arm_mve.h *** gcc-12.4.0/gcc/config/arm/arm_mve.h Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/config/arm/arm_mve.h Fri Jul 4 07:24:42 2025 *************** *** 15,20 **** --- 15,24 ---- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + Under Section 7 of GPL version 3, you are granted additional + permissions described in the GCC Runtime Library Exception, version + 3.1, as published by the Free Software Foundation. + You should have received a copy of the GNU General Public License along with GCC; see the file COPYING3. If not see . */ diff -Nrcpad gcc-12.4.0/gcc/config/arm/arm_mve_types.h gcc-12.5.0-RC-20250704/gcc/config/arm/arm_mve_types.h *** gcc-12.4.0/gcc/config/arm/arm_mve_types.h Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/config/arm/arm_mve_types.h Fri Jul 4 07:24:42 2025 *************** *** 15,20 **** --- 15,24 ---- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + Under Section 7 of GPL version 3, you are granted additional + permissions described in the GCC Runtime Library Exception, version + 3.1, as published by the Free Software Foundation. + You should have received a copy of the GNU General Public License along with GCC; see the file COPYING3. If not see . */ diff -Nrcpad gcc-12.4.0/gcc/config/arm/mve.md gcc-12.5.0-RC-20250704/gcc/config/arm/mve.md *** gcc-12.4.0/gcc/config/arm/mve.md Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/config/arm/mve.md Fri Jul 4 07:24:42 2025 *************** *** 10159,10165 **** if (elt == 0) return "vmov\t%e0, %Q1, %R1"; else ! return "vmov\t%f0, %J1, %K1"; } [(set_attr "type" "mve_move")]) --- 10159,10165 ---- if (elt == 0) return "vmov\t%e0, %Q1, %R1"; else ! return "vmov\t%f0, %Q1, %R1"; } [(set_attr "type" "mve_move")]) diff -Nrcpad gcc-12.4.0/gcc/config/avr/avr-dimode.md gcc-12.5.0-RC-20250704/gcc/config/avr/avr-dimode.md *** gcc-12.4.0/gcc/config/avr/avr-dimode.md Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/config/avr/avr-dimode.md Fri Jul 4 07:24:42 2025 *************** *** 62,69 **** ;; "addta3" "adduta3" (define_expand "add3" [(parallel [(match_operand:ALL8 0 "general_operand" "") ! (match_operand:ALL8 1 "general_operand" "") ! (match_operand:ALL8 2 "general_operand" "")])] "avr_have_dimode" { rtx acc_a = gen_rtx_REG (mode, ACC_A); --- 62,69 ---- ;; "addta3" "adduta3" (define_expand "add3" [(parallel [(match_operand:ALL8 0 "general_operand" "") ! (match_operand:ALL8 1 "nop_general_operand") ! (match_operand:ALL8 2 "nop_general_operand")])] "avr_have_dimode" { rtx acc_a = gen_rtx_REG (mode, ACC_A); *************** *** 178,185 **** ;; "subta3" "subuta3" (define_expand "sub3" [(parallel [(match_operand:ALL8 0 "general_operand" "") ! (match_operand:ALL8 1 "general_operand" "") ! (match_operand:ALL8 2 "general_operand" "")])] "avr_have_dimode" { rtx acc_a = gen_rtx_REG (mode, ACC_A); --- 178,185 ---- ;; "subta3" "subuta3" (define_expand "sub3" [(parallel [(match_operand:ALL8 0 "general_operand" "") ! (match_operand:ALL8 1 "nop_general_operand") ! (match_operand:ALL8 2 "nop_general_operand")])] "avr_have_dimode" { rtx acc_a = gen_rtx_REG (mode, ACC_A); *************** *** 259,266 **** (define_expand "3" [(set (match_operand:ALL8S 0 "general_operand" "") ! (ss_addsub:ALL8S (match_operand:ALL8S 1 "general_operand" "") ! (match_operand:ALL8S 2 "general_operand" "")))] "avr_have_dimode" { rtx acc_a = gen_rtx_REG (mode, ACC_A); --- 259,266 ---- (define_expand "3" [(set (match_operand:ALL8S 0 "general_operand" "") ! (ss_addsub:ALL8S (match_operand:ALL8S 1 "nop_general_operand") ! (match_operand:ALL8S 2 "nop_general_operand")))] "avr_have_dimode" { rtx acc_a = gen_rtx_REG (mode, ACC_A); *************** *** 332,339 **** (define_expand "3" [(set (match_operand:ALL8U 0 "general_operand" "") ! (us_addsub:ALL8U (match_operand:ALL8U 1 "general_operand" "") ! (match_operand:ALL8U 2 "general_operand" "")))] "avr_have_dimode" { rtx acc_a = gen_rtx_REG (mode, ACC_A); --- 332,339 ---- (define_expand "3" [(set (match_operand:ALL8U 0 "general_operand" "") ! (us_addsub:ALL8U (match_operand:ALL8U 1 "nop_general_operand") ! (match_operand:ALL8U 2 "nop_general_operand")))] "avr_have_dimode" { rtx acc_a = gen_rtx_REG (mode, ACC_A); *************** *** 405,411 **** (define_expand "negdi2" [(parallel [(match_operand:DI 0 "general_operand" "") ! (match_operand:DI 1 "general_operand" "")])] "avr_have_dimode" { rtx acc_a = gen_rtx_REG (DImode, ACC_A); --- 405,411 ---- (define_expand "negdi2" [(parallel [(match_operand:DI 0 "general_operand" "") ! (match_operand:DI 1 "nop_general_operand")])] "avr_have_dimode" { rtx acc_a = gen_rtx_REG (DImode, ACC_A); *************** *** 602,609 **** ;; "ashluta3" "ashruta3" "lshruta3" "rotluta3" (define_expand "3" [(parallel [(match_operand:ALL8 0 "general_operand" "") ! (di_shifts:ALL8 (match_operand:ALL8 1 "general_operand" "") ! (match_operand:QI 2 "general_operand" ""))])] "avr_have_dimode" { rtx acc_a = gen_rtx_REG (mode, ACC_A); --- 602,609 ---- ;; "ashluta3" "ashruta3" "lshruta3" "rotluta3" (define_expand "3" [(parallel [(match_operand:ALL8 0 "general_operand" "") ! (di_shifts:ALL8 (match_operand:ALL8 1 "nop_general_operand") ! (match_operand:QI 2 "nop_general_operand"))])] "avr_have_dimode" { rtx acc_a = gen_rtx_REG (mode, ACC_A); *************** *** 648,655 **** ;; "mulsidi3" (define_expand "mulsidi3" [(parallel [(match_operand:DI 0 "register_operand" "") ! (match_operand:SI 1 "general_operand" "") ! (match_operand:SI 2 "general_operand" "") ;; Just to mention the iterator (clobber (any_extend:SI (match_dup 1)))])] "avr_have_dimode --- 648,655 ---- ;; "mulsidi3" (define_expand "mulsidi3" [(parallel [(match_operand:DI 0 "register_operand" "") ! (match_operand:SI 1 "nop_general_operand") ! (match_operand:SI 2 "nop_general_operand") ;; Just to mention the iterator (clobber (any_extend:SI (match_dup 1)))])] "avr_have_dimode diff -Nrcpad gcc-12.4.0/gcc/config/avr/avr.cc gcc-12.5.0-RC-20250704/gcc/config/avr/avr.cc *** gcc-12.4.0/gcc/config/avr/avr.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/config/avr/avr.cc Fri Jul 4 07:24:42 2025 *************** avr_out_xload (rtx_insn *insn ATTRIBUTE_ *** 4071,4077 **** xop[2] = lpm_addr_reg_rtx; xop[3] = AVR_HAVE_LPMX ? op[0] : lpm_reg_rtx; ! avr_asm_len (AVR_HAVE_LPMX ? "lpm %3,%a2" : "lpm", xop, plen, -1); avr_asm_len ("sbrc %1,7" CR_TAB "ld %3,%a2", xop, plen, 2); --- 4071,4083 ---- xop[2] = lpm_addr_reg_rtx; xop[3] = AVR_HAVE_LPMX ? op[0] : lpm_reg_rtx; ! if (plen) ! *plen = 0; ! ! if (reg_overlap_mentioned_p (xop[3], lpm_addr_reg_rtx)) ! avr_asm_len ("sbrs %1,7", xop, plen, 1); ! ! avr_asm_len (AVR_HAVE_LPMX ? "lpm %3,%a2" : "lpm", xop, plen, 1); avr_asm_len ("sbrc %1,7" CR_TAB "ld %3,%a2", xop, plen, 2); *************** avr_out_movqi_r_mr_reg_disp_tiny (rtx_in *** 4217,4229 **** rtx dest = op[0]; rtx src = op[1]; rtx x = XEXP (src, 0); ! avr_asm_len (TINY_ADIW (%I1, %J1, %o1) CR_TAB ! "ld %0,%b1" , op, plen, -3); ! if (!reg_overlap_mentioned_p (dest, XEXP (x, 0)) ! && !reg_unused_after (insn, XEXP (x, 0))) ! avr_asm_len (TINY_SBIW (%I1, %J1, %o1), op, plen, 2); return ""; } --- 4223,4252 ---- rtx dest = op[0]; rtx src = op[1]; rtx x = XEXP (src, 0); + rtx base = XEXP (x, 0); ! if (plen) ! *plen = 0; ! if (!reg_overlap_mentioned_p (dest, base)) ! { ! avr_asm_len (TINY_ADIW (%I1, %J1, %o1) CR_TAB ! "ld %0,%b1", op, plen, 3); ! if (!reg_unused_after (insn, base)) ! avr_asm_len (TINY_SBIW (%I1, %J1, %o1), op, plen, 2); ! } ! else ! { ! // PR98762: The base register overlaps dest and is only partly clobbered. ! rtx base2 = all_regs_rtx[1 ^ REGNO (dest)]; ! ! if (!reg_unused_after (insn, base2)) ! avr_asm_len ("mov __tmp_reg__,%0", &base2, plen, 1); ! avr_asm_len (TINY_ADIW (%I1, %J1, %o1) CR_TAB ! "ld %0,%b1", op, plen, 3); ! if (!reg_unused_after (insn, base2)) ! avr_asm_len ("mov %0,__tmp_reg__", &base2, plen, 1); ! } return ""; } *************** out_movqi_r_mr (rtx_insn *insn, rtx op[] *** 4249,4288 **** { /* memory access by reg+disp */ - int disp = INTVAL (XEXP (x, 1)); - if (AVR_TINY) return avr_out_movqi_r_mr_reg_disp_tiny (insn, op, plen); if (disp - GET_MODE_SIZE (GET_MODE (src)) >= 63) ! { ! if (REGNO (XEXP (x, 0)) != REG_Y) ! fatal_insn ("incorrect insn:",insn); ! if (disp <= 63 + MAX_LD_OFFSET (GET_MODE (src))) ! return avr_asm_len ("adiw r28,%o1-63" CR_TAB ! "ldd %0,Y+63" CR_TAB ! "sbiw r28,%o1-63", op, plen, -3); ! return avr_asm_len ("subi r28,lo8(-%o1)" CR_TAB ! "sbci r29,hi8(-%o1)" CR_TAB ! "ld %0,Y" CR_TAB ! "subi r28,lo8(%o1)" CR_TAB ! "sbci r29,hi8(%o1)", op, plen, -5); ! } else if (REGNO (XEXP (x, 0)) == REG_X) { /* This is a paranoid case LEGITIMIZE_RELOAD_ADDRESS must exclude it but I have this situation with extremal optimizing options. */ ! avr_asm_len ("adiw r26,%o1" CR_TAB ! "ld %0,X", op, plen, -2); ! if (!reg_overlap_mentioned_p (dest, XEXP (x, 0)) ! && !reg_unused_after (insn, XEXP (x, 0))) ! { ! avr_asm_len ("sbiw r26,%o1", op, plen, 1); ! } return ""; } --- 4272,4337 ---- { /* memory access by reg+disp */ if (AVR_TINY) return avr_out_movqi_r_mr_reg_disp_tiny (insn, op, plen); + if (plen) + *plen = 0; + + int disp = INTVAL (XEXP (x, 1)); + rtx base = XEXP (x, 0); + rtx base2 = all_regs_rtx[1 ^ REGNO (dest)]; + bool partial_clobber = (reg_overlap_mentioned_p (dest, base) + && ! reg_unused_after (insn, base2)); + if (disp - GET_MODE_SIZE (GET_MODE (src)) >= 63) ! { ! // PR117744: The base register overlaps dest and is ! // only partially clobbered. ! if (partial_clobber) ! avr_asm_len ("mov __tmp_reg__,%0", &base2, plen, 1); ! if (REGNO (XEXP (x, 0)) != REG_Y) ! fatal_insn ("incorrect insn:",insn); ! if (disp <= 63 + MAX_LD_OFFSET (GET_MODE (src))) ! avr_asm_len ("adiw r28,%o1-63" CR_TAB ! "ldd %0,Y+63" CR_TAB ! "sbiw r28,%o1-63", op, plen, 3); ! else ! avr_asm_len ("subi r28,lo8(-%o1)" CR_TAB ! "sbci r29,hi8(-%o1)" CR_TAB ! "ld %0,Y" CR_TAB ! "subi r28,lo8(%o1)" CR_TAB ! "sbci r29,hi8(%o1)", op, plen, 5); ! ! if (partial_clobber) ! avr_asm_len ("mov __tmp_reg__,%0", &base2, plen, 1); ! ! return ""; ! } else if (REGNO (XEXP (x, 0)) == REG_X) { /* This is a paranoid case LEGITIMIZE_RELOAD_ADDRESS must exclude it but I have this situation with extremal optimizing options. */ ! // PR117744: The base register overlaps dest and is ! // only partially clobbered. ! bool clobber_r26 = (partial_clobber ! && REGNO (base) == (REGNO (base) & ~1)); ! if (partial_clobber ! && ! clobber_r26) ! avr_asm_len ("mov __tmp_reg__,%0", &base2, plen, 1); ! avr_asm_len ("adiw r26,%o1" CR_TAB ! "ld %0,X", op, plen, 2); ! ! if (clobber_r26) ! avr_asm_len ("subi r26,lo8(%o1)", op, plen, 1); ! else if (partial_clobber) ! avr_asm_len ("mov %0,__tmp_reg__", &base2, plen, 1); ! else if (! reg_unused_after (insn, base)) ! avr_asm_len ("sbiw r26,%o1", op, plen, 1); return ""; } *************** avr_out_ashlpsi3 (rtx_insn *insn, rtx *o *** 7025,7031 **** int reg1 = REGNO (op[1]); if (reg0 + 2 != reg1) ! avr_asm_len ("mov %C0,%A0", op, plen, 1); return avr_asm_len ("clr %B0" CR_TAB "clr %A0", op, plen, 2); --- 7074,7080 ---- int reg1 = REGNO (op[1]); if (reg0 + 2 != reg1) ! avr_asm_len ("mov %C0,%A1", op, plen, 1); return avr_asm_len ("clr %B0" CR_TAB "clr %A0", op, plen, 2); diff -Nrcpad gcc-12.4.0/gcc/config/avr/avr.md gcc-12.5.0-RC-20250704/gcc/config/avr/avr.md *** gcc-12.4.0/gcc/config/avr/avr.md Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/config/avr/avr.md Fri Jul 4 07:24:42 2025 *************** *** 381,389 **** emit_clobber (gen_rtx_MEM (BLKmode, hard_frame_pointer_rtx)); ! emit_move_insn (hard_frame_pointer_rtx, r_fp); emit_stack_restore (SAVE_NONLOCAL, r_sp); emit_use (hard_frame_pointer_rtx); emit_use (stack_pointer_rtx); --- 381,394 ---- emit_clobber (gen_rtx_MEM (BLKmode, hard_frame_pointer_rtx)); ! // PR64242: When r_sp is located in the frame, we must not ! // change FP prior to reading r_sp. Hence copy r_fp to a ! // local register (and hope that reload won't spill it). ! rtx r_fp_reg = copy_to_reg (r_fp); emit_stack_restore (SAVE_NONLOCAL, r_sp); + emit_move_insn (hard_frame_pointer_rtx, r_fp_reg); + emit_use (hard_frame_pointer_rtx); emit_use (stack_pointer_rtx); *************** *** 649,660 **** --- 654,669 ---- [(parallel [(set (reg:MOVMODE 22) (mem:MOVMODE (lo_sum:PSI (reg:QI 21) (reg:HI REG_Z)))) + (clobber (reg:QI 21)) + (clobber (reg:HI REG_Z)) (clobber (reg:CC REG_CC))])]) (define_insn "*xload__libgcc" [(set (reg:MOVMODE 22) (mem:MOVMODE (lo_sum:PSI (reg:QI 21) (reg:HI REG_Z)))) + (clobber (reg:QI 21)) + (clobber (reg:HI REG_Z)) (clobber (reg:CC REG_CC))] "avr_xload_libgcc_p (mode) && reload_completed" *************** *** 715,726 **** if (!REG_P (addr)) src = replace_equiv_address (src, copy_to_mode_reg (PSImode, addr)); if (!avr_xload_libgcc_p (mode)) /* ; No here because gen_xload8_A only iterates over ALL1. ; insn-emit does not depend on the mode, it's all about operands. */ ! emit_insn (gen_xload8qi_A (dest, src)); else ! emit_insn (gen_xload_A (dest, src)); DONE; } --- 724,749 ---- if (!REG_P (addr)) src = replace_equiv_address (src, copy_to_mode_reg (PSImode, addr)); + rtx dest2 = reg_overlap_mentioned_p (dest, lpm_addr_reg_rtx) + ? gen_reg_rtx (mode) + : dest; + if (!avr_xload_libgcc_p (mode)) /* ; No here because gen_xload8_A only iterates over ALL1. ; insn-emit does not depend on the mode, it's all about operands. */ ! emit_insn (gen_xload8qi_A (dest2, src)); else ! { ! rtx reg_22 = gen_rtx_REG (mode, 22); ! if (reg_overlap_mentioned_p (dest2, reg_22) ! || reg_overlap_mentioned_p (dest2, all_regs_rtx[21])) ! dest2 = gen_reg_rtx (mode); ! ! emit_insn (gen_xload_A (dest2, src)); ! } ! ! if (dest2 != dest) ! emit_move_insn (dest, dest2); DONE; } diff -Nrcpad gcc-12.4.0/gcc/config/darwin.h gcc-12.5.0-RC-20250704/gcc/config/darwin.h *** gcc-12.4.0/gcc/config/darwin.h Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/config/darwin.h Fri Jul 4 07:24:42 2025 *************** extern GTY(()) int darwin_ms_struct; *** 277,288 **** #define DARWIN_RDYNAMIC "%{rdynamic:%nrdynamic is not supported}" #endif ! #if LD64_HAS_PLATFORM_VERSION ! #define DARWIN_PLATFORM_ID \ ! "%{mmacosx-version-min=*: -platform_version macos %* 0.0} " #else ! #define DARWIN_PLATFORM_ID \ "%{mmacosx-version-min=*:-macosx_version_min %*} " #endif /* Code built with mdynamic-no-pic does not support PIE/PIC, so we disallow --- 277,293 ---- #define DARWIN_RDYNAMIC "%{rdynamic:%nrdynamic is not supported}" #endif ! #if LD64_HAS_MACOS_VERSION_MIN ! # define DARWIN_PLATFORM_ID \ ! "%{mmacosx-version-min=*:-macos_version_min %*} " #else ! # if LD64_HAS_PLATFORM_VERSION ! # define DARWIN_PLATFORM_ID \ ! "%{mmacosx-version-min=*: -platform_version macos %* 0.0} " ! # else ! # define DARWIN_PLATFORM_ID \ "%{mmacosx-version-min=*:-macosx_version_min %*} " + # endif #endif /* Code built with mdynamic-no-pic does not support PIE/PIC, so we disallow diff -Nrcpad gcc-12.4.0/gcc/config/i386/avx512dqintrin.h gcc-12.5.0-RC-20250704/gcc/config/i386/avx512dqintrin.h *** gcc-12.4.0/gcc/config/i386/avx512dqintrin.h Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/config/i386/avx512dqintrin.h Fri Jul 4 07:24:42 2025 *************** _mm512_fpclass_ps_mask (__m512 __A, cons *** 2800,2810 **** ((__mmask8) __builtin_ia32_fpclasssd_mask ((__v2df) (__m128d) (X), \ (int) (C), (__mmask8) (-1))) \ ! #define _mm_mask_fpclass_ss_mask(X, C, U) \ ((__mmask8) __builtin_ia32_fpclassss_mask ((__v4sf) (__m128) (X), \ (int) (C), (__mmask8) (U))) ! #define _mm_mask_fpclass_sd_mask(X, C, U) \ ((__mmask8) __builtin_ia32_fpclasssd_mask ((__v2df) (__m128d) (X), \ (int) (C), (__mmask8) (U))) --- 2800,2810 ---- ((__mmask8) __builtin_ia32_fpclasssd_mask ((__v2df) (__m128d) (X), \ (int) (C), (__mmask8) (-1))) \ ! #define _mm_mask_fpclass_ss_mask(U, X, C) \ ((__mmask8) __builtin_ia32_fpclassss_mask ((__v4sf) (__m128) (X), \ (int) (C), (__mmask8) (U))) ! #define _mm_mask_fpclass_sd_mask(U, X, C) \ ((__mmask8) __builtin_ia32_fpclasssd_mask ((__v2df) (__m128d) (X), \ (int) (C), (__mmask8) (U))) *************** _mm512_fpclass_ps_mask (__m512 __A, cons *** 2839,2846 **** (__mmask8)(U))) #define _mm_reduce_round_sd(A, B, C, R) \ ! ((__m128d) __builtin_ia32_reducesd_round ((__v2df)(__m128d)(A), \ ! (__v2df)(__m128d)(B), (int)(C), (__mmask8)(U), (int)(R))) #define _mm_mask_reduce_round_sd(W, U, A, B, C, R) \ ((__m128d) __builtin_ia32_reducesd_mask_round ((__v2df)(__m128d)(A), \ --- 2839,2847 ---- (__mmask8)(U))) #define _mm_reduce_round_sd(A, B, C, R) \ ! ((__m128d) __builtin_ia32_reducesd_mask_round ((__v2df)(__m128d)(A), \ ! (__v2df)(__m128d)(B), (int)(C), (__v2df) _mm_setzero_pd (), \ ! (__mmask8)(-1), (int)(R))) #define _mm_mask_reduce_round_sd(W, U, A, B, C, R) \ ((__m128d) __builtin_ia32_reducesd_mask_round ((__v2df)(__m128d)(A), \ *************** _mm512_fpclass_ps_mask (__m512 __A, cons *** 2867,2874 **** (__mmask8)(U))) #define _mm_reduce_round_ss(A, B, C, R) \ ! ((__m128) __builtin_ia32_reducess_round ((__v4sf)(__m128)(A), \ ! (__v4sf)(__m128)(B), (int)(C), (__mmask8)(U), (int)(R))) #define _mm_mask_reduce_round_ss(W, U, A, B, C, R) \ ((__m128) __builtin_ia32_reducess_mask_round ((__v4sf)(__m128)(A), \ --- 2868,2876 ---- (__mmask8)(U))) #define _mm_reduce_round_ss(A, B, C, R) \ ! ((__m128) __builtin_ia32_reducess_mask_round ((__v4sf)(__m128)(A), \ ! (__v4sf)(__m128)(B), (int)(C), (__v4sf) _mm_setzero_ps (), \ ! (__mmask8)(-1), (int)(R))) #define _mm_mask_reduce_round_ss(W, U, A, B, C, R) \ ((__m128) __builtin_ia32_reducess_mask_round ((__v4sf)(__m128)(A), \ *************** _mm512_fpclass_ps_mask (__m512 __A, cons *** 2876,2882 **** (__mmask8)(U), (int)(R))) #define _mm_maskz_reduce_round_ss(U, A, B, C, R) \ ! ((__m128) __builtin_ia32_reducesd_mask_round ((__v4sf)(__m128)(A), \ (__v4sf)(__m128)(B), (int)(C), (__v4sf) _mm_setzero_ps (), \ (__mmask8)(U), (int)(R))) --- 2878,2884 ---- (__mmask8)(U), (int)(R))) #define _mm_maskz_reduce_round_ss(U, A, B, C, R) \ ! ((__m128) __builtin_ia32_reducess_mask_round ((__v4sf)(__m128)(A), \ (__v4sf)(__m128)(B), (int)(C), (__v4sf) _mm_setzero_ps (), \ (__mmask8)(U), (int)(R))) diff -Nrcpad gcc-12.4.0/gcc/config/i386/avx512fp16intrin.h gcc-12.5.0-RC-20250704/gcc/config/i386/avx512fp16intrin.h *** gcc-12.4.0/gcc/config/i386/avx512fp16intrin.h Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/config/i386/avx512fp16intrin.h Fri Jul 4 07:24:42 2025 *************** _mm512_fpclass_ph_mask (__m512h __A, con *** 2321,2331 **** #else #define _mm512_mask_fpclass_ph_mask(u, x, c) \ ((__mmask32) __builtin_ia32_fpclassph512_mask ((__v32hf) (__m512h) (x), \ ! (int) (c),(__mmask8)(u))) #define _mm512_fpclass_ph_mask(x, c) \ ((__mmask32) __builtin_ia32_fpclassph512_mask ((__v32hf) (__m512h) (x), \ ! (int) (c),(__mmask8)-1)) #endif /* __OPIMTIZE__ */ /* Intrinsics vgetexpph, vgetexpsh. */ --- 2321,2331 ---- #else #define _mm512_mask_fpclass_ph_mask(u, x, c) \ ((__mmask32) __builtin_ia32_fpclassph512_mask ((__v32hf) (__m512h) (x), \ ! (int) (c),(__mmask32)(u))) #define _mm512_fpclass_ph_mask(x, c) \ ((__mmask32) __builtin_ia32_fpclassph512_mask ((__v32hf) (__m512h) (x), \ ! (int) (c),(__mmask32)-1)) #endif /* __OPIMTIZE__ */ /* Intrinsics vgetexpph, vgetexpsh. */ diff -Nrcpad gcc-12.4.0/gcc/config/i386/avx512vlbwintrin.h gcc-12.5.0-RC-20250704/gcc/config/i386/avx512vlbwintrin.h *** gcc-12.4.0/gcc/config/i386/avx512vlbwintrin.h Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/config/i386/avx512vlbwintrin.h Fri Jul 4 07:24:42 2025 *************** _mm_maskz_slli_epi16 (__mmask8 __U, __m1 *** 1839,1845 **** #define _mm256_mask_alignr_epi8(W, U, X, Y, N) \ ((__m256i) __builtin_ia32_palignr256_mask ((__v4di)(__m256i)(X), \ (__v4di)(__m256i)(Y), (int)((N) * 8), \ ! (__v4di)(__m256i)(X), (__mmask32)(U))) #define _mm256_mask_srli_epi16(W, U, A, B) \ ((__m256i) __builtin_ia32_psrlwi256_mask ((__v16hi)(__m256i)(A), \ --- 1839,1845 ---- #define _mm256_mask_alignr_epi8(W, U, X, Y, N) \ ((__m256i) __builtin_ia32_palignr256_mask ((__v4di)(__m256i)(X), \ (__v4di)(__m256i)(Y), (int)((N) * 8), \ ! (__v4di)(__m256i)(W), (__mmask32)(U))) #define _mm256_mask_srli_epi16(W, U, A, B) \ ((__m256i) __builtin_ia32_psrlwi256_mask ((__v16hi)(__m256i)(A), \ *************** _mm_maskz_slli_epi16 (__mmask8 __U, __m1 *** 1922,1928 **** #define _mm_mask_alignr_epi8(W, U, X, Y, N) \ ((__m128i) __builtin_ia32_palignr128_mask ((__v2di)(__m128i)(X), \ (__v2di)(__m128i)(Y), (int)((N) * 8), \ ! (__v2di)(__m128i)(X), (__mmask16)(U))) #define _mm_maskz_alignr_epi8(U, X, Y, N) \ ((__m128i) __builtin_ia32_palignr128_mask ((__v2di)(__m128i)(X), \ --- 1922,1928 ---- #define _mm_mask_alignr_epi8(W, U, X, Y, N) \ ((__m128i) __builtin_ia32_palignr128_mask ((__v2di)(__m128i)(X), \ (__v2di)(__m128i)(Y), (int)((N) * 8), \ ! (__v2di)(__m128i)(W), (__mmask16)(U))) #define _mm_maskz_alignr_epi8(U, X, Y, N) \ ((__m128i) __builtin_ia32_palignr128_mask ((__v2di)(__m128i)(X), \ diff -Nrcpad gcc-12.4.0/gcc/config/i386/avx512vlintrin.h gcc-12.5.0-RC-20250704/gcc/config/i386/avx512vlintrin.h *** gcc-12.4.0/gcc/config/i386/avx512vlintrin.h Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/config/i386/avx512vlintrin.h Fri Jul 4 07:24:42 2025 *************** _mm256_permutex_pd (__m256d __X, const i *** 13609,13615 **** #define _mm_mask_alignr_epi64(W, U, X, Y, C) \ ((__m128i)__builtin_ia32_alignq128_mask ((__v2di)(__m128i)(X), \ ! (__v2di)(__m128i)(Y), (int)(C), (__v2di)(__m128i)(X), (__mmask8)-1)) #define _mm_maskz_alignr_epi64(U, X, Y, C) \ ((__m128i)__builtin_ia32_alignq128_mask ((__v2di)(__m128i)(X), \ --- 13609,13615 ---- #define _mm_mask_alignr_epi64(W, U, X, Y, C) \ ((__m128i)__builtin_ia32_alignq128_mask ((__v2di)(__m128i)(X), \ ! (__v2di)(__m128i)(Y), (int)(C), (__v2di)(__m128i)(W), (__mmask8)(U))) #define _mm_maskz_alignr_epi64(U, X, Y, C) \ ((__m128i)__builtin_ia32_alignq128_mask ((__v2di)(__m128i)(X), \ diff -Nrcpad gcc-12.4.0/gcc/config/i386/constraints.md gcc-12.5.0-RC-20250704/gcc/config/i386/constraints.md *** gcc-12.4.0/gcc/config/i386/constraints.md Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/config/i386/constraints.md Fri Jul 4 07:24:42 2025 *************** *** 187,193 **** (and (match_operand 0 "memory_operand") (match_test "constant_address_p (XEXP (op, 0))"))) ! (define_memory_constraint "Bk" "@internal TLS address that allows insn using non-integer registers." (and (match_operand 0 "memory_operand") (not (match_test "ix86_gpr_tls_address_pattern_p (op)")))) --- 187,193 ---- (and (match_operand 0 "memory_operand") (match_test "constant_address_p (XEXP (op, 0))"))) ! (define_special_memory_constraint "Bk" "@internal TLS address that allows insn using non-integer registers." (and (match_operand 0 "memory_operand") (not (match_test "ix86_gpr_tls_address_pattern_p (op)")))) diff -Nrcpad gcc-12.4.0/gcc/config/i386/driver-i386.cc gcc-12.5.0-RC-20250704/gcc/config/i386/driver-i386.cc *** gcc-12.4.0/gcc/config/i386/driver-i386.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/config/i386/driver-i386.cc Fri Jul 4 07:24:42 2025 *************** const char *host_detect_local_cpu (int a *** 464,469 **** --- 464,471 ---- processor = PROCESSOR_GEODE; else if (has_feature (FEATURE_MOVBE) && family == 22) processor = PROCESSOR_BTVER2; + else if (has_feature (FEATURE_AVX512VP2INTERSECT)) + processor = PROCESSOR_ZNVER5; else if (has_feature (FEATURE_AVX512F)) processor = PROCESSOR_ZNVER4; else if (has_feature (FEATURE_VAES)) *************** const char *host_detect_local_cpu (int a *** 769,774 **** --- 771,779 ---- case PROCESSOR_ZNVER4: cpu = "znver4"; break; + case PROCESSOR_ZNVER5: + cpu = "znver5"; + break; case PROCESSOR_BTVER1: cpu = "btver1"; break; diff -Nrcpad gcc-12.4.0/gcc/config/i386/i386-builtin.def gcc-12.5.0-RC-20250704/gcc/config/i386/i386-builtin.def *** gcc-12.4.0/gcc/config/i386/i386-builtin.def Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/config/i386/i386-builtin.def Fri Jul 4 07:24:42 2025 *************** BDESC (0, OPTION_MASK_ISA2_AVX5124VNNIW, *** 2751,2768 **** BDESC (0, OPTION_MASK_ISA2_RDPID, CODE_FOR_rdpid, "__builtin_ia32_rdpid", IX86_BUILTIN_RDPID, UNKNOWN, (int) UNSIGNED_FTYPE_VOID) /* VAES. */ ! BDESC (0, OPTION_MASK_ISA2_VAES, CODE_FOR_vaesdec_v16qi, "__builtin_ia32_vaesdec_v16qi", IX86_BUILTIN_VAESDEC16, UNKNOWN, (int) V16QI_FTYPE_V16QI_V16QI) ! BDESC (0, OPTION_MASK_ISA2_VAES, CODE_FOR_vaesdec_v32qi, "__builtin_ia32_vaesdec_v32qi", IX86_BUILTIN_VAESDEC32, UNKNOWN, (int) V32QI_FTYPE_V32QI_V32QI) ! BDESC (0, OPTION_MASK_ISA2_VAES, CODE_FOR_vaesdec_v64qi, "__builtin_ia32_vaesdec_v64qi", IX86_BUILTIN_VAESDEC64, UNKNOWN, (int) V64QI_FTYPE_V64QI_V64QI) ! BDESC (0, OPTION_MASK_ISA2_VAES, CODE_FOR_vaesdeclast_v16qi, "__builtin_ia32_vaesdeclast_v16qi", IX86_BUILTIN_VAESDECLAST16, UNKNOWN, (int) V16QI_FTYPE_V16QI_V16QI) ! BDESC (0, OPTION_MASK_ISA2_VAES, CODE_FOR_vaesdeclast_v32qi, "__builtin_ia32_vaesdeclast_v32qi", IX86_BUILTIN_VAESDECLAST32, UNKNOWN, (int) V32QI_FTYPE_V32QI_V32QI) ! BDESC (0, OPTION_MASK_ISA2_VAES, CODE_FOR_vaesdeclast_v64qi, "__builtin_ia32_vaesdeclast_v64qi", IX86_BUILTIN_VAESDECLAST64, UNKNOWN, (int) V64QI_FTYPE_V64QI_V64QI) ! BDESC (0, OPTION_MASK_ISA2_VAES, CODE_FOR_vaesenc_v16qi, "__builtin_ia32_vaesenc_v16qi", IX86_BUILTIN_VAESENC16, UNKNOWN, (int) V16QI_FTYPE_V16QI_V16QI) ! BDESC (0, OPTION_MASK_ISA2_VAES, CODE_FOR_vaesenc_v32qi, "__builtin_ia32_vaesenc_v32qi", IX86_BUILTIN_VAESENC32, UNKNOWN, (int) V32QI_FTYPE_V32QI_V32QI) ! BDESC (0, OPTION_MASK_ISA2_VAES, CODE_FOR_vaesenc_v64qi, "__builtin_ia32_vaesenc_v64qi", IX86_BUILTIN_VAESENC64, UNKNOWN, (int) V64QI_FTYPE_V64QI_V64QI) ! BDESC (0, OPTION_MASK_ISA2_VAES, CODE_FOR_vaesenclast_v16qi, "__builtin_ia32_vaesenclast_v16qi", IX86_BUILTIN_VAESENCLAST16, UNKNOWN, (int) V16QI_FTYPE_V16QI_V16QI) ! BDESC (0, OPTION_MASK_ISA2_VAES, CODE_FOR_vaesenclast_v32qi, "__builtin_ia32_vaesenclast_v32qi", IX86_BUILTIN_VAESENCLAST32, UNKNOWN, (int) V32QI_FTYPE_V32QI_V32QI) ! BDESC (0, OPTION_MASK_ISA2_VAES, CODE_FOR_vaesenclast_v64qi, "__builtin_ia32_vaesenclast_v64qi", IX86_BUILTIN_VAESENCLAST64, UNKNOWN, (int) V64QI_FTYPE_V64QI_V64QI) /* BF16 */ BDESC (0, OPTION_MASK_ISA2_AVX512BF16, CODE_FOR_avx512f_cvtne2ps2bf16_v32hi, "__builtin_ia32_cvtne2ps2bf16_v32hi", IX86_BUILTIN_CVTNE2PS2HI16_V32HI, UNKNOWN, (int) V32HI_FTYPE_V16SF_V16SF) --- 2751,2768 ---- BDESC (0, OPTION_MASK_ISA2_RDPID, CODE_FOR_rdpid, "__builtin_ia32_rdpid", IX86_BUILTIN_RDPID, UNKNOWN, (int) UNSIGNED_FTYPE_VOID) /* VAES. */ ! BDESC (OPTION_MASK_ISA_AVX512VL, OPTION_MASK_ISA2_VAES, CODE_FOR_vaesdec_v16qi, "__builtin_ia32_vaesdec_v16qi", IX86_BUILTIN_VAESDEC16, UNKNOWN, (int) V16QI_FTYPE_V16QI_V16QI) ! BDESC (OPTION_MASK_ISA_AVX, OPTION_MASK_ISA2_VAES, CODE_FOR_vaesdec_v32qi, "__builtin_ia32_vaesdec_v32qi", IX86_BUILTIN_VAESDEC32, UNKNOWN, (int) V32QI_FTYPE_V32QI_V32QI) ! BDESC (OPTION_MASK_ISA_AVX512F, OPTION_MASK_ISA2_VAES, CODE_FOR_vaesdec_v64qi, "__builtin_ia32_vaesdec_v64qi", IX86_BUILTIN_VAESDEC64, UNKNOWN, (int) V64QI_FTYPE_V64QI_V64QI) ! BDESC (OPTION_MASK_ISA_AVX512VL, OPTION_MASK_ISA2_VAES, CODE_FOR_vaesdeclast_v16qi, "__builtin_ia32_vaesdeclast_v16qi", IX86_BUILTIN_VAESDECLAST16, UNKNOWN, (int) V16QI_FTYPE_V16QI_V16QI) ! BDESC (OPTION_MASK_ISA_AVX, OPTION_MASK_ISA2_VAES, CODE_FOR_vaesdeclast_v32qi, "__builtin_ia32_vaesdeclast_v32qi", IX86_BUILTIN_VAESDECLAST32, UNKNOWN, (int) V32QI_FTYPE_V32QI_V32QI) ! BDESC (OPTION_MASK_ISA_AVX512F, OPTION_MASK_ISA2_VAES, CODE_FOR_vaesdeclast_v64qi, "__builtin_ia32_vaesdeclast_v64qi", IX86_BUILTIN_VAESDECLAST64, UNKNOWN, (int) V64QI_FTYPE_V64QI_V64QI) ! BDESC (OPTION_MASK_ISA_AVX512VL, OPTION_MASK_ISA2_VAES, CODE_FOR_vaesenc_v16qi, "__builtin_ia32_vaesenc_v16qi", IX86_BUILTIN_VAESENC16, UNKNOWN, (int) V16QI_FTYPE_V16QI_V16QI) ! BDESC (OPTION_MASK_ISA_AVX, OPTION_MASK_ISA2_VAES, CODE_FOR_vaesenc_v32qi, "__builtin_ia32_vaesenc_v32qi", IX86_BUILTIN_VAESENC32, UNKNOWN, (int) V32QI_FTYPE_V32QI_V32QI) ! BDESC (OPTION_MASK_ISA_AVX512F, OPTION_MASK_ISA2_VAES, CODE_FOR_vaesenc_v64qi, "__builtin_ia32_vaesenc_v64qi", IX86_BUILTIN_VAESENC64, UNKNOWN, (int) V64QI_FTYPE_V64QI_V64QI) ! BDESC (OPTION_MASK_ISA_AVX512VL, OPTION_MASK_ISA2_VAES, CODE_FOR_vaesenclast_v16qi, "__builtin_ia32_vaesenclast_v16qi", IX86_BUILTIN_VAESENCLAST16, UNKNOWN, (int) V16QI_FTYPE_V16QI_V16QI) ! BDESC (OPTION_MASK_ISA_AVX, OPTION_MASK_ISA2_VAES, CODE_FOR_vaesenclast_v32qi, "__builtin_ia32_vaesenclast_v32qi", IX86_BUILTIN_VAESENCLAST32, UNKNOWN, (int) V32QI_FTYPE_V32QI_V32QI) ! BDESC (OPTION_MASK_ISA_AVX512F, OPTION_MASK_ISA2_VAES, CODE_FOR_vaesenclast_v64qi, "__builtin_ia32_vaesenclast_v64qi", IX86_BUILTIN_VAESENCLAST64, UNKNOWN, (int) V64QI_FTYPE_V64QI_V64QI) /* BF16 */ BDESC (0, OPTION_MASK_ISA2_AVX512BF16, CODE_FOR_avx512f_cvtne2ps2bf16_v32hi, "__builtin_ia32_cvtne2ps2bf16_v32hi", IX86_BUILTIN_CVTNE2PS2HI16_V32HI, UNKNOWN, (int) V32HI_FTYPE_V16SF_V16SF) diff -Nrcpad gcc-12.4.0/gcc/config/i386/i386-c.cc gcc-12.5.0-RC-20250704/gcc/config/i386/i386-c.cc *** gcc-12.4.0/gcc/config/i386/i386-c.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/config/i386/i386-c.cc Fri Jul 4 07:24:42 2025 *************** ix86_target_macros_internal (HOST_WIDE_I *** 136,141 **** --- 136,145 ---- def_or_undef (parse_in, "__znver4"); def_or_undef (parse_in, "__znver4__"); break; + case PROCESSOR_ZNVER5: + def_or_undef (parse_in, "__znver5"); + def_or_undef (parse_in, "__znver5__"); + break; case PROCESSOR_BTVER1: def_or_undef (parse_in, "__btver1"); def_or_undef (parse_in, "__btver1__"); *************** ix86_target_macros_internal (HOST_WIDE_I *** 333,338 **** --- 337,345 ---- case PROCESSOR_ZNVER4: def_or_undef (parse_in, "__tune_znver4__"); break; + case PROCESSOR_ZNVER5: + def_or_undef (parse_in, "__tune_znver5__"); + break; case PROCESSOR_BTVER1: def_or_undef (parse_in, "__tune_btver1__"); break; diff -Nrcpad gcc-12.4.0/gcc/config/i386/i386-expand.cc gcc-12.5.0-RC-20250704/gcc/config/i386/i386-expand.cc *** gcc-12.4.0/gcc/config/i386/i386-expand.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/config/i386/i386-expand.cc Fri Jul 4 07:24:42 2025 *************** ix86_expand_builtin (tree exp, rtx targe *** 12747,12752 **** --- 12747,12755 ---- op1 = expand_normal (arg1); op2 = expand_normal (arg2); + if (GET_MODE (op1) != Pmode) + op1 = convert_to_mode (Pmode, op1, 1); + if (!address_operand (op2, VOIDmode)) { op2 = convert_memory_address (Pmode, op2); *************** ix86_expand_builtin (tree exp, rtx targe *** 12782,12787 **** --- 12785,12793 ---- emit_label (ok_label); emit_insn (gen_rtx_SET (target, pat)); + if (GET_MODE (op0) != Pmode) + op0 = convert_to_mode (Pmode, op0, 1); + for (i = 0; i < 8; i++) { op = gen_rtx_MEM (V2DImode, *************** ix86_expand_builtin (tree exp, rtx targe *** 12806,12811 **** --- 12812,12820 ---- if (!REG_P (op0)) op0 = copy_to_mode_reg (SImode, op0); + if (GET_MODE (op2) != Pmode) + op2 = convert_to_mode (Pmode, op2, 1); + op = gen_rtx_REG (V2DImode, GET_SSE_REGNO (0)); emit_move_insn (op, op1); *************** ix86_expand_builtin (tree exp, rtx targe *** 12843,12848 **** --- 12852,12860 ---- if (!REG_P (op0)) op0 = copy_to_mode_reg (SImode, op0); + if (GET_MODE (op3) != Pmode) + op3 = convert_to_mode (Pmode, op3, 1); + /* Force to use xmm0, xmm1 for keylow, keyhi*/ op = gen_rtx_REG (V2DImode, GET_SSE_REGNO (0)); emit_move_insn (op, op1); *************** quarter: *** 16541,16546 **** --- 16553,16560 ---- else if (use_vec_merge) { do_vec_merge: + if (!nonimmediate_operand (val, inner_mode)) + val = force_reg (inner_mode, val); tmp = gen_rtx_VEC_DUPLICATE (mode, val); tmp = gen_rtx_VEC_MERGE (mode, tmp, target, GEN_INT (HOST_WIDE_INT_1U << elt)); diff -Nrcpad gcc-12.4.0/gcc/config/i386/i386-options.cc gcc-12.5.0-RC-20250704/gcc/config/i386/i386-options.cc *** gcc-12.4.0/gcc/config/i386/i386-options.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/config/i386/i386-options.cc Fri Jul 4 07:24:42 2025 *************** along with GCC; see the file COPYING3. *** 158,168 **** #define m_ZNVER2 (HOST_WIDE_INT_1U<x_ix86_isa_flags)) opts->x_ix86_move_max = PVW_AVX512; + /* Align with vectorizer to avoid potential STLF issue. */ + else if (TARGET_AVX_P (opts->x_ix86_isa_flags)) + opts->x_ix86_move_max = PVW_AVX256; else opts->x_ix86_move_max = PVW_AVX128; } *************** ix86_option_override_internal (bool main *** 2787,2792 **** --- 2792,2800 ---- { if (TARGET_AVX512F_P (opts->x_ix86_isa_flags)) opts->x_ix86_store_max = PVW_AVX512; + /* Align with vectorizer to avoid potential STLF issue. */ + else if (TARGET_AVX_P (opts->x_ix86_isa_flags)) + opts->x_ix86_store_max = PVW_AVX256; else opts->x_ix86_store_max = PVW_AVX128; } diff -Nrcpad gcc-12.4.0/gcc/config/i386/i386.cc gcc-12.5.0-RC-20250704/gcc/config/i386/i386.cc *** gcc-12.4.0/gcc/config/i386/i386.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/config/i386/i386.cc Fri Jul 4 07:24:42 2025 *************** ix86_gimplify_va_arg (tree valist, tree *** 4780,4792 **** examine_argument (nat_mode, type, 0, &needed_intregs, &needed_sseregs); ! need_temp = (!REG_P (container) && ((needed_intregs && TYPE_ALIGN (type) > 64) || TYPE_ALIGN (type) > 128)); /* In case we are passing structure, verify that it is consecutive block on the register save area. If not we need to do moves. */ ! if (!need_temp && !REG_P (container)) { /* Verify that all registers are strictly consecutive */ if (SSE_REGNO_P (REGNO (XEXP (XVECEXP (container, 0, 0), 0)))) --- 4780,4810 ---- examine_argument (nat_mode, type, 0, &needed_intregs, &needed_sseregs); ! bool container_in_reg = false; ! if (REG_P (container)) ! container_in_reg = true; ! else if (GET_CODE (container) == PARALLEL ! && GET_MODE (container) == BLKmode ! && XVECLEN (container, 0) == 1) ! { ! /* Check if it is a PARALLEL BLKmode container of an EXPR_LIST ! expression in a TImode register. In this case, temp isn't ! needed. Otherwise, the TImode variable will be put in the ! GPR save area which guarantees only 8-byte alignment. */ ! rtx x = XVECEXP (container, 0, 0); ! if (GET_CODE (x) == EXPR_LIST ! && REG_P (XEXP (x, 0)) ! && XEXP (x, 1) == const0_rtx) ! container_in_reg = true; ! } ! ! need_temp = (!container_in_reg && ((needed_intregs && TYPE_ALIGN (type) > 64) || TYPE_ALIGN (type) > 128)); /* In case we are passing structure, verify that it is consecutive block on the register save area. If not we need to do moves. */ ! if (!need_temp && !container_in_reg) { /* Verify that all registers are strictly consecutive */ if (SSE_REGNO_P (REGNO (XEXP (XVECEXP (container, 0, 0), 0)))) *************** ix86_tls_address_pattern_p (rtx op) *** 11769,11775 **** } /* Rewrite *LOC so that it refers to a default TLS address space. */ ! void ix86_rewrite_tls_address_1 (rtx *loc) { subrtx_ptr_iterator::array_type array; --- 11787,11793 ---- } /* Rewrite *LOC so that it refers to a default TLS address space. */ ! static void ix86_rewrite_tls_address_1 (rtx *loc) { subrtx_ptr_iterator::array_type array; *************** ix86_rewrite_tls_address_1 (rtx *loc) *** 11791,11796 **** --- 11809,11821 ---- if (GET_CODE (u) == UNSPEC && XINT (u, 1) == UNSPEC_TP) { + /* NB: Since address override only applies to the + (reg32) part in fs:(reg32), return if address + override is used. */ + if (Pmode != word_mode + && REG_P (XEXP (*x, 1 - i))) + return; + addr_space_t as = DEFAULT_TLS_SEG_REG; *x = XEXP (*x, 1 - i); *************** ix86_dirflag_mode_needed (rtx_insn *insn *** 14360,14368 **** static bool ix86_check_avx_upper_register (const_rtx exp) { ! return (SSE_REG_P (exp) ! && !EXT_REX_SSE_REG_P (exp) ! && GET_MODE_BITSIZE (GET_MODE (exp)) > 128); } /* Check if a 256bit or 512bit AVX register is referenced in stores. */ --- 14385,14403 ---- static bool ix86_check_avx_upper_register (const_rtx exp) { ! /* construct_container may return a parallel with expr_list ! which contains the real reg and mode */ ! subrtx_iterator::array_type array; ! FOR_EACH_SUBRTX (iter, array, exp, NONCONST) ! { ! const_rtx x = *iter; ! if (SSE_REG_P (x) ! && !EXT_REX_SSE_REG_P (x) ! && GET_MODE_BITSIZE (GET_MODE (x)) > 128) ! return true; ! } ! ! return false; } /* Check if a 256bit or 512bit AVX register is referenced in stores. */ *************** ix86_check_avx_upper_register (const_rtx *** 14370,14376 **** static void ix86_check_avx_upper_stores (rtx dest, const_rtx, void *data) { ! if (ix86_check_avx_upper_register (dest)) { bool *used = (bool *) data; *used = true; --- 14405,14413 ---- static void ix86_check_avx_upper_stores (rtx dest, const_rtx, void *data) { ! if (SSE_REG_P (dest) ! && !EXT_REX_SSE_REG_P (dest) ! && GET_MODE_BITSIZE (GET_MODE (dest)) > 128) { bool *used = (bool *) data; *used = true; *************** ix86_avx_u128_mode_needed (rtx_insn *ins *** 14428,14441 **** return AVX_U128_CLEAN; } - subrtx_iterator::array_type array; - rtx set = single_set (insn); if (set) { rtx dest = SET_DEST (set); rtx src = SET_SRC (set); ! if (ix86_check_avx_upper_register (dest)) { /* This is an YMM/ZMM load. Return AVX_U128_DIRTY if the source isn't zero. */ --- 14465,14478 ---- return AVX_U128_CLEAN; } rtx set = single_set (insn); if (set) { rtx dest = SET_DEST (set); rtx src = SET_SRC (set); ! if (SSE_REG_P (dest) ! && !EXT_REX_SSE_REG_P (dest) ! && GET_MODE_BITSIZE (GET_MODE (dest)) > 128) { /* This is an YMM/ZMM load. Return AVX_U128_DIRTY if the source isn't zero. */ *************** ix86_avx_u128_mode_needed (rtx_insn *ins *** 14446,14454 **** } else { ! FOR_EACH_SUBRTX (iter, array, src, NONCONST) ! if (ix86_check_avx_upper_register (*iter)) ! return AVX_U128_DIRTY; } /* This isn't YMM/ZMM load/store. */ --- 14483,14490 ---- } else { ! if (ix86_check_avx_upper_register (src)) ! return AVX_U128_DIRTY; } /* This isn't YMM/ZMM load/store. */ *************** ix86_avx_u128_mode_needed (rtx_insn *ins *** 14459,14467 **** Hardware changes state only when a 256bit register is written to, but we need to prevent the compiler from moving optimal insertion point above eventual read from 256bit or 512 bit register. */ ! FOR_EACH_SUBRTX (iter, array, PATTERN (insn), NONCONST) ! if (ix86_check_avx_upper_register (*iter)) ! return AVX_U128_DIRTY; return AVX_U128_ANY; } --- 14495,14502 ---- Hardware changes state only when a 256bit register is written to, but we need to prevent the compiler from moving optimal insertion point above eventual read from 256bit or 512 bit register. */ ! if (ix86_check_avx_upper_register (PATTERN (insn))) ! return AVX_U128_DIRTY; return AVX_U128_ANY; } *************** ix86_fold_builtin (tree fndecl, int n_ar *** 17902,17910 **** unsigned int prec = TYPE_PRECISION (TREE_TYPE (args[0])); unsigned int start = tree_to_uhwi (args[1]); unsigned int len = (start & 0xff00) >> 8; start &= 0xff; if (start >= prec || len == 0) ! res = 0; else if (!tree_fits_uhwi_p (args[0])) break; else --- 17937,17947 ---- unsigned int prec = TYPE_PRECISION (TREE_TYPE (args[0])); unsigned int start = tree_to_uhwi (args[1]); unsigned int len = (start & 0xff00) >> 8; + tree lhs_type = TREE_TYPE (TREE_TYPE (fndecl)); start &= 0xff; if (start >= prec || len == 0) ! return omit_one_operand (lhs_type, build_zero_cst (lhs_type), ! args[0]); else if (!tree_fits_uhwi_p (args[0])) break; else *************** ix86_fold_builtin (tree fndecl, int n_ar *** 17913,17919 **** len = prec; if (len < HOST_BITS_PER_WIDE_INT) res &= (HOST_WIDE_INT_1U << len) - 1; ! return build_int_cstu (TREE_TYPE (TREE_TYPE (fndecl)), res); } break; --- 17950,17956 ---- len = prec; if (len < HOST_BITS_PER_WIDE_INT) res &= (HOST_WIDE_INT_1U << len) - 1; ! return build_int_cstu (lhs_type, res); } break; *************** ix86_fold_builtin (tree fndecl, int n_ar *** 17923,17937 **** if (tree_fits_uhwi_p (args[1])) { unsigned int idx = tree_to_uhwi (args[1]) & 0xff; if (idx >= TYPE_PRECISION (TREE_TYPE (args[0]))) return args[0]; if (idx == 0) ! return build_int_cst (TREE_TYPE (TREE_TYPE (fndecl)), 0); if (!tree_fits_uhwi_p (args[0])) break; unsigned HOST_WIDE_INT res = tree_to_uhwi (args[0]); res &= ~(HOST_WIDE_INT_M1U << idx); ! return build_int_cstu (TREE_TYPE (TREE_TYPE (fndecl)), res); } break; --- 17960,17976 ---- if (tree_fits_uhwi_p (args[1])) { unsigned int idx = tree_to_uhwi (args[1]) & 0xff; + tree lhs_type = TREE_TYPE (TREE_TYPE (fndecl)); if (idx >= TYPE_PRECISION (TREE_TYPE (args[0]))) return args[0]; if (idx == 0) ! return omit_one_operand (lhs_type, build_zero_cst (lhs_type), ! args[0]); if (!tree_fits_uhwi_p (args[0])) break; unsigned HOST_WIDE_INT res = tree_to_uhwi (args[0]); res &= ~(HOST_WIDE_INT_M1U << idx); ! return build_int_cstu (lhs_type, res); } break; *************** ix86_stack_protect_guard (void) *** 22609,22614 **** --- 22648,22660 ---- return default_stack_protect_guard (); } + static bool + ix86_stack_protect_runtime_enabled_p (void) + { + /* Naked functions should not enable stack protector. */ + return !ix86_function_naked (current_function_decl); + } + /* For 32-bit code we can save PIC register setup by using __stack_chk_fail_local hidden function instead of calling __stack_chk_fail directly. 64-bit code doesn't need to setup any PIC *************** ix86_reassociation_width (unsigned int o *** 22881,22892 **** if (width == 1) return 1; ! /* Integer vector instructions execute in FP unit and can execute 3 additions and one multiplication per cycle. */ if ((ix86_tune == PROCESSOR_ZNVER1 || ix86_tune == PROCESSOR_ZNVER2 || ix86_tune == PROCESSOR_ZNVER3 || ix86_tune == PROCESSOR_ZNVER4) && INTEGRAL_MODE_P (mode) && op != PLUS && op != MINUS) return 1; /* Account for targets that splits wide vectors into multiple parts. */ if (TARGET_AVX512_SPLIT_REGS && GET_MODE_BITSIZE (mode) > 256) --- 22927,22943 ---- if (width == 1) return 1; ! /* Znver1-4 Integer vector instructions execute in FP unit and can execute 3 additions and one multiplication per cycle. */ if ((ix86_tune == PROCESSOR_ZNVER1 || ix86_tune == PROCESSOR_ZNVER2 || ix86_tune == PROCESSOR_ZNVER3 || ix86_tune == PROCESSOR_ZNVER4) && INTEGRAL_MODE_P (mode) && op != PLUS && op != MINUS) return 1; + /* Znver5 can do 2 integer multiplications per cycle with latency + of 3. */ + if (ix86_tune == PROCESSOR_ZNVER5 + && INTEGRAL_MODE_P (mode) && op != PLUS && op != MINUS) + width = 6; /* Account for targets that splits wide vectors into multiple parts. */ if (TARGET_AVX512_SPLIT_REGS && GET_MODE_BITSIZE (mode) > 256) *************** ix86_libgcc_floating_mode_supported_p *** 24614,24619 **** --- 24665,24674 ---- #undef TARGET_STACK_PROTECT_GUARD #define TARGET_STACK_PROTECT_GUARD ix86_stack_protect_guard + #undef TARGET_STACK_PROTECT_RUNTIME_ENABLED_P + #define TARGET_STACK_PROTECT_RUNTIME_ENABLED_P \ + ix86_stack_protect_runtime_enabled_p + #if !TARGET_MACHO #undef TARGET_STACK_PROTECT_FAIL #define TARGET_STACK_PROTECT_FAIL ix86_stack_protect_fail diff -Nrcpad gcc-12.4.0/gcc/config/i386/i386.h gcc-12.5.0-RC-20250704/gcc/config/i386/i386.h *** gcc-12.4.0/gcc/config/i386/i386.h Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/config/i386/i386.h Fri Jul 4 07:24:42 2025 *************** extern unsigned char ix86_tune_features[ *** 413,418 **** --- 413,420 ---- ix86_tune_features[X86_TUNE_FUSE_CMP_AND_BRANCH_SOFLAGS] #define TARGET_FUSE_ALU_AND_BRANCH \ ix86_tune_features[X86_TUNE_FUSE_ALU_AND_BRANCH] + #define TARGET_FUSE_MOV_AND_ALU \ + ix86_tune_features[X86_TUNE_FUSE_MOV_AND_ALU] #define TARGET_OPT_AGU ix86_tune_features[X86_TUNE_OPT_AGU] #define TARGET_AVOID_LEA_FOR_ADDR \ ix86_tune_features[X86_TUNE_AVOID_LEA_FOR_ADDR] *************** extern int const svr4_dbx_register_map[F *** 2172,2178 **** #define ASM_OUTPUT_SYMBOL_REF(FILE, SYM) \ do { \ const char *name \ ! = assemble_name_resolve (XSTR (x, 0)); \ /* In -masm=att wrap identifiers that start with $ \ into parens. */ \ if (ASSEMBLER_DIALECT == ASM_ATT \ --- 2174,2180 ---- #define ASM_OUTPUT_SYMBOL_REF(FILE, SYM) \ do { \ const char *name \ ! = assemble_name_resolve (XSTR (SYM, 0)); \ /* In -masm=att wrap identifiers that start with $ \ into parens. */ \ if (ASSEMBLER_DIALECT == ASM_ATT \ *************** enum processor_type *** 2261,2266 **** --- 2263,2269 ---- PROCESSOR_ZNVER2, PROCESSOR_ZNVER3, PROCESSOR_ZNVER4, + PROCESSOR_ZNVER5, PROCESSOR_max }; *************** constexpr wide_int_bitmask PTA_GOLDMONT_ *** 2347,2353 **** | PTA_SGX | PTA_PTWRITE; constexpr wide_int_bitmask PTA_TREMONT = PTA_GOLDMONT_PLUS | PTA_CLWB | PTA_GFNI | PTA_MOVDIRI | PTA_MOVDIR64B | PTA_CLDEMOTE | PTA_WAITPKG; ! constexpr wide_int_bitmask PTA_ALDERLAKE = PTA_TREMONT | PTA_ADX | PTA_AVX | PTA_AVX2 | PTA_BMI | PTA_BMI2 | PTA_F16C | PTA_FMA | PTA_LZCNT | PTA_PCONFIG | PTA_PKU | PTA_VAES | PTA_VPCLMULQDQ | PTA_SERIALIZE | PTA_HRESET | PTA_KL | PTA_WIDEKL | PTA_AVXVNNI; --- 2350,2357 ---- | PTA_SGX | PTA_PTWRITE; constexpr wide_int_bitmask PTA_TREMONT = PTA_GOLDMONT_PLUS | PTA_CLWB | PTA_GFNI | PTA_MOVDIRI | PTA_MOVDIR64B | PTA_CLDEMOTE | PTA_WAITPKG; ! constexpr wide_int_bitmask PTA_ALDERLAKE = PTA_GOLDMONT_PLUS | PTA_CLWB ! | PTA_GFNI | PTA_MOVDIRI | PTA_MOVDIR64B | PTA_WAITPKG | PTA_ADX | PTA_AVX | PTA_AVX2 | PTA_BMI | PTA_BMI2 | PTA_F16C | PTA_FMA | PTA_LZCNT | PTA_PCONFIG | PTA_PKU | PTA_VAES | PTA_VPCLMULQDQ | PTA_SERIALIZE | PTA_HRESET | PTA_KL | PTA_WIDEKL | PTA_AVXVNNI; *************** constexpr wide_int_bitmask PTA_ZNVER4 = *** 2368,2373 **** --- 2372,2379 ---- | PTA_AVX512IFMA | PTA_AVX512CD | PTA_AVX512BW | PTA_AVX512VL | PTA_AVX512BF16 | PTA_AVX512VBMI | PTA_AVX512VBMI2 | PTA_GFNI | PTA_AVX512VNNI | PTA_AVX512BITALG | PTA_AVX512VPOPCNTDQ; + constexpr wide_int_bitmask PTA_ZNVER5 = PTA_ZNVER4 | PTA_AVXVNNI + | PTA_MOVDIRI | PTA_MOVDIR64B | PTA_AVX512VP2INTERSECT; #ifndef GENERATOR_FILE diff -Nrcpad gcc-12.4.0/gcc/config/i386/i386.md gcc-12.5.0-RC-20250704/gcc/config/i386/i386.md *** gcc-12.4.0/gcc/config/i386/i386.md Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/config/i386/i386.md Fri Jul 4 07:24:42 2025 *************** *** 478,484 **** ;; Processor type. (define_attr "cpu" "none,pentium,pentiumpro,geode,k6,athlon,k8,core2,nehalem, atom,slm,glm,haswell,generic,amdfam10,bdver1,bdver2,bdver3, ! bdver4,btver2,znver1,znver2,znver3,znver4" (const (symbol_ref "ix86_schedule"))) ;; A basic instruction type. Refinements due to arguments to be --- 478,484 ---- ;; Processor type. (define_attr "cpu" "none,pentium,pentiumpro,geode,k6,athlon,k8,core2,nehalem, atom,slm,glm,haswell,generic,amdfam10,bdver1,bdver2,bdver3, ! bdver4,btver2,znver1,znver2,znver3,znver4,znver5" (const (symbol_ref "ix86_schedule"))) ;; A basic instruction type. Refinements due to arguments to be *************** *** 1308,1314 **** (include "bdver3.md") (include "btver2.md") (include "znver.md") ! (include "znver4.md") (include "geode.md") (include "atom.md") (include "slm.md") --- 1308,1314 ---- (include "bdver3.md") (include "btver2.md") (include "znver.md") ! (include "zn4zn5.md") (include "geode.md") (include "atom.md") (include "slm.md") *************** *** 2251,2262 **** [(set (attr "isa") (cond [(eq_attr "alternative" "0,1,17,18") (const_string "nox64") ! (eq_attr "alternative" "2,3,4,5,10,11,23,25") (const_string "x64") (eq_attr "alternative" "19,20") (const_string "x64_sse2") (eq_attr "alternative" "21,22") (const_string "sse2") ] (const_string "*"))) (set (attr "type") --- 2251,2266 ---- [(set (attr "isa") (cond [(eq_attr "alternative" "0,1,17,18") (const_string "nox64") ! (eq_attr "alternative" "2,3,4,5,10,11") (const_string "x64") (eq_attr "alternative" "19,20") (const_string "x64_sse2") (eq_attr "alternative" "21,22") (const_string "sse2") + (eq_attr "alternative" "23,25") + (const_string "x64_avx512bw") + (eq_attr "alternative" "24,26,27") + (const_string "avx512bw") ] (const_string "*"))) (set (attr "type") *************** *** 2467,2472 **** --- 2471,2478 ---- [(set (attr "isa") (cond [(eq_attr "alternative" "12,13") (const_string "sse2") + (eq_attr "alternative" "14,15,16,17") + (const_string "avx512bw") ] (const_string "*"))) (set (attr "type") *************** *** 14061,14071 **** (define_insn "*bt" [(set (reg:CCC FLAGS_REG) (compare:CCC (zero_extract:SWI48 (match_operand:SWI48 0 "nonimmediate_operand" "r,m") (const_int 1) ! (match_operand:SI 1 "nonmemory_operand" "r,")) ! (const_int 0)))] "" { switch (get_attr_mode (insn)) --- 14067,14077 ---- (define_insn "*bt" [(set (reg:CCC FLAGS_REG) (compare:CCC + (const_int 0) (zero_extract:SWI48 (match_operand:SWI48 0 "nonimmediate_operand" "r,m") (const_int 1) ! (match_operand:SI 1 "nonmemory_operand" "r,"))))] "" { switch (get_attr_mode (insn)) *************** *** 14111,14128 **** "&& 1" [(set (reg:CCC FLAGS_REG) (compare:CCC (zero_extract:SWI48 (match_dup 1) (const_int 1) ! (match_dup 2)) ! (const_int 0))) (set (pc) (if_then_else (match_op_dup 0 [(reg:CCC FLAGS_REG) (const_int 0)]) (label_ref (match_dup 3)) (pc)))] { operands[0] = shallow_copy_rtx (operands[0]); ! PUT_CODE (operands[0], reverse_condition (GET_CODE (operands[0]))); }) (define_insn_and_split "*jcc_bt_1" --- 14117,14134 ---- "&& 1" [(set (reg:CCC FLAGS_REG) (compare:CCC + (const_int 0) (zero_extract:SWI48 (match_dup 1) (const_int 1) ! (match_dup 2)))) (set (pc) (if_then_else (match_op_dup 0 [(reg:CCC FLAGS_REG) (const_int 0)]) (label_ref (match_dup 3)) (pc)))] { operands[0] = shallow_copy_rtx (operands[0]); ! PUT_CODE (operands[0], GET_CODE (operands[0]) == NE ? LTU : GEU); }) (define_insn_and_split "*jcc_bt_1" *************** *** 14143,14153 **** "&& 1" [(set (reg:CCC FLAGS_REG) (compare:CCC (zero_extract:SWI48 (match_dup 1) (const_int 1) ! (match_dup 2)) ! (const_int 0))) (set (pc) (if_then_else (match_op_dup 0 [(reg:CCC FLAGS_REG) (const_int 0)]) (label_ref (match_dup 3)) --- 14149,14159 ---- "&& 1" [(set (reg:CCC FLAGS_REG) (compare:CCC + (const_int 0) (zero_extract:SWI48 (match_dup 1) (const_int 1) ! (match_dup 2)))) (set (pc) (if_then_else (match_op_dup 0 [(reg:CCC FLAGS_REG) (const_int 0)]) (label_ref (match_dup 3)) *************** *** 14155,14161 **** { operands[2] = lowpart_subreg (SImode, operands[2], QImode); operands[0] = shallow_copy_rtx (operands[0]); ! PUT_CODE (operands[0], reverse_condition (GET_CODE (operands[0]))); }) ;; Avoid useless masking of bit offset operand. --- 14161,14167 ---- { operands[2] = lowpart_subreg (SImode, operands[2], QImode); operands[0] = shallow_copy_rtx (operands[0]); ! PUT_CODE (operands[0], GET_CODE (operands[0]) == NE ? LTU : GEU); }) ;; Avoid useless masking of bit offset operand. *************** *** 14180,14197 **** "&& 1" [(set (reg:CCC FLAGS_REG) (compare:CCC (zero_extract:SWI48 (match_dup 1) (const_int 1) ! (match_dup 2)) ! (const_int 0))) (set (pc) (if_then_else (match_op_dup 0 [(reg:CCC FLAGS_REG) (const_int 0)]) (label_ref (match_dup 4)) (pc)))] { operands[0] = shallow_copy_rtx (operands[0]); ! PUT_CODE (operands[0], reverse_condition (GET_CODE (operands[0]))); }) ;; Help combine recognize bt followed by cmov --- 14186,14203 ---- "&& 1" [(set (reg:CCC FLAGS_REG) (compare:CCC + (const_int 0) (zero_extract:SWI48 (match_dup 1) (const_int 1) ! (match_dup 2)))) (set (pc) (if_then_else (match_op_dup 0 [(reg:CCC FLAGS_REG) (const_int 0)]) (label_ref (match_dup 4)) (pc)))] { operands[0] = shallow_copy_rtx (operands[0]); ! PUT_CODE (operands[0], GET_CODE (operands[0]) == NE ? LTU : GEU); }) ;; Help combine recognize bt followed by cmov *************** *** 14211,14220 **** && ix86_pre_reload_split ()" [(set (reg:CCC FLAGS_REG) (compare:CCC ! (zero_extract:SWI48 (match_dup 1) (const_int 1) (match_dup 2)) ! (const_int 0))) (set (match_dup 0) ! (if_then_else:SWI248 (eq (reg:CCC FLAGS_REG) (const_int 0)) (match_dup 3) (match_dup 4)))] { --- 14217,14226 ---- && ix86_pre_reload_split ()" [(set (reg:CCC FLAGS_REG) (compare:CCC ! (const_int 0) ! (zero_extract:SWI48 (match_dup 1) (const_int 1) (match_dup 2)))) (set (match_dup 0) ! (if_then_else:SWI248 (ltu (reg:CCC FLAGS_REG) (const_int 0)) (match_dup 3) (match_dup 4)))] { *************** *** 14236,14245 **** "&& 1" [(set (reg:CCC FLAGS_REG) (compare:CCC ! (zero_extract:SWI48 (match_dup 1) (const_int 1) (match_dup 2)) ! (const_int 0))) (set (match_dup 0) ! (eq:QI (reg:CCC FLAGS_REG) (const_int 0)))] { operands[2] = lowpart_subreg (SImode, operands[2], QImode); }) --- 14242,14251 ---- "&& 1" [(set (reg:CCC FLAGS_REG) (compare:CCC ! (const_int 0) ! (zero_extract:SWI48 (match_dup 1) (const_int 1) (match_dup 2)))) (set (match_dup 0) ! (ltu:QI (reg:CCC FLAGS_REG) (const_int 0)))] { operands[2] = lowpart_subreg (SImode, operands[2], QImode); }) *************** *** 14259,14268 **** "&& 1" [(set (reg:CCC FLAGS_REG) (compare:CCC ! (zero_extract:SWI48 (match_dup 1) (const_int 1) (match_dup 2)) ! (const_int 0))) (set (match_dup 0) ! (ne:QI (reg:CCC FLAGS_REG) (const_int 0)))] { operands[2] = lowpart_subreg (SImode, operands[2], QImode); }) --- 14265,14274 ---- "&& 1" [(set (reg:CCC FLAGS_REG) (compare:CCC ! (const_int 0) ! (zero_extract:SWI48 (match_dup 1) (const_int 1) (match_dup 2)))) (set (match_dup 0) ! (geu:QI (reg:CCC FLAGS_REG) (const_int 0)))] { operands[2] = lowpart_subreg (SImode, operands[2], QImode); }) *************** *** 14280,14289 **** "&& 1" [(set (reg:CCC FLAGS_REG) (compare:CCC ! (zero_extract:SWI48 (match_dup 1) (const_int 1) (match_dup 2)) ! (const_int 0))) (set (match_dup 3) ! (ne:QI (reg:CCC FLAGS_REG) (const_int 0))) (set (match_dup 0) (zero_extend:SWI48 (match_dup 3)))] { operands[2] = lowpart_subreg (SImode, operands[2], QImode); --- 14286,14295 ---- "&& 1" [(set (reg:CCC FLAGS_REG) (compare:CCC ! (const_int 0) ! (zero_extract:SWI48 (match_dup 1) (const_int 1) (match_dup 2)))) (set (match_dup 3) ! (geu:QI (reg:CCC FLAGS_REG) (const_int 0))) (set (match_dup 0) (zero_extend:SWI48 (match_dup 3)))] { operands[2] = lowpart_subreg (SImode, operands[2], QImode); *************** *** 18008,18014 **** [(set (match_operand:SF 0 "register_operand" "=x,x,x") (unspec:SF [(match_operand:SF 1 "nonimmediate_operand" "0,x,m")] UNSPEC_RSQRT))] ! "TARGET_SSE && TARGET_SSE_MATH" "@ %vrsqrtss\t{%d1, %0|%0, %d1} %vrsqrtss\t{%d1, %0|%0, %d1} --- 18014,18020 ---- [(set (match_operand:SF 0 "register_operand" "=x,x,x") (unspec:SF [(match_operand:SF 1 "nonimmediate_operand" "0,x,m")] UNSPEC_RSQRT))] ! "TARGET_SSE" "@ %vrsqrtss\t{%d1, %0|%0, %d1} %vrsqrtss\t{%d1, %0|%0, %d1} diff -Nrcpad gcc-12.4.0/gcc/config/i386/sse.md gcc-12.5.0-RC-20250704/gcc/config/i386/sse.md *** gcc-12.4.0/gcc/config/i386/sse.md Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/config/i386/sse.md Fri Jul 4 07:24:42 2025 *************** *** 2866,2872 **** (const_string "*"))) (set_attr "mode" "")]) ! (define_insn "_vm3" [(set (match_operand:VFH_128 0 "register_operand" "=x,v") (vec_merge:VFH_128 (smaxmin:VFH_128 --- 2866,2892 ---- (const_string "*"))) (set_attr "mode" "")]) ! (define_expand "_vm3" ! [(set (match_operand:VFH_128 0 "register_operand") ! (vec_merge:VFH_128 ! (smaxmin:VFH_128 ! (match_operand:VFH_128 1 "register_operand") ! (match_operand:VFH_128 2 "nonimmediate_operand")) ! (match_dup 1) ! (const_int 1)))] ! "TARGET_SSE" ! { ! if (!flag_finite_math_only || flag_signed_zeros) ! { ! emit_insn (gen__ieee_vm3 ! (operands[0], operands[1], operands[2] ! ! )); ! DONE; ! } ! }) ! ! (define_insn "*_vm3" [(set (match_operand:VFH_128 0 "register_operand" "=x,v") (vec_merge:VFH_128 (smaxmin:VFH_128 *************** *** 2884,2889 **** --- 2904,2928 ---- (set_attr "prefix" "") (set_attr "mode" "")]) + (define_insn "_ieee_vm3" + [(set (match_operand:VFH_128 0 "register_operand" "=x,v") + (vec_merge:VFH_128 + (unspec:VFH_128 + [(match_operand:VFH_128 1 "register_operand" "0,v") + (match_operand:VFH_128 2 "nonimmediate_operand" "xm,")] + IEEE_MAXMIN) + (match_dup 1) + (const_int 1)))] + "TARGET_SSE" + "@ + \t{%2, %0|%0, %2} + v\t{%2, %1, %0|%0, %1, %2}" + [(set_attr "isa" "noavx,avx") + (set_attr "type" "sse") + (set_attr "btver2_sse_attr" "maxmin") + (set_attr "prefix" "") + (set_attr "mode" "")]) + (define_mode_attr addsub_cst [(V4DF "5") (V2DF "1") (V4SF "5") (V8SF "85")]) *************** *** 3724,3755 **** ;; Since vpcmpd implicitly clear the upper bits of dest, transform ;; vpcmpd + zero_extend to vpcmpd since the instruction ! (define_insn_and_split "*_cmp3_zero_extend" ! [(set (match_operand:SWI248x 0 "register_operand") (zero_extend:SWI248x (unspec: ! [(match_operand:V48H_AVX512VL 1 "nonimmediate_operand") ! (match_operand:V48H_AVX512VL 2 "nonimmediate_operand") (match_operand:SI 3 "const_0_to_7_operand" "n")] UNSPEC_PCMP)))] "TARGET_AVX512F && (!VALID_MASK_AVX512BW_MODE (mode) || TARGET_AVX512BW) - && ix86_pre_reload_split () && (GET_MODE_NUNITS (mode) < GET_MODE_PRECISION (mode))" ! "#" ! "&& 1" ! [(set (match_dup 0) ! (unspec: ! [(match_dup 1) ! (match_dup 2) ! (match_dup 3)] ! UNSPEC_PCMP))] ! { ! operands[1] = force_reg (mode, operands[1]); ! operands[0] = lowpart_subreg (mode, ! operands[0], mode); ! } [(set_attr "type" "ssecmp") (set_attr "length_immediate" "1") (set_attr "prefix" "evex") --- 3763,3781 ---- ;; Since vpcmpd implicitly clear the upper bits of dest, transform ;; vpcmpd + zero_extend to vpcmpd since the instruction ! (define_insn "*_cmp3_zero_extend" ! [(set (match_operand:SWI248x 0 "register_operand" "=k") (zero_extend:SWI248x (unspec: ! [(match_operand:V48H_AVX512VL 1 "nonimmediate_operand" "v") ! (match_operand:V48H_AVX512VL 2 "nonimmediate_operand" "vm") (match_operand:SI 3 "const_0_to_7_operand" "n")] UNSPEC_PCMP)))] "TARGET_AVX512F && (!VALID_MASK_AVX512BW_MODE (mode) || TARGET_AVX512BW) && (GET_MODE_NUNITS (mode) < GET_MODE_PRECISION (mode))" ! "vcmp\t{%3, %2, %1, %0|%0, %1, %2, %3}" [(set_attr "type" "ssecmp") (set_attr "length_immediate" "1") (set_attr "prefix" "evex") *************** *** 3777,3797 **** "#" "&& 1" [(set (match_dup 0) ! (unspec: ! [(match_dup 1) ! (match_dup 2) ! (match_dup 3)] ! UNSPEC_PCMP)) ! (set (match_dup 4) (match_dup 0))] { ! operands[1] = force_reg (mode, operands[1]); ! operands[0] = lowpart_subreg (mode, operands[0], mode); ! } ! [(set_attr "type" "ssecmp") ! (set_attr "length_immediate" "1") ! (set_attr "prefix" "evex") ! (set_attr "mode" "")]) (define_insn_and_split "*_cmp3" [(set (match_operand: 0 "register_operand") --- 3803,3824 ---- "#" "&& 1" [(set (match_dup 0) ! (zero_extend:SWI248x ! (unspec: ! [(match_dup 1) ! (match_dup 2) ! (match_dup 3)] ! UNSPEC_PCMP))) ! (set (match_dup 4) (match_dup 5))] { ! operands[5] = lowpart_subreg (mode, operands[0], mode); ! if (SUBREG_P (operands[5])) ! { ! SUBREG_PROMOTED_VAR_P (operands[5]) = 1; ! SUBREG_PROMOTED_SET (operands[5], 1); ! } ! }) (define_insn_and_split "*_cmp3" [(set (match_operand: 0 "register_operand") *************** *** 3826,3856 **** (set_attr "prefix" "evex") (set_attr "mode" "")]) ! (define_insn_and_split "*_cmp3_zero_extend" ! [(set (match_operand:SWI248x 0 "register_operand") (zero_extend:SWI248x (unspec: ! [(match_operand:VI12_AVX512VL 1 "nonimmediate_operand") ! (match_operand:VI12_AVX512VL 2 "nonimmediate_operand") ! (match_operand:SI 3 "const_0_to_7_operand")] UNSPEC_PCMP)))] "TARGET_AVX512BW ! && ix86_pre_reload_split () ! && (GET_MODE_NUNITS (mode) ! < GET_MODE_PRECISION (mode))" ! "#" ! "&& 1" ! [(set (match_dup 0) ! (unspec: ! [(match_dup 1) ! (match_dup 2) ! (match_dup 3)] ! UNSPEC_PCMP))] ! { ! operands[1] = force_reg (mode, operands[1]); ! operands[0] = lowpart_subreg (mode, ! operands[0], mode); ! } [(set_attr "type" "ssecmp") (set_attr "length_immediate" "1") (set_attr "prefix" "evex") --- 3853,3870 ---- (set_attr "prefix" "evex") (set_attr "mode" "")]) ! (define_insn "*_cmp3_zero_extend" ! [(set (match_operand:SWI248x 0 "register_operand" "=k") (zero_extend:SWI248x (unspec: ! [(match_operand:VI12_AVX512VL 1 "nonimmediate_operand" "v") ! (match_operand:VI12_AVX512VL 2 "nonimmediate_operand" "vm") ! (match_operand:SI 3 "const_0_to_7_operand" "n")] UNSPEC_PCMP)))] "TARGET_AVX512BW ! && (GET_MODE_NUNITS (mode) ! < GET_MODE_PRECISION (mode))" ! "vpcmp\t{%3, %2, %1, %0|%0, %1, %2, %3}" [(set_attr "type" "ssecmp") (set_attr "length_immediate" "1") (set_attr "prefix" "evex") *************** *** 3877,3892 **** "#" "&& 1" [(set (match_dup 0) ! (unspec: ! [(match_dup 1) ! (match_dup 2) ! (match_dup 3)] ! UNSPEC_PCMP)) ! (set (match_dup 4) (match_dup 0))] { ! operands[1] = force_reg (mode, operands[1]); ! operands[0] = lowpart_subreg (mode, operands[0], mode); } [(set_attr "type" "ssecmp") (set_attr "length_immediate" "1") --- 3891,3911 ---- "#" "&& 1" [(set (match_dup 0) ! (zero_extend:SWI248x ! (unspec: ! [(match_dup 1) ! (match_dup 2) ! (match_dup 3)] ! UNSPEC_PCMP))) ! (set (match_dup 4) (match_dup 5))] { ! operands[5] = lowpart_subreg (mode, operands[0], mode); + if (SUBREG_P (operands[5])) + { + SUBREG_PROMOTED_VAR_P (operands[5]) = 1; + SUBREG_PROMOTED_SET (operands[5], 1); + } } [(set_attr "type" "ssecmp") (set_attr "length_immediate" "1") *************** *** 3945,3975 **** (set_attr "prefix" "evex") (set_attr "mode" "")]) ! (define_insn_and_split "*_ucmp3_zero_extend" ! [(set (match_operand:SWI248x 0 "register_operand") (zero_extend:SWI248x (unspec: ! [(match_operand:VI12_AVX512VL 1 "nonimmediate_operand") ! (match_operand:VI12_AVX512VL 2 "nonimmediate_operand") ! (match_operand:SI 3 "const_0_to_7_operand")] UNSPEC_UNSIGNED_PCMP)))] "TARGET_AVX512BW - && ix86_pre_reload_split () && (GET_MODE_NUNITS (mode) < GET_MODE_PRECISION (mode))" ! "#" ! "&& 1" ! [(set (match_dup 0) ! (unspec: ! [(match_dup 1) ! (match_dup 2) ! (match_dup 3)] ! UNSPEC_UNSIGNED_PCMP))] ! { ! operands[1] = force_reg (mode, operands[1]); ! operands[0] = lowpart_subreg (mode, ! operands[0], mode); ! } [(set_attr "type" "ssecmp") (set_attr "length_immediate" "1") (set_attr "prefix" "evex") --- 3964,3981 ---- (set_attr "prefix" "evex") (set_attr "mode" "")]) ! (define_insn "*_ucmp3_zero_extend" ! [(set (match_operand:SWI248x 0 "register_operand" "=k") (zero_extend:SWI248x (unspec: ! [(match_operand:VI12_AVX512VL 1 "nonimmediate_operand" "v") ! (match_operand:VI12_AVX512VL 2 "nonimmediate_operand" "vm") ! (match_operand:SI 3 "const_0_to_7_operand" "n")] UNSPEC_UNSIGNED_PCMP)))] "TARGET_AVX512BW && (GET_MODE_NUNITS (mode) < GET_MODE_PRECISION (mode))" ! "vpcmpu\t{%3, %2, %1, %0|%0, %1, %2, %3}" [(set_attr "type" "ssecmp") (set_attr "length_immediate" "1") (set_attr "prefix" "evex") *************** *** 3997,4012 **** "#" "&& 1" [(set (match_dup 0) ! (unspec: ! [(match_dup 1) ! (match_dup 2) ! (match_dup 3)] ! UNSPEC_UNSIGNED_PCMP)) ! (set (match_dup 4) (match_dup 0))] { ! operands[1] = force_reg (mode, operands[1]); ! operands[0] = lowpart_subreg (mode, operands[0], mode); } [(set_attr "type" "ssecmp") (set_attr "length_immediate" "1") --- 4003,4023 ---- "#" "&& 1" [(set (match_dup 0) ! (zero_extend:SWI248x ! (unspec: ! [(match_dup 1) ! (match_dup 2) ! (match_dup 3)] ! UNSPEC_UNSIGNED_PCMP))) ! (set (match_dup 4) (match_dup 5))] { ! operands[5] = lowpart_subreg (mode, operands[0], mode); + if (SUBREG_P (operands[5])) + { + SUBREG_PROMOTED_VAR_P (operands[5]) = 1; + SUBREG_PROMOTED_SET (operands[5], 1); + } } [(set_attr "type" "ssecmp") (set_attr "length_immediate" "1") *************** *** 4043,4074 **** (set_attr "prefix" "evex") (set_attr "mode" "")]) ! (define_insn_and_split "*_ucmp3_zero_extend" ! [(set (match_operand:SWI248x 0 "register_operand") (zero_extend:SWI248x (unspec: ! [(match_operand:VI48_AVX512VL 1 "nonimmediate_operand") ! (match_operand:VI48_AVX512VL 2 "nonimmediate_operand") ! (match_operand:SI 3 "const_0_to_7_operand")] UNSPEC_UNSIGNED_PCMP)))] "TARGET_AVX512F && (!VALID_MASK_AVX512BW_MODE (mode) || TARGET_AVX512BW) - && ix86_pre_reload_split () && (GET_MODE_NUNITS (mode) < GET_MODE_PRECISION (mode))" ! "#" ! "&& 1" ! [(set (match_dup 0) ! (unspec: ! [(match_dup 1) ! (match_dup 2) ! (match_dup 3)] ! UNSPEC_UNSIGNED_PCMP))] ! { ! operands[1] = force_reg (mode, operands[1]); ! operands[0] = lowpart_subreg (mode, ! operands[0], mode); ! } [(set_attr "type" "ssecmp") (set_attr "length_immediate" "1") (set_attr "prefix" "evex") --- 4054,4072 ---- (set_attr "prefix" "evex") (set_attr "mode" "")]) ! (define_insn "*_ucmp3_zero_extend" ! [(set (match_operand:SWI248x 0 "register_operand" "=k") (zero_extend:SWI248x (unspec: ! [(match_operand:VI48_AVX512VL 1 "nonimmediate_operand" "v") ! (match_operand:VI48_AVX512VL 2 "nonimmediate_operand" "vm") ! (match_operand:SI 3 "const_0_to_7_operand" "n")] UNSPEC_UNSIGNED_PCMP)))] "TARGET_AVX512F && (!VALID_MASK_AVX512BW_MODE (mode) || TARGET_AVX512BW) && (GET_MODE_NUNITS (mode) < GET_MODE_PRECISION (mode))" ! "vpcmpu\t{%3, %2, %1, %0|%0, %1, %2, %3}" [(set_attr "type" "ssecmp") (set_attr "length_immediate" "1") (set_attr "prefix" "evex") *************** *** 4096,4111 **** "#" "&& 1" [(set (match_dup 0) ! (unspec: ! [(match_dup 1) ! (match_dup 2) ! (match_dup 3)] ! UNSPEC_UNSIGNED_PCMP)) ! (set (match_dup 4) (match_dup 0))] { ! operands[1] = force_reg (mode, operands[1]); ! operands[0] = lowpart_subreg (mode, operands[0], mode); } [(set_attr "type" "ssecmp") (set_attr "length_immediate" "1") --- 4094,4114 ---- "#" "&& 1" [(set (match_dup 0) ! (zero_extend:SWI248x ! (unspec: ! [(match_dup 1) ! (match_dup 2) ! (match_dup 3)] ! UNSPEC_UNSIGNED_PCMP))) ! (set (match_dup 4) (match_dup 5))] { ! operands[5] = lowpart_subreg (mode, operands[0], mode); + if (SUBREG_P (operands[5])) + { + SUBREG_PROMOTED_VAR_P (operands[5]) = 1; + SUBREG_PROMOTED_SET (operands[5], 1); + } } [(set_attr "type" "ssecmp") (set_attr "length_immediate" "1") *************** *** 9165,9171 **** (match_dup 2) (parallel [(const_int 0) (const_int 1)]))))] "TARGET_SSE2" ! "operands[2] = gen_reg_rtx (V4SFmode);") (define_expand "vec_unpacks_hi_v8sf" [(set (match_dup 2) --- 9168,9177 ---- (match_dup 2) (parallel [(const_int 0) (const_int 1)]))))] "TARGET_SSE2" ! { ! operands[2] = gen_reg_rtx (V4SFmode); ! emit_move_insn (operands[2], CONST0_RTX (V4SFmode)); ! }) (define_expand "vec_unpacks_hi_v8sf" [(set (match_dup 2) *************** *** 13889,13895 **** (set_attr "prefix" "evex") (set_attr "mode" "TI")]) ! (define_insn "*avx512vl_v2div2qi2_mask_store_1" [(set (match_operand:V2QI 0 "memory_operand" "=m") (vec_merge:V2QI (any_truncate:V2QI --- 13895,13901 ---- (set_attr "prefix" "evex") (set_attr "mode" "TI")]) ! (define_insn "avx512vl_v2div2qi2_mask_store_1" [(set (match_operand:V2QI 0 "memory_operand" "=m") (vec_merge:V2QI (any_truncate:V2QI *************** *** 13903,13930 **** (set_attr "prefix" "evex") (set_attr "mode" "TI")]) ! (define_insn_and_split "avx512vl_v2div2qi2_mask_store_2" ! [(set (match_operand:HI 0 "memory_operand") ! (subreg:HI ! (vec_merge:V2QI ! (any_truncate:V2QI ! (match_operand:V2DI 1 "register_operand")) ! (vec_select:V2QI ! (subreg:V4QI ! (vec_concat:V2HI ! (match_dup 0) ! (const_int 0)) 0) ! (parallel [(const_int 0) (const_int 1)])) ! (match_operand:QI 2 "register_operand")) 0))] ! "TARGET_AVX512VL && ix86_pre_reload_split ()" ! "#" ! "&& 1" ! [(set (match_dup 0) ! (vec_merge:V2QI ! (any_truncate:V2QI (match_dup 1)) ! (match_dup 0) ! (match_dup 2)))] ! "operands[0] = adjust_address_nv (operands[0], V2QImode, 0);") (define_insn "*avx512vl_v4qi2_store_1" [(set (match_operand:V4QI 0 "memory_operand" "=m") --- 13909,13927 ---- (set_attr "prefix" "evex") (set_attr "mode" "TI")]) ! (define_expand "avx512vl_v2div2qi2_mask_store_2" ! [(match_operand:HI 0 "memory_operand") ! (any_truncate:V2QI ! (match_operand:V2DI 1 "register_operand")) ! (match_operand:QI 2 "register_operand")] ! "TARGET_AVX512VL" ! { ! operands[0] = adjust_address_nv (operands[0], V2QImode, 0); ! emit_insn (gen_avx512vl_v2div2qi2_mask_store_1 (operands[0], ! operands[1], ! operands[2])); ! DONE; ! }) (define_insn "*avx512vl_v4qi2_store_1" [(set (match_operand:V4QI 0 "memory_operand" "=m") *************** *** 13993,13999 **** (set_attr "prefix" "evex") (set_attr "mode" "TI")]) ! (define_insn "*avx512vl_v4qi2_mask_store_1" [(set (match_operand:V4QI 0 "memory_operand" "=m") (vec_merge:V4QI (any_truncate:V4QI --- 13990,13996 ---- (set_attr "prefix" "evex") (set_attr "mode" "TI")]) ! (define_insn "avx512vl_v4qi2_mask_store_1" [(set (match_operand:V4QI 0 "memory_operand" "=m") (vec_merge:V4QI (any_truncate:V4QI *************** *** 14007,14035 **** (set_attr "prefix" "evex") (set_attr "mode" "TI")]) ! (define_insn_and_split "avx512vl_v4qi2_mask_store_2" ! [(set (match_operand:SI 0 "memory_operand") ! (subreg:SI ! (vec_merge:V4QI ! (any_truncate:V4QI ! (match_operand:VI4_128_8_256 1 "register_operand")) ! (vec_select:V4QI ! (subreg:V8QI ! (vec_concat:V2SI ! (match_dup 0) ! (const_int 0)) 0) ! (parallel [(const_int 0) (const_int 1) ! (const_int 2) (const_int 3)])) ! (match_operand:QI 2 "register_operand")) 0))] ! "TARGET_AVX512VL && ix86_pre_reload_split ()" ! "#" ! "&& 1" ! [(set (match_dup 0) ! (vec_merge:V4QI ! (any_truncate:V4QI (match_dup 1)) ! (match_dup 0) ! (match_dup 2)))] ! "operands[0] = adjust_address_nv (operands[0], V4QImode, 0);") (define_mode_iterator VI2_128_BW_4_256 [(V8HI "TARGET_AVX512BW") V8SI]) --- 14004,14022 ---- (set_attr "prefix" "evex") (set_attr "mode" "TI")]) ! (define_expand "avx512vl_v4qi2_mask_store_2" ! [(match_operand:SI 0 "memory_operand") ! (any_truncate:V4QI ! (match_operand:VI4_128_8_256 1 "register_operand")) ! (match_operand:QI 2 "register_operand")] ! "TARGET_AVX512VL" ! { ! operands[0] = adjust_address_nv (operands[0], V4QImode, 0); ! emit_insn (gen_avx512vl_v4qi2_mask_store_1 (operands[0], ! operands[1], ! operands[2])); ! DONE; ! }) (define_mode_iterator VI2_128_BW_4_256 [(V8HI "TARGET_AVX512BW") V8SI]) *************** *** 14101,14107 **** (set_attr "prefix" "evex") (set_attr "mode" "TI")]) ! (define_insn "*avx512vl_v8qi2_mask_store_1" [(set (match_operand:V8QI 0 "memory_operand" "=m") (vec_merge:V8QI (any_truncate:V8QI --- 14088,14094 ---- (set_attr "prefix" "evex") (set_attr "mode" "TI")]) ! (define_insn "avx512vl_v8qi2_mask_store_1" [(set (match_operand:V8QI 0 "memory_operand" "=m") (vec_merge:V8QI (any_truncate:V8QI *************** *** 14115,14145 **** (set_attr "prefix" "evex") (set_attr "mode" "TI")]) ! (define_insn_and_split "avx512vl_v8qi2_mask_store_2" ! [(set (match_operand:DI 0 "memory_operand") ! (subreg:DI ! (vec_merge:V8QI ! (any_truncate:V8QI ! (match_operand:VI2_128_BW_4_256 1 "register_operand")) ! (vec_select:V8QI ! (subreg:V16QI ! (vec_concat:V2DI ! (match_dup 0) ! (const_int 0)) 0) ! (parallel [(const_int 0) (const_int 1) ! (const_int 2) (const_int 3) ! (const_int 4) (const_int 5) ! (const_int 6) (const_int 7)])) ! (match_operand:QI 2 "register_operand")) 0))] ! "TARGET_AVX512VL && ix86_pre_reload_split ()" ! "#" ! "&& 1" ! [(set (match_dup 0) ! (vec_merge:V8QI ! (any_truncate:V8QI (match_dup 1)) ! (match_dup 0) ! (match_dup 2)))] ! "operands[0] = adjust_address_nv (operands[0], V8QImode, 0);") (define_mode_iterator PMOV_SRC_MODE_4 [V4DI V2DI V4SI]) (define_mode_attr pmov_dst_4 --- 14102,14120 ---- (set_attr "prefix" "evex") (set_attr "mode" "TI")]) ! (define_expand "avx512vl_v8qi2_mask_store_2" ! [(match_operand:DI 0 "memory_operand") ! (any_truncate:V8QI ! (match_operand:VI2_128_BW_4_256 1 "register_operand")) ! (match_operand:QI 2 "register_operand")] ! "TARGET_AVX512VL" ! { ! operands[0] = adjust_address_nv (operands[0], V8QImode, 0); ! emit_insn (gen_avx512vl_v8qi2_mask_store_1 (operands[0], ! operands[1], ! operands[2])); ! DONE; ! }) (define_mode_iterator PMOV_SRC_MODE_4 [V4DI V2DI V4SI]) (define_mode_attr pmov_dst_4 *************** *** 14261,14267 **** (set_attr "prefix" "evex") (set_attr "mode" "TI")]) ! (define_insn "*avx512vl_v4hi2_mask_store_1" [(set (match_operand:V4HI 0 "memory_operand" "=m") (vec_merge:V4HI (any_truncate:V4HI --- 14236,14242 ---- (set_attr "prefix" "evex") (set_attr "mode" "TI")]) ! (define_insn "avx512vl_v4hi2_mask_store_1" [(set (match_operand:V4HI 0 "memory_operand" "=m") (vec_merge:V4HI (any_truncate:V4HI *************** *** 14279,14308 **** (set_attr "prefix" "evex") (set_attr "mode" "TI")]) ! (define_insn_and_split "avx512vl_v4hi2_mask_store_2" ! [(set (match_operand:DI 0 "memory_operand") ! (subreg:DI ! (vec_merge:V4HI ! (any_truncate:V4HI ! (match_operand:VI4_128_8_256 1 "register_operand")) ! (vec_select:V4HI ! (subreg:V8HI ! (vec_concat:V2DI ! (match_dup 0) ! (const_int 0)) 0) ! (parallel [(const_int 0) (const_int 1) ! (const_int 2) (const_int 3)])) ! (match_operand:QI 2 "register_operand")) 0))] ! "TARGET_AVX512VL && ix86_pre_reload_split ()" ! "#" ! "&& 1" ! [(set (match_dup 0) ! (vec_merge:V4HI ! (any_truncate:V4HI (match_dup 1)) ! (match_dup 0) ! (match_dup 2)))] ! "operands[0] = adjust_address_nv (operands[0], V4HImode, 0);") ! (define_insn "*avx512vl_v2div2hi2_store_1" [(set (match_operand:V2HI 0 "memory_operand" "=m") --- 14254,14272 ---- (set_attr "prefix" "evex") (set_attr "mode" "TI")]) ! (define_expand "avx512vl_v4hi2_mask_store_2" ! [(match_operand:DI 0 "memory_operand") ! (any_truncate:V4HI ! (match_operand:VI4_128_8_256 1 "register_operand")) ! (match_operand:QI 2 "register_operand")] ! "TARGET_AVX512VL" ! { ! operands[0] = adjust_address_nv (operands[0], V4HImode, 0); ! emit_insn (gen_avx512vl_v4hi2_mask_store_1 (operands[0], ! operands[1], ! operands[2])); ! DONE; ! }) (define_insn "*avx512vl_v2div2hi2_store_1" [(set (match_operand:V2HI 0 "memory_operand" "=m") *************** *** 14363,14369 **** (set_attr "prefix" "evex") (set_attr "mode" "TI")]) ! (define_insn "*avx512vl_v2div2hi2_mask_store_1" [(set (match_operand:V2HI 0 "memory_operand" "=m") (vec_merge:V2HI (any_truncate:V2HI --- 14327,14333 ---- (set_attr "prefix" "evex") (set_attr "mode" "TI")]) ! (define_insn "avx512vl_v2div2hi2_mask_store_1" [(set (match_operand:V2HI 0 "memory_operand" "=m") (vec_merge:V2HI (any_truncate:V2HI *************** *** 14377,14404 **** (set_attr "prefix" "evex") (set_attr "mode" "TI")]) ! (define_insn_and_split "avx512vl_v2div2hi2_mask_store_2" ! [(set (match_operand:SI 0 "memory_operand") ! (subreg:SI ! (vec_merge:V2HI ! (any_truncate:V2HI ! (match_operand:V2DI 1 "register_operand")) ! (vec_select:V2HI ! (subreg:V4HI ! (vec_concat:V2SI ! (match_dup 0) ! (const_int 0)) 0) ! (parallel [(const_int 0) (const_int 1)])) ! (match_operand:QI 2 "register_operand")) 0))] ! "TARGET_AVX512VL && ix86_pre_reload_split ()" ! "#" ! "&& 1" ! [(set (match_dup 0) ! (vec_merge:V2HI ! (any_truncate:V2HI (match_dup 1)) ! (match_dup 0) ! (match_dup 2)))] ! "operands[0] = adjust_address_nv (operands[0], V2HImode, 0);") (define_expand "truncv2div2si2" [(set (match_operand:V2SI 0 "register_operand") --- 14341,14359 ---- (set_attr "prefix" "evex") (set_attr "mode" "TI")]) ! (define_expand "avx512vl_v2div2hi2_mask_store_2" ! [(match_operand:SI 0 "memory_operand") ! (any_truncate:V2HI ! (match_operand:V2DI 1 "register_operand")) ! (match_operand:QI 2 "register_operand")] ! "TARGET_AVX512VL" ! { ! operands[0] = adjust_address_nv (operands[0], V2HImode, 0); ! emit_insn (gen_avx512vl_v2div2hi2_mask_store_1 (operands[0], ! operands[1], ! operands[2])); ! DONE; ! }) (define_expand "truncv2div2si2" [(set (match_operand:V2SI 0 "register_operand") *************** *** 14506,14512 **** (set_attr "prefix" "evex") (set_attr "mode" "TI")]) ! (define_insn "*avx512vl_v2div2si2_mask_store_1" [(set (match_operand:V2SI 0 "memory_operand" "=m") (vec_merge:V2SI (any_truncate:V2SI --- 14461,14467 ---- (set_attr "prefix" "evex") (set_attr "mode" "TI")]) ! (define_insn "avx512vl_v2div2si2_mask_store_1" [(set (match_operand:V2SI 0 "memory_operand" "=m") (vec_merge:V2SI (any_truncate:V2SI *************** *** 14520,14547 **** (set_attr "prefix" "evex") (set_attr "mode" "TI")]) ! (define_insn_and_split "avx512vl_v2div2si2_mask_store_2" ! [(set (match_operand:DI 0 "memory_operand") ! (subreg:DI ! (vec_merge:V2SI ! (any_truncate:V2SI ! (match_operand:V2DI 1 "register_operand")) ! (vec_select:V2SI ! (subreg:V4SI ! (vec_concat:V2DI ! (match_dup 0) ! (const_int 0)) 0) ! (parallel [(const_int 0) (const_int 1)])) ! (match_operand:QI 2 "register_operand")) 0))] ! "TARGET_AVX512VL && ix86_pre_reload_split ()" ! "#" ! "&& 1" ! [(set (match_dup 0) ! (vec_merge:V2SI ! (any_truncate:V2SI (match_dup 1)) ! (match_dup 0) ! (match_dup 2)))] ! "operands[0] = adjust_address_nv (operands[0], V2SImode, 0);") (define_expand "truncv8div8qi2" [(set (match_operand:V8QI 0 "register_operand") --- 14475,14493 ---- (set_attr "prefix" "evex") (set_attr "mode" "TI")]) ! (define_expand "avx512vl_v2div2si2_mask_store_2" ! [(match_operand:DI 0 "memory_operand") ! (any_truncate:V2SI ! (match_operand:V2DI 1 "register_operand")) ! (match_operand:QI 2 "register_operand")] ! "TARGET_AVX512VL" ! { ! operands[0] = adjust_address_nv (operands[0], V2SImode, 0); ! emit_insn (gen_avx512vl_v2div2si2_mask_store_1 (operands[0], ! operands[1], ! operands[2])); ! DONE; ! }) (define_expand "truncv8div8qi2" [(set (match_operand:V8QI 0 "register_operand") *************** *** 14640,14646 **** (set_attr "prefix" "evex") (set_attr "mode" "TI")]) ! (define_insn "*avx512f_v8div16qi2_mask_store_1" [(set (match_operand:V8QI 0 "memory_operand" "=m") (vec_merge:V8QI (any_truncate:V8QI --- 14586,14592 ---- (set_attr "prefix" "evex") (set_attr "mode" "TI")]) ! (define_insn "avx512f_v8div16qi2_mask_store_1" [(set (match_operand:V8QI 0 "memory_operand" "=m") (vec_merge:V8QI (any_truncate:V8QI *************** *** 14654,14684 **** (set_attr "prefix" "evex") (set_attr "mode" "TI")]) ! (define_insn_and_split "avx512f_v8div16qi2_mask_store_2" ! [(set (match_operand:DI 0 "memory_operand") ! (subreg:DI ! (vec_merge:V8QI ! (any_truncate:V8QI ! (match_operand:V8DI 1 "register_operand")) ! (vec_select:V8QI ! (subreg:V16QI ! (vec_concat:V2DI ! (match_dup 0) ! (const_int 0)) 0) ! (parallel [(const_int 0) (const_int 1) ! (const_int 2) (const_int 3) ! (const_int 4) (const_int 5) ! (const_int 6) (const_int 7)])) ! (match_operand:QI 2 "register_operand")) 0))] ! "TARGET_AVX512F && ix86_pre_reload_split ()" ! "#" ! "&& 1" ! [(set (match_dup 0) ! (vec_merge:V8QI ! (any_truncate:V8QI (match_dup 1)) ! (match_dup 0) ! (match_dup 2)))] ! "operands[0] = adjust_address_nv (operands[0], V8QImode, 0);") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; --- 14600,14618 ---- (set_attr "prefix" "evex") (set_attr "mode" "TI")]) ! (define_expand "avx512f_v8div16qi2_mask_store_2" ! [(match_operand:DI 0 "memory_operand") ! (any_truncate:V8QI ! (match_operand:V8DI 1 "register_operand")) ! (match_operand:QI 2 "register_operand")] ! "TARGET_AVX512F" ! { ! operands[0] = adjust_address_nv (operands[0], V8QImode, 0); ! emit_insn (gen_avx512f_v8div16qi2_mask_store_1 (operands[0], ! operands[1], ! operands[2])); ! DONE; ! }) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; *************** *** 15990,16001 **** }) (define_expand "3_mask" ! [(set (match_operand:VI48_AVX512VL 0 "register_operand") ! (vec_merge:VI48_AVX512VL ! (maxmin:VI48_AVX512VL ! (match_operand:VI48_AVX512VL 1 "nonimmediate_operand") ! (match_operand:VI48_AVX512VL 2 "nonimmediate_operand")) ! (match_operand:VI48_AVX512VL 3 "nonimm_or_0_operand") (match_operand: 4 "register_operand")))] "TARGET_AVX512F" "ix86_fixup_binary_operands_no_copy (, mode, operands);") --- 15924,15935 ---- }) (define_expand "3_mask" ! [(set (match_operand:VI1248_AVX512VLBW 0 "register_operand") ! (vec_merge:VI1248_AVX512VLBW ! (maxmin:VI1248_AVX512VLBW ! (match_operand:VI1248_AVX512VLBW 1 "nonimmediate_operand") ! (match_operand:VI1248_AVX512VLBW 2 "nonimmediate_operand")) ! (match_operand:VI1248_AVX512VLBW 3 "nonimm_or_0_operand") (match_operand: 4 "register_operand")))] "TARGET_AVX512F" "ix86_fixup_binary_operands_no_copy (, mode, operands);") *************** *** 16012,16023 **** (set_attr "prefix" "maybe_evex") (set_attr "mode" "")]) ! (define_insn "3" [(set (match_operand:VI12_AVX512VL 0 "register_operand" "=v") (maxmin:VI12_AVX512VL ! (match_operand:VI12_AVX512VL 1 "register_operand" "v") (match_operand:VI12_AVX512VL 2 "nonimmediate_operand" "vm")))] ! "TARGET_AVX512BW" "vp\t{%2, %1, %0|%0, %1, %2}" [(set_attr "type" "sseiadd") (set_attr "prefix" "evex") --- 15946,15957 ---- (set_attr "prefix" "maybe_evex") (set_attr "mode" "")]) ! (define_insn "*avx512bw_3" [(set (match_operand:VI12_AVX512VL 0 "register_operand" "=v") (maxmin:VI12_AVX512VL ! (match_operand:VI12_AVX512VL 1 "nonimmediate_operand" "%v") (match_operand:VI12_AVX512VL 2 "nonimmediate_operand" "vm")))] ! "TARGET_AVX512BW && !(MEM_P (operands[1]) && MEM_P (operands[2]))" "vp\t{%2, %1, %0|%0, %1, %2}" [(set_attr "type" "sseiadd") (set_attr "prefix" "evex") diff -Nrcpad gcc-12.4.0/gcc/config/i386/subst.md gcc-12.5.0-RC-20250704/gcc/config/i386/subst.md *** gcc-12.4.0/gcc/config/i386/subst.md Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/config/i386/subst.md Fri Jul 4 07:24:42 2025 *************** *** 344,349 **** --- 344,351 ---- (define_subst_attr "mask_scalarcz_operand4" "mask_scalarcz" "" "%{%5%}%N4") (define_subst_attr "mask_scalar4_dest_false_dep_for_glc_cond" "mask_scalar" "1" "operands[4] == CONST0_RTX(mode)") (define_subst_attr "mask_scalarc_dest_false_dep_for_glc_cond" "mask_scalarc" "1" "operands[3] == CONST0_RTX(V8HFmode)") + (define_subst_attr "mask_scalar_operand_arg34" "mask_scalar" "" ", operands[3], operands[4]") + (define_subst_attr "mask_scalar_expand_op3" "mask_scalar" "3" "5") (define_subst "mask_scalar" [(set (match_operand:SUBST_V 0) *************** *** 451,456 **** --- 453,459 ---- (define_subst_attr "round_saeonly_scalar_constraint" "round_saeonly_scalar" "vm" "v") (define_subst_attr "round_saeonly_scalar_prefix" "round_saeonly_scalar" "vex" "evex") (define_subst_attr "round_saeonly_scalar_nimm_predicate" "round_saeonly_scalar" "nonimmediate_operand" "register_operand") + (define_subst_attr "round_saeonly_scalar_mask_arg3" "round_saeonly_scalar" "" ", operands[]") (define_subst "round_saeonly_scalar" [(set (match_operand:SUBST_V 0) diff -Nrcpad gcc-12.4.0/gcc/config/i386/x86-tune-costs.h gcc-12.5.0-RC-20250704/gcc/config/i386/x86-tune-costs.h *** gcc-12.4.0/gcc/config/i386/x86-tune-costs.h Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/config/i386/x86-tune-costs.h Fri Jul 4 07:24:42 2025 *************** struct processor_costs znver4_cost = { *** 1894,1901 **** in 32bit, 64bit, 128bit, 256bit and 512bit */ {8, 8, 8, 12, 12}, /* cost of storing SSE register in 32bit, 64bit, 128bit, 256bit and 512bit */ ! {6, 6, 6, 6, 6}, /* cost of unaligned loads. */ ! {8, 8, 8, 8, 8}, /* cost of unaligned stores. */ 2, 2, 2, /* cost of moving XMM,YMM,ZMM register. */ 6, /* cost of moving SSE register to integer. */ --- 1894,1901 ---- in 32bit, 64bit, 128bit, 256bit and 512bit */ {8, 8, 8, 12, 12}, /* cost of storing SSE register in 32bit, 64bit, 128bit, 256bit and 512bit */ ! {6, 6, 10, 10, 12}, /* cost of unaligned loads. */ ! {8, 8, 8, 12, 12}, /* cost of unaligned stores. */ 2, 2, 2, /* cost of moving XMM,YMM,ZMM register. */ 6, /* cost of moving SSE register to integer. */ *************** struct processor_costs znver4_cost = { *** 1947,1952 **** --- 1947,2103 ---- znver2_memcpy, znver2_memset, COSTS_N_INSNS (4), /* cond_taken_branch_cost. */ + COSTS_N_INSNS (2), /* cond_not_taken_branch_cost. */ + "16", /* Loop alignment. */ + "16", /* Jump alignment. */ + "0:0:8", /* Label alignment. */ + "16", /* Func alignment. */ + }; + + /* This table currently replicates znver4_cost table. */ + struct processor_costs znver5_cost = { + { + /* Start of register allocator costs. integer->integer move cost is 2. */ + + /* reg-reg moves are done by renaming and thus they are even cheaper than + 1 cycle. Because reg-reg move cost is 2 and following tables correspond + to doubles of latencies, we do not model this correctly. It does not + seem to make practical difference to bump prices up even more. */ + 6, /* cost for loading QImode using + movzbl. */ + {6, 6, 6}, /* cost of loading integer registers + in QImode, HImode and SImode. + Relative to reg-reg move (2). */ + {8, 8, 8}, /* cost of storing integer + registers. */ + 2, /* cost of reg,reg fld/fst. */ + {14, 14, 17}, /* cost of loading fp registers + in SFmode, DFmode and XFmode. */ + {12, 12, 16}, /* cost of storing fp registers + in SFmode, DFmode and XFmode. */ + 2, /* cost of moving MMX register. */ + {6, 6}, /* cost of loading MMX registers + in SImode and DImode. */ + {8, 8}, /* cost of storing MMX registers + in SImode and DImode. */ + 2, 2, 3, /* cost of moving XMM,YMM,ZMM + register. */ + {6, 6, 10, 10, 12}, /* cost of loading SSE registers + in 32,64,128,256 and 512-bit. */ + {8, 8, 8, 12, 12}, /* cost of storing SSE registers + in 32,64,128,256 and 512-bit. */ + 6, 8, /* SSE->integer and integer->SSE + moves. */ + 8, 8, /* mask->integer and integer->mask moves */ + {6, 6, 6}, /* cost of loading mask register + in QImode, HImode, SImode. */ + {8, 8, 8}, /* cost if storing mask register + in QImode, HImode, SImode. */ + 2, /* cost of moving mask register. */ + /* End of register allocator costs. */ + }, + + COSTS_N_INSNS (1), /* cost of an add instruction. */ + /* TODO: Lea with 3 components has cost 2. */ + COSTS_N_INSNS (1), /* cost of a lea instruction. */ + COSTS_N_INSNS (1), /* variable shift costs. */ + COSTS_N_INSNS (1), /* constant shift costs. */ + /* mul has latency 3, executes in 3 integer units. */ + {COSTS_N_INSNS (3), /* cost of starting multiply for QI. */ + COSTS_N_INSNS (3), /* HI. */ + COSTS_N_INSNS (3), /* SI. */ + COSTS_N_INSNS (3), /* DI. */ + COSTS_N_INSNS (3)}, /* other. */ + 0, /* cost of multiply per each bit + set. */ + /* integer divide has latency of 8 cycles + plus 1 for every 9 bits of quotient. */ + {COSTS_N_INSNS (10), /* cost of a divide/mod for QI. */ + COSTS_N_INSNS (11), /* HI. */ + COSTS_N_INSNS (13), /* SI. */ + COSTS_N_INSNS (16), /* DI. */ + COSTS_N_INSNS (16)}, /* other. */ + COSTS_N_INSNS (1), /* cost of movsx. */ + COSTS_N_INSNS (1), /* cost of movzx. */ + 15, /* "large" insn. */ + 9, /* MOVE_RATIO. */ + 6, /* CLEAR_RATIO */ + {6, 6, 6}, /* cost of loading integer registers + in QImode, HImode and SImode. + Relative to reg-reg move (2). */ + {8, 8, 8}, /* cost of storing integer + registers. */ + {6, 6, 10, 10, 12}, /* cost of loading SSE registers + in 32bit, 64bit, 128bit, 256bit and 512bit */ + {8, 8, 8, 12, 12}, /* cost of storing SSE register + in 32bit, 64bit, 128bit, 256bit and 512bit */ + {6, 6, 10, 10, 12}, /* cost of unaligned loads. */ + {8, 8, 8, 12, 12}, /* cost of unaligned stores. */ + 2, 2, 2, /* cost of moving XMM,YMM,ZMM + register. */ + 6, /* cost of moving SSE register to integer. */ + + /* TODO: gather and scatter instructions are currently disabled in + x86-tune.def. In some cases they are however a win, see PR116582 + We however need good cost model for them. */ + 14, 10, /* Gather load static, per_elt. */ + 14, 20, /* Gather store static, per_elt. */ + 48, /* size of l1 cache. */ + 1024, /* size of l2 cache. */ + 64, /* size of prefetch block. */ + /* New AMD processors never drop prefetches; if they cannot be performed + immediately, they are queued. We set number of simultaneous prefetches + to a large constant to reflect this (it probably is not a good idea not + to limit number of prefetches at all, as their execution also takes some + time). */ + 100, /* number of parallel prefetches. */ + 3, /* Branch cost. */ + /* TODO x87 latencies are still based on znver4. + Probably not very important these days. */ + COSTS_N_INSNS (7), /* cost of FADD and FSUB insns. */ + COSTS_N_INSNS (7), /* cost of FMUL instruction. */ + /* Latency of fdiv is 8-15. */ + COSTS_N_INSNS (15), /* cost of FDIV instruction. */ + COSTS_N_INSNS (1), /* cost of FABS instruction. */ + COSTS_N_INSNS (1), /* cost of FCHS instruction. */ + /* Latency of fsqrt is 4-10. */ + COSTS_N_INSNS (25), /* cost of FSQRT instruction. */ + + /* SSE instructions have typical throughput 4 and latency 1. */ + COSTS_N_INSNS (1), /* cost of cheap SSE instruction. */ + /* ADDSS has throughput 2 and latency 2 + (in some cases when source is another addition). */ + COSTS_N_INSNS (2), /* cost of ADDSS/SD SUBSS/SD insns. */ + /* MULSS has throughput 2 and latency 3. */ + COSTS_N_INSNS (3), /* cost of MULSS instruction. */ + COSTS_N_INSNS (3), /* cost of MULSD instruction. */ + /* FMA had throughput 2 and latency 4. */ + COSTS_N_INSNS (4), /* cost of FMA SS instruction. */ + COSTS_N_INSNS (4), /* cost of FMA SD instruction. */ + /* DIVSS has throughtput 0.4 and latency 10. */ + COSTS_N_INSNS (10), /* cost of DIVSS instruction. */ + /* DIVSD has throughtput 0.25 and latency 13. */ + COSTS_N_INSNS (13), /* cost of DIVSD instruction. */ + /* DIVSD has throughtput 0.22 and latency 14. */ + COSTS_N_INSNS (14), /* cost of SQRTSS instruction. */ + /* DIVSD has throughtput 0.13 and latency 20. */ + COSTS_N_INSNS (20), /* cost of SQRTSD instruction. */ + /* Zen5 can execute: + - integer ops: 6 per cycle, at most 3 multiplications. + latency 1 for additions, 3 for multiplications (pipelined) + + Setting width of 9 for multiplication is probably excessive + for register pressure. + - fp ops: 2 additions per cycle, latency 2-3 + 2 multiplicaitons per cycle, latency 3 + - vector intger ops: 4 additions, latency 1 + 2 multiplications, latency 4 + We increase width to 6 for multiplications + in ix86_reassociation_width. */ + 6, 6, 4, 6, /* reassoc int, fp, vec_int, vec_fp. */ + znver2_memcpy, + znver2_memset, + COSTS_N_INSNS (4), /* cond_taken_branch_cost. */ COSTS_N_INSNS (2), /* cond_not_taken_branch_cost. */ "16", /* Loop alignment. */ "16", /* Jump alignment. */ diff -Nrcpad gcc-12.4.0/gcc/config/i386/x86-tune-sched.cc gcc-12.5.0-RC-20250704/gcc/config/i386/x86-tune-sched.cc *** gcc-12.4.0/gcc/config/i386/x86-tune-sched.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/config/i386/x86-tune-sched.cc Fri Jul 4 07:24:42 2025 *************** ix86_issue_rate (void) *** 68,73 **** --- 68,74 ---- case PROCESSOR_ZNVER2: case PROCESSOR_ZNVER3: case PROCESSOR_ZNVER4: + case PROCESSOR_ZNVER5: case PROCESSOR_CORE2: case PROCESSOR_NEHALEM: case PROCESSOR_SANDYBRIDGE: *************** ix86_adjust_cost (rtx_insn *insn, int de *** 401,406 **** --- 402,408 ---- case PROCESSOR_ZNVER2: case PROCESSOR_ZNVER3: case PROCESSOR_ZNVER4: + case PROCESSOR_ZNVER5: /* Stack engine allows to execute push&pop instructions in parall. */ if ((insn_type == TYPE_PUSH || insn_type == TYPE_POP) && (dep_insn_type == TYPE_PUSH || dep_insn_type == TYPE_POP)) *************** ix86_adjust_cost (rtx_insn *insn, int de *** 417,422 **** --- 419,426 ---- enum attr_unit unit = get_attr_unit (insn); int loadcost; + /* TODO: On znver5 complex addressing modes have + greater latency. */ if (unit == UNIT_INTEGER || unit == UNIT_UNKNOWN) loadcost = 4; else *************** ix86_macro_fusion_p () *** 522,527 **** --- 526,585 ---- return TARGET_FUSE_CMP_AND_BRANCH; } + static bool + ix86_fuse_mov_alu_p (rtx_insn *mov, rtx_insn *alu) + { + /* Validate mov: + - It should be reg-reg move with opcode 0x89 or 0x8B. */ + rtx set1 = PATTERN (mov); + if (GET_CODE (set1) != SET + || !GENERAL_REG_P (SET_SRC (set1)) + || !GENERAL_REG_P (SET_DEST (set1))) + return false; + rtx reg = SET_DEST (set1); + /* - it should have 0x89 or 0x8B opcode. */ + if (!INTEGRAL_MODE_P (GET_MODE (reg)) + || GET_MODE_SIZE (GET_MODE (reg)) < 2 + || GET_MODE_SIZE (GET_MODE (reg)) > 8) + return false; + /* Validate ALU. */ + if (GET_CODE (PATTERN (alu)) != PARALLEL) + return false; + rtx set2 = XVECEXP (PATTERN (alu), 0, 0); + if (GET_CODE (set2) != SET) + return false; + /* Match one of: + ADD ADC AND XOR OR SUB SBB INC DEC NOT SAL SHL SHR SAR + We also may add insn attribute to handle some of sporadic + case we output those with different RTX expressions. */ + + if (GET_CODE (SET_SRC (set2)) != PLUS + && GET_CODE (SET_SRC (set2)) != MINUS + && GET_CODE (SET_SRC (set2)) != XOR + && GET_CODE (SET_SRC (set2)) != AND + && GET_CODE (SET_SRC (set2)) != IOR + && GET_CODE (SET_SRC (set2)) != NOT + && GET_CODE (SET_SRC (set2)) != ASHIFT + && GET_CODE (SET_SRC (set2)) != ASHIFTRT + && GET_CODE (SET_SRC (set2)) != LSHIFTRT) + return false; + rtx op0 = XEXP (SET_SRC (set2), 0); + rtx op1 = GET_CODE (SET_SRC (set2)) != NOT ? XEXP (SET_SRC (set2), 1) : NULL; + /* One of operands should be register. */ + if (op1 && (!REG_P (op0) || REGNO (op0) != REGNO (reg))) + std::swap (op0, op1); + if (!REG_P (op0) || REGNO (op1) != REGNO (reg)) + return false; + if (op1 + && !REG_P (op1) + && !x86_64_immediate_operand (op1, VOIDmode)) + return false; + /* Only one of two paramters must be move destination. */ + if (op1 && REG_P (op1) && REGNO (op1) == REGNO (reg)) + return false; + return true; + } + /* Check whether current microarchitecture support macro fusion for insn pair "CONDGEN + CONDJMP". Refer to "Intel Architectures Optimization Reference Manual". */ *************** ix86_macro_fusion_p () *** 529,534 **** --- 587,595 ---- bool ix86_macro_fusion_pair_p (rtx_insn *condgen, rtx_insn *condjmp) { + if (TARGET_FUSE_MOV_AND_ALU + && ix86_fuse_mov_alu_p (condgen, condjmp)) + return true; rtx src, dest; enum rtx_code ccode; rtx compare_set = NULL_RTX, test_if, cond; diff -Nrcpad gcc-12.4.0/gcc/config/i386/x86-tune.def gcc-12.5.0-RC-20250704/gcc/config/i386/x86-tune.def *** gcc-12.4.0/gcc/config/i386/x86-tune.def Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/config/i386/x86-tune.def Fri Jul 4 07:24:42 2025 *************** DEF_TUNE (X86_TUNE_FUSE_CMP_AND_BRANCH_S *** 140,147 **** jump instruction when the alu instruction produces the CCFLAG consumed by the conditional jump instruction. */ DEF_TUNE (X86_TUNE_FUSE_ALU_AND_BRANCH, "fuse_alu_and_branch", ! m_SANDYBRIDGE | m_CORE_AVX2 | m_GENERIC) /*****************************************************************************/ /* Function prologue, epilogue and function calling sequences. */ --- 140,151 ---- jump instruction when the alu instruction produces the CCFLAG consumed by the conditional jump instruction. */ DEF_TUNE (X86_TUNE_FUSE_ALU_AND_BRANCH, "fuse_alu_and_branch", ! m_SANDYBRIDGE | m_CORE_AVX2 | m_GENERIC | m_ZNVER5) + /* X86_TUNE_FUSE_MOV_AND_ALU: mov and alu in case mov is reg-reg mov + and the destination is used by alu. alu must be one of + ADD, ADC, AND, XOR, OR, SUB, SBB, INC, DEC, NOT, SAL, SHL, SHR, SAR. */ + DEF_TUNE (X86_TUNE_FUSE_MOV_AND_ALU, "fuse_mov_and_alu", m_ZNVER5) /*****************************************************************************/ /* Function prologue, epilogue and function calling sequences. */ *************** DEF_TUNE (X86_TUNE_AVOID_4BYTE_PREFIXES, *** 467,514 **** /* X86_TUNE_USE_GATHER_2PARTS: Use gather instructions for vectors with 2 elements. */ DEF_TUNE (X86_TUNE_USE_GATHER_2PARTS, "use_gather_2parts", ! ~(m_ZNVER1 | m_ZNVER2 | m_ZNVER3 | m_ZNVER4 | m_ALDERLAKE ! | m_GENERIC | m_GDS)) /* X86_TUNE_USE_SCATTER_2PARTS: Use scater instructions for vectors with 2 elements. */ DEF_TUNE (X86_TUNE_USE_SCATTER_2PARTS, "use_scatter_2parts", ! ~(m_ZNVER4)) /* X86_TUNE_USE_GATHER_4PARTS: Use gather instructions for vectors with 4 elements. */ DEF_TUNE (X86_TUNE_USE_GATHER_4PARTS, "use_gather_4parts", ! ~(m_ZNVER1 | m_ZNVER2 | m_ZNVER3 | m_ZNVER4 | m_ALDERLAKE ! | m_GENERIC | m_GDS)) /* X86_TUNE_USE_SCATTER_4PARTS: Use scater instructions for vectors with 4 elements. */ DEF_TUNE (X86_TUNE_USE_SCATTER_4PARTS, "use_scatter_4parts", ! ~(m_ZNVER4)) /* X86_TUNE_USE_GATHER: Use gather instructions for vectors with 8 or more elements. */ DEF_TUNE (X86_TUNE_USE_GATHER_8PARTS, "use_gather_8parts", ! ~(m_ZNVER1 | m_ZNVER2 | m_ZNVER4 | m_ALDERLAKE ! | m_GENERIC | m_GDS)) /* X86_TUNE_USE_SCATTER: Use scater instructions for vectors with 8 or more elements. */ DEF_TUNE (X86_TUNE_USE_SCATTER_8PARTS, "use_scatter_8parts", ! ~(m_ZNVER4)) /* X86_TUNE_AVOID_128FMA_CHAINS: Avoid creating loops with tight 128bit or smaller FMA chain. */ ! DEF_TUNE (X86_TUNE_AVOID_128FMA_CHAINS, "avoid_fma_chains", m_ZNVER1 | m_ZNVER2 | m_ZNVER3) /* X86_TUNE_AVOID_256FMA_CHAINS: Avoid creating loops with tight 256bit or smaller FMA chain. */ DEF_TUNE (X86_TUNE_AVOID_256FMA_CHAINS, "avoid_fma256_chains", m_ZNVER2 | m_ZNVER3 ! | m_ALDERLAKE | m_SAPPHIRERAPIDS | m_GENERIC | m_ZNVER4) /* X86_TUNE_AVOID_512FMA_CHAINS: Avoid creating loops with tight 512bit or smaller FMA chain. */ ! DEF_TUNE (X86_TUNE_AVOID_512FMA_CHAINS, "avoid_fma512_chains", m_NONE) /* X86_TUNE_V2DF_REDUCTION_PREFER_PHADDPD: Prefer haddpd for v2df vector reduction. */ --- 471,515 ---- /* X86_TUNE_USE_GATHER_2PARTS: Use gather instructions for vectors with 2 elements. */ DEF_TUNE (X86_TUNE_USE_GATHER_2PARTS, "use_gather_2parts", ! ~(m_ZNVER | m_ALDERLAKE | m_GENERIC | m_GDS)) /* X86_TUNE_USE_SCATTER_2PARTS: Use scater instructions for vectors with 2 elements. */ DEF_TUNE (X86_TUNE_USE_SCATTER_2PARTS, "use_scatter_2parts", ! ~(m_ZNVER4 | m_ZNVER5)) /* X86_TUNE_USE_GATHER_4PARTS: Use gather instructions for vectors with 4 elements. */ DEF_TUNE (X86_TUNE_USE_GATHER_4PARTS, "use_gather_4parts", ! ~(m_ZNVER | m_ALDERLAKE | m_GENERIC | m_GDS)) /* X86_TUNE_USE_SCATTER_4PARTS: Use scater instructions for vectors with 4 elements. */ DEF_TUNE (X86_TUNE_USE_SCATTER_4PARTS, "use_scatter_4parts", ! ~(m_ZNVER4 | m_ZNVER5)) /* X86_TUNE_USE_GATHER: Use gather instructions for vectors with 8 or more elements. */ DEF_TUNE (X86_TUNE_USE_GATHER_8PARTS, "use_gather_8parts", ! ~(m_ZNVER | m_ALDERLAKE | m_GENERIC | m_GDS)) /* X86_TUNE_USE_SCATTER: Use scater instructions for vectors with 8 or more elements. */ DEF_TUNE (X86_TUNE_USE_SCATTER_8PARTS, "use_scatter_8parts", ! ~(m_ZNVER4 | m_ZNVER5)) /* X86_TUNE_AVOID_128FMA_CHAINS: Avoid creating loops with tight 128bit or smaller FMA chain. */ ! DEF_TUNE (X86_TUNE_AVOID_128FMA_CHAINS, "avoid_fma_chains", m_ZNVER) /* X86_TUNE_AVOID_256FMA_CHAINS: Avoid creating loops with tight 256bit or smaller FMA chain. */ DEF_TUNE (X86_TUNE_AVOID_256FMA_CHAINS, "avoid_fma256_chains", m_ZNVER2 | m_ZNVER3 ! | m_ALDERLAKE | m_SAPPHIRERAPIDS | m_GENERIC | m_ZNVER4 | m_ZNVER5) /* X86_TUNE_AVOID_512FMA_CHAINS: Avoid creating loops with tight 512bit or smaller FMA chain. */ ! DEF_TUNE (X86_TUNE_AVOID_512FMA_CHAINS, "avoid_fma512_chains", m_ZNVER5) /* X86_TUNE_V2DF_REDUCTION_PREFER_PHADDPD: Prefer haddpd for v2df vector reduction. */ *************** DEF_TUNE (X86_TUNE_AVX256_STORE_BY_PIECE *** 558,569 **** /* X86_TUNE_AVX512_MOVE_BY_PIECES: Optimize move_by_pieces with 512-bit AVX instructions. */ DEF_TUNE (X86_TUNE_AVX512_MOVE_BY_PIECES, "avx512_move_by_pieces", ! m_SAPPHIRERAPIDS | m_ZNVER4) /* X86_TUNE_AVX512_STORE_BY_PIECES: Optimize store_by_pieces with 512-bit AVX instructions. */ DEF_TUNE (X86_TUNE_AVX512_STORE_BY_PIECES, "avx512_store_by_pieces", ! m_SAPPHIRERAPIDS | m_ZNVER4) /*****************************************************************************/ /*****************************************************************************/ --- 559,570 ---- /* X86_TUNE_AVX512_MOVE_BY_PIECES: Optimize move_by_pieces with 512-bit AVX instructions. */ DEF_TUNE (X86_TUNE_AVX512_MOVE_BY_PIECES, "avx512_move_by_pieces", ! m_SAPPHIRERAPIDS | m_ZNVER4 | m_ZNVER5) /* X86_TUNE_AVX512_STORE_BY_PIECES: Optimize store_by_pieces with 512-bit AVX instructions. */ DEF_TUNE (X86_TUNE_AVX512_STORE_BY_PIECES, "avx512_store_by_pieces", ! m_SAPPHIRERAPIDS | m_ZNVER4 | m_ZNVER5) /*****************************************************************************/ /*****************************************************************************/ diff -Nrcpad gcc-12.4.0/gcc/config/i386/zn4zn5.md gcc-12.5.0-RC-20250704/gcc/config/i386/zn4zn5.md *** gcc-12.4.0/gcc/config/i386/zn4zn5.md Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/config/i386/zn4zn5.md Fri Jul 4 07:24:42 2025 *************** *** 0 **** --- 1,1785 ---- + ;; Copyright (C) 2012-2024 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 + ;; . + ;; + + + (define_attr "znver4_decode" "direct,vector,double" + (const_string "direct")) + + ;; AMD znver4 and znver5 Scheduling + ;; Modeling automatons for zen decoders, integer execution pipes, + ;; AGU pipes, branch, floating point execution and fp store units. + (define_automaton "znver4, znver4_ieu, znver4_idiv, znver4_fdiv, znver4_agu, znver4_fpu, znver4_fp_store") + + ;; Decoders unit has 4 decoders and all of them can decode fast path + ;; and vector type instructions. + (define_cpu_unit "znver4-decode0" "znver4") + (define_cpu_unit "znver4-decode1" "znver4") + (define_cpu_unit "znver4-decode2" "znver4") + (define_cpu_unit "znver4-decode3" "znver4") + + ;; Currently blocking all decoders for vector path instructions as + ;; they are dispatched separetely as microcode sequence. + (define_reservation "znver4-vector" "znver4-decode0+znver4-decode1+znver4-decode2+znver4-decode3") + + ;; Direct instructions can be issued to any of the four decoders. + (define_reservation "znver4-direct" "znver4-decode0|znver4-decode1|znver4-decode2|znver4-decode3") + + ;; Fix me: Need to revisit this later to simulate fast path double behavior. + (define_reservation "znver4-double" "znver4-direct") + + + ;; Integer unit 4 ALU pipes in znver4 6 ALU pipes in znver5. + (define_cpu_unit "znver4-ieu0" "znver4_ieu") + (define_cpu_unit "znver4-ieu1" "znver4_ieu") + (define_cpu_unit "znver4-ieu2" "znver4_ieu") + (define_cpu_unit "znver4-ieu3" "znver4_ieu") + (define_cpu_unit "znver5-ieu4" "znver4_ieu") + (define_cpu_unit "znver5-ieu5" "znver4_ieu") + + ;; Znver4 has an additional branch unit. + (define_cpu_unit "znver4-bru0" "znver4_ieu") + + (define_reservation "znver4-ieu" "znver4-ieu0|znver4-ieu1|znver4-ieu2|znver4-ieu3") + (define_reservation "znver5-ieu" "znver4-ieu0|znver4-ieu1|znver4-ieu2|znver4-ieu3|znver5-ieu4|znver5-ieu5") + + ;; 3 AGU pipes in znver4 and 4 AGU pipes in znver5 + (define_cpu_unit "znver4-agu0" "znver4_agu") + (define_cpu_unit "znver4-agu1" "znver4_agu") + (define_cpu_unit "znver4-agu2" "znver4_agu") + (define_cpu_unit "znver5-agu3" "znver4_agu") + + (define_reservation "znver4-agu-reserve" "znver4-agu0|znver4-agu1|znver4-agu2") + (define_reservation "znver5-agu-reserve" "znver4-agu0|znver4-agu1|znver4-agu2|znver5-agu3") + + ;; Load is 4 cycles. We do not model reservation of load unit. + (define_reservation "znver4-load" "znver4-agu-reserve") + (define_reservation "znver4-store" "znver4-agu-reserve") + (define_reservation "znver5-load" "znver5-agu-reserve") + (define_reservation "znver5-store" "znver5-agu-reserve") + + ;; vectorpath (microcoded) instructions are single issue instructions. + ;; So, they occupy all the integer units. + ;; This is used for both Znver4 and Znver5, since reserving extra units not used otherwise + ;; is harmless. + (define_reservation "znver4-ivector" "znver4-ieu0+znver4-ieu1 + +znver4-ieu2+znver4-ieu3+znver5-ieu4+znver5-ieu5+znver4-bru0 + +znver4-agu0+znver4-agu1+znver4-agu2+znver5-agu3") + + ;; Floating point unit 4 FP pipes in znver4 and znver5. + (define_cpu_unit "znver4-fpu0" "znver4_fpu") + (define_cpu_unit "znver4-fpu1" "znver4_fpu") + (define_cpu_unit "znver4-fpu2" "znver4_fpu") + (define_cpu_unit "znver4-fpu3" "znver4_fpu") + + (define_reservation "znver4-fpu" "znver4-fpu0|znver4-fpu1|znver4-fpu2|znver4-fpu3") + + ;; DIV units + (define_cpu_unit "znver4-idiv" "znver4_idiv") + (define_cpu_unit "znver4-fdiv" "znver4_fdiv") + + ;; Separate fp store and fp-to-int store. Although there are 2 store pipes, the + ;; throughput is limited to only one per cycle. + (define_cpu_unit "znver4-fp-store" "znver4_fp_store") + + ;; Floating point store unit 2 FP pipes in znver5. + (define_cpu_unit "znver5-fp-store0" "znver4_fp_store") + (define_cpu_unit "znver5-fp-store1" "znver4_fp_store") + + ;; This is used for both Znver4 and Znver5, since reserving extra units not used otherwise + ;; is harmless. + (define_reservation "znver4-fvector" "znver4-fpu0+znver4-fpu1 + +znver4-fpu2+znver4-fpu3+znver5-fp-store0+znver5-fp-store1 + +znver4-agu0+znver4-agu1+znver4-agu2+znver5-agu3") + + (define_reservation "znver5-fp-store256" "znver5-fp-store0|znver5-fp-store1") + (define_reservation "znver5-fp-store-512" "znver5-fp-store0+znver5-fp-store1") + + + ;; Integer Instructions + ;; Move instructions + ;; XCHG + (define_insn_reservation "znver4_imov_double" 1 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "znver1_decode" "double") + (and (eq_attr "type" "imov") + (eq_attr "memory" "none")))) + "znver4-double,znver4-ieu") + + (define_insn_reservation "znver5_imov_double" 1 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "znver1_decode" "double") + (and (eq_attr "type" "imov") + (eq_attr "memory" "none")))) + "znver4-double,znver5-ieu") + + (define_insn_reservation "znver4_imov_double_load" 5 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "znver1_decode" "double") + (and (eq_attr "type" "imov") + (eq_attr "memory" "load")))) + "znver4-double,znver4-load,znver4-ieu") + + (define_insn_reservation "znver5_imov_double_load" 5 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "znver1_decode" "double") + (and (eq_attr "type" "imov") + (eq_attr "memory" "load")))) + "znver4-double,znver5-load,znver5-ieu") + + ;; imov, imovx + (define_insn_reservation "znver4_imov" 1 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "imov,imovx") + (eq_attr "memory" "none"))) + "znver4-direct,znver4-ieu") + + (define_insn_reservation "znver5_imov" 1 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "imov,imovx") + (eq_attr "memory" "none"))) + "znver4-direct,znver5-ieu") + + (define_insn_reservation "znver4_imov_load" 5 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "imov,imovx") + (eq_attr "memory" "load"))) + "znver4-direct,znver4-load,znver4-ieu") + + (define_insn_reservation "znver5_imov_load" 5 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "imov,imovx") + (eq_attr "memory" "load"))) + "znver4-direct,znver5-load,znver5-ieu") + + ;; Push Instruction + (define_insn_reservation "znver4_push" 1 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "push") + (eq_attr "memory" "store"))) + "znver4-direct,znver4-store") + + (define_insn_reservation "znver5_push" 1 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "push") + (eq_attr "memory" "store"))) + "znver4-direct,znver5-store") + + (define_insn_reservation "znver4_push_mem" 5 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "push") + (eq_attr "memory" "both"))) + "znver4-direct,znver4-load,znver4-store") + + (define_insn_reservation "znver5_push_mem" 5 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "push") + (eq_attr "memory" "both"))) + "znver4-direct,znver5-load,znver5-store") + + ;; Pop instruction + (define_insn_reservation "znver4_pop" 4 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "pop") + (eq_attr "memory" "load"))) + "znver4-direct,znver4-load") + + (define_insn_reservation "znver5_pop" 4 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "pop") + (eq_attr "memory" "load"))) + "znver4-direct,znver5-load") + + (define_insn_reservation "znver4_pop_mem" 5 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "pop") + (eq_attr "memory" "both"))) + "znver4-direct,znver4-load,znver4-store") + + (define_insn_reservation "znver5_pop_mem" 5 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "pop") + (eq_attr "memory" "both"))) + "znver4-direct,znver5-load,znver5-store") + + ;; Integer Instructions or General instructions + ;; Multiplications + (define_insn_reservation "znver4_imul" 3 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "imul") + (eq_attr "memory" "none"))) + "znver4-direct,znver4-ieu1") + + (define_insn_reservation "znver4_imul_load" 7 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "imul") + (eq_attr "memory" "load"))) + "znver4-direct,znver4-load,znver4-ieu1") + + (define_insn_reservation "znver5_imul_load" 7 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "imul") + (eq_attr "memory" "load"))) + "znver4-direct,znver5-load,znver4-ieu1") + + ;; Divisions + (define_insn_reservation "znver4_idiv_DI" 18 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "idiv") + (and (eq_attr "mode" "DI") + (eq_attr "memory" "none")))) + "znver4-double,znver4-idiv*10") + + (define_insn_reservation "znver4_idiv_SI" 12 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "idiv") + (and (eq_attr "mode" "SI") + (eq_attr "memory" "none")))) + "znver4-double,znver4-idiv*6") + + (define_insn_reservation "znver4_idiv_HI" 10 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "idiv") + (and (eq_attr "mode" "HI") + (eq_attr "memory" "none")))) + "znver4-double,znver4-idiv*4") + + (define_insn_reservation "znver4_idiv_QI" 9 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "idiv") + (and (eq_attr "mode" "QI") + (eq_attr "memory" "none")))) + "znver4-double,znver4-idiv*4") + + (define_insn_reservation "znver4_idiv_DI_load" 22 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "idiv") + (and (eq_attr "mode" "DI") + (eq_attr "memory" "load")))) + "znver4-double,znver4-load,znver4-idiv*10") + + (define_insn_reservation "znver5_idiv_DI_load" 22 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "idiv") + (and (eq_attr "mode" "DI") + (eq_attr "memory" "load")))) + "znver4-double,znver5-load,znver4-idiv*10") + + (define_insn_reservation "znver4_idiv_SI_load" 16 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "idiv") + (and (eq_attr "mode" "SI") + (eq_attr "memory" "load")))) + "znver4-double,znver4-load,znver4-idiv*6") + + (define_insn_reservation "znver5_idiv_SI_load" 16 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "idiv") + (and (eq_attr "mode" "SI") + (eq_attr "memory" "load")))) + "znver4-double,znver5-load,znver4-idiv*6") + + (define_insn_reservation "znver4_idiv_HI_load" 14 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "idiv") + (and (eq_attr "mode" "HI") + (eq_attr "memory" "load")))) + "znver4-double,znver4-load,znver4-idiv*4") + + (define_insn_reservation "znver5_idiv_HI_load" 14 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "idiv") + (and (eq_attr "mode" "HI") + (eq_attr "memory" "load")))) + "znver4-double,znver5-load,znver4-idiv*4") + + (define_insn_reservation "znver4_idiv_QI_load" 13 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "idiv") + (and (eq_attr "mode" "QI") + (eq_attr "memory" "load")))) + "znver4-double,znver4-load,znver4-idiv*4") + + (define_insn_reservation "znver5_idiv_QI_load" 13 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "idiv") + (and (eq_attr "mode" "QI") + (eq_attr "memory" "load")))) + "znver4-double,znver5-load,znver4-idiv*4") + + ;; INTEGER/GENERAL Instructions + (define_insn_reservation "znver4_insn" 1 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "alu,alu1,negnot,rotate1,ishift1,test,incdec,icmp") + (eq_attr "memory" "none,unknown"))) + "znver4-direct,znver4-ieu") + + (define_insn_reservation "znver5_insn" 1 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "alu,alu1,negnot,rotate1,ishift1,test,incdec,icmp") + (eq_attr "memory" "none,unknown"))) + "znver4-direct,znver5-ieu") + + (define_insn_reservation "znver4_insn_load" 5 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "alu,alu1,negnot,rotate1,ishift1,test,incdec,icmp") + (eq_attr "memory" "load"))) + "znver4-direct,znver4-load,znver4-ieu") + + (define_insn_reservation "znver5_insn_load" 5 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "alu,alu1,negnot,rotate1,ishift1,test,incdec,icmp") + (eq_attr "memory" "load"))) + "znver4-direct,znver5-load,znver5-ieu") + + (define_insn_reservation "znver4_insn2" 1 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "icmov,setcc") + (eq_attr "memory" "none,unknown"))) + "znver4-direct,znver4-ieu0|znver4-ieu3") + + (define_insn_reservation "znver4_insn2_load" 5 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "icmov,setcc") + (eq_attr "memory" "load"))) + "znver4-direct,znver4-load,znver4-ieu0|znver4-ieu3") + + (define_insn_reservation "znver5_insn2_load" 5 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "icmov,setcc") + (eq_attr "memory" "load"))) + "znver4-direct,znver5-load,znver4-ieu0|znver4-ieu3") + + (define_insn_reservation "znver4_rotate" 1 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "rotate") + (eq_attr "memory" "none,unknown"))) + "znver4-direct,znver4-ieu1|znver4-ieu2") + + (define_insn_reservation "znver4_rotate_load" 5 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "rotate") + (eq_attr "memory" "load"))) + "znver4-direct,znver4-load,znver4-ieu1|znver4-ieu2") + + (define_insn_reservation "znver5_rotate_load" 5 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "rotate") + (eq_attr "memory" "load"))) + "znver4-direct,znver5-load,znver4-ieu1|znver4-ieu2") + + (define_insn_reservation "znver4_insn_store" 1 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "alu,alu1,negnot,rotate1,ishift1,test,incdec,icmp") + (eq_attr "memory" "store"))) + "znver4-direct,znver4-ieu,znver4-store") + + (define_insn_reservation "znver5_insn_store" 1 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "alu,alu1,negnot,rotate1,ishift1,test,incdec,icmp") + (eq_attr "memory" "store"))) + "znver4-direct,znver4-ieu,znver5-store") + + (define_insn_reservation "znver4_insn2_store" 1 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "icmov,setcc") + (eq_attr "memory" "store"))) + "znver4-direct,znver4-ieu0|znver4-ieu3,znver4-store") + + (define_insn_reservation "znver5_insn2_store" 1 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "icmov,setcc") + (eq_attr "memory" "store"))) + "znver4-direct,znver4-ieu0|znver4-ieu3,znver5-store") + + (define_insn_reservation "znver4_rotate_store" 1 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "rotate") + (eq_attr "memory" "store"))) + "znver4-direct,znver4-ieu1|znver4-ieu2,znver4-store") + + (define_insn_reservation "znver5_rotate_store" 1 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "rotate") + (eq_attr "memory" "store"))) + "znver4-direct,znver4-ieu1|znver4-ieu2,znver5-store") + + ;; alu1 instructions + (define_insn_reservation "znver4_alu1_vector" 3 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "znver1_decode" "vector") + (and (eq_attr "type" "alu1") + (eq_attr "memory" "none,unknown")))) + "znver4-vector,znver4-ivector*3") + + (define_insn_reservation "znver4_alu1_vector_load" 7 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "znver1_decode" "vector") + (and (eq_attr "type" "alu1") + (eq_attr "memory" "load")))) + "znver4-vector,znver4-load,znver4-ivector*3") + + (define_insn_reservation "znver5_alu1_vector_load" 7 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "znver1_decode" "vector") + (and (eq_attr "type" "alu1") + (eq_attr "memory" "load")))) + "znver4-vector,znver5-load,znver4-ivector*3") + + ;; Call Instruction + (define_insn_reservation "znver4_call" 1 + (and (eq_attr "cpu" "znver4") + (eq_attr "type" "call,callv")) + "znver4-double,znver4-ieu0|znver4-bru0,znver4-store") + + (define_insn_reservation "znver5_call" 1 + (and (eq_attr "cpu" "znver5") + (eq_attr "type" "call,callv")) + "znver4-double,znver4-ieu0|znver4-bru0,znver5-store") + + ;; Branches + (define_insn_reservation "znver4_branch" 1 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "ibr") + (eq_attr "memory" "none"))) + "znver4-direct,znver4-ieu0|znver4-bru0") + + (define_insn_reservation "znver4_branch_load" 5 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ibr") + (eq_attr "memory" "load"))) + "znver4-direct,znver4-load,znver4-ieu0|znver4-bru0") + + (define_insn_reservation "znver5_branch_load" 5 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ibr") + (eq_attr "memory" "load"))) + "znver4-direct,znver5-load,znver4-ieu0|znver4-bru0") + + (define_insn_reservation "znver4_branch_vector" 2 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "ibr") + (eq_attr "memory" "none,unknown"))) + "znver4-vector,znver4-ivector*2") + + (define_insn_reservation "znver4_branch_vector_load" 6 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ibr") + (eq_attr "memory" "load"))) + "znver4-vector,znver4-load,znver4-ivector*2") + + (define_insn_reservation "znver5_branch_vector_load" 6 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ibr") + (eq_attr "memory" "load"))) + "znver4-vector,znver5-load,znver4-ivector*2") + + ;; LEA instruction with simple addressing + (define_insn_reservation "znver4_lea" 1 + (and (eq_attr "cpu" "znver4") + (eq_attr "type" "lea")) + "znver4-direct,znver4-ieu") + + (define_insn_reservation "znver5_lea" 1 + (and (eq_attr "cpu" "znver5") + (eq_attr "type" "lea")) + "znver4-direct,znver5-ieu") + ;; Leave + (define_insn_reservation "znver4_leave" 1 + (and (eq_attr "cpu" "znver4") + (eq_attr "type" "leave")) + "znver4-double,znver4-ieu,znver4-store") + + (define_insn_reservation "znver5_leave" 1 + (and (eq_attr "cpu" "znver5") + (eq_attr "type" "leave")) + "znver4-double,znver5-ieu,znver5-store") + + ;; STR and ISHIFT are microcoded. + (define_insn_reservation "znver4_str" 3 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "str") + (eq_attr "memory" "none"))) + "znver4-vector,znver4-ivector*3") + + (define_insn_reservation "znver4_str_load" 7 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "str") + (eq_attr "memory" "load"))) + "znver4-vector,znver4-load,znver4-ivector*3") + + (define_insn_reservation "znver5_str_load" 7 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "str") + (eq_attr "memory" "load"))) + "znver4-vector,znver5-load,znver4-ivector*3") + + (define_insn_reservation "znver4_ishift" 2 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "ishift") + (eq_attr "memory" "none"))) + "znver4-vector,znver4-ivector*2") + + (define_insn_reservation "znver4_ishift_load" 6 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ishift") + (eq_attr "memory" "load"))) + "znver4-vector,znver4-load,znver4-ivector*2") + + (define_insn_reservation "znver5_ishift_load" 6 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ishift") + (eq_attr "memory" "load"))) + "znver4-vector,znver5-load,znver4-ivector*2") + + ;; Other vector type + (define_insn_reservation "znver4_ieu_vector" 5 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "other,multi") + (eq_attr "memory" "none,unknown"))) + "znver4-vector,znver4-ivector*5") + + (define_insn_reservation "znver4_ieu_vector_load" 9 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "other,multi") + (eq_attr "memory" "load"))) + "znver4-vector,znver4-load,znver4-ivector*5") + + (define_insn_reservation "znver5_ieu_vector_load" 9 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "other,multi") + (eq_attr "memory" "load"))) + "znver4-vector,znver5-load,znver4-ivector*5") + + ;; Floating Point + ;; FP movs + (define_insn_reservation "znver4_fp_cmov" 4 + (and (eq_attr "cpu" "znver4,znver5") + (eq_attr "type" "fcmov")) + "znver4-vector,znver4-fvector*3") + + (define_insn_reservation "znver4_fp_mov_direct" 1 + (and (eq_attr "cpu" "znver4,znver5") + (eq_attr "type" "fmov")) + "znver4-direct,znver4-fpu0|znver4-fpu1") + + ;;FLD + (define_insn_reservation "znver4_fp_mov_direct_load" 6 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "znver1_decode" "direct") + (and (eq_attr "type" "fmov") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fpu0|znver4-fpu1") + + (define_insn_reservation "znver5_fp_mov_direct_load" 6 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "znver1_decode" "direct") + (and (eq_attr "type" "fmov") + (eq_attr "memory" "load")))) + "znver4-direct,znver5-load,znver4-fpu0|znver4-fpu1") + + ;;FST + (define_insn_reservation "znver4_fp_mov_direct_store" 6 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "znver1_decode" "direct") + (and (eq_attr "type" "fmov") + (eq_attr "memory" "store")))) + "znver4-direct,znver4-fpu0|znver4-fpu1,znver4-fp-store") + + (define_insn_reservation "znver5_fp_mov_direct_store" 6 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "znver1_decode" "direct") + (and (eq_attr "type" "fmov") + (eq_attr "memory" "store")))) + "znver4-direct,znver4-fpu0|znver4-fpu1,znver5-fp-store256") + + ;;FILD + (define_insn_reservation "znver4_fp_mov_double_load" 13 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "znver1_decode" "double") + (and (eq_attr "type" "fmov") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fpu1") + + (define_insn_reservation "znver5_fp_mov_double_load" 13 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "znver1_decode" "double") + (and (eq_attr "type" "fmov") + (eq_attr "memory" "load")))) + "znver4-direct,znver5-load,znver4-fpu1") + + ;;FIST + (define_insn_reservation "znver4_fp_mov_double_store" 7 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "znver1_decode" "double") + (and (eq_attr "type" "fmov") + (eq_attr "memory" "store")))) + "znver4-double,znver4-fpu1,znver4-fp-store") + + (define_insn_reservation "znver5_fp_mov_double_store" 7 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "znver1_decode" "double") + (and (eq_attr "type" "fmov") + (eq_attr "memory" "store")))) + "znver4-double,znver4-fpu1,znver5-fp-store256") + + ;; FSQRT + (define_insn_reservation "znver4_fsqrt" 22 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "fpspc") + (and (eq_attr "mode" "XF") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fdiv*10") + + ;; FPSPC instructions + (define_insn_reservation "znver4_fp_spc" 6 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "fpspc") + (eq_attr "memory" "none"))) + "znver4-vector,znver4-fvector*6") + + (define_insn_reservation "znver4_fp_insn_vector" 6 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "znver1_decode" "vector") + (eq_attr "type" "mmxcvt,sselog1,ssemov"))) + "znver4-vector,znver4-fvector*6") + + ;; FADD, FSUB, FMUL + (define_insn_reservation "znver4_fp_op_mul" 7 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "fop,fmul") + (eq_attr "memory" "none"))) + "znver4-direct,znver4-fpu0") + + (define_insn_reservation "znver4_fp_op_mul_load" 12 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "fop,fmul") + (eq_attr "memory" "load"))) + "znver4-direct,znver4-load,znver4-fpu0") + + (define_insn_reservation "znver5_fp_op_mul_load" 12 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "fop,fmul") + (eq_attr "memory" "load"))) + "znver4-direct,znver5-load,znver4-fpu0") + ;; FDIV + (define_insn_reservation "znver4_fp_div" 15 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "fdiv") + (eq_attr "memory" "none"))) + "znver4-direct,znver4-fdiv*6") + + (define_insn_reservation "znver4_fp_div_load" 20 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "fdiv") + (eq_attr "memory" "load"))) + "znver4-direct,znver4-load,znver4-fdiv*6") + + (define_insn_reservation "znver5_fp_div_load" 20 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "fdiv") + (eq_attr "memory" "load"))) + "znver4-direct,znver5-load,znver4-fdiv*6") + + (define_insn_reservation "znver4_fp_idiv_load" 24 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "fdiv") + (and (eq_attr "fp_int_src" "true") + (eq_attr "memory" "load")))) + "znver4-double,znver4-load,znver4-fdiv*6") + + (define_insn_reservation "znver5_fp_idiv_load" 24 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "fdiv") + (and (eq_attr "fp_int_src" "true") + (eq_attr "memory" "load")))) + "znver4-double,znver5-load,znver4-fdiv*6") + + ;; FABS, FCHS + (define_insn_reservation "znver4_fp_fsgn" 1 + (and (eq_attr "cpu" "znver4") + (eq_attr "type" "fsgn")) + "znver4-direct,znver4-fpu0|znver4-fpu1") + + (define_insn_reservation "znver5_fp_fsgn" 1 + (and (eq_attr "cpu" "znver5") + (eq_attr "type" "fsgn")) + "znver4-direct,znver4-fpu1|znver4-fpu2") + + ;; FCMP + (define_insn_reservation "znver4_fp_fcmp" 3 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "fcmp") + (eq_attr "memory" "none"))) + "znver4-direct,znver4-fpu1") + + (define_insn_reservation "znver4_fp_fcmp_double" 4 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "fcmp") + (and (eq_attr "znver1_decode" "double") + (eq_attr "memory" "none")))) + "znver4-double,znver4-fpu1,znver4-fpu2") + + (define_insn_reservation "znver5_fp_fcmp_double" 4 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "fcmp") + (and (eq_attr "znver1_decode" "double") + (eq_attr "memory" "none")))) + "znver4-double,znver4-fpu1,znver5-fp-store256") + + ;; MMX, SSE, SSEn.n instructions + (define_insn_reservation "znver4_fp_mmx " 1 + (and (eq_attr "cpu" "znver4,znver5") + (eq_attr "type" "mmx")) + "znver4-direct,znver4-fpu1|znver4-fpu2") + + (define_insn_reservation "znver4_mmx_add_cmp" 1 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "mmxadd,mmxcmp") + (eq_attr "memory" "none"))) + "znver4-direct,znver4-fpu") + + (define_insn_reservation "znver4_mmx_add_cmp_load" 6 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "mmxadd,mmxcmp") + (eq_attr "memory" "load"))) + "znver4-direct,znver4-load,znver4-fpu") + + (define_insn_reservation "znver5_mmx_add_cmp_load" 6 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "mmxadd,mmxcmp") + (eq_attr "memory" "load"))) + "znver4-direct,znver5-load,znver4-fpu") + + (define_insn_reservation "znver4_mmx_insn" 1 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "mmxcvt,sseshuf,sseshuf1,mmxshft") + (eq_attr "memory" "none"))) + "znver4-direct,znver4-fpu1|znver4-fpu2") + + (define_insn_reservation "znver5_mmx_insn" 1 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "mmxcvt,sseshuf,sseshuf1,mmxshft") + (eq_attr "memory" "none"))) + "znver4-direct,znver4-fpu0|znver4-fpu1|znver4-fpu2|znver4-fpu3") + + (define_insn_reservation "znver4_mmx_insn_load" 6 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "mmxcvt,sseshuf,sseshuf1,mmxshft") + (eq_attr "memory" "load"))) + "znver4-direct,znver4-load,znver4-fpu1|znver4-fpu2") + + (define_insn_reservation "znver5_mmx_insn_load" 6 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "mmxcvt,sseshuf,sseshuf1,mmxshft") + (eq_attr "memory" "load"))) + "znver4-direct,znver5-load,znver4-fpu0|znver4-fpu1|znver4-fpu2|znver4-fpu3") + + (define_insn_reservation "znver4_mmx_mov" 1 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "mmxmov") + (eq_attr "memory" "store"))) + "znver4-direct,znver4-fp-store") + + (define_insn_reservation "znver5_mmx_mov" 1 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "mmxmov") + (eq_attr "memory" "store"))) + "znver4-direct,znver5-fp-store256") + + (define_insn_reservation "znver4_mmx_mov_load" 6 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "mmxmov") + (eq_attr "memory" "both"))) + "znver4-direct,znver4-load,znver4-fp-store") + + (define_insn_reservation "znver5_mmx_mov_load" 6 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "mmxmov") + (eq_attr "memory" "both"))) + "znver4-direct,znver5-load,znver5-fp-store256") + + (define_insn_reservation "znver4_mmx_mul" 3 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "mmxmul") + (eq_attr "memory" "none"))) + "znver4-direct,znver4-fpu0|znver4-fpu3") + + (define_insn_reservation "znver4_mmx_mul_load" 8 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "mmxmul") + (eq_attr "memory" "load"))) + "znver4-direct,znver4-load,znver4-fpu0|znver4-fpu3") + + (define_insn_reservation "znver5_mmx_mul_load" 8 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "mmxmul") + (eq_attr "memory" "load"))) + "znver4-direct,znver5-load,znver4-fpu0|znver4-fpu3") + + ;; AVX instructions + (define_insn_reservation "znver4_sse_log" 1 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "sselog") + (and (eq_attr "mode" "V4SF,V8SF,V2DF,V4DF,QI,HI,SI,DI,TI,OI") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu") + + (define_insn_reservation "znver4_sse_log_load" 6 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "sselog") + (and (eq_attr "mode" "V4SF,V8SF,V2DF,V4DF,QI,HI,SI,DI,TI,OI") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fpu") + + (define_insn_reservation "znver5_sse_log_load" 6 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "sselog") + (and (eq_attr "mode" "V4SF,V8SF,V2DF,V4DF,QI,HI,SI,DI,TI,OI") + (eq_attr "memory" "load")))) + "znver4-direct,znver5-load,znver4-fpu") + + (define_insn_reservation "znver4_sse_log1" 1 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "sselog1") + (and (eq_attr "mode" "V4SF,V8SF,V2DF,V4DF,QI,HI,SI,DI,TI,OI") + (eq_attr "memory" "store")))) + "znver4-direct,znver4-fpu1|znver4-fpu2,znver4-fp-store") + + (define_insn_reservation "znver5_sse_log1" 1 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "sselog1") + (and (eq_attr "mode" "V4SF,V8SF,V2DF,V4DF,QI,HI,SI,DI,TI,OI") + (eq_attr "memory" "store")))) + "znver4-direct,znver4-fpu1|znver4-fpu2,znver5-fp-store256") + + (define_insn_reservation "znver4_sse_log1_load" 6 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "sselog1") + (and (eq_attr "mode" "V4SF,V8SF,V2DF,V4DF,QI,HI,SI,DI,TI,OI") + (eq_attr "memory" "both")))) + "znver4-direct,znver4-load,znver4-fpu1|znver4-fpu2,znver4-fp-store") + + (define_insn_reservation "znver5_sse_log1_load" 6 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "sselog1") + (and (eq_attr "mode" "V4SF,V8SF,V2DF,V4DF,QI,HI,SI,DI,TI,OI") + (eq_attr "memory" "both")))) + "znver4-direct,znver5-load,znver4-fpu1|znver4-fpu2,znver5-fp-store256") + + (define_insn_reservation "znver4_sse_comi" 1 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssecomi") + (eq_attr "memory" "store"))) + "znver4-double,znver4-fpu2|znver4-fpu3,znver4-fp-store") + + (define_insn_reservation "znver5_sse_comi" 1 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssecomi") + (eq_attr "memory" "store"))) + "znver4-double,znver4-fpu2|znver4-fpu3,znver5-fp-store256") + + (define_insn_reservation "znver4_sse_comi_load" 6 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssecomi") + (eq_attr "memory" "both"))) + "znver4-double,znver4-load,znver4-fpu2|znver4-fpu3,znver4-fp-store") + + (define_insn_reservation "znver5_sse_comi_load" 6 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssecomi") + (eq_attr "memory" "both"))) + "znver4-double,znver5-load,znver4-fpu2|znver4-fpu3,znver5-fp-store256") + + (define_insn_reservation "znver4_sse_test" 1 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "prefix_extra" "1") + (and (eq_attr "type" "ssecomi") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu1|znver4-fpu2") + + (define_insn_reservation "znver4_sse_test_load" 6 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "prefix_extra" "1") + (and (eq_attr "type" "ssecomi") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fpu1|znver4-fpu2") + + (define_insn_reservation "znver5_sse_test_load" 6 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "prefix_extra" "1") + (and (eq_attr "type" "ssecomi") + (eq_attr "memory" "load")))) + "znver4-direct,znver5-load,znver4-fpu1|znver4-fpu2") + + (define_insn_reservation "znver4_sse_imul" 3 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "sseimul") + (and (eq_attr "mode" "QI,HI,SI,DI,TI,OI") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu0|znver4-fpu3") + + (define_insn_reservation "znver4_sse_imul_load" 8 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "sseimul") + (and (eq_attr "mode" "QI,HI,SI,DI,TI,OI") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fpu0|znver4-fpu1") + + (define_insn_reservation "znver5_sse_imul_load" 8 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "sseimul") + (and (eq_attr "mode" "QI,HI,SI,DI,TI,OI") + (eq_attr "memory" "load")))) + "znver4-direct,znver5-load,znver4-fpu0|znver4-fpu1") + + (define_insn_reservation "znver4_sse_mov" 1 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "ssemov") + (and (eq_attr "mode" "QI,HI,SI,DI,TI,OI") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu1|znver4-fpu2") + + (define_insn_reservation "znver4_sse_mov_load" 6 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssemov") + (and (eq_attr "mode" "QI,HI,SI,DI,TI,OI") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fpu1|znver4-fpu2") + + (define_insn_reservation "znver5_sse_mov_load" 6 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssemov") + (and (eq_attr "mode" "QI,HI,SI,DI,TI,OI") + (eq_attr "memory" "load")))) + "znver4-direct,znver5-load,znver4-fpu1|znver4-fpu2") + + (define_insn_reservation "znver4_sse_mov_store" 1 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssemov") + (and (eq_attr "mode" "QI,HI,SI,DI,TI,OI") + (eq_attr "memory" "store")))) + "znver4-direct,znver4-fpu1|znver4-fpu2,znver4-fp-store") + + (define_insn_reservation "znver5_sse_mov_store" 1 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssemov") + (and (eq_attr "mode" "QI,HI,SI,DI,TI,OI") + (eq_attr "memory" "store")))) + "znver4-direct,znver4-fpu1|znver4-fpu2,znver5-fp-store256") + + (define_insn_reservation "znver4_sse_mov_fp" 1 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "ssemov") + (and (eq_attr "mode" "V16SF,V8DF,V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu") + + (define_insn_reservation "znver4_sse_mov_fp_load" 6 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssemov") + (and (eq_attr "mode" "V16SF,V8DF,V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fpu") + + (define_insn_reservation "znver5_sse_mov_fp_load" 6 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssemov") + (and (eq_attr "mode" "V16SF,V8DF,V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") + (eq_attr "memory" "load")))) + "znver4-direct,znver5-load,znver4-fpu") + + (define_insn_reservation "znver4_sse_mov_fp_store" 1 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssemov") + (and (eq_attr "mode" "V16SF,V8DF,V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") + (eq_attr "memory" "store")))) + "znver4-direct,znver4-fp-store") + + (define_insn_reservation "znver5_sse_mov_fp_store" 1 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssemov") + (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") + (eq_attr "memory" "store")))) + "znver4-direct,znver5-fp-store256") + + (define_insn_reservation "znver5_sse_mov_fp_store_512" 1 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssemov") + (and (eq_attr "mode" "V16SF,V8DF") + (eq_attr "memory" "store")))) + "znver4-direct,znver5-fp-store-512") + + (define_insn_reservation "znver4_sse_add" 3 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "sseadd") + (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu2|znver4-fpu3") + + (define_insn_reservation "znver4_sse_add_load" 8 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "sseadd") + (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fpu2|znver4-fpu3") + + (define_insn_reservation "znver5_sse_add_load" 8 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "sseadd") + (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") + (eq_attr "memory" "load")))) + "znver4-direct,znver5-load,znver4-fpu2|znver4-fpu3") + + (define_insn_reservation "znver4_sse_add1" 4 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "sseadd1") + (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") + (eq_attr "memory" "none")))) + "znver4-vector,znver4-fvector*2") + + (define_insn_reservation "znver4_sse_add1_load" 9 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "sseadd1") + (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") + (eq_attr "memory" "load")))) + "znver4-vector,znver4-load,znver4-fvector*2") + + (define_insn_reservation "znver5_sse_add1_load" 9 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "sseadd1") + (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") + (eq_attr "memory" "load")))) + "znver4-vector,znver5-load,znver4-fvector*2") + + (define_insn_reservation "znver4_sse_iadd" 1 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "sseiadd") + (and (eq_attr "mode" "QI,HI,SI,DI,TI,OI") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu") + + (define_insn_reservation "znver4_sse_iadd_load" 6 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "sseiadd") + (and (eq_attr "mode" "QI,HI,SI,DI,TI,OI") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fpu") + + (define_insn_reservation "znver5_sse_iadd_load" 6 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "sseiadd") + (and (eq_attr "mode" "QI,HI,SI,DI,TI,OI") + (eq_attr "memory" "load")))) + "znver4-direct,znver5-load,znver4-fpu") + + (define_insn_reservation "znver4_sse_mul" 3 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "ssemul") + (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu0|znver4-fpu1") + + (define_insn_reservation "znver4_sse_mul_load" 8 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssemul") + (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fpu0|znver4-fpu1") + + (define_insn_reservation "znver5_sse_mul_load" 8 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssemul") + (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") + (eq_attr "memory" "load")))) + "znver4-direct,znver5-load,znver4-fpu0|znver4-fpu1") + + (define_insn_reservation "znver4_sse_div_pd" 13 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "ssediv") + (and (eq_attr "mode" "V4DF,V2DF,V1DF") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fdiv*5") + + (define_insn_reservation "znver4_sse_div_ps" 10 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "ssediv") + (and (eq_attr "mode" "V8SF,V4SF,V2SF,SF") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fdiv*3") + + (define_insn_reservation "znver4_sse_div_pd_load" 18 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssediv") + (and (eq_attr "mode" "V4DF,V2DF,V1DF") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fdiv*5") + + (define_insn_reservation "znver5_sse_div_pd_load" 18 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssediv") + (and (eq_attr "mode" "V4DF,V2DF,V1DF") + (eq_attr "memory" "load")))) + "znver4-direct,znver5-load,znver4-fdiv*5") + + (define_insn_reservation "znver4_sse_div_ps_load" 15 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssediv") + (and (eq_attr "mode" "V8SF,V4SF,V2SF,SF") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fdiv*3") + + (define_insn_reservation "znver5_sse_div_ps_load" 15 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssediv") + (and (eq_attr "mode" "V8SF,V4SF,V2SF,SF") + (eq_attr "memory" "load")))) + "znver4-direct,znver5-load,znver4-fdiv*3") + + (define_insn_reservation "znver4_sse_cmp_avx" 1 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "ssecmp") + (and (eq_attr "prefix" "vex") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu0|znver4-fpu1") + + (define_insn_reservation "znver4_sse_cmp_avx_load" 6 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssecmp") + (and (eq_attr "prefix" "vex") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fpu0|znver4-fpu1") + + (define_insn_reservation "znver5_sse_cmp_avx_load" 6 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssecmp") + (and (eq_attr "prefix" "vex") + (eq_attr "memory" "load")))) + "znver4-direct,znver5-load,znver4-fpu0|znver4-fpu1") + + (define_insn_reservation "znver4_sse_comi_avx" 1 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssecomi") + (eq_attr "memory" "store"))) + "znver4-direct,znver4-fpu2+znver4-fpu3,znver4-fp-store") + + (define_insn_reservation "znver5_sse_comi_avx" 1 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssecomi") + (eq_attr "memory" "store"))) + "znver4-direct,znver4-fpu2+znver4-fpu3,znver5-fp-store256") + + (define_insn_reservation "znver4_sse_comi_avx_load" 6 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssecomi") + (eq_attr "memory" "both"))) + "znver4-direct,znver4-load,znver4-fpu2+znver4-fpu3,znver4-fp-store") + + (define_insn_reservation "znver5_sse_comi_avx_load" 6 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssecomi") + (eq_attr "memory" "both"))) + "znver4-direct,znver5-load,znver4-fpu2+znver4-fpu3,znver5-fp-store256") + + (define_insn_reservation "znver4_sse_cvt" 3 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "ssecvt") + (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu2|znver4-fpu3") + + (define_insn_reservation "znver4_sse_cvt_load" 8 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssecvt") + (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fpu2|znver4-fpu3") + + (define_insn_reservation "znver5_sse_cvt_load" 8 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssecvt") + (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") + (eq_attr "memory" "load")))) + "znver4-direct,znver5-load,znver4-fpu2|znver4-fpu3") + + (define_insn_reservation "znver4_sse_icvt" 3 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "ssecvt") + (and (eq_attr "mode" "SI") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu2|znver4-fpu3") + + (define_insn_reservation "znver4_sse_icvt_store" 4 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssecvt") + (and (eq_attr "mode" "SI") + (eq_attr "memory" "store")))) + "znver4-double,znver4-fpu2|znver4-fpu3,znver4-fp-store") + + (define_insn_reservation "znver5_sse_icvt_store" 4 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssecvt") + (and (eq_attr "mode" "SI") + (eq_attr "memory" "store")))) + "znver4-double,znver4-fpu2|znver4-fpu3,znver5-fp-store256") + + (define_insn_reservation "znver4_sse_shuf" 1 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "sseshuf") + (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu1|znver4-fpu2") + + (define_insn_reservation "znver5_sse_shuf" 1 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "sseshuf") + (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu1|znver4-fpu2|znver4-fpu3") + + (define_insn_reservation "znver4_sse_shuf_load" 6 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "sseshuf") + (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fpu") + + (define_insn_reservation "znver5_sse_shuf_load" 6 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "sseshuf") + (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") + (eq_attr "memory" "load")))) + "znver4-direct,znver5-load,znver4-fpu") + + (define_insn_reservation "znver4_sse_ishuf" 3 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "sseshuf") + (and (eq_attr "mode" "OI") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu1|znver4-fpu2") + + (define_insn_reservation "znver4_sse_ishuf_load" 8 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "sseshuf") + (and (eq_attr "mode" "OI") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fpu1|znver4-fpu2") + + (define_insn_reservation "znver5_sse_ishuf_load" 8 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "sseshuf") + (and (eq_attr "mode" "OI") + (eq_attr "memory" "load")))) + "znver4-direct,znver5-load,znver4-fpu1|znver4-fpu2") + + ;; AVX512 instructions + (define_insn_reservation "znver4_sse_log_evex" 1 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "sselog") + (and (eq_attr "mode" "V16SF,V8DF,XI") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu0*2|znver4-fpu1*2|znver4-fpu2*2|znver4-fpu3*2") + + (define_insn_reservation "znver5_sse_log_evex" 1 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "sselog") + (and (eq_attr "mode" "V16SF,V8DF,XI") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu0|znver4-fpu1|znver4-fpu2|znver4-fpu3") + + (define_insn_reservation "znver4_sse_log_evex_load" 7 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "sselog") + (and (eq_attr "mode" "V16SF,V8DF,XI") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fpu0*2|znver4-fpu1*2|znver4-fpu2*2|znver4-fpu3*2") + + (define_insn_reservation "znver5_sse_log_evex_load" 7 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "sselog") + (and (eq_attr "mode" "V16SF,V8DF,XI") + (eq_attr "memory" "load")))) + "znver4-direct,znver5-load,znver4-fpu0|znver4-fpu1|znver4-fpu2|znver4-fpu3") + + (define_insn_reservation "znver4_sse_log1_evex" 1 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "sselog1") + (and (eq_attr "mode" "V16SF,V8DF,XI") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu1*2|znver4-fpu2*2,znver4-fp-store") + + (define_insn_reservation "znver5_sse_log1_evex" 1 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "sselog1") + (and (eq_attr "mode" "V16SF,V8DF,XI") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu1|znver4-fpu2,znver5-fp-store-512") + + (define_insn_reservation "znver4_sse_log1_evex_load" 7 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "sselog1") + (and (eq_attr "mode" "V16SF,V8DF,XI") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fpu1*2|znver4-fpu2*2,znver4-fp-store") + + (define_insn_reservation "znver5_sse_log1_evex_load" 7 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "sselog1") + (and (eq_attr "mode" "V16SF,V8DF,XI") + (eq_attr "memory" "load")))) + "znver4-direct,znver5-load,znver4-fpu1|znver4-fpu2,znver5-fp-store-512") + + (define_insn_reservation "znver4_sse_mul_evex" 3 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssemul") + (and (eq_attr "mode" "V16SF,V8DF") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu0*2|znver4-fpu1*2") + + (define_insn_reservation "znver5_sse_mul_evex" 3 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssemul") + (and (eq_attr "mode" "V16SF,V8DF") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu0|znver4-fpu1") + + (define_insn_reservation "znver4_sse_mul_evex_load" 9 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssemul") + (and (eq_attr "mode" "V16SF,V8DF") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fpu0*2|znver4-fpu1*2") + + (define_insn_reservation "znver5_sse_mul_evex_load" 9 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssemul") + (and (eq_attr "mode" "V16SF,V8DF") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fpu0|znver4-fpu1") + + (define_insn_reservation "znver4_sse_imul_evex" 3 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "sseimul") + (and (eq_attr "mode" "XI") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu0*2|znver4-fpu3*2") + + (define_insn_reservation "znver5_sse_imul_evex" 3 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "sseimul") + (and (eq_attr "mode" "XI") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu0|znver4-fpu3") + + (define_insn_reservation "znver4_sse_imul_evex_load" 9 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "sseimul") + (and (eq_attr "mode" "XI") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fpu0*2|znver4-fpu1*2") + + (define_insn_reservation "znver5_sse_imul_evex_load" 9 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "sseimul") + (and (eq_attr "mode" "XI") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fpu0|znver4-fpu1") + + (define_insn_reservation "znver4_sse_mov_evex" 4 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssemov") + (and (eq_attr "mode" "XI") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu1*2|znver4-fpu2*2") + + (define_insn_reservation "znver5_sse_mov_evex" 2 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssemov") + (and (eq_attr "mode" "XI") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu1|znver4-fpu2") + + (define_insn_reservation "znver4_sse_mov_evex_load" 10 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssemov") + (and (eq_attr "mode" "XI") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fpu1*2|znver4-fpu2*2") + + (define_insn_reservation "znver5_sse_mov_evex_load" 8 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssemov") + (and (eq_attr "mode" "XI") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fpu1|znver4-fpu2") + + (define_insn_reservation "znver4_sse_mov_evex_store" 5 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssemov") + (and (eq_attr "mode" "XI") + (eq_attr "memory" "store")))) + "znver4-direct,znver4-fpu1*2|znver4-fpu2*2,znver4-fp-store") + + (define_insn_reservation "znver5_sse_mov_evex_store" 3 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssemov") + (and (eq_attr "mode" "XI") + (eq_attr "memory" "store")))) + "znver4-direct,znver4-fpu1|znver4-fpu2,znver5-fp-store-512") + + (define_insn_reservation "znver4_sse_add_evex" 3 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "sseadd") + (and (eq_attr "mode" "V16SF,V8DF") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu2*2|znver4-fpu3*2") + + (define_insn_reservation "znver5_sse_add_evex" 2 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "sseadd") + (and (eq_attr "mode" "V16SF,V8DF") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu2|znver4-fpu3") + + (define_insn_reservation "znver4_sse_add_evex_load" 9 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "sseadd") + (and (eq_attr "mode" "V16SF,V8DF") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fpu2*2|znver4-fpu3*2") + + (define_insn_reservation "znver5_sse_add_evex_load" 8 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "sseadd") + (and (eq_attr "mode" "V16SF,V8DF") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fpu2|znver4-fpu3") + + (define_insn_reservation "znver4_sse_iadd_evex" 1 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "sseiadd") + (and (eq_attr "mode" "XI") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu0*2|znver4-fpu1*2|znver4-fpu2*2|znver4-fpu3*2") + + (define_insn_reservation "znver5_sse_iadd_evex" 1 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "sseiadd") + (and (eq_attr "mode" "XI") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu0|znver4-fpu1|znver4-fpu2|znver4-fpu3") + + (define_insn_reservation "znver4_sse_iadd_evex_load" 7 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "sseiadd") + (and (eq_attr "mode" "XI") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fpu0*2|znver4-fpu1*2|znver4-fpu2*2|znver4-fpu3*2") + + (define_insn_reservation "znver5_sse_iadd_evex_load" 7 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "sseiadd") + (and (eq_attr "mode" "XI") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fpu0|znver4-fpu1|znver4-fpu2|znver4-fpu3") + + (define_insn_reservation "znver4_sse_div_pd_evex" 13 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssediv") + (and (eq_attr "mode" "V8DF") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fdiv*9") + + (define_insn_reservation "znver5_sse_div_pd_evex" 13 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssediv") + (and (eq_attr "mode" "V8DF") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fdiv*9") + + (define_insn_reservation "znver4_sse_div_ps_evex" 10 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssediv") + (and (eq_attr "mode" "V16SF") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fdiv*6") + + (define_insn_reservation "znver5_sse_div_ps_evex" 10 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssediv") + (and (eq_attr "mode" "V16SF") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fdiv*6") + + (define_insn_reservation "znver4_sse_div_pd_evex_load" 19 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssediv") + (and (eq_attr "mode" "V8DF") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fdiv*9") + + (define_insn_reservation "znver5_sse_div_pd_evex_load" 19 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssediv") + (and (eq_attr "mode" "V8DF") + (eq_attr "memory" "load")))) + "znver4-direct,znver5-load,znver4-fdiv*9") + + (define_insn_reservation "znver4_sse_div_ps_evex_load" 16 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssediv") + (and (eq_attr "mode" "V16SF") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fdiv*6") + + (define_insn_reservation "znver5_sse_div_ps_evex_load" 16 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssediv") + (and (eq_attr "mode" "V16SF") + (eq_attr "memory" "load")))) + "znver4-direct,znver5-load,znver4-fdiv*6") + + (define_insn_reservation "znver4_sse_cmp_avx128" 3 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssecmp") + (and (eq_attr "mode" "V4SF,V2DF,V2SF,V1DF,SF") + (and (eq_attr "prefix" "evex") + (eq_attr "memory" "none"))))) + "znver4-direct,znver4-fpu0*2|znver4-fpu1*2") + + (define_insn_reservation "znver5_sse_cmp_avx128" 3 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssecmp") + (and (eq_attr "mode" "V4SF,V2DF,V2SF,V1DF,SF") + (and (eq_attr "prefix" "evex") + (eq_attr "memory" "none"))))) + "znver4-direct,znver4-fpu1|znver4-fpu2") + + (define_insn_reservation "znver4_sse_cmp_avx128_load" 9 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssecmp") + (and (eq_attr "mode" "V4SF,V2DF,V2SF,V1DF,SF") + (and (eq_attr "prefix" "evex") + (eq_attr "memory" "load"))))) + "znver4-direct,znver4-load,znver4-fpu0*2|znver4-fpu1*2") + + (define_insn_reservation "znver5_sse_cmp_avx128_load" 9 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssecmp") + (and (eq_attr "mode" "V4SF,V2DF,V2SF,V1DF,SF") + (and (eq_attr "prefix" "evex") + (eq_attr "memory" "load"))))) + "znver4-direct,znver5-load,znver4-fpu1|znver4-fpu2") + + (define_insn_reservation "znver4_sse_cmp_avx256" 4 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssecmp") + (and (eq_attr "mode" "V8SF,V4DF") + (and (eq_attr "prefix" "evex") + (eq_attr "memory" "none"))))) + "znver4-direct,znver4-fpu0*2|znver4-fpu1*2") + + (define_insn_reservation "znver5_sse_cmp_avx256" 4 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssecmp") + (and (eq_attr "mode" "V8SF,V4DF") + (and (eq_attr "prefix" "evex") + (eq_attr "memory" "none"))))) + "znver4-direct,znver4-fpu1|znver4-fpu2") + + (define_insn_reservation "znver4_sse_cmp_avx256_load" 10 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssecmp") + (and (eq_attr "mode" "V8SF,V4DF") + (and (eq_attr "prefix" "evex") + (eq_attr "memory" "load"))))) + "znver4-direct,znver4-load,znver4-fpu0*2|znver4-fpu1*2") + + (define_insn_reservation "znver5_sse_cmp_avx256_load" 10 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssecmp") + (and (eq_attr "mode" "V8SF,V4DF") + (and (eq_attr "prefix" "evex") + (eq_attr "memory" "load"))))) + "znver4-direct,znver5-load,znver4-fpu1|znver4-fpu2") + + (define_insn_reservation "znver4_sse_cmp_avx512" 5 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssecmp") + (and (eq_attr "mode" "V16SF,V8DF") + (and (eq_attr "prefix" "evex") + (eq_attr "memory" "none"))))) + "znver4-direct,znver4-fpu0*2|znver4-fpu1*2") + + (define_insn_reservation "znver5_sse_cmp_avx512" 5 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssecmp") + (and (eq_attr "mode" "V16SF,V8DF") + (and (eq_attr "prefix" "evex") + (eq_attr "memory" "none"))))) + "znver4-direct,znver4-fpu1|znver4-fpu2") + + (define_insn_reservation "znver4_sse_cmp_avx512_load" 11 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssecmp") + (and (eq_attr "mode" "V16SF,V8DF") + (and (eq_attr "prefix" "evex") + (eq_attr "memory" "load"))))) + "znver4-direct,znver4-load,znver4-fpu0*2|znver4-fpu1*2") + + (define_insn_reservation "znver5_sse_cmp_avx512_load" 11 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssecmp") + (and (eq_attr "mode" "V16SF,V8DF") + (and (eq_attr "prefix" "evex") + (eq_attr "memory" "load"))))) + "znver4-direct,znver5-load,znver4-fpu1|znver4-fpu2") + + (define_insn_reservation "znver4_sse_cvt_evex" 6 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssecvt") + (and (eq_attr "mode" "V16SF,V8DF") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu1*2|znver4-fpu2*2,znver4-fpu2*2|znver4-fpu3*2") + + (define_insn_reservation "znver5_sse_cvt_evex" 6 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssecvt") + (and (eq_attr "mode" "V16SF,V8DF") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu1|znver4-fpu2,znver4-fpu2|znver4-fpu3") + + (define_insn_reservation "znver4_sse_cvt_evex_load" 12 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssecvt") + (and (eq_attr "mode" "V16SF,V8DF") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fpu1*2|znver4-fpu2*2,znver4-fpu2*2|znver4-fpu3*2") + + (define_insn_reservation "znver5_sse_cvt_evex_load" 12 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssecvt") + (and (eq_attr "mode" "V16SF,V8DF") + (eq_attr "memory" "load")))) + "znver4-direct,znver5-load,znver4-fpu1|znver4-fpu2,znver4-fpu2|znver4-fpu3") + + (define_insn_reservation "znver4_sse_shuf_evex" 1 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "sseshuf") + (and (eq_attr "mode" "V16SF,V8DF") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu0*2|znver4-fpu1*2|znver4-fpu2*2|znver4-fpu3*2") + + (define_insn_reservation "znver5_sse_shuf_evex" 1 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "sseshuf") + (and (eq_attr "mode" "V16SF,V8DF") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu0|znver4-fpu1|znver4-fpu2|znver4-fpu3") + + (define_insn_reservation "znver4_sse_shuf_evex_load" 7 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "sseshuf") + (and (eq_attr "mode" "V16SF,V8DF") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fpu0*2|znver4-fpu1*2|znver4-fpu2*2|znver4-fpu3*2") + + (define_insn_reservation "znver5_sse_shuf_evex_load" 7 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "sseshuf") + (and (eq_attr "mode" "V16SF,V8DF") + (eq_attr "memory" "load")))) + "znver4-direct,znver5-load,znver4-fpu0|znver4-fpu1|znver4-fpu2|znver4-fpu3") + + (define_insn_reservation "znver4_sse_ishuf_evex" 4 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "sseshuf") + (and (eq_attr "mode" "XI") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu1*2|znver4-fpu2*2") + + (define_insn_reservation "znver5_sse_ishuf_evex" 5 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "sseshuf") + (and (eq_attr "mode" "XI") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu1|znver4-fpu2") + + (define_insn_reservation "znver4_sse_ishuf_evex_load" 10 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "sseshuf") + (and (eq_attr "mode" "XI") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fpu1*2|znver4-fpu2*2") + + (define_insn_reservation "znver5_sse_ishuf_evex_load" 10 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "sseshuf") + (and (eq_attr "mode" "XI") + (eq_attr "memory" "load")))) + "znver4-direct,znver5-load,znver4-fpu1|znver4-fpu2") + + (define_insn_reservation "znver4_sse_muladd" 4 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssemuladd") + (eq_attr "memory" "none"))) + "znver4-direct,znver4-fpu0*2|znver4-fpu1*2") + + (define_insn_reservation "znver5_sse_muladd" 4 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssemuladd") + (eq_attr "memory" "none"))) + "znver4-direct,znver4-fpu0|znver4-fpu1") + + (define_insn_reservation "znver4_sse_muladd_load" 10 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "sseshuf") + (eq_attr "memory" "load"))) + "znver4-direct,znver4-load,znver4-fpu0*2|znver4-fpu1*2") + + (define_insn_reservation "znver5_sse_muladd_load" 10 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "sseshuf") + (eq_attr "memory" "load"))) + "znver4-direct,znver5-load,znver4-fpu1|znver4-fpu2") + + ;; AVX512 mask instructions + + (define_insn_reservation "znver4_sse_mskmov" 2 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "mskmov") + (eq_attr "memory" "none"))) + "znver4-direct,znver4-fpu0*2|znver4-fpu1*2") + + (define_insn_reservation "znver5_sse_mskmov" 2 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "mskmov") + (eq_attr "memory" "none"))) + "znver4-direct,znver4-fpu0|znver4-fpu1") + + (define_insn_reservation "znver4_sse_msklog" 1 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "msklog") + (eq_attr "memory" "none"))) + "znver4-direct,znver4-fpu2*2|znver4-fpu3*2") + + (define_insn_reservation "znver5_sse_msklog" 1 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "msklog") + (eq_attr "memory" "none"))) + "znver4-direct,znver4-fpu0|znver4-fpu3") diff -Nrcpad gcc-12.4.0/gcc/config/i386/znver4.md gcc-12.5.0-RC-20250704/gcc/config/i386/znver4.md *** gcc-12.4.0/gcc/config/i386/znver4.md Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/config/i386/znver4.md Thu Jan 1 00:00:00 1970 *************** *** 1,1068 **** - ;; Copyright (C) 2012-2022 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 - ;; . - ;; - - - (define_attr "znver4_decode" "direct,vector,double" - (const_string "direct")) - - ;; AMD znver4 Scheduling - ;; Modeling automatons for zen decoders, integer execution pipes, - ;; AGU pipes, branch, floating point execution and fp store units. - (define_automaton "znver4, znver4_ieu, znver4_idiv, znver4_fdiv, znver4_agu, znver4_fpu, znver4_fp_store") - - ;; Decoders unit has 4 decoders and all of them can decode fast path - ;; and vector type instructions. - (define_cpu_unit "znver4-decode0" "znver4") - (define_cpu_unit "znver4-decode1" "znver4") - (define_cpu_unit "znver4-decode2" "znver4") - (define_cpu_unit "znver4-decode3" "znver4") - - ;; Currently blocking all decoders for vector path instructions as - ;; they are dispatched separetely as microcode sequence. - (define_reservation "znver4-vector" "znver4-decode0+znver4-decode1+znver4-decode2+znver4-decode3") - - ;; Direct instructions can be issued to any of the four decoders. - (define_reservation "znver4-direct" "znver4-decode0|znver4-decode1|znver4-decode2|znver4-decode3") - - ;; Fix me: Need to revisit this later to simulate fast path double behavior. - (define_reservation "znver4-double" "znver4-direct") - - - ;; Integer unit 4 ALU pipes. - (define_cpu_unit "znver4-ieu0" "znver4_ieu") - (define_cpu_unit "znver4-ieu1" "znver4_ieu") - (define_cpu_unit "znver4-ieu2" "znver4_ieu") - (define_cpu_unit "znver4-ieu3" "znver4_ieu") - ;; Znver4 has an additional branch unit. - (define_cpu_unit "znver4-bru0" "znver4_ieu") - (define_reservation "znver4-ieu" "znver4-ieu0|znver4-ieu1|znver4-ieu2|znver4-ieu3") - - ;; 3 AGU pipes in znver4 - (define_cpu_unit "znver4-agu0" "znver4_agu") - (define_cpu_unit "znver4-agu1" "znver4_agu") - (define_cpu_unit "znver4-agu2" "znver4_agu") - (define_reservation "znver4-agu-reserve" "znver4-agu0|znver4-agu1|znver4-agu2") - - ;; Load is 4 cycles. We do not model reservation of load unit. - (define_reservation "znver4-load" "znver4-agu-reserve") - (define_reservation "znver4-store" "znver4-agu-reserve") - - ;; vectorpath (microcoded) instructions are single issue instructions. - ;; So, they occupy all the integer units. - (define_reservation "znver4-ivector" "znver4-ieu0+znver4-ieu1 - +znver4-ieu2+znver4-ieu3+znver4-bru0 - +znver4-agu0+znver4-agu1+znver4-agu2") - - ;; Floating point unit 4 FP pipes. - (define_cpu_unit "znver4-fpu0" "znver4_fpu") - (define_cpu_unit "znver4-fpu1" "znver4_fpu") - (define_cpu_unit "znver4-fpu2" "znver4_fpu") - (define_cpu_unit "znver4-fpu3" "znver4_fpu") - - (define_reservation "znver4-fpu" "znver4-fpu0|znver4-fpu1|znver4-fpu2|znver4-fpu3") - - (define_reservation "znver4-fvector" "znver4-fpu0+znver4-fpu1 - +znver4-fpu2+znver4-fpu3 - +znver4-agu0+znver4-agu1+znver4-agu2") - - ;; DIV units - (define_cpu_unit "znver4-idiv" "znver4_idiv") - (define_cpu_unit "znver4-fdiv" "znver4_fdiv") - - ;; Separate fp store and fp-to-int store. Although there are 2 store pipes, the - ;; throughput is limited to only one per cycle. - (define_cpu_unit "znver4-fp-store" "znver4_fp_store") - - - ;; Integer Instructions - ;; Move instructions - ;; XCHG - (define_insn_reservation "znver4_imov_double" 1 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "znver1_decode" "double") - (and (eq_attr "type" "imov") - (eq_attr "memory" "none")))) - "znver4-double,znver4-ieu") - - (define_insn_reservation "znver4_imov_double_load" 5 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "znver1_decode" "double") - (and (eq_attr "type" "imov") - (eq_attr "memory" "load")))) - "znver4-double,znver4-load,znver4-ieu") - - ;; imov, imovx - (define_insn_reservation "znver4_imov" 1 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "imov,imovx") - (eq_attr "memory" "none"))) - "znver4-direct,znver4-ieu") - - (define_insn_reservation "znver4_imov_load" 5 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "imov,imovx") - (eq_attr "memory" "load"))) - "znver4-direct,znver4-load,znver4-ieu") - - ;; Push Instruction - (define_insn_reservation "znver4_push" 1 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "push") - (eq_attr "memory" "store"))) - "znver4-direct,znver4-store") - - (define_insn_reservation "znver4_push_mem" 5 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "push") - (eq_attr "memory" "both"))) - "znver4-direct,znver4-load,znver4-store") - - ;; Pop instruction - (define_insn_reservation "znver4_pop" 4 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "pop") - (eq_attr "memory" "load"))) - "znver4-direct,znver4-load") - - (define_insn_reservation "znver4_pop_mem" 5 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "pop") - (eq_attr "memory" "both"))) - "znver4-direct,znver4-load,znver4-store") - - ;; Integer Instructions or General instructions - ;; Multiplications - (define_insn_reservation "znver4_imul" 3 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "imul") - (eq_attr "memory" "none"))) - "znver4-direct,znver4-ieu1") - - (define_insn_reservation "znver4_imul_load" 7 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "imul") - (eq_attr "memory" "load"))) - "znver4-direct,znver4-load,znver4-ieu1") - - ;; Divisions - (define_insn_reservation "znver4_idiv_DI" 18 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "idiv") - (and (eq_attr "mode" "DI") - (eq_attr "memory" "none")))) - "znver4-double,znver4-idiv*10") - - (define_insn_reservation "znver4_idiv_SI" 12 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "idiv") - (and (eq_attr "mode" "SI") - (eq_attr "memory" "none")))) - "znver4-double,znver4-idiv*6") - - (define_insn_reservation "znver4_idiv_HI" 10 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "idiv") - (and (eq_attr "mode" "HI") - (eq_attr "memory" "none")))) - "znver4-double,znver4-idiv*4") - - (define_insn_reservation "znver4_idiv_QI" 9 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "idiv") - (and (eq_attr "mode" "QI") - (eq_attr "memory" "none")))) - "znver4-double,znver4-idiv*4") - - (define_insn_reservation "znver4_idiv_DI_load" 22 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "idiv") - (and (eq_attr "mode" "DI") - (eq_attr "memory" "load")))) - "znver4-double,znver4-load,znver4-idiv*10") - - (define_insn_reservation "znver4_idiv_SI_load" 16 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "idiv") - (and (eq_attr "mode" "SI") - (eq_attr "memory" "load")))) - "znver4-double,znver4-load,znver4-idiv*6") - - (define_insn_reservation "znver4_idiv_HI_load" 14 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "idiv") - (and (eq_attr "mode" "HI") - (eq_attr "memory" "load")))) - "znver4-double,znver4-load,znver4-idiv*4") - - (define_insn_reservation "znver4_idiv_QI_load" 13 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "idiv") - (and (eq_attr "mode" "QI") - (eq_attr "memory" "load")))) - "znver4-double,znver4-load,znver4-idiv*4") - - ;; INTEGER/GENERAL Instructions - (define_insn_reservation "znver4_insn" 1 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "alu,alu1,negnot,rotate1,ishift1,test,incdec,icmp") - (eq_attr "memory" "none,unknown"))) - "znver4-direct,znver4-ieu") - - (define_insn_reservation "znver4_insn_load" 5 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "alu,alu1,negnot,rotate1,ishift1,test,incdec,icmp") - (eq_attr "memory" "load"))) - "znver4-direct,znver4-load,znver4-ieu") - - (define_insn_reservation "znver4_insn2" 1 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "icmov,setcc") - (eq_attr "memory" "none,unknown"))) - "znver4-direct,znver4-ieu0|znver4-ieu3") - - (define_insn_reservation "znver4_insn2_load" 5 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "icmov,setcc") - (eq_attr "memory" "load"))) - "znver4-direct,znver4-load,znver4-ieu0|znver4-ieu3") - - (define_insn_reservation "znver4_rotate" 1 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "rotate") - (eq_attr "memory" "none,unknown"))) - "znver4-direct,znver4-ieu1|znver4-ieu2") - - (define_insn_reservation "znver4_rotate_load" 5 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "rotate") - (eq_attr "memory" "load"))) - "znver4-direct,znver4-load,znver4-ieu1|znver4-ieu2") - - (define_insn_reservation "znver4_insn_store" 1 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "alu,alu1,negnot,rotate1,ishift1,test,incdec,icmp") - (eq_attr "memory" "store"))) - "znver4-direct,znver4-ieu,znver4-store") - - (define_insn_reservation "znver4_insn2_store" 1 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "icmov,setcc") - (eq_attr "memory" "store"))) - "znver4-direct,znver4-ieu0|znver4-ieu3,znver4-store") - - (define_insn_reservation "znver4_rotate_store" 1 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "rotate") - (eq_attr "memory" "store"))) - "znver4-direct,znver4-ieu1|znver4-ieu2,znver4-store") - - ;; alu1 instructions - (define_insn_reservation "znver4_alu1_vector" 3 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "znver1_decode" "vector") - (and (eq_attr "type" "alu1") - (eq_attr "memory" "none,unknown")))) - "znver4-vector,znver4-ivector*3") - - (define_insn_reservation "znver4_alu1_vector_load" 7 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "znver1_decode" "vector") - (and (eq_attr "type" "alu1") - (eq_attr "memory" "load")))) - "znver4-vector,znver4-load,znver4-ivector*3") - - ;; Call Instruction - (define_insn_reservation "znver4_call" 1 - (and (eq_attr "cpu" "znver4") - (eq_attr "type" "call,callv")) - "znver4-double,znver4-ieu0|znver4-bru0,znver4-store") - - ;; Branches - (define_insn_reservation "znver4_branch" 1 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ibr") - (eq_attr "memory" "none"))) - "znver4-direct,znver4-ieu0|znver4-bru0") - - (define_insn_reservation "znver4_branch_load" 5 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ibr") - (eq_attr "memory" "load"))) - "znver4-direct,znver4-load,znver4-ieu0|znver4-bru0") - - (define_insn_reservation "znver4_branch_vector" 2 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ibr") - (eq_attr "memory" "none,unknown"))) - "znver4-vector,znver4-ivector*2") - - (define_insn_reservation "znver4_branch_vector_load" 6 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ibr") - (eq_attr "memory" "load"))) - "znver4-vector,znver4-load,znver4-ivector*2") - - ;; LEA instruction with simple addressing - (define_insn_reservation "znver4_lea" 1 - (and (eq_attr "cpu" "znver4") - (eq_attr "type" "lea")) - "znver4-direct,znver4-ieu") - - ;; Leave - (define_insn_reservation "znver4_leave" 1 - (and (eq_attr "cpu" "znver4") - (eq_attr "type" "leave")) - "znver4-double,znver4-ieu,znver4-store") - - ;; STR and ISHIFT are microcoded. - (define_insn_reservation "znver4_str" 3 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "str") - (eq_attr "memory" "none"))) - "znver4-vector,znver4-ivector*3") - - (define_insn_reservation "znver4_str_load" 7 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "str") - (eq_attr "memory" "load"))) - "znver4-vector,znver4-load,znver4-ivector*3") - - (define_insn_reservation "znver4_ishift" 2 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ishift") - (eq_attr "memory" "none"))) - "znver4-vector,znver4-ivector*2") - - (define_insn_reservation "znver4_ishift_load" 6 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ishift") - (eq_attr "memory" "load"))) - "znver4-vector,znver4-load,znver4-ivector*2") - - ;; Other vector type - (define_insn_reservation "znver4_ieu_vector" 5 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "other,multi") - (eq_attr "memory" "none,unknown"))) - "znver4-vector,znver4-ivector*5") - - (define_insn_reservation "znver4_ieu_vector_load" 9 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "other,multi") - (eq_attr "memory" "load"))) - "znver4-vector,znver4-load,znver4-ivector*5") - - ;; Floating Point - ;; FP movs - (define_insn_reservation "znver4_fp_cmov" 4 - (and (eq_attr "cpu" "znver4") - (eq_attr "type" "fcmov")) - "znver4-vector,znver4-fvector*3") - - (define_insn_reservation "znver4_fp_mov_direct" 1 - (and (eq_attr "cpu" "znver4") - (eq_attr "type" "fmov")) - "znver4-direct,znver4-fpu0|znver4-fpu1") - - ;;FLD - (define_insn_reservation "znver4_fp_mov_direct_load" 6 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "znver1_decode" "direct") - (and (eq_attr "type" "fmov") - (eq_attr "memory" "load")))) - "znver4-direct,znver4-load,znver4-fpu0|znver4-fpu1") - - ;;FST - (define_insn_reservation "znver4_fp_mov_direct_store" 6 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "znver1_decode" "direct") - (and (eq_attr "type" "fmov") - (eq_attr "memory" "store")))) - "znver4-direct,znver4-fpu0|znver4-fpu1,znver4-fp-store") - - ;;FILD - (define_insn_reservation "znver4_fp_mov_double_load" 13 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "znver1_decode" "double") - (and (eq_attr "type" "fmov") - (eq_attr "memory" "load")))) - "znver4-direct,znver4-load,znver4-fpu1") - - ;;FIST - (define_insn_reservation "znver4_fp_mov_double_store" 7 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "znver1_decode" "double") - (and (eq_attr "type" "fmov") - (eq_attr "memory" "store")))) - "znver4-double,znver4-fpu1,znver4-fp-store") - - ;; FSQRT - (define_insn_reservation "znver4_fsqrt" 22 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "fpspc") - (and (eq_attr "mode" "XF") - (eq_attr "memory" "none")))) - "znver4-direct,znver4-fdiv*10") - - ;; FPSPC instructions - (define_insn_reservation "znver4_fp_spc" 6 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "fpspc") - (eq_attr "memory" "none"))) - "znver4-vector,znver4-fvector*6") - - (define_insn_reservation "znver4_fp_insn_vector" 6 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "znver1_decode" "vector") - (eq_attr "type" "mmxcvt,sselog1,ssemov"))) - "znver4-vector,znver4-fvector*6") - - ;; FADD, FSUB, FMUL - (define_insn_reservation "znver4_fp_op_mul" 7 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "fop,fmul") - (eq_attr "memory" "none"))) - "znver4-direct,znver4-fpu0") - - (define_insn_reservation "znver4_fp_op_mul_load" 12 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "fop,fmul") - (eq_attr "memory" "load"))) - "znver4-direct,znver4-load,znver4-fpu0") - - ;; FDIV - (define_insn_reservation "znver4_fp_div" 15 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "fdiv") - (eq_attr "memory" "none"))) - "znver4-direct,znver4-fdiv*6") - - (define_insn_reservation "znver4_fp_div_load" 20 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "fdiv") - (eq_attr "memory" "load"))) - "znver4-direct,znver4-load,znver4-fdiv*6") - - (define_insn_reservation "znver4_fp_idiv_load" 24 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "fdiv") - (and (eq_attr "fp_int_src" "true") - (eq_attr "memory" "load")))) - "znver4-double,znver4-load,znver4-fdiv*6") - - ;; FABS, FCHS - (define_insn_reservation "znver4_fp_fsgn" 1 - (and (eq_attr "cpu" "znver4") - (eq_attr "type" "fsgn")) - "znver4-direct,znver4-fpu0|znver4-fpu1") - - ;; FCMP - (define_insn_reservation "znver4_fp_fcmp" 3 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "fcmp") - (eq_attr "memory" "none"))) - "znver4-direct,znver4-fpu1") - - (define_insn_reservation "znver4_fp_fcmp_double" 4 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "fcmp") - (and (eq_attr "znver1_decode" "double") - (eq_attr "memory" "none")))) - "znver4-double,znver4-fpu1,znver4-fpu2") - - ;; MMX, SSE, SSEn.n instructions - (define_insn_reservation "znver4_fp_mmx " 1 - (and (eq_attr "cpu" "znver4") - (eq_attr "type" "mmx")) - "znver4-direct,znver4-fpu1|znver4-fpu2") - - (define_insn_reservation "znver4_mmx_add_cmp" 1 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "mmxadd,mmxcmp") - (eq_attr "memory" "none"))) - "znver4-direct,znver4-fpu") - - (define_insn_reservation "znver4_mmx_add_cmp_load" 6 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "mmxadd,mmxcmp") - (eq_attr "memory" "load"))) - "znver4-direct,znver4-load,znver4-fpu") - - (define_insn_reservation "znver4_mmx_insn" 1 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "mmxcvt,sseshuf,sseshuf1,mmxshft") - (eq_attr "memory" "none"))) - "znver4-direct,znver4-fpu1|znver4-fpu2") - - (define_insn_reservation "znver4_mmx_insn_load" 6 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "mmxcvt,sseshuf,sseshuf1,mmxshft") - (eq_attr "memory" "load"))) - "znver4-direct,znver4-load,znver4-fpu1|znver4-fpu2") - - (define_insn_reservation "znver4_mmx_mov" 1 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "mmxmov") - (eq_attr "memory" "store"))) - "znver4-direct,znver4-fp-store") - - (define_insn_reservation "znver4_mmx_mov_load" 6 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "mmxmov") - (eq_attr "memory" "both"))) - "znver4-direct,znver4-load,znver4-fp-store") - - (define_insn_reservation "znver4_mmx_mul" 3 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "mmxmul") - (eq_attr "memory" "none"))) - "znver4-direct,znver4-fpu0|znver4-fpu3") - - (define_insn_reservation "znver4_mmx_mul_load" 8 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "mmxmul") - (eq_attr "memory" "load"))) - "znver4-direct,znver4-load,znver4-fpu0|znver4-fpu3") - - ;; AVX instructions - (define_insn_reservation "znver4_sse_log" 1 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sselog") - (and (eq_attr "mode" "V4SF,V8SF,V2DF,V4DF,QI,HI,SI,DI,TI,OI") - (eq_attr "memory" "none")))) - "znver4-direct,znver4-fpu") - - (define_insn_reservation "znver4_sse_log_load" 6 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sselog") - (and (eq_attr "mode" "V4SF,V8SF,V2DF,V4DF,QI,HI,SI,DI,TI,OI") - (eq_attr "memory" "load")))) - "znver4-direct,znver4-load,znver4-fpu") - - (define_insn_reservation "znver4_sse_log1" 1 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sselog1") - (and (eq_attr "mode" "V4SF,V8SF,V2DF,V4DF,QI,HI,SI,DI,TI,OI") - (eq_attr "memory" "store")))) - "znver4-direct,znver4-fpu1|znver4-fpu2,znver4-fp-store") - - (define_insn_reservation "znver4_sse_log1_load" 6 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sselog1") - (and (eq_attr "mode" "V4SF,V8SF,V2DF,V4DF,QI,HI,SI,DI,TI,OI") - (eq_attr "memory" "both")))) - "znver4-direct,znver4-load,znver4-fpu1|znver4-fpu2,znver4-fp-store") - - (define_insn_reservation "znver4_sse_comi" 1 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssecomi") - (eq_attr "memory" "store"))) - "znver4-double,znver4-fpu2|znver4-fpu3,znver4-fp-store") - - (define_insn_reservation "znver4_sse_comi_load" 6 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssecomi") - (eq_attr "memory" "both"))) - "znver4-double,znver4-load,znver4-fpu2|znver4-fpu3,znver4-fp-store") - - (define_insn_reservation "znver4_sse_test" 1 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "prefix_extra" "1") - (and (eq_attr "type" "ssecomi") - (eq_attr "memory" "none")))) - "znver4-direct,znver4-fpu1|znver4-fpu2") - - (define_insn_reservation "znver4_sse_test_load" 6 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "prefix_extra" "1") - (and (eq_attr "type" "ssecomi") - (eq_attr "memory" "load")))) - "znver4-direct,znver4-load,znver4-fpu1|znver4-fpu2") - - (define_insn_reservation "znver4_sse_imul" 3 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sseimul") - (and (eq_attr "mode" "QI,HI,SI,DI,TI,OI") - (eq_attr "memory" "none")))) - "znver4-direct,znver4-fpu0|znver4-fpu3") - - (define_insn_reservation "znver4_sse_imul_load" 8 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sseimul") - (and (eq_attr "mode" "QI,HI,SI,DI,TI,OI") - (eq_attr "memory" "load")))) - "znver4-direct,znver4-load,znver4-fpu0|znver4-fpu1") - - (define_insn_reservation "znver4_sse_mov" 1 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssemov") - (and (eq_attr "mode" "QI,HI,SI,DI,TI,OI") - (eq_attr "memory" "none")))) - "znver4-direct,znver4-fpu1|znver4-fpu2") - - (define_insn_reservation "znver4_sse_mov_load" 6 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssemov") - (and (eq_attr "mode" "QI,HI,SI,DI,TI,OI") - (eq_attr "memory" "load")))) - "znver4-direct,znver4-load,znver4-fpu1|znver4-fpu2") - - (define_insn_reservation "znver4_sse_mov_store" 1 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssemov") - (and (eq_attr "mode" "QI,HI,SI,DI,TI,OI") - (eq_attr "memory" "store")))) - "znver4-direct,znver4-fpu1|znver4-fpu2,znver4-fp-store") - - (define_insn_reservation "znver4_sse_mov_fp" 1 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssemov") - (and (eq_attr "mode" "V16SF,V8DF,V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") - (eq_attr "memory" "none")))) - "znver4-direct,znver4-fpu") - - (define_insn_reservation "znver4_sse_mov_fp_load" 6 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssemov") - (and (eq_attr "mode" "V16SF,V8DF,V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") - (eq_attr "memory" "load")))) - "znver4-direct,znver4-load,znver4-fpu") - - (define_insn_reservation "znver4_sse_mov_fp_store" 1 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssemov") - (and (eq_attr "mode" "V16SF,V8DF,V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") - (eq_attr "memory" "store")))) - "znver4-direct,znver4-fp-store") - - (define_insn_reservation "znver4_sse_add" 3 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sseadd") - (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") - (eq_attr "memory" "none")))) - "znver4-direct,znver4-fpu2|znver4-fpu3") - - (define_insn_reservation "znver4_sse_add_load" 8 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sseadd") - (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") - (eq_attr "memory" "load")))) - "znver4-direct,znver4-load,znver4-fpu2|znver4-fpu3") - - (define_insn_reservation "znver4_sse_add1" 4 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sseadd1") - (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") - (eq_attr "memory" "none")))) - "znver4-vector,znver4-fvector*2") - - (define_insn_reservation "znver4_sse_add1_load" 9 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sseadd1") - (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") - (eq_attr "memory" "load")))) - "znver4-vector,znver4-load,znver4-fvector*2") - - (define_insn_reservation "znver4_sse_iadd" 1 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sseiadd") - (and (eq_attr "mode" "QI,HI,SI,DI,TI,OI") - (eq_attr "memory" "none")))) - "znver4-direct,znver4-fpu") - - (define_insn_reservation "znver4_sse_iadd_load" 6 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sseiadd") - (and (eq_attr "mode" "QI,HI,SI,DI,TI,OI") - (eq_attr "memory" "load")))) - "znver4-direct,znver4-load,znver4-fpu") - - (define_insn_reservation "znver4_sse_mul" 3 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssemul") - (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") - (eq_attr "memory" "none")))) - "znver4-direct,znver4-fpu0|znver4-fpu1") - - (define_insn_reservation "znver4_sse_mul_load" 8 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssemul") - (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") - (eq_attr "memory" "load")))) - "znver4-direct,znver4-load,znver4-fpu0|znver4-fpu1") - - (define_insn_reservation "znver4_sse_div_pd" 13 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssediv") - (and (eq_attr "mode" "V4DF,V2DF,V1DF") - (eq_attr "memory" "none")))) - "znver4-direct,znver4-fdiv*5") - - (define_insn_reservation "znver4_sse_div_ps" 10 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssediv") - (and (eq_attr "mode" "V8SF,V4SF,V2SF,SF") - (eq_attr "memory" "none")))) - "znver4-direct,znver4-fdiv*3") - - (define_insn_reservation "znver4_sse_div_pd_load" 18 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssediv") - (and (eq_attr "mode" "V4DF,V2DF,V1DF") - (eq_attr "memory" "load")))) - "znver4-direct,znver4-load,znver4-fdiv*5") - - (define_insn_reservation "znver4_sse_div_ps_load" 15 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssediv") - (and (eq_attr "mode" "V8SF,V4SF,V2SF,SF") - (eq_attr "memory" "load")))) - "znver4-direct,znver4-load,znver4-fdiv*3") - - (define_insn_reservation "znver4_sse_cmp_avx" 1 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssecmp") - (and (eq_attr "prefix" "vex") - (eq_attr "memory" "none")))) - "znver4-direct,znver4-fpu0|znver4-fpu1") - - (define_insn_reservation "znver4_sse_cmp_avx_load" 6 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssecmp") - (and (eq_attr "prefix" "vex") - (eq_attr "memory" "load")))) - "znver4-direct,znver4-load,znver4-fpu0|znver4-fpu1") - - (define_insn_reservation "znver4_sse_comi_avx" 1 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssecomi") - (eq_attr "memory" "store"))) - "znver4-direct,znver4-fpu2+znver4-fpu3,znver4-fp-store") - - (define_insn_reservation "znver4_sse_comi_avx_load" 6 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssecomi") - (eq_attr "memory" "both"))) - "znver4-direct,znver4-load,znver4-fpu2+znver4-fpu3,znver4-fp-store") - - (define_insn_reservation "znver4_sse_cvt" 3 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssecvt") - (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") - (eq_attr "memory" "none")))) - "znver4-direct,znver4-fpu2|znver4-fpu3") - - (define_insn_reservation "znver4_sse_cvt_load" 8 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssecvt") - (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") - (eq_attr "memory" "load")))) - "znver4-direct,znver4-load,znver4-fpu2|znver4-fpu3") - - (define_insn_reservation "znver4_sse_icvt" 3 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssecvt") - (and (eq_attr "mode" "SI") - (eq_attr "memory" "none")))) - "znver4-direct,znver4-fpu2|znver4-fpu3") - - (define_insn_reservation "znver4_sse_icvt_store" 4 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssecvt") - (and (eq_attr "mode" "SI") - (eq_attr "memory" "store")))) - "znver4-double,znver4-fpu2|znver4-fpu3,znver4-fp-store") - - (define_insn_reservation "znver4_sse_shuf" 1 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sseshuf") - (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") - (eq_attr "memory" "none")))) - "znver4-direct,znver4-fpu1|znver4-fpu2") - - (define_insn_reservation "znver4_sse_shuf_load" 6 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sseshuf") - (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") - (eq_attr "memory" "load")))) - "znver4-direct,znver4-load,znver4-fpu") - - (define_insn_reservation "znver4_sse_ishuf" 3 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sseshuf") - (and (eq_attr "mode" "OI") - (eq_attr "memory" "none")))) - "znver4-direct,znver4-fpu1|znver4-fpu2") - - (define_insn_reservation "znver4_sse_ishuf_load" 8 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sseshuf") - (and (eq_attr "mode" "OI") - (eq_attr "memory" "load")))) - "znver4-direct,znver4-load,znver4-fpu1|znver4-fpu2") - - ;; AVX512 instructions - (define_insn_reservation "znver4_sse_log_evex" 1 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sselog") - (and (eq_attr "mode" "V16SF,V8DF,XI") - (eq_attr "memory" "none")))) - "znver4-direct,znver4-fpu0*2|znver4-fpu1*2|znver4-fpu2*2|znver4-fpu3*2") - - (define_insn_reservation "znver4_sse_log_evex_load" 7 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sselog") - (and (eq_attr "mode" "V16SF,V8DF,XI") - (eq_attr "memory" "load")))) - "znver4-direct,znver4-load,znver4-fpu0*2|znver4-fpu1*2|znver4-fpu2*2|znver4-fpu3*2") - - (define_insn_reservation "znver4_sse_log1_evex" 1 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sselog1") - (and (eq_attr "mode" "V16SF,V8DF,XI") - (eq_attr "memory" "none")))) - "znver4-direct,znver4-fpu1*2|znver4-fpu2*2,znver4-fp-store") - - (define_insn_reservation "znver4_sse_log1_evex_load" 7 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sselog1") - (and (eq_attr "mode" "V16SF,V8DF,XI") - (eq_attr "memory" "load")))) - "znver4-direct,znver4-load,znver4-fpu1*2|znver4-fpu2*2,znver4-fp-store") - - (define_insn_reservation "znver4_sse_mul_evex" 3 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssemul") - (and (eq_attr "mode" "V16SF,V8DF") - (eq_attr "memory" "none")))) - "znver4-direct,znver4-fpu0*2|znver4-fpu1*2") - - (define_insn_reservation "znver4_sse_mul_evex_load" 9 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssemul") - (and (eq_attr "mode" "V16SF,V8DF") - (eq_attr "memory" "load")))) - "znver4-direct,znver4-load,znver4-fpu0*2|znver4-fpu1*2") - - (define_insn_reservation "znver4_sse_imul_evex" 3 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sseimul") - (and (eq_attr "mode" "XI") - (eq_attr "memory" "none")))) - "znver4-direct,znver4-fpu0*2|znver4-fpu3*2") - - (define_insn_reservation "znver4_sse_imul_evex_load" 9 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sseimul") - (and (eq_attr "mode" "XI") - (eq_attr "memory" "load")))) - "znver4-direct,znver4-load,znver4-fpu0*2|znver4-fpu1*2") - - (define_insn_reservation "znver4_sse_mov_evex" 4 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssemov") - (and (eq_attr "mode" "XI") - (eq_attr "memory" "none")))) - "znver4-direct,znver4-fpu1*2|znver4-fpu2*2") - - (define_insn_reservation "znver4_sse_mov_evex_load" 10 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssemov") - (and (eq_attr "mode" "XI") - (eq_attr "memory" "load")))) - "znver4-direct,znver4-load,znver4-fpu1*2|znver4-fpu2*2") - - (define_insn_reservation "znver4_sse_mov_evex_store" 5 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssemov") - (and (eq_attr "mode" "XI") - (eq_attr "memory" "store")))) - "znver4-direct,znver4-fpu1*2|znver4-fpu2*2,znver4-fp-store") - - (define_insn_reservation "znver4_sse_add_evex" 3 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sseadd") - (and (eq_attr "mode" "V16SF,V8DF") - (eq_attr "memory" "none")))) - "znver4-direct,znver4-fpu2*2|znver4-fpu3*2") - - (define_insn_reservation "znver4_sse_add_evex_load" 9 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sseadd") - (and (eq_attr "mode" "V16SF,V8DF") - (eq_attr "memory" "load")))) - "znver4-direct,znver4-load,znver4-fpu2*2|znver4-fpu3*2") - - (define_insn_reservation "znver4_sse_iadd_evex" 1 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sseiadd") - (and (eq_attr "mode" "XI") - (eq_attr "memory" "none")))) - "znver4-direct,znver4-fpu0*2|znver4-fpu1*2|znver4-fpu2*2|znver4-fpu3*2") - - (define_insn_reservation "znver4_sse_iadd_evex_load" 7 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sseiadd") - (and (eq_attr "mode" "XI") - (eq_attr "memory" "load")))) - "znver4-direct,znver4-load,znver4-fpu0*2|znver4-fpu1*2|znver4-fpu2*2|znver4-fpu3*2") - - (define_insn_reservation "znver4_sse_div_pd_evex" 13 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssediv") - (and (eq_attr "mode" "V8DF") - (eq_attr "memory" "none")))) - "znver4-direct,znver4-fdiv*9") - - (define_insn_reservation "znver4_sse_div_ps_evex" 10 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssediv") - (and (eq_attr "mode" "V16SF") - (eq_attr "memory" "none")))) - "znver4-direct,znver4-fdiv*6") - - (define_insn_reservation "znver4_sse_div_pd_evex_load" 19 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssediv") - (and (eq_attr "mode" "V8DF") - (eq_attr "memory" "load")))) - "znver4-direct,znver4-load,znver4-fdiv*9") - - (define_insn_reservation "znver4_sse_div_ps_evex_load" 16 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssediv") - (and (eq_attr "mode" "V16SF") - (eq_attr "memory" "load")))) - "znver4-direct,znver4-load,znver4-fdiv*6") - - (define_insn_reservation "znver4_sse_cmp_avx128" 3 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssecmp") - (and (eq_attr "mode" "V4SF,V2DF,V2SF,V1DF,SF") - (and (eq_attr "prefix" "evex") - (eq_attr "memory" "none"))))) - "znver4-direct,znver4-fpu0*2|znver4-fpu1*2") - - (define_insn_reservation "znver4_sse_cmp_avx128_load" 9 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssecmp") - (and (eq_attr "mode" "V4SF,V2DF,V2SF,V1DF,SF") - (and (eq_attr "prefix" "evex") - (eq_attr "memory" "load"))))) - "znver4-direct,znver4-load,znver4-fpu0*2|znver4-fpu1*2") - - (define_insn_reservation "znver4_sse_cmp_avx256" 4 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssecmp") - (and (eq_attr "mode" "V8SF,V4DF") - (and (eq_attr "prefix" "evex") - (eq_attr "memory" "none"))))) - "znver4-direct,znver4-fpu0*2|znver4-fpu1*2") - - (define_insn_reservation "znver4_sse_cmp_avx256_load" 10 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssecmp") - (and (eq_attr "mode" "V8SF,V4DF") - (and (eq_attr "prefix" "evex") - (eq_attr "memory" "load"))))) - "znver4-direct,znver4-load,znver4-fpu0*2|znver4-fpu1*2") - - (define_insn_reservation "znver4_sse_cmp_avx512" 5 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssecmp") - (and (eq_attr "mode" "V16SF,V8DF") - (and (eq_attr "prefix" "evex") - (eq_attr "memory" "none"))))) - "znver4-direct,znver4-fpu0*2|znver4-fpu1*2") - - (define_insn_reservation "znver4_sse_cmp_avx512_load" 11 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssecmp") - (and (eq_attr "mode" "V16SF,V8DF") - (and (eq_attr "prefix" "evex") - (eq_attr "memory" "load"))))) - "znver4-direct,znver4-load,znver4-fpu0*2|znver4-fpu1*2") - - (define_insn_reservation "znver4_sse_cvt_evex" 6 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssecvt") - (and (eq_attr "mode" "V16SF,V8DF") - (eq_attr "memory" "none")))) - "znver4-direct,znver4-fpu1*2|znver4-fpu2*2,znver4-fpu2*2|znver4-fpu3*2") - - (define_insn_reservation "znver4_sse_cvt_evex_load" 12 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssecvt") - (and (eq_attr "mode" "V16SF,V8DF") - (eq_attr "memory" "load")))) - "znver4-direct,znver4-load,znver4-fpu1*2|znver4-fpu2*2,znver4-fpu2*2|znver4-fpu3*2") - - (define_insn_reservation "znver4_sse_shuf_evex" 1 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sseshuf") - (and (eq_attr "mode" "V16SF,V8DF") - (eq_attr "memory" "none")))) - "znver4-direct,znver4-fpu0*2|znver4-fpu1*2|znver4-fpu2*2|znver4-fpu3*2") - - (define_insn_reservation "znver4_sse_shuf_evex_load" 7 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sseshuf") - (and (eq_attr "mode" "V16SF,V8DF") - (eq_attr "memory" "load")))) - "znver4-direct,znver4-load,znver4-fpu0*2|znver4-fpu1*2|znver4-fpu2*2|znver4-fpu3*2") - - (define_insn_reservation "znver4_sse_ishuf_evex" 4 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sseshuf") - (and (eq_attr "mode" "XI") - (eq_attr "memory" "none")))) - "znver4-direct,znver4-fpu1*2|znver4-fpu2*2") - - (define_insn_reservation "znver4_sse_ishuf_evex_load" 10 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sseshuf") - (and (eq_attr "mode" "XI") - (eq_attr "memory" "load")))) - "znver4-direct,znver4-load,znver4-fpu1*2|znver4-fpu2*2") - - (define_insn_reservation "znver4_sse_muladd" 4 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssemuladd") - (eq_attr "memory" "none"))) - "znver4-direct,znver4-fpu0*2|znver4-fpu1*2") - - (define_insn_reservation "znver4_sse_muladd_load" 10 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sseshuf") - (eq_attr "memory" "load"))) - "znver4-direct,znver4-load,znver4-fpu0*2|znver4-fpu1*2") - - ;; AVX512 mask instructions - - (define_insn_reservation "znver4_sse_mskmov" 2 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "mskmov") - (eq_attr "memory" "none"))) - "znver4-direct,znver4-fpu0*2|znver4-fpu1*2") - - (define_insn_reservation "znver4_sse_msklog" 1 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "msklog") - (eq_attr "memory" "none"))) - "znver4-direct,znver4-fpu2*2|znver4-fpu3*2") --- 0 ---- diff -Nrcpad gcc-12.4.0/gcc/config/nvptx/nvptx.cc gcc-12.5.0-RC-20250704/gcc/config/nvptx/nvptx.cc *** gcc-12.4.0/gcc/config/nvptx/nvptx.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/config/nvptx/nvptx.cc Fri Jul 4 07:24:42 2025 *************** nvptx_expand_call (rtx retval, rtx addre *** 1890,1896 **** if (varargs) XVECEXP (pat, 0, vec_pos++) = gen_rtx_USE (VOIDmode, varargs); ! gcc_assert (vec_pos = XVECLEN (pat, 0)); nvptx_emit_forking (parallel, true); emit_call_insn (pat); --- 1890,1896 ---- if (varargs) XVECEXP (pat, 0, vec_pos++) = gen_rtx_USE (VOIDmode, varargs); ! gcc_assert (vec_pos == XVECLEN (pat, 0)); nvptx_emit_forking (parallel, true); emit_call_insn (pat); diff -Nrcpad gcc-12.4.0/gcc/config/pa/pa-linux.h gcc-12.5.0-RC-20250704/gcc/config/pa/pa-linux.h *** gcc-12.4.0/gcc/config/pa/pa-linux.h Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/config/pa/pa-linux.h Fri Jul 4 07:24:42 2025 *************** along with GCC; see the file COPYING3. *** 147,154 **** #define HAVE_sync_compare_and_swapsi 1 #define HAVE_sync_compare_and_swapdi 1 ! /* It's not possible to enable GNU_stack notes since the kernel needs ! an executable stack for signal returns and syscall restarts. */ #undef NEED_INDICATE_EXEC_STACK ! #define NEED_INDICATE_EXEC_STACK 0 --- 147,153 ---- #define HAVE_sync_compare_and_swapsi 1 #define HAVE_sync_compare_and_swapdi 1 ! /* Enable GNU stack notes. */ #undef NEED_INDICATE_EXEC_STACK ! #define NEED_INDICATE_EXEC_STACK 1 diff -Nrcpad gcc-12.4.0/gcc/config/pa/pa.cc gcc-12.5.0-RC-20250704/gcc/config/pa/pa.cc *** gcc-12.4.0/gcc/config/pa/pa.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/config/pa/pa.cc Fri Jul 4 07:24:42 2025 *************** hppa_legitimize_address (rtx x, rtx oldx *** 1263,1268 **** --- 1263,1269 ---- /* If the index adds a large constant, try to scale the constant so that it can be loaded with only one insn. */ if (GET_CODE (XEXP (idx, 1)) == CONST_INT + && INTVAL (XEXP (idx, 1)) % (1 << shift_val) == 0 && VAL_14_BITS_P (INTVAL (XEXP (idx, 1)) / INTVAL (XEXP (XEXP (idx, 0), 1))) && INTVAL (XEXP (idx, 1)) % INTVAL (XEXP (XEXP (idx, 0), 1)) == 0) diff -Nrcpad gcc-12.4.0/gcc/config/pa/pa.md gcc-12.5.0-RC-20250704/gcc/config/pa/pa.md *** gcc-12.4.0/gcc/config/pa/pa.md Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/config/pa/pa.md Fri Jul 4 07:24:42 2025 *************** *** 4908,4914 **** (define_insn "fix_truncsfsi2" [(set (match_operand:SI 0 "register_operand" "=f") ! (fix:SI (fix:SF (match_operand:SF 1 "register_operand" "f"))))] "! TARGET_SOFT_FLOAT" "{fcnvfxt,sgl,sgl|fcnv,t,sgl,w} %1,%0" [(set_attr "type" "fpalu") --- 4908,4914 ---- (define_insn "fix_truncsfsi2" [(set (match_operand:SI 0 "register_operand" "=f") ! (fix:SI (match_operand:SF 1 "register_operand" "f")))] "! TARGET_SOFT_FLOAT" "{fcnvfxt,sgl,sgl|fcnv,t,sgl,w} %1,%0" [(set_attr "type" "fpalu") *************** *** 4916,4922 **** (define_insn "fix_truncdfsi2" [(set (match_operand:SI 0 "register_operand" "=f") ! (fix:SI (fix:DF (match_operand:DF 1 "register_operand" "f"))))] "! TARGET_SOFT_FLOAT" "{fcnvfxt,dbl,sgl|fcnv,t,dbl,w} %1,%0" [(set_attr "type" "fpalu") --- 4916,4922 ---- (define_insn "fix_truncdfsi2" [(set (match_operand:SI 0 "register_operand" "=f") ! (fix:SI (match_operand:DF 1 "register_operand" "f")))] "! TARGET_SOFT_FLOAT" "{fcnvfxt,dbl,sgl|fcnv,t,dbl,w} %1,%0" [(set_attr "type" "fpalu") *************** *** 4924,4930 **** (define_insn "fix_truncsfdi2" [(set (match_operand:DI 0 "register_operand" "=f") ! (fix:DI (fix:SF (match_operand:SF 1 "register_operand" "f"))))] "TARGET_PA_11 && ! TARGET_SOFT_FLOAT" "{fcnvfxt,sgl,dbl|fcnv,t,sgl,dw} %1,%0" [(set_attr "type" "fpalu") --- 4924,4930 ---- (define_insn "fix_truncsfdi2" [(set (match_operand:DI 0 "register_operand" "=f") ! (fix:DI (match_operand:SF 1 "register_operand" "f")))] "TARGET_PA_11 && ! TARGET_SOFT_FLOAT" "{fcnvfxt,sgl,dbl|fcnv,t,sgl,dw} %1,%0" [(set_attr "type" "fpalu") *************** *** 4932,4938 **** (define_insn "fix_truncdfdi2" [(set (match_operand:DI 0 "register_operand" "=f") ! (fix:DI (fix:DF (match_operand:DF 1 "register_operand" "f"))))] "TARGET_PA_11 && ! TARGET_SOFT_FLOAT" "{fcnvfxt,dbl,dbl|fcnv,t,dbl,dw} %1,%0" [(set_attr "type" "fpalu") --- 4932,4938 ---- (define_insn "fix_truncdfdi2" [(set (match_operand:DI 0 "register_operand" "=f") ! (fix:DI (match_operand:DF 1 "register_operand" "f")))] "TARGET_PA_11 && ! TARGET_SOFT_FLOAT" "{fcnvfxt,dbl,dbl|fcnv,t,dbl,dw} %1,%0" [(set_attr "type" "fpalu") *************** *** 4972,4978 **** (define_insn "fixuns_truncsfsi2" [(set (match_operand:SI 0 "register_operand" "=f") ! (unsigned_fix:SI (fix:SF (match_operand:SF 1 "register_operand" "f"))))] "! TARGET_SOFT_FLOAT && TARGET_PA_20" "fcnv,t,sgl,uw %1,%0" [(set_attr "type" "fpalu") --- 4972,4978 ---- (define_insn "fixuns_truncsfsi2" [(set (match_operand:SI 0 "register_operand" "=f") ! (unsigned_fix:SI (match_operand:SF 1 "register_operand" "f")))] "! TARGET_SOFT_FLOAT && TARGET_PA_20" "fcnv,t,sgl,uw %1,%0" [(set_attr "type" "fpalu") *************** *** 4980,4986 **** (define_insn "fixuns_truncdfsi2" [(set (match_operand:SI 0 "register_operand" "=f") ! (unsigned_fix:SI (fix:DF (match_operand:DF 1 "register_operand" "f"))))] "! TARGET_SOFT_FLOAT && TARGET_PA_20" "fcnv,t,dbl,uw %1,%0" [(set_attr "type" "fpalu") --- 4980,4986 ---- (define_insn "fixuns_truncdfsi2" [(set (match_operand:SI 0 "register_operand" "=f") ! (unsigned_fix:SI (match_operand:DF 1 "register_operand" "f")))] "! TARGET_SOFT_FLOAT && TARGET_PA_20" "fcnv,t,dbl,uw %1,%0" [(set_attr "type" "fpalu") *************** *** 4988,4994 **** (define_insn "fixuns_truncsfdi2" [(set (match_operand:DI 0 "register_operand" "=f") ! (unsigned_fix:DI (fix:SF (match_operand:SF 1 "register_operand" "f"))))] "! TARGET_SOFT_FLOAT && TARGET_PA_20" "fcnv,t,sgl,udw %1,%0" [(set_attr "type" "fpalu") --- 4988,4994 ---- (define_insn "fixuns_truncsfdi2" [(set (match_operand:DI 0 "register_operand" "=f") ! (unsigned_fix:DI (match_operand:SF 1 "register_operand" "f")))] "! TARGET_SOFT_FLOAT && TARGET_PA_20" "fcnv,t,sgl,udw %1,%0" [(set_attr "type" "fpalu") *************** *** 4996,5002 **** (define_insn "fixuns_truncdfdi2" [(set (match_operand:DI 0 "register_operand" "=f") ! (unsigned_fix:DI (fix:DF (match_operand:DF 1 "register_operand" "f"))))] "! TARGET_SOFT_FLOAT && TARGET_PA_20" "fcnv,t,dbl,udw %1,%0" [(set_attr "type" "fpalu") --- 4996,5002 ---- (define_insn "fixuns_truncdfdi2" [(set (match_operand:DI 0 "register_operand" "=f") ! (unsigned_fix:DI (match_operand:DF 1 "register_operand" "f")))] "! TARGET_SOFT_FLOAT && TARGET_PA_20" "fcnv,t,dbl,udw %1,%0" [(set_attr "type" "fpalu") *************** *** 5494,5517 **** (set_attr "length" "4")]) (define_insn "" - [(set (match_operand:DI 0 "register_operand" "=f") - (mult:DI (zero_extend:DI (match_operand:SI 1 "register_operand" "f")) - (match_operand:DI 2 "uint32_operand" "f")))] - "TARGET_PA_11 && ! TARGET_SOFT_FLOAT && ! TARGET_SOFT_MULT && !TARGET_64BIT" - "xmpyu %1,%R2,%0" - [(set_attr "type" "fpmuldbl") - (set_attr "length" "4")]) - - (define_insn "" - [(set (match_operand:DI 0 "register_operand" "=f") - (mult:DI (zero_extend:DI (match_operand:SI 1 "register_operand" "f")) - (match_operand:DI 2 "uint32_operand" "f")))] - "TARGET_PA_11 && ! TARGET_SOFT_FLOAT && ! TARGET_SOFT_MULT && TARGET_64BIT" - "xmpyu %1,%2R,%0" - [(set_attr "type" "fpmuldbl") - (set_attr "length" "4")]) - - (define_insn "" [(set (reg:SI 29) (mult:SI (reg:SI 26) (reg:SI 25))) (clobber (match_operand:SI 0 "register_operand" "=a")) (clobber (reg:SI 26)) --- 5494,5499 ---- *************** *** 7334,7340 **** }) (define_insn "indirect_goto" ! [(unspec [(match_operand 0 "register_operand" "=r")] UNSPEC_GOTO)] "GET_MODE (operands[0]) == word_mode" "bv%* %%r0(%0)" [(set_attr "type" "branch") --- 7316,7322 ---- }) (define_insn "indirect_goto" ! [(unspec [(match_operand 0 "register_operand" "r")] UNSPEC_GOTO)] "GET_MODE (operands[0]) == word_mode" "bv%* %%r0(%0)" [(set_attr "type" "branch") *************** add,l %2,%3,%3\;bv,n %%r0(%3)" *** 9469,9475 **** (pc))) (set (match_dup 0) (plus:SI (match_dup 0) (match_dup 1))) ! (clobber (match_scratch:SI 4 "=X,r,r"))] "" "* return pa_output_dbra (operands, insn, which_alternative); " ;; Do not expect to understand this the first time through. --- 9451,9457 ---- (pc))) (set (match_dup 0) (plus:SI (match_dup 0) (match_dup 1))) ! (clobber (match_scratch:SI 4 "=X,r,&r"))] "" "* return pa_output_dbra (operands, insn, which_alternative); " ;; Do not expect to understand this the first time through. diff -Nrcpad gcc-12.4.0/gcc/config/pa/pa32-regs.h gcc-12.5.0-RC-20250704/gcc/config/pa/pa32-regs.h *** gcc-12.4.0/gcc/config/pa/pa32-regs.h Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/config/pa/pa32-regs.h Fri Jul 4 07:24:42 2025 *************** enum reg_class { NO_REGS, R1_REGS, GENER *** 344,350 **** {"%fr16L",56}, {"%fr17L",58}, {"%fr18L",60}, {"%fr19L",62}, \ {"%fr20L",64}, {"%fr21L",66}, {"%fr22L",68}, {"%fr23L",70}, \ {"%fr24L",72}, {"%fr25L",74}, {"%fr26L",76}, {"%fr27L",78}, \ ! {"%fr28L",80}, {"%fr29L",82}, {"%fr30L",84}, {"%fr31R",86}, \ {"%cr11",88}} #define FP_SAVED_REG_LAST 66 --- 344,350 ---- {"%fr16L",56}, {"%fr17L",58}, {"%fr18L",60}, {"%fr19L",62}, \ {"%fr20L",64}, {"%fr21L",66}, {"%fr22L",68}, {"%fr23L",70}, \ {"%fr24L",72}, {"%fr25L",74}, {"%fr26L",76}, {"%fr27L",78}, \ ! {"%fr28L",80}, {"%fr29L",82}, {"%fr30L",84}, {"%fr31L",86}, \ {"%cr11",88}} #define FP_SAVED_REG_LAST 66 diff -Nrcpad gcc-12.4.0/gcc/config/rs6000/altivec.md gcc-12.5.0-RC-20250704/gcc/config/rs6000/altivec.md *** gcc-12.4.0/gcc/config/rs6000/altivec.md Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/config/rs6000/altivec.md Fri Jul 4 07:24:42 2025 *************** *** 1152,1166 **** (use (match_operand:V16QI 2 "register_operand"))] "TARGET_ALTIVEC" { ! rtx (*fun) (rtx, rtx, rtx) = BYTES_BIG_ENDIAN ? gen_altivec_vmrghb_direct ! : gen_altivec_vmrglb_direct; ! if (!BYTES_BIG_ENDIAN) ! std::swap (operands[1], operands[2]); ! emit_insn (fun (operands[0], operands[1], operands[2])); DONE; }) ! (define_insn "altivec_vmrghb_direct" [(set (match_operand:V16QI 0 "register_operand" "=v") (vec_select:V16QI (vec_concat:V32QI --- 1152,1167 ---- (use (match_operand:V16QI 2 "register_operand"))] "TARGET_ALTIVEC" { ! if (BYTES_BIG_ENDIAN) ! emit_insn ( ! gen_altivec_vmrghb_direct_be (operands[0], operands[1], operands[2])); ! else ! emit_insn ( ! gen_altivec_vmrglb_direct_le (operands[0], operands[2], operands[1])); DONE; }) ! (define_insn "altivec_vmrghb_direct_be" [(set (match_operand:V16QI 0 "register_operand" "=v") (vec_select:V16QI (vec_concat:V32QI *************** *** 1174,1180 **** (const_int 5) (const_int 21) (const_int 6) (const_int 22) (const_int 7) (const_int 23)])))] ! "TARGET_ALTIVEC" "vmrghb %0,%1,%2" [(set_attr "type" "vecperm")]) --- 1175,1199 ---- (const_int 5) (const_int 21) (const_int 6) (const_int 22) (const_int 7) (const_int 23)])))] ! "TARGET_ALTIVEC && BYTES_BIG_ENDIAN" ! "vmrghb %0,%1,%2" ! [(set_attr "type" "vecperm")]) ! ! (define_insn "altivec_vmrghb_direct_le" ! [(set (match_operand:V16QI 0 "register_operand" "=v") ! (vec_select:V16QI ! (vec_concat:V32QI ! (match_operand:V16QI 2 "register_operand" "v") ! (match_operand:V16QI 1 "register_operand" "v")) ! (parallel [(const_int 8) (const_int 24) ! (const_int 9) (const_int 25) ! (const_int 10) (const_int 26) ! (const_int 11) (const_int 27) ! (const_int 12) (const_int 28) ! (const_int 13) (const_int 29) ! (const_int 14) (const_int 30) ! (const_int 15) (const_int 31)])))] ! "TARGET_ALTIVEC && !BYTES_BIG_ENDIAN" "vmrghb %0,%1,%2" [(set_attr "type" "vecperm")]) *************** *** 1184,1200 **** (use (match_operand:V8HI 2 "register_operand"))] "TARGET_ALTIVEC" { ! rtx (*fun) (rtx, rtx, rtx) = BYTES_BIG_ENDIAN ? gen_altivec_vmrghh_direct ! : gen_altivec_vmrglh_direct; ! if (!BYTES_BIG_ENDIAN) ! std::swap (operands[1], operands[2]); ! emit_insn (fun (operands[0], operands[1], operands[2])); DONE; }) ! (define_insn "altivec_vmrghh_direct" [(set (match_operand:V8HI 0 "register_operand" "=v") ! (vec_select:V8HI (vec_concat:V16HI (match_operand:V8HI 1 "register_operand" "v") (match_operand:V8HI 2 "register_operand" "v")) --- 1203,1220 ---- (use (match_operand:V8HI 2 "register_operand"))] "TARGET_ALTIVEC" { ! if (BYTES_BIG_ENDIAN) ! emit_insn ( ! gen_altivec_vmrghh_direct_be (operands[0], operands[1], operands[2])); ! else ! emit_insn ( ! gen_altivec_vmrglh_direct_le (operands[0], operands[2], operands[1])); DONE; }) ! (define_insn "altivec_vmrghh_direct_be" [(set (match_operand:V8HI 0 "register_operand" "=v") ! (vec_select:V8HI (vec_concat:V16HI (match_operand:V8HI 1 "register_operand" "v") (match_operand:V8HI 2 "register_operand" "v")) *************** *** 1202,1208 **** (const_int 1) (const_int 9) (const_int 2) (const_int 10) (const_int 3) (const_int 11)])))] ! "TARGET_ALTIVEC" "vmrghh %0,%1,%2" [(set_attr "type" "vecperm")]) --- 1222,1242 ---- (const_int 1) (const_int 9) (const_int 2) (const_int 10) (const_int 3) (const_int 11)])))] ! "TARGET_ALTIVEC && BYTES_BIG_ENDIAN" ! "vmrghh %0,%1,%2" ! [(set_attr "type" "vecperm")]) ! ! (define_insn "altivec_vmrghh_direct_le" ! [(set (match_operand:V8HI 0 "register_operand" "=v") ! (vec_select:V8HI ! (vec_concat:V16HI ! (match_operand:V8HI 2 "register_operand" "v") ! (match_operand:V8HI 1 "register_operand" "v")) ! (parallel [(const_int 4) (const_int 12) ! (const_int 5) (const_int 13) ! (const_int 6) (const_int 14) ! (const_int 7) (const_int 15)])))] ! "TARGET_ALTIVEC && !BYTES_BIG_ENDIAN" "vmrghh %0,%1,%2" [(set_attr "type" "vecperm")]) *************** *** 1212,1227 **** (use (match_operand:V4SI 2 "register_operand"))] "VECTOR_MEM_ALTIVEC_P (V4SImode)" { ! rtx (*fun) (rtx, rtx, rtx); ! fun = BYTES_BIG_ENDIAN ? gen_altivec_vmrghw_direct_v4si ! : gen_altivec_vmrglw_direct_v4si; ! if (!BYTES_BIG_ENDIAN) ! std::swap (operands[1], operands[2]); ! emit_insn (fun (operands[0], operands[1], operands[2])); DONE; }) ! (define_insn "altivec_vmrghw_direct_" [(set (match_operand:VSX_W 0 "register_operand" "=wa,v") (vec_select:VSX_W (vec_concat: --- 1246,1263 ---- (use (match_operand:V4SI 2 "register_operand"))] "VECTOR_MEM_ALTIVEC_P (V4SImode)" { ! if (BYTES_BIG_ENDIAN) ! emit_insn (gen_altivec_vmrghw_direct_v4si_be (operands[0], ! operands[1], ! operands[2])); ! else ! emit_insn (gen_altivec_vmrglw_direct_v4si_le (operands[0], ! operands[2], ! operands[1])); DONE; }) ! (define_insn "altivec_vmrghw_direct__be" [(set (match_operand:VSX_W 0 "register_operand" "=wa,v") (vec_select:VSX_W (vec_concat: *************** *** 1229,1235 **** (match_operand:VSX_W 2 "register_operand" "wa,v")) (parallel [(const_int 0) (const_int 4) (const_int 1) (const_int 5)])))] ! "TARGET_ALTIVEC" "@ xxmrghw %x0,%x1,%x2 vmrghw %0,%1,%2" --- 1265,1285 ---- (match_operand:VSX_W 2 "register_operand" "wa,v")) (parallel [(const_int 0) (const_int 4) (const_int 1) (const_int 5)])))] ! "TARGET_ALTIVEC && BYTES_BIG_ENDIAN" ! "@ ! xxmrghw %x0,%x1,%x2 ! vmrghw %0,%1,%2" ! [(set_attr "type" "vecperm")]) ! ! (define_insn "altivec_vmrghw_direct__le" ! [(set (match_operand:VSX_W 0 "register_operand" "=wa,v") ! (vec_select:VSX_W ! (vec_concat: ! (match_operand:VSX_W 2 "register_operand" "wa,v") ! (match_operand:VSX_W 1 "register_operand" "wa,v")) ! (parallel [(const_int 2) (const_int 6) ! (const_int 3) (const_int 7)])))] ! "TARGET_ALTIVEC && !BYTES_BIG_ENDIAN" "@ xxmrghw %x0,%x1,%x2 vmrghw %0,%1,%2" *************** *** 1258,1272 **** (use (match_operand:V16QI 2 "register_operand"))] "TARGET_ALTIVEC" { ! rtx (*fun) (rtx, rtx, rtx) = BYTES_BIG_ENDIAN ? gen_altivec_vmrglb_direct ! : gen_altivec_vmrghb_direct; ! if (!BYTES_BIG_ENDIAN) ! std::swap (operands[1], operands[2]); ! emit_insn (fun (operands[0], operands[1], operands[2])); DONE; }) ! (define_insn "altivec_vmrglb_direct" [(set (match_operand:V16QI 0 "register_operand" "=v") (vec_select:V16QI (vec_concat:V32QI --- 1308,1323 ---- (use (match_operand:V16QI 2 "register_operand"))] "TARGET_ALTIVEC" { ! if (BYTES_BIG_ENDIAN) ! emit_insn ( ! gen_altivec_vmrglb_direct_be (operands[0], operands[1], operands[2])); ! else ! emit_insn ( ! gen_altivec_vmrghb_direct_le (operands[0], operands[2], operands[1])); DONE; }) ! (define_insn "altivec_vmrglb_direct_be" [(set (match_operand:V16QI 0 "register_operand" "=v") (vec_select:V16QI (vec_concat:V32QI *************** *** 1280,1286 **** (const_int 13) (const_int 29) (const_int 14) (const_int 30) (const_int 15) (const_int 31)])))] ! "TARGET_ALTIVEC" "vmrglb %0,%1,%2" [(set_attr "type" "vecperm")]) --- 1331,1355 ---- (const_int 13) (const_int 29) (const_int 14) (const_int 30) (const_int 15) (const_int 31)])))] ! "TARGET_ALTIVEC && BYTES_BIG_ENDIAN" ! "vmrglb %0,%1,%2" ! [(set_attr "type" "vecperm")]) ! ! (define_insn "altivec_vmrglb_direct_le" ! [(set (match_operand:V16QI 0 "register_operand" "=v") ! (vec_select:V16QI ! (vec_concat:V32QI ! (match_operand:V16QI 2 "register_operand" "v") ! (match_operand:V16QI 1 "register_operand" "v")) ! (parallel [(const_int 0) (const_int 16) ! (const_int 1) (const_int 17) ! (const_int 2) (const_int 18) ! (const_int 3) (const_int 19) ! (const_int 4) (const_int 20) ! (const_int 5) (const_int 21) ! (const_int 6) (const_int 22) ! (const_int 7) (const_int 23)])))] ! "TARGET_ALTIVEC && !BYTES_BIG_ENDIAN" "vmrglb %0,%1,%2" [(set_attr "type" "vecperm")]) *************** *** 1290,1304 **** (use (match_operand:V8HI 2 "register_operand"))] "TARGET_ALTIVEC" { ! rtx (*fun) (rtx, rtx, rtx) = BYTES_BIG_ENDIAN ? gen_altivec_vmrglh_direct ! : gen_altivec_vmrghh_direct; ! if (!BYTES_BIG_ENDIAN) ! std::swap (operands[1], operands[2]); ! emit_insn (fun (operands[0], operands[1], operands[2])); DONE; }) ! (define_insn "altivec_vmrglh_direct" [(set (match_operand:V8HI 0 "register_operand" "=v") (vec_select:V8HI (vec_concat:V16HI --- 1359,1374 ---- (use (match_operand:V8HI 2 "register_operand"))] "TARGET_ALTIVEC" { ! if (BYTES_BIG_ENDIAN) ! emit_insn ( ! gen_altivec_vmrglh_direct_be (operands[0], operands[1], operands[2])); ! else ! emit_insn ( ! gen_altivec_vmrghh_direct_le (operands[0], operands[2], operands[1])); DONE; }) ! (define_insn "altivec_vmrglh_direct_be" [(set (match_operand:V8HI 0 "register_operand" "=v") (vec_select:V8HI (vec_concat:V16HI *************** *** 1308,1314 **** (const_int 5) (const_int 13) (const_int 6) (const_int 14) (const_int 7) (const_int 15)])))] ! "TARGET_ALTIVEC" "vmrglh %0,%1,%2" [(set_attr "type" "vecperm")]) --- 1378,1398 ---- (const_int 5) (const_int 13) (const_int 6) (const_int 14) (const_int 7) (const_int 15)])))] ! "TARGET_ALTIVEC && BYTES_BIG_ENDIAN" ! "vmrglh %0,%1,%2" ! [(set_attr "type" "vecperm")]) ! ! (define_insn "altivec_vmrglh_direct_le" ! [(set (match_operand:V8HI 0 "register_operand" "=v") ! (vec_select:V8HI ! (vec_concat:V16HI ! (match_operand:V8HI 2 "register_operand" "v") ! (match_operand:V8HI 1 "register_operand" "v")) ! (parallel [(const_int 0) (const_int 8) ! (const_int 1) (const_int 9) ! (const_int 2) (const_int 10) ! (const_int 3) (const_int 11)])))] ! "TARGET_ALTIVEC && !BYTES_BIG_ENDIAN" "vmrglh %0,%1,%2" [(set_attr "type" "vecperm")]) *************** *** 1318,1333 **** (use (match_operand:V4SI 2 "register_operand"))] "VECTOR_MEM_ALTIVEC_P (V4SImode)" { ! rtx (*fun) (rtx, rtx, rtx); ! fun = BYTES_BIG_ENDIAN ? gen_altivec_vmrglw_direct_v4si ! : gen_altivec_vmrghw_direct_v4si; ! if (!BYTES_BIG_ENDIAN) ! std::swap (operands[1], operands[2]); ! emit_insn (fun (operands[0], operands[1], operands[2])); DONE; }) ! (define_insn "altivec_vmrglw_direct_" [(set (match_operand:VSX_W 0 "register_operand" "=wa,v") (vec_select:VSX_W (vec_concat: --- 1402,1419 ---- (use (match_operand:V4SI 2 "register_operand"))] "VECTOR_MEM_ALTIVEC_P (V4SImode)" { ! if (BYTES_BIG_ENDIAN) ! emit_insn (gen_altivec_vmrglw_direct_v4si_be (operands[0], ! operands[1], ! operands[2])); ! else ! emit_insn (gen_altivec_vmrghw_direct_v4si_le (operands[0], ! operands[2], ! operands[1])); DONE; }) ! (define_insn "altivec_vmrglw_direct__be" [(set (match_operand:VSX_W 0 "register_operand" "=wa,v") (vec_select:VSX_W (vec_concat: *************** *** 1335,1341 **** (match_operand:VSX_W 2 "register_operand" "wa,v")) (parallel [(const_int 2) (const_int 6) (const_int 3) (const_int 7)])))] ! "TARGET_ALTIVEC" "@ xxmrglw %x0,%x1,%x2 vmrglw %0,%1,%2" --- 1421,1441 ---- (match_operand:VSX_W 2 "register_operand" "wa,v")) (parallel [(const_int 2) (const_int 6) (const_int 3) (const_int 7)])))] ! "TARGET_ALTIVEC && BYTES_BIG_ENDIAN" ! "@ ! xxmrglw %x0,%x1,%x2 ! vmrglw %0,%1,%2" ! [(set_attr "type" "vecperm")]) ! ! (define_insn "altivec_vmrglw_direct__le" ! [(set (match_operand:VSX_W 0 "register_operand" "=wa,v") ! (vec_select:VSX_W ! (vec_concat: ! (match_operand:VSX_W 2 "register_operand" "wa,v") ! (match_operand:VSX_W 1 "register_operand" "wa,v")) ! (parallel [(const_int 0) (const_int 4) ! (const_int 1) (const_int 5)])))] ! "TARGET_ALTIVEC && !BYTES_BIG_ENDIAN" "@ xxmrglw %x0,%x1,%x2 vmrglw %0,%1,%2" *************** *** 3707,3719 **** { emit_insn (gen_altivec_vmuleub (ve, operands[1], operands[2])); emit_insn (gen_altivec_vmuloub (vo, operands[1], operands[2])); ! emit_insn (gen_altivec_vmrghh_direct (operands[0], ve, vo)); } else { emit_insn (gen_altivec_vmuloub (ve, operands[1], operands[2])); emit_insn (gen_altivec_vmuleub (vo, operands[1], operands[2])); ! emit_insn (gen_altivec_vmrghh_direct (operands[0], vo, ve)); } DONE; }) --- 3807,3819 ---- { emit_insn (gen_altivec_vmuleub (ve, operands[1], operands[2])); emit_insn (gen_altivec_vmuloub (vo, operands[1], operands[2])); ! emit_insn (gen_altivec_vmrghh (operands[0], ve, vo)); } else { emit_insn (gen_altivec_vmuloub (ve, operands[1], operands[2])); emit_insn (gen_altivec_vmuleub (vo, operands[1], operands[2])); ! emit_insn (gen_altivec_vmrglh (operands[0], ve, vo)); } DONE; }) *************** *** 3732,3744 **** { emit_insn (gen_altivec_vmuleub (ve, operands[1], operands[2])); emit_insn (gen_altivec_vmuloub (vo, operands[1], operands[2])); ! emit_insn (gen_altivec_vmrglh_direct (operands[0], ve, vo)); } else { emit_insn (gen_altivec_vmuloub (ve, operands[1], operands[2])); emit_insn (gen_altivec_vmuleub (vo, operands[1], operands[2])); ! emit_insn (gen_altivec_vmrglh_direct (operands[0], vo, ve)); } DONE; }) --- 3832,3844 ---- { emit_insn (gen_altivec_vmuleub (ve, operands[1], operands[2])); emit_insn (gen_altivec_vmuloub (vo, operands[1], operands[2])); ! emit_insn (gen_altivec_vmrglh (operands[0], ve, vo)); } else { emit_insn (gen_altivec_vmuloub (ve, operands[1], operands[2])); emit_insn (gen_altivec_vmuleub (vo, operands[1], operands[2])); ! emit_insn (gen_altivec_vmrghh (operands[0], ve, vo)); } DONE; }) *************** *** 3757,3769 **** { emit_insn (gen_altivec_vmulesb (ve, operands[1], operands[2])); emit_insn (gen_altivec_vmulosb (vo, operands[1], operands[2])); ! emit_insn (gen_altivec_vmrghh_direct (operands[0], ve, vo)); } else { emit_insn (gen_altivec_vmulosb (ve, operands[1], operands[2])); emit_insn (gen_altivec_vmulesb (vo, operands[1], operands[2])); ! emit_insn (gen_altivec_vmrghh_direct (operands[0], vo, ve)); } DONE; }) --- 3857,3869 ---- { emit_insn (gen_altivec_vmulesb (ve, operands[1], operands[2])); emit_insn (gen_altivec_vmulosb (vo, operands[1], operands[2])); ! emit_insn (gen_altivec_vmrghh (operands[0], ve, vo)); } else { emit_insn (gen_altivec_vmulosb (ve, operands[1], operands[2])); emit_insn (gen_altivec_vmulesb (vo, operands[1], operands[2])); ! emit_insn (gen_altivec_vmrglh (operands[0], ve, vo)); } DONE; }) *************** *** 3782,3794 **** { emit_insn (gen_altivec_vmulesb (ve, operands[1], operands[2])); emit_insn (gen_altivec_vmulosb (vo, operands[1], operands[2])); ! emit_insn (gen_altivec_vmrglh_direct (operands[0], ve, vo)); } else { emit_insn (gen_altivec_vmulosb (ve, operands[1], operands[2])); emit_insn (gen_altivec_vmulesb (vo, operands[1], operands[2])); ! emit_insn (gen_altivec_vmrglh_direct (operands[0], vo, ve)); } DONE; }) --- 3882,3894 ---- { emit_insn (gen_altivec_vmulesb (ve, operands[1], operands[2])); emit_insn (gen_altivec_vmulosb (vo, operands[1], operands[2])); ! emit_insn (gen_altivec_vmrglh (operands[0], ve, vo)); } else { emit_insn (gen_altivec_vmulosb (ve, operands[1], operands[2])); emit_insn (gen_altivec_vmulesb (vo, operands[1], operands[2])); ! emit_insn (gen_altivec_vmrghh (operands[0], ve, vo)); } DONE; }) *************** *** 3807,3819 **** { emit_insn (gen_altivec_vmuleuh (ve, operands[1], operands[2])); emit_insn (gen_altivec_vmulouh (vo, operands[1], operands[2])); ! emit_insn (gen_altivec_vmrghw_direct_v4si (operands[0], ve, vo)); } else { emit_insn (gen_altivec_vmulouh (ve, operands[1], operands[2])); emit_insn (gen_altivec_vmuleuh (vo, operands[1], operands[2])); ! emit_insn (gen_altivec_vmrghw_direct_v4si (operands[0], vo, ve)); } DONE; }) --- 3907,3919 ---- { emit_insn (gen_altivec_vmuleuh (ve, operands[1], operands[2])); emit_insn (gen_altivec_vmulouh (vo, operands[1], operands[2])); ! emit_insn (gen_altivec_vmrghw (operands[0], ve, vo)); } else { emit_insn (gen_altivec_vmulouh (ve, operands[1], operands[2])); emit_insn (gen_altivec_vmuleuh (vo, operands[1], operands[2])); ! emit_insn (gen_altivec_vmrglw (operands[0], ve, vo)); } DONE; }) *************** *** 3832,3844 **** { emit_insn (gen_altivec_vmuleuh (ve, operands[1], operands[2])); emit_insn (gen_altivec_vmulouh (vo, operands[1], operands[2])); ! emit_insn (gen_altivec_vmrglw_direct_v4si (operands[0], ve, vo)); } else { emit_insn (gen_altivec_vmulouh (ve, operands[1], operands[2])); emit_insn (gen_altivec_vmuleuh (vo, operands[1], operands[2])); ! emit_insn (gen_altivec_vmrglw_direct_v4si (operands[0], vo, ve)); } DONE; }) --- 3932,3944 ---- { emit_insn (gen_altivec_vmuleuh (ve, operands[1], operands[2])); emit_insn (gen_altivec_vmulouh (vo, operands[1], operands[2])); ! emit_insn (gen_altivec_vmrglw (operands[0], ve, vo)); } else { emit_insn (gen_altivec_vmulouh (ve, operands[1], operands[2])); emit_insn (gen_altivec_vmuleuh (vo, operands[1], operands[2])); ! emit_insn (gen_altivec_vmrghw (operands[0], ve, vo)); } DONE; }) *************** *** 3857,3869 **** { emit_insn (gen_altivec_vmulesh (ve, operands[1], operands[2])); emit_insn (gen_altivec_vmulosh (vo, operands[1], operands[2])); ! emit_insn (gen_altivec_vmrghw_direct_v4si (operands[0], ve, vo)); } else { emit_insn (gen_altivec_vmulosh (ve, operands[1], operands[2])); emit_insn (gen_altivec_vmulesh (vo, operands[1], operands[2])); ! emit_insn (gen_altivec_vmrghw_direct_v4si (operands[0], vo, ve)); } DONE; }) --- 3957,3969 ---- { emit_insn (gen_altivec_vmulesh (ve, operands[1], operands[2])); emit_insn (gen_altivec_vmulosh (vo, operands[1], operands[2])); ! emit_insn (gen_altivec_vmrghw (operands[0], ve, vo)); } else { emit_insn (gen_altivec_vmulosh (ve, operands[1], operands[2])); emit_insn (gen_altivec_vmulesh (vo, operands[1], operands[2])); ! emit_insn (gen_altivec_vmrglw (operands[0], ve, vo)); } DONE; }) *************** *** 3882,3894 **** { emit_insn (gen_altivec_vmulesh (ve, operands[1], operands[2])); emit_insn (gen_altivec_vmulosh (vo, operands[1], operands[2])); ! emit_insn (gen_altivec_vmrglw_direct_v4si (operands[0], ve, vo)); } else { emit_insn (gen_altivec_vmulosh (ve, operands[1], operands[2])); emit_insn (gen_altivec_vmulesh (vo, operands[1], operands[2])); ! emit_insn (gen_altivec_vmrglw_direct_v4si (operands[0], vo, ve)); } DONE; }) --- 3982,3994 ---- { emit_insn (gen_altivec_vmulesh (ve, operands[1], operands[2])); emit_insn (gen_altivec_vmulosh (vo, operands[1], operands[2])); ! emit_insn (gen_altivec_vmrglw (operands[0], ve, vo)); } else { emit_insn (gen_altivec_vmulosh (ve, operands[1], operands[2])); emit_insn (gen_altivec_vmulesh (vo, operands[1], operands[2])); ! emit_insn (gen_altivec_vmrghw (operands[0], ve, vo)); } DONE; }) diff -Nrcpad gcc-12.4.0/gcc/config/rs6000/amo.h gcc-12.5.0-RC-20250704/gcc/config/rs6000/amo.h *** gcc-12.4.0/gcc/config/rs6000/amo.h Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/config/rs6000/amo.h Fri Jul 4 07:24:42 2025 *************** enum _AMO_LD { *** 46,52 **** _AMO_LD_CS_NE = 0x10, /* Compare and Swap Not Equal. */ _AMO_LD_INC_BOUNDED = 0x18, /* Fetch and Increment Bounded. */ _AMO_LD_INC_EQUAL = 0x19, /* Fetch and Increment Equal. */ ! _AMO_LD_DEC_BOUNDED = 0x1A /* Fetch and Decrement Bounded. */ }; /* Implementation of the simple LWAT/LDAT operations that take one register and --- 46,52 ---- _AMO_LD_CS_NE = 0x10, /* Compare and Swap Not Equal. */ _AMO_LD_INC_BOUNDED = 0x18, /* Fetch and Increment Bounded. */ _AMO_LD_INC_EQUAL = 0x19, /* Fetch and Increment Equal. */ ! _AMO_LD_DEC_BOUNDED = 0x1C /* Fetch and Decrement Bounded. */ }; /* Implementation of the simple LWAT/LDAT operations that take one register and diff -Nrcpad gcc-12.4.0/gcc/config/rs6000/rs6000-builtin.cc gcc-12.5.0-RC-20250704/gcc/config/rs6000/rs6000-builtin.cc *** gcc-12.4.0/gcc/config/rs6000/rs6000-builtin.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/config/rs6000/rs6000-builtin.cc Fri Jul 4 07:24:42 2025 *************** rs6000_expand_builtin (tree exp, rtx tar *** 3584,3590 **** } /* Check for restricted constant arguments. */ ! for (int i = 0; i < 2; i++) { switch (bifaddr->restr[i]) { --- 3584,3590 ---- } /* Check for restricted constant arguments. */ ! for (size_t i = 0; i < ARRAY_SIZE (bifaddr->restr); i++) { switch (bifaddr->restr[i]) { *************** rs6000_expand_builtin (tree exp, rtx tar *** 3602,3608 **** error ("argument %d must be a literal between 0 and %d," " inclusive", bifaddr->restr_opnd[i], p); ! return CONST0_RTX (mode[0]); } break; } --- 3602,3608 ---- error ("argument %d must be a literal between 0 and %d," " inclusive", bifaddr->restr_opnd[i], p); ! return const0_rtx; } break; } *************** rs6000_expand_builtin (tree exp, rtx tar *** 3619,3625 **** " inclusive", bifaddr->restr_opnd[i], bifaddr->restr_val1[i], bifaddr->restr_val2[i]); ! return CONST0_RTX (mode[0]); } break; } --- 3619,3625 ---- " inclusive", bifaddr->restr_opnd[i], bifaddr->restr_val1[i], bifaddr->restr_val2[i]); ! return const0_rtx; } break; } *************** rs6000_expand_builtin (tree exp, rtx tar *** 3636,3642 **** "between %d and %d, inclusive", bifaddr->restr_opnd[i], bifaddr->restr_val1[i], bifaddr->restr_val2[i]); ! return CONST0_RTX (mode[0]); } break; } --- 3636,3642 ---- "between %d and %d, inclusive", bifaddr->restr_opnd[i], bifaddr->restr_val1[i], bifaddr->restr_val2[i]); ! return const0_rtx; } break; } *************** rs6000_expand_builtin (tree exp, rtx tar *** 3652,3658 **** "literal %d", bifaddr->restr_opnd[i], bifaddr->restr_val1[i], bifaddr->restr_val2[i]); ! return CONST0_RTX (mode[0]); } break; } --- 3652,3658 ---- "literal %d", bifaddr->restr_opnd[i], bifaddr->restr_val1[i], bifaddr->restr_val2[i]); ! return const0_rtx; } break; } diff -Nrcpad gcc-12.4.0/gcc/config/rs6000/rs6000-builtins.def gcc-12.5.0-RC-20250704/gcc/config/rs6000/rs6000-builtins.def *** gcc-12.4.0/gcc/config/rs6000/rs6000-builtins.def Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/config/rs6000/rs6000-builtins.def Fri Jul 4 07:24:42 2025 *************** *** 3861,3871 **** PMXVI4GER8_INTERNAL mma_pmxvi4ger8 {mma} void __builtin_mma_pmxvi4ger8pp (v512 *, vuc, vuc, const int<4>, \ ! const int<4>, const int<4>); PMXVI4GER8PP nothing {mma,quad,mmaint} v512 __builtin_mma_pmxvi4ger8pp_internal (v512, vuc, vuc, const int<4>, \ ! const int<4>, const int<4>); PMXVI4GER8PP_INTERNAL mma_pmxvi4ger8pp {mma,quad} void __builtin_mma_pmxvi8ger4 (v512 *, vuc, vuc, const int<4>, \ --- 3861,3871 ---- PMXVI4GER8_INTERNAL mma_pmxvi4ger8 {mma} void __builtin_mma_pmxvi4ger8pp (v512 *, vuc, vuc, const int<4>, \ ! const int<4>, const int<8>); PMXVI4GER8PP nothing {mma,quad,mmaint} v512 __builtin_mma_pmxvi4ger8pp_internal (v512, vuc, vuc, const int<4>, \ ! const int<4>, const int<8>); PMXVI4GER8PP_INTERNAL mma_pmxvi4ger8pp {mma,quad} void __builtin_mma_pmxvi8ger4 (v512 *, vuc, vuc, const int<4>, \ diff -Nrcpad gcc-12.4.0/gcc/config/rs6000/rs6000-logue.cc gcc-12.5.0-RC-20250704/gcc/config/rs6000/rs6000-logue.cc *** gcc-12.4.0/gcc/config/rs6000/rs6000-logue.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/config/rs6000/rs6000-logue.cc Fri Jul 4 07:24:42 2025 *************** rs6000_savres_strategy (rs6000_stack_t * *** 595,615 **** +---------------------------------------+ | Parameter save area (+padding*) (P) | 32 +---------------------------------------+ ! | Optional ROP hash slot (R) | 32+P +---------------------------------------+ ! | Alloca space (A) | 32+P+R +---------------------------------------+ ! | Local variable space (L) | 32+P+R+A +---------------------------------------+ ! | Save area for AltiVec registers (W) | 32+P+R+A+L +---------------------------------------+ ! | AltiVec alignment padding (Y) | 32+P+R+A+L+W +---------------------------------------+ ! | Save area for GP registers (G) | 32+P+R+A+L+W+Y +---------------------------------------+ ! | Save area for FP registers (F) | 32+P+R+A+L+W+Y+G +---------------------------------------+ ! old SP->| back chain to caller's caller | 32+P+R+A+L+W+Y+G+F +---------------------------------------+ * If the alloca area is present, the parameter save area is --- 595,615 ---- +---------------------------------------+ | Parameter save area (+padding*) (P) | 32 +---------------------------------------+ ! | Alloca space (A) | 32+P +---------------------------------------+ ! | Local variable space (L) | 32+P+A +---------------------------------------+ ! | Optional ROP hash slot (R) | 32+P+A+L +---------------------------------------+ ! | Save area for AltiVec registers (W) | 32+P+A+L+R +---------------------------------------+ ! | AltiVec alignment padding (Y) | 32+P+A+L+R+W +---------------------------------------+ ! | Save area for GP registers (G) | 32+P+A+L+R+W+Y +---------------------------------------+ ! | Save area for FP registers (F) | 32+P+A+L+R+W+Y+G +---------------------------------------+ ! old SP->| back chain to caller's caller | 32+P+A+L+R+W+Y+G+F +---------------------------------------+ * If the alloca area is present, the parameter save area is *************** rs6000_stack_info (void) *** 720,736 **** info->calls_p = (!crtl->is_leaf || cfun->machine->ra_needs_full_frame); info->rop_hash_size = 0; ! if (TARGET_POWER10 ! && info->calls_p ! && DEFAULT_ABI == ABI_ELFv2 ! && rs6000_rop_protect) info->rop_hash_size = 8; - else if (rs6000_rop_protect && DEFAULT_ABI != ABI_ELFv2) - { - /* We can't check this in rs6000_option_override_internal since - DEFAULT_ABI isn't established yet. */ - error ("%qs requires the ELFv2 ABI", "-mrop-protect"); - } /* Determine if we need to save the condition code registers. */ if (save_reg_p (CR2_REGNO) --- 720,730 ---- info->calls_p = (!crtl->is_leaf || cfun->machine->ra_needs_full_frame); info->rop_hash_size = 0; ! /* If we want ROP protection and this function makes a call, indicate ! we need to create a stack slot to save the hashed return address in. */ ! if (rs6000_rop_protect ! && info->calls_p) info->rop_hash_size = 8; /* Determine if we need to save the condition code registers. */ if (save_reg_p (CR2_REGNO) *************** rs6000_stack_info (void) *** 821,837 **** gcc_assert (info->altivec_size == 0 || info->altivec_save_offset % 16 == 0); - /* Adjust for AltiVec case. */ - info->ehrd_offset = info->altivec_save_offset - ehrd_size; - /* Adjust for ROP protection. */ info->rop_hash_save_offset = info->altivec_save_offset - info->rop_hash_size; - info->ehrd_offset -= info->rop_hash_size; } else ! info->ehrd_offset = info->gp_save_offset - ehrd_size; info->ehcr_offset = info->ehrd_offset - ehcr_size; info->cr_save_offset = reg_size; /* first word when 64-bit. */ info->lr_save_offset = 2*reg_size; --- 815,830 ---- gcc_assert (info->altivec_size == 0 || info->altivec_save_offset % 16 == 0); /* Adjust for ROP protection. */ info->rop_hash_save_offset = info->altivec_save_offset - info->rop_hash_size; } else ! /* Adjust for ROP protection. */ ! info->rop_hash_save_offset ! = info->gp_save_offset - info->rop_hash_size; + info->ehrd_offset = info->rop_hash_save_offset - ehrd_size; info->ehcr_offset = info->ehrd_offset - ehcr_size; info->cr_save_offset = reg_size; /* first word when 64-bit. */ info->lr_save_offset = 2*reg_size; *************** rs6000_emit_prologue (void) *** 3280,3288 **** /* NOTE: The hashst isn't needed if we're going to do a sibcall, but there's no way to know that here. Harmless except for performance, of course. */ ! if (TARGET_POWER10 && rs6000_rop_protect && info->rop_hash_size != 0) { - gcc_assert (DEFAULT_ABI == ABI_ELFv2); rtx stack_ptr = gen_rtx_REG (Pmode, STACK_POINTER_REGNUM); rtx addr = gen_rtx_PLUS (Pmode, stack_ptr, GEN_INT (info->rop_hash_save_offset)); --- 3273,3280 ---- /* NOTE: The hashst isn't needed if we're going to do a sibcall, but there's no way to know that here. Harmless except for performance, of course. */ ! if (info->rop_hash_size) { rtx stack_ptr = gen_rtx_REG (Pmode, STACK_POINTER_REGNUM); rtx addr = gen_rtx_PLUS (Pmode, stack_ptr, GEN_INT (info->rop_hash_save_offset)); *************** rs6000_emit_epilogue (enum epilogue_type *** 4283,4291 **** rs6000_stack_t *info = rs6000_stack_info (); - if (epilogue_type == EPILOGUE_TYPE_NORMAL && crtl->calls_eh_return) - epilogue_type = EPILOGUE_TYPE_EH_RETURN; - int strategy = info->savres_strategy; bool using_load_multiple = !!(strategy & REST_MULTIPLE); bool restoring_GPRs_inline = !!(strategy & REST_INLINE_GPRS); --- 4275,4280 ---- *************** rs6000_emit_epilogue (enum epilogue_type *** 4763,4769 **** /* In the ELFv2 ABI we need to restore all call-saved CR fields from *separate* slots if the routine calls __builtin_eh_return, so ! that they can be independently restored by the unwinder. */ if (DEFAULT_ABI == ABI_ELFv2 && crtl->calls_eh_return) { int i, cr_off = info->ehcr_offset; --- 4752,4760 ---- /* In the ELFv2 ABI we need to restore all call-saved CR fields from *separate* slots if the routine calls __builtin_eh_return, so ! that they can be independently restored by the unwinder. Since ! it is for CR fields restoring, it should be done for any epilogue ! types (not EPILOGUE_TYPE_EH_RETURN specific). */ if (DEFAULT_ABI == ABI_ELFv2 && crtl->calls_eh_return) { int i, cr_off = info->ehcr_offset; *************** rs6000_emit_epilogue (enum epilogue_type *** 5028,5039 **** /* The ROP hash check must occur after the stack pointer is restored (since the hash involves r1), and is not performed for a sibcall. */ ! if (TARGET_POWER10 ! && rs6000_rop_protect ! && info->rop_hash_size != 0 && epilogue_type != EPILOGUE_TYPE_SIBCALL) { - gcc_assert (DEFAULT_ABI == ABI_ELFv2); rtx stack_ptr = gen_rtx_REG (Pmode, STACK_POINTER_REGNUM); rtx addr = gen_rtx_PLUS (Pmode, stack_ptr, GEN_INT (info->rop_hash_save_offset)); --- 5019,5027 ---- /* The ROP hash check must occur after the stack pointer is restored (since the hash involves r1), and is not performed for a sibcall. */ ! if (info->rop_hash_size && epilogue_type != EPILOGUE_TYPE_SIBCALL) { rtx stack_ptr = gen_rtx_REG (Pmode, STACK_POINTER_REGNUM); rtx addr = gen_rtx_PLUS (Pmode, stack_ptr, GEN_INT (info->rop_hash_save_offset)); diff -Nrcpad gcc-12.4.0/gcc/config/rs6000/rs6000-p8swap.cc gcc-12.5.0-RC-20250704/gcc/config/rs6000/rs6000-p8swap.cc *** gcc-12.4.0/gcc/config/rs6000/rs6000-p8swap.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/config/rs6000/rs6000-p8swap.cc Fri Jul 4 07:24:42 2025 *************** rs6000_analyze_swaps (function *fun) *** 2467,2476 **** mode = V4SImode; } ! if (ALTIVEC_OR_VSX_VECTOR_MODE (mode) || mode == TImode) { insn_entry[uid].is_relevant = 1; ! if (mode == TImode || mode == V1TImode || FLOAT128_VECTOR_P (mode)) insn_entry[uid].is_128_int = 1; if (DF_REF_INSN_INFO (mention)) --- 2467,2476 ---- mode = V4SImode; } ! if (ALTIVEC_OR_VSX_VECTOR_MODE (mode) || TI_OR_PTI_MODE (mode)) { insn_entry[uid].is_relevant = 1; ! if (TI_OR_PTI_MODE (mode) || mode == V1TImode || FLOAT128_VECTOR_P (mode)) insn_entry[uid].is_128_int = 1; if (DF_REF_INSN_INFO (mention)) *************** rs6000_analyze_swaps (function *fun) *** 2495,2504 **** && ALTIVEC_OR_VSX_VECTOR_MODE (GET_MODE (SET_DEST (insn)))) mode = GET_MODE (SET_DEST (insn)); ! if (ALTIVEC_OR_VSX_VECTOR_MODE (mode) || mode == TImode) { insn_entry[uid].is_relevant = 1; ! if (mode == TImode || mode == V1TImode || FLOAT128_VECTOR_P (mode)) insn_entry[uid].is_128_int = 1; if (DF_REF_INSN_INFO (mention)) --- 2495,2504 ---- && ALTIVEC_OR_VSX_VECTOR_MODE (GET_MODE (SET_DEST (insn)))) mode = GET_MODE (SET_DEST (insn)); ! if (ALTIVEC_OR_VSX_VECTOR_MODE (mode) || TI_OR_PTI_MODE (mode)) { insn_entry[uid].is_relevant = 1; ! if (TI_OR_PTI_MODE (mode) || mode == V1TImode || FLOAT128_VECTOR_P (mode)) insn_entry[uid].is_128_int = 1; if (DF_REF_INSN_INFO (mention)) diff -Nrcpad gcc-12.4.0/gcc/config/rs6000/rs6000.cc gcc-12.5.0-RC-20250704/gcc/config/rs6000/rs6000.cc *** gcc-12.4.0/gcc/config/rs6000/rs6000.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/config/rs6000/rs6000.cc Fri Jul 4 07:24:42 2025 *************** rs6000_option_override_internal (bool gl *** 4888,4893 **** --- 4888,4905 ---- rs6000_print_builtin_options (stderr, 0, "builtin mask", rs6000_builtin_mask); + /* We only support ROP protection on certain targets. */ + if (rs6000_rop_protect) + { + /* Disallow CPU targets we don't support. */ + if (!TARGET_POWER8) + error ("%<-mrop-protect%> requires %<-mcpu=power8%> or later"); + + /* Disallow ABI targets we don't support. */ + if (DEFAULT_ABI != ABI_ELFv2) + error ("%<-mrop-protect%> requires the ELFv2 ABI"); + } + /* Initialize all of the registers. */ rs6000_init_hard_regno_mode_ok (global_init_p); *************** rs6000_machine_from_flags (void) *** 5813,5819 **** HOST_WIDE_INT flags = rs6000_isa_flags; /* Disable the flags that should never influence the .machine selection. */ ! flags &= ~(OPTION_MASK_PPC_GFXOPT | OPTION_MASK_PPC_GPOPT | OPTION_MASK_ISEL); if ((flags & (ISA_3_1_MASKS_SERVER & ~ISA_3_0_MASKS_SERVER)) != 0) return "power10"; --- 5825,5832 ---- HOST_WIDE_INT flags = rs6000_isa_flags; /* Disable the flags that should never influence the .machine selection. */ ! flags &= ~(OPTION_MASK_PPC_GFXOPT | OPTION_MASK_PPC_GPOPT | OPTION_MASK_ISEL ! | OPTION_MASK_ALTIVEC); if ((flags & (ISA_3_1_MASKS_SERVER & ~ISA_3_0_MASKS_SERVER)) != 0) return "power10"; *************** void *** 5838,5843 **** --- 5851,5858 ---- emit_asm_machine (void) { fprintf (asm_out_file, "\t.machine %s\n", rs6000_machine); + if (TARGET_ALTIVEC) + fprintf (asm_out_file, "\t.machine altivec\n"); } #endif *************** altivec_expand_vec_perm_const (rtx targe *** 22971,22998 **** CODE_FOR_altivec_vpkuwum_direct, {2, 3, 6, 7, 10, 11, 14, 15, 18, 19, 22, 23, 26, 27, 30, 31}}, {OPTION_MASK_ALTIVEC, ! BYTES_BIG_ENDIAN ? CODE_FOR_altivec_vmrghb_direct ! : CODE_FOR_altivec_vmrglb_direct, {0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23}}, {OPTION_MASK_ALTIVEC, ! BYTES_BIG_ENDIAN ? CODE_FOR_altivec_vmrghh_direct ! : CODE_FOR_altivec_vmrglh_direct, {0, 1, 16, 17, 2, 3, 18, 19, 4, 5, 20, 21, 6, 7, 22, 23}}, {OPTION_MASK_ALTIVEC, ! BYTES_BIG_ENDIAN ? CODE_FOR_altivec_vmrghw_direct_v4si ! : CODE_FOR_altivec_vmrglw_direct_v4si, {0, 1, 2, 3, 16, 17, 18, 19, 4, 5, 6, 7, 20, 21, 22, 23}}, {OPTION_MASK_ALTIVEC, ! BYTES_BIG_ENDIAN ? CODE_FOR_altivec_vmrglb_direct ! : CODE_FOR_altivec_vmrghb_direct, {8, 24, 9, 25, 10, 26, 11, 27, 12, 28, 13, 29, 14, 30, 15, 31}}, {OPTION_MASK_ALTIVEC, ! BYTES_BIG_ENDIAN ? CODE_FOR_altivec_vmrglh_direct ! : CODE_FOR_altivec_vmrghh_direct, {8, 9, 24, 25, 10, 11, 26, 27, 12, 13, 28, 29, 14, 15, 30, 31}}, {OPTION_MASK_ALTIVEC, ! BYTES_BIG_ENDIAN ? CODE_FOR_altivec_vmrglw_direct_v4si ! : CODE_FOR_altivec_vmrghw_direct_v4si, {8, 9, 10, 11, 24, 25, 26, 27, 12, 13, 14, 15, 28, 29, 30, 31}}, {OPTION_MASK_P8_VECTOR, BYTES_BIG_ENDIAN ? CODE_FOR_p8_vmrgew_v4sf_direct --- 22986,23013 ---- CODE_FOR_altivec_vpkuwum_direct, {2, 3, 6, 7, 10, 11, 14, 15, 18, 19, 22, 23, 26, 27, 30, 31}}, {OPTION_MASK_ALTIVEC, ! BYTES_BIG_ENDIAN ? CODE_FOR_altivec_vmrghb_direct_be ! : CODE_FOR_altivec_vmrglb_direct_le, {0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23}}, {OPTION_MASK_ALTIVEC, ! BYTES_BIG_ENDIAN ? CODE_FOR_altivec_vmrghh_direct_be ! : CODE_FOR_altivec_vmrglh_direct_le, {0, 1, 16, 17, 2, 3, 18, 19, 4, 5, 20, 21, 6, 7, 22, 23}}, {OPTION_MASK_ALTIVEC, ! BYTES_BIG_ENDIAN ? CODE_FOR_altivec_vmrghw_direct_v4si_be ! : CODE_FOR_altivec_vmrglw_direct_v4si_le, {0, 1, 2, 3, 16, 17, 18, 19, 4, 5, 6, 7, 20, 21, 22, 23}}, {OPTION_MASK_ALTIVEC, ! BYTES_BIG_ENDIAN ? CODE_FOR_altivec_vmrglb_direct_be ! : CODE_FOR_altivec_vmrghb_direct_le, {8, 24, 9, 25, 10, 26, 11, 27, 12, 28, 13, 29, 14, 30, 15, 31}}, {OPTION_MASK_ALTIVEC, ! BYTES_BIG_ENDIAN ? CODE_FOR_altivec_vmrglh_direct_be ! : CODE_FOR_altivec_vmrghh_direct_le, {8, 9, 24, 25, 10, 11, 26, 27, 12, 13, 28, 29, 14, 15, 30, 31}}, {OPTION_MASK_ALTIVEC, ! BYTES_BIG_ENDIAN ? CODE_FOR_altivec_vmrglw_direct_v4si_be ! : CODE_FOR_altivec_vmrghw_direct_v4si_le, {8, 9, 10, 11, 24, 25, 26, 27, 12, 13, 14, 15, 28, 29, 30, 31}}, {OPTION_MASK_P8_VECTOR, BYTES_BIG_ENDIAN ? CODE_FOR_p8_vmrgew_v4sf_direct *************** rs6000_can_inline_p (tree caller, tree c *** 25311,25320 **** } } ! /* Ignore -mpower8-fusion and -mpower10-fusion options for inlining ! purposes. */ ! callee_isa &= ~(OPTION_MASK_P8_FUSION | OPTION_MASK_P10_FUSION); ! explicit_isa &= ~(OPTION_MASK_P8_FUSION | OPTION_MASK_P10_FUSION); /* The callee's options must be a subset of the caller's options, i.e. a vsx function may inline an altivec function, but a no-vsx function --- 25326,25338 ---- } } ! /* Ignore -mpower8-fusion, -mpower10-fusion and -msave-toc-indirect options ! for inlining purposes. */ ! HOST_WIDE_INT ignored_isas = (OPTION_MASK_P8_FUSION ! | OPTION_MASK_P10_FUSION ! | OPTION_MASK_SAVE_TOC_INDIRECT); ! callee_isa &= ~ignored_isas; ! explicit_isa &= ~ignored_isas; /* The callee's options must be a subset of the caller's options, i.e. a vsx function may inline an altivec function, but a no-vsx function diff -Nrcpad gcc-12.4.0/gcc/config/rs6000/rs6000.h gcc-12.5.0-RC-20250704/gcc/config/rs6000/rs6000.h *** gcc-12.4.0/gcc/config/rs6000/rs6000.h Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/config/rs6000/rs6000.h Fri Jul 4 07:24:42 2025 *************** enum data_align { align_abi, align_opt, *** 1051,1056 **** --- 1051,1058 ---- (ALTIVEC_VECTOR_MODE (MODE) || VSX_VECTOR_MODE (MODE) \ || (MODE) == V2DImode || (MODE) == V1TImode) + #define TI_OR_PTI_MODE(mode) ((mode) == TImode || (mode) == PTImode) + /* Post-reload, we can't use any new AltiVec registers, as we already emitted the vrsave mask. */ diff -Nrcpad gcc-12.4.0/gcc/config/rs6000/rs6000.md gcc-12.5.0-RC-20250704/gcc/config/rs6000/rs6000.md *** gcc-12.4.0/gcc/config/rs6000/rs6000.md Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/config/rs6000/rs6000.md Fri Jul 4 07:24:42 2025 *************** *** 14039,14044 **** --- 14039,14046 ---- "" { emit_insn (gen_eh_set_lr (Pmode, operands[0])); + emit_jump_insn (gen_eh_return_internal ()); + emit_barrier (); DONE; }) *************** *** 14055,14060 **** --- 14057,14075 ---- DONE; }) + (define_insn_and_split "eh_return_internal" + [(eh_return)] + "" + "#" + "epilogue_completed" + [(const_int 0)] + { + if (!TARGET_SCHED_PROLOG) + emit_insn (gen_blockage ()); + rs6000_emit_epilogue (EPILOGUE_TYPE_EH_RETURN); + DONE; + }) + (define_insn "prefetch" [(prefetch (match_operand 0 "indexed_or_indirect_address" "a") (match_operand:SI 1 "const_int_operand" "n") *************** *** 15542,15550 **** (define_insn "hashst" [(set (match_operand:DI 0 "simple_offsettable_mem_operand" "=m") ! (unspec_volatile:DI [(match_operand:DI 1 "int_reg_operand" "r")] UNSPEC_HASHST))] ! "TARGET_POWER10 && rs6000_rop_protect" { static char templ[32]; const char *p = rs6000_privileged ? "p" : ""; --- 15557,15565 ---- (define_insn "hashst" [(set (match_operand:DI 0 "simple_offsettable_mem_operand" "=m") ! (unspec_volatile:DI [(match_operand:DI 1 "int_reg_operand" "r")] UNSPEC_HASHST))] ! "rs6000_rop_protect" { static char templ[32]; const char *p = rs6000_privileged ? "p" : ""; *************** *** 15557,15563 **** [(unspec_volatile [(match_operand:DI 0 "int_reg_operand" "r") (match_operand:DI 1 "simple_offsettable_mem_operand" "m")] UNSPEC_HASHCHK)] ! "TARGET_POWER10 && rs6000_rop_protect" { static char templ[32]; const char *p = rs6000_privileged ? "p" : ""; --- 15572,15578 ---- [(unspec_volatile [(match_operand:DI 0 "int_reg_operand" "r") (match_operand:DI 1 "simple_offsettable_mem_operand" "m")] UNSPEC_HASHCHK)] ! "rs6000_rop_protect" { static char templ[32]; const char *p = rs6000_privileged ? "p" : ""; diff -Nrcpad gcc-12.4.0/gcc/config/rs6000/vsx.md gcc-12.5.0-RC-20250704/gcc/config/rs6000/vsx.md *** gcc-12.4.0/gcc/config/rs6000/vsx.md Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/config/rs6000/vsx.md Fri Jul 4 07:24:42 2025 *************** *** 4694,4705 **** (const_int 1) (const_int 5)])))] "VECTOR_MEM_VSX_P (mode)" { ! rtx (*fun) (rtx, rtx, rtx); ! fun = BYTES_BIG_ENDIAN ? gen_altivec_vmrghw_direct_ ! : gen_altivec_vmrglw_direct_; ! if (!BYTES_BIG_ENDIAN) ! std::swap (operands[1], operands[2]); ! emit_insn (fun (operands[0], operands[1], operands[2])); DONE; } [(set_attr "type" "vecperm")]) --- 4694,4707 ---- (const_int 1) (const_int 5)])))] "VECTOR_MEM_VSX_P (mode)" { ! if (BYTES_BIG_ENDIAN) ! emit_insn (gen_altivec_vmrghw_direct_v4si_be (operands[0], ! operands[1], ! operands[2])); ! else ! emit_insn (gen_altivec_vmrglw_direct_v4si_le (operands[0], ! operands[2], ! operands[1])); DONE; } [(set_attr "type" "vecperm")]) *************** *** 4714,4725 **** (const_int 3) (const_int 7)])))] "VECTOR_MEM_VSX_P (mode)" { ! rtx (*fun) (rtx, rtx, rtx); ! fun = BYTES_BIG_ENDIAN ? gen_altivec_vmrglw_direct_ ! : gen_altivec_vmrghw_direct_; ! if (!BYTES_BIG_ENDIAN) ! std::swap (operands[1], operands[2]); ! emit_insn (fun (operands[0], operands[1], operands[2])); DONE; } [(set_attr "type" "vecperm")]) --- 4716,4729 ---- (const_int 3) (const_int 7)])))] "VECTOR_MEM_VSX_P (mode)" { ! if (BYTES_BIG_ENDIAN) ! emit_insn (gen_altivec_vmrglw_direct_v4si_be (operands[0], ! operands[1], ! operands[2])); ! else ! emit_insn (gen_altivec_vmrghw_direct_v4si_le (operands[0], ! operands[2], ! operands[1])); DONE; } [(set_attr "type" "vecperm")]) diff -Nrcpad gcc-12.4.0/gcc/config/s390/3931.md gcc-12.5.0-RC-20250704/gcc/config/s390/3931.md *** gcc-12.4.0/gcc/config/s390/3931.md Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/config/s390/3931.md Fri Jul 4 07:24:42 2025 *************** vlvgg, *** 404,410 **** vlvgh, vlvgp, vst, - vstbr, vstbrf, vstbrg, vstbrh, --- 404,409 ---- *************** tm, *** 627,633 **** tmy, vl, vlbb, - vlbr, vlbrf, vlbrg, vlbrh, --- 626,631 ---- *************** vlreph, *** 661,667 **** vlrl, vlrlr, vst, - vstbr, vstbrf, vstbrg, vstbrh, --- 659,664 ---- *************** vrepb, *** 1077,1083 **** vrepf, vrepg, vreph, - vrepi, vrepib, vrepif, vrepig, --- 1074,1079 ---- *************** vrepb, *** 1930,1936 **** vrepf, vrepg, vreph, - vrepi, vrepib, vrepif, vrepig, --- 1926,1931 ---- *************** vistrfs, *** 2156,2162 **** vistrhs, vl, vlbb, - vlbr, vlbrf, vlbrg, vlbrh, --- 2151,2156 ---- *************** tbegin, *** 2248,2254 **** tbeginc, tend, vst, - vstbr, vstbrf, vstbrg, vstbrh, --- 2242,2247 ---- diff -Nrcpad gcc-12.4.0/gcc/config/s390/s390-c.cc gcc-12.5.0-RC-20250704/gcc/config/s390/s390-c.cc *** gcc-12.4.0/gcc/config/s390/s390-c.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/config/s390/s390-c.cc Fri Jul 4 07:24:42 2025 *************** s390_expand_overloaded_builtin (location *** 497,507 **** /* Build a vector type with the alignment of the source location in order to enable correct alignment hints to be generated for vl. */ ! tree mem_type = build_aligned_type (return_type, ! TYPE_ALIGN (TREE_TYPE (TREE_TYPE ((*arglist)[1])))); return build2 (MEM_REF, mem_type, fold_build_pointer_plus ((*arglist)[1], (*arglist)[0]), ! build_int_cst (TREE_TYPE ((*arglist)[1]), 0)); } case S390_OVERLOADED_BUILTIN_s390_vec_xst: case S390_OVERLOADED_BUILTIN_s390_vec_xstd2: --- 497,507 ---- /* Build a vector type with the alignment of the source location in order to enable correct alignment hints to be generated for vl. */ ! unsigned align = TYPE_ALIGN (TREE_TYPE (TREE_TYPE ((*arglist)[1]))); ! tree mem_type = build_aligned_type (return_type, align); return build2 (MEM_REF, mem_type, fold_build_pointer_plus ((*arglist)[1], (*arglist)[0]), ! build_int_cst (ptr_type_node, 0)); } case S390_OVERLOADED_BUILTIN_s390_vec_xst: case S390_OVERLOADED_BUILTIN_s390_vec_xstd2: *************** s390_expand_overloaded_builtin (location *** 510,520 **** /* Build a vector type with the alignment of the target location in order to enable correct alignment hints to be generated for vst. */ ! tree mem_type = build_aligned_type (TREE_TYPE((*arglist)[0]), ! TYPE_ALIGN (TREE_TYPE (TREE_TYPE ((*arglist)[2])))); return build2 (MODIFY_EXPR, mem_type, ! build1 (INDIRECT_REF, mem_type, ! fold_build_pointer_plus ((*arglist)[2], (*arglist)[1])), (*arglist)[0]); } case S390_OVERLOADED_BUILTIN_s390_vec_load_pair: --- 510,522 ---- /* Build a vector type with the alignment of the target location in order to enable correct alignment hints to be generated for vst. */ ! unsigned align = TYPE_ALIGN (TREE_TYPE (TREE_TYPE ((*arglist)[2]))); ! tree mem_type = build_aligned_type (TREE_TYPE ((*arglist)[0]), align); return build2 (MODIFY_EXPR, mem_type, ! build2 (MEM_REF, mem_type, ! fold_build_pointer_plus ((*arglist)[2], ! (*arglist)[1]), ! build_int_cst (ptr_type_node, 0)), (*arglist)[0]); } case S390_OVERLOADED_BUILTIN_s390_vec_load_pair: diff -Nrcpad gcc-12.4.0/gcc/config/s390/s390-protos.h gcc-12.5.0-RC-20250704/gcc/config/s390/s390-protos.h *** gcc-12.4.0/gcc/config/s390/s390-protos.h Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/config/s390/s390-protos.h Fri Jul 4 07:24:42 2025 *************** extern void s390_set_has_landing_pad_p ( *** 50,56 **** extern bool s390_hard_regno_rename_ok (unsigned int, unsigned int); extern int s390_class_max_nregs (enum reg_class, machine_mode); extern bool s390_return_addr_from_memory(void); - extern rtx s390_gen_lowpart_subreg (machine_mode, rtx); extern bool s390_fma_allowed_p (machine_mode); #if S390_USE_TARGET_ATTRIBUTE extern tree s390_valid_target_attribute_tree (tree args, --- 50,55 ---- diff -Nrcpad gcc-12.4.0/gcc/config/s390/s390.cc gcc-12.5.0-RC-20250704/gcc/config/s390/s390.cc *** gcc-12.4.0/gcc/config/s390/s390.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/config/s390/s390.cc Fri Jul 4 07:24:42 2025 *************** s390_return_addr_from_memory () *** 457,487 **** return cfun_gpr_save_slot(RETURN_REGNUM) == SAVE_SLOT_STACK; } - /* Generate a SUBREG for the MODE lowpart of EXPR. - - In contrast to gen_lowpart it will always return a SUBREG - expression. This is useful to generate STRICT_LOW_PART - expressions. */ - rtx - s390_gen_lowpart_subreg (machine_mode mode, rtx expr) - { - rtx lowpart = gen_lowpart (mode, expr); - - /* There might be no SUBREG in case it could be applied to the hard - REG rtx or it could be folded with a paradoxical subreg. Bring - it back. */ - if (!SUBREG_P (lowpart)) - { - machine_mode reg_mode = TARGET_ZARCH ? DImode : SImode; - gcc_assert (REG_P (lowpart)); - lowpart = gen_lowpart_SUBREG (mode, - gen_rtx_REG (reg_mode, - REGNO (lowpart))); - } - - return lowpart; - } - /* Return nonzero if it's OK to use fused multiply-add for MODE. */ bool s390_fma_allowed_p (machine_mode mode) --- 457,462 ---- *************** s390_valid_shift_count (rtx op, HOST_WID *** 3241,3266 **** /* Check for an and with proper constant. */ if (GET_CODE (op) == AND) ! { ! rtx op1 = XEXP (op, 0); ! rtx imm = XEXP (op, 1); ! if (GET_CODE (op1) == SUBREG && subreg_lowpart_p (op1)) ! op1 = XEXP (op1, 0); ! if (!(register_operand (op1, GET_MODE (op1)) || GET_CODE (op1) == PLUS)) ! return false; ! if (!immediate_operand (imm, GET_MODE (imm))) ! return false; ! HOST_WIDE_INT val = INTVAL (imm); ! if (implicit_mask > 0 ! && (val & implicit_mask) != implicit_mask) ! return false; ! op = op1; ! } /* Check the rest. */ return s390_decompose_addrstyle_without_index (op, NULL, NULL); --- 3216,3246 ---- /* Check for an and with proper constant. */ if (GET_CODE (op) == AND) ! { ! rtx op1 = XEXP (op, 0); ! rtx imm = XEXP (op, 1); ! if (GET_CODE (op1) == SUBREG && subreg_lowpart_p (op1)) ! op1 = XEXP (op1, 0); ! if (!(register_operand (op1, GET_MODE (op1)) || GET_CODE (op1) == PLUS)) ! return false; ! /* Accept only CONST_INT as immediates, i.e., reject shift count operands ! which do not trivially fit the scheme of address operands. Especially ! since strip_address_mutations() expects expressions of the form ! (and ... (const_int ...)) and fails for ! (and ... (const_wide_int ...)). */ ! if (!const_int_operand (imm, GET_MODE (imm))) ! return false; ! HOST_WIDE_INT val = INTVAL (imm); ! if (implicit_mask > 0 ! && (val & implicit_mask) != implicit_mask) ! return false; ! op = op1; ! } /* Check the rest. */ return s390_decompose_addrstyle_without_index (op, NULL, NULL); *************** s390_mem_constraint (const char *str, rt *** 3430,3435 **** --- 3410,3427 ---- if ((reload_completed || reload_in_progress) ? !offsettable_memref_p (op) : !offsettable_nonstrict_memref_p (op)) return 0; + /* offsettable_memref_p ensures only that any positive offset added to + the address forms a valid general address. For AQ and AR constraints + we also have to verify that the resulting displacement after adding + any positive offset less than the size of the object being referenced + is still valid. */ + if (str[1] == 'Q' || str[1] == 'R') + { + int o = GET_MODE_SIZE (GET_MODE (op)) - 1; + rtx tmp = adjust_address (op, QImode, o); + if (!s390_check_qrst_address (str[1], XEXP (tmp, 0), true)) + return 0; + } return s390_check_qrst_address (str[1], XEXP (op, 0), true); case 'B': /* Check for non-literal-pool variants of memory constraints. */ *************** s390_expand_insv (rtx dest, rtx op1, rtx *** 6544,6558 **** /* Emit a strict_low_part pattern if possible. */ if (smode_bsize == bitsize && bitpos == mode_bsize - smode_bsize) { ! rtx low_dest = s390_gen_lowpart_subreg (smode, dest); ! rtx low_src = gen_lowpart (smode, src); ! ! switch (smode) { ! case E_QImode: emit_insn (gen_movstrictqi (low_dest, low_src)); return true; ! case E_HImode: emit_insn (gen_movstricthi (low_dest, low_src)); return true; ! case E_SImode: emit_insn (gen_movstrictsi (low_dest, low_src)); return true; ! default: break; } } --- 6536,6556 ---- /* Emit a strict_low_part pattern if possible. */ if (smode_bsize == bitsize && bitpos == mode_bsize - smode_bsize) { ! rtx low_dest = gen_lowpart (smode, dest); ! if (SUBREG_P (low_dest) && !paradoxical_subreg_p (low_dest)) { ! poly_int64 offset = GET_MODE_SIZE (mode) - GET_MODE_SIZE (smode); ! rtx low_src = adjust_address (src, smode, offset); ! switch (smode) ! { ! case E_QImode: emit_insn (gen_movstrictqi (low_dest, low_src)); ! return true; ! case E_HImode: emit_insn (gen_movstricthi (low_dest, low_src)); ! return true; ! case E_SImode: emit_insn (gen_movstrictsi (low_dest, low_src)); ! return true; ! default: break; ! } } } *************** print_operand_address (FILE *file, rtx a *** 8035,8041 **** CONST_VECTOR: Generate a bitmask for vgbm instruction. 'x': print integer X as if it's an unsigned halfword. 'v': print register number as vector register (v1 instead of f1). - 'V': print the second word of a TFmode operand as vector register. */ void --- 8033,8038 ---- *************** print_operand (FILE *file, rtx x, int co *** 8228,8240 **** case REG: /* Print FP regs as fx instead of vx when they are accessed through non-vector mode. */ ! if ((code == 'v' || code == 'V') || VECTOR_NOFP_REG_P (x) || (FP_REG_P (x) && VECTOR_MODE_P (GET_MODE (x))) || (VECTOR_REG_P (x) && (GET_MODE_SIZE (GET_MODE (x)) / s390_class_max_nregs (FP_REGS, GET_MODE (x))) > 8)) ! fprintf (file, "%%v%s", reg_names[REGNO (x) + (code == 'V')] + 2); else fprintf (file, "%s", reg_names[REGNO (x)]); break; --- 8225,8237 ---- case REG: /* Print FP regs as fx instead of vx when they are accessed through non-vector mode. */ ! if (code == 'v' || VECTOR_NOFP_REG_P (x) || (FP_REG_P (x) && VECTOR_MODE_P (GET_MODE (x))) || (VECTOR_REG_P (x) && (GET_MODE_SIZE (GET_MODE (x)) / s390_class_max_nregs (FP_REGS, GET_MODE (x))) > 8)) ! fprintf (file, "%%v%s", reg_names[REGNO (x)] + 2); else fprintf (file, "%s", reg_names[REGNO (x)]); break; *************** s390_hard_regno_mode_ok (unsigned int re *** 10477,10484 **** } break; case ADDR_REGS: ! if (FRAME_REGNO_P (regno) && mode == Pmode) ! return true; /* fallthrough */ case GENERAL_REGS: --- 10474,10481 ---- } break; case ADDR_REGS: ! if (FRAME_REGNO_P (regno)) ! return mode == Pmode; /* fallthrough */ case GENERAL_REGS: diff -Nrcpad gcc-12.4.0/gcc/config/s390/s390.md gcc-12.5.0-RC-20250704/gcc/config/s390/s390.md *** gcc-12.4.0/gcc/config/s390/s390.md Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/config/s390/s390.md Fri Jul 4 07:24:42 2025 *************** *** 244,249 **** --- 244,251 ---- UNSPEC_VEC_ELTSWAP + UNSPEC_TF_TO_FPRX2 + UNSPEC_NNPA_VCLFNHS_V8HI UNSPEC_NNPA_VCLFNLS_V8HI UNSPEC_NNPA_VCRNFS_V8HI *************** *** 745,751 **** ;; In FP templates, a in "mr" will expand to "mxr" in ;; TF/TDmode, "mdr" in DF/DDmode, "meer" in SFmode and "mer in ;; SDmode. ! (define_mode_attr xdee [(TF "x") (DF "d") (SF "ee") (TD "x") (DD "d") (SD "e")]) ;; The decimal floating point variants of add, sub, div and mul support 3 ;; fp register operands. The following attributes allow to merge the bfp and --- 747,753 ---- ;; In FP templates, a in "mr" will expand to "mxr" in ;; TF/TDmode, "mdr" in DF/DDmode, "meer" in SFmode and "mer in ;; SDmode. ! (define_mode_attr xdee [(TF "x") (FPRX2 "x") (DF "d") (SF "ee") (TD "x") (DD "d") (SD "e")]) ;; The decimal floating point variants of add, sub, div and mul support 3 ;; fp register operands. The following attributes allow to merge the bfp and *************** *** 1971,1982 **** "TARGET_ZARCH" "#" "&& reload_completed" ! [(set (match_dup 2) (match_dup 4)) (set (match_dup 0) (ashift:DI (match_dup 0) (const_int 32))) ! (set (strict_low_part (match_dup 3)) (match_dup 5))] "operands[2] = gen_lowpart (SImode, operands[0]); ! operands[3] = s390_gen_lowpart_subreg (SImode, operands[0]); ! s390_split_access_reg (operands[1], &operands[5], &operands[4]);") ; Splitters for storing TLS pointer to %a0:DI. --- 1973,1983 ---- "TARGET_ZARCH" "#" "&& reload_completed" ! [(set (match_dup 2) (match_dup 3)) (set (match_dup 0) (ashift:DI (match_dup 0) (const_int 32))) ! (set (strict_low_part (match_dup 2)) (match_dup 4))] "operands[2] = gen_lowpart (SImode, operands[0]); ! s390_split_access_reg (operands[1], &operands[4], &operands[3]);") ; Splitters for storing TLS pointer to %a0:DI. *************** *** 3381,3387 **** (match_operand:BLK 1 "memory_operand" "")) (use (match_operand 2 "const_int_operand" "")) (use (match_operand 3 "immediate_operand" "")) ! (clobber (scratch))] "reload_completed" [(parallel [(set (match_dup 0) (match_dup 1)) --- 3382,3388 ---- (match_operand:BLK 1 "memory_operand" "")) (use (match_operand 2 "const_int_operand" "")) (use (match_operand 3 "immediate_operand" "")) ! (clobber (match_scratch 4))] "reload_completed" [(parallel [(set (match_dup 0) (match_dup 1)) *************** *** 3393,3399 **** (match_operand:BLK 1 "memory_operand" "")) (use (match_operand 2 "register_operand" "")) (use (match_operand 3 "memory_operand" "")) ! (clobber (scratch))] "reload_completed" [(parallel [(unspec [(match_dup 2) (match_dup 3) --- 3394,3400 ---- (match_operand:BLK 1 "memory_operand" "")) (use (match_operand 2 "register_operand" "")) (use (match_operand 3 "memory_operand" "")) ! (clobber (match_scratch 4))] "reload_completed" [(parallel [(unspec [(match_dup 2) (match_dup 3) *************** *** 3407,3420 **** (match_operand:BLK 1 "memory_operand" "")) (use (match_operand 2 "register_operand" "")) (use (const:BLK (unspec:BLK [(const_int 0)] UNSPEC_INSN))) ! (clobber (scratch))] "TARGET_Z10 && reload_completed" [(parallel [(unspec [(match_dup 2) (const_int 0) ! (label_ref (match_dup 3))] UNSPEC_EXECUTE) (set (match_dup 0) (match_dup 1)) (use (const_int 1))])] ! "operands[3] = gen_label_rtx ();") (define_split [(set (match_operand:BLK 0 "memory_operand" "") --- 3408,3421 ---- (match_operand:BLK 1 "memory_operand" "")) (use (match_operand 2 "register_operand" "")) (use (const:BLK (unspec:BLK [(const_int 0)] UNSPEC_INSN))) ! (clobber (match_scratch 3))] "TARGET_Z10 && reload_completed" [(parallel [(unspec [(match_dup 2) (const_int 0) ! (label_ref (match_dup 4))] UNSPEC_EXECUTE) (set (match_dup 0) (match_dup 1)) (use (const_int 1))])] ! "operands[4] = gen_label_rtx ();") (define_split [(set (match_operand:BLK 0 "memory_operand" "") *************** *** 3595,3601 **** (const_int 0)) (use (match_operand 1 "const_int_operand" "")) (use (match_operand 2 "immediate_operand" "")) ! (clobber (scratch)) (clobber (reg:CC CC_REGNUM))] "reload_completed" [(parallel --- 3596,3602 ---- (const_int 0)) (use (match_operand 1 "const_int_operand" "")) (use (match_operand 2 "immediate_operand" "")) ! (clobber (match_scratch 3)) (clobber (reg:CC CC_REGNUM))] "reload_completed" [(parallel *************** *** 3609,3615 **** (const_int 0)) (use (match_operand 1 "register_operand" "")) (use (match_operand 2 "memory_operand" "")) ! (clobber (scratch)) (clobber (reg:CC CC_REGNUM))] "reload_completed" [(parallel --- 3610,3616 ---- (const_int 0)) (use (match_operand 1 "register_operand" "")) (use (match_operand 2 "memory_operand" "")) ! (clobber (match_scratch 3)) (clobber (reg:CC CC_REGNUM))] "reload_completed" [(parallel *************** *** 3625,3631 **** (const_int 0)) (use (match_operand 1 "register_operand" "")) (use (const:BLK (unspec:BLK [(const_int 0)] UNSPEC_INSN))) ! (clobber (scratch)) (clobber (reg:CC CC_REGNUM))] "TARGET_Z10 && reload_completed" [(parallel --- 3626,3632 ---- (const_int 0)) (use (match_operand 1 "register_operand" "")) (use (const:BLK (unspec:BLK [(const_int 0)] UNSPEC_INSN))) ! (clobber (match_scratch 2)) (clobber (reg:CC CC_REGNUM))] "TARGET_Z10 && reload_completed" [(parallel *************** *** 3790,3796 **** (match_operand:BLK 1 "memory_operand" ""))) (use (match_operand 2 "const_int_operand" "")) (use (match_operand 3 "immediate_operand" "")) ! (clobber (scratch))] "reload_completed" [(parallel [(set (reg:CCU CC_REGNUM) (compare:CCU (match_dup 0) (match_dup 1))) --- 3791,3797 ---- (match_operand:BLK 1 "memory_operand" ""))) (use (match_operand 2 "const_int_operand" "")) (use (match_operand 3 "immediate_operand" "")) ! (clobber (match_scratch 4))] "reload_completed" [(parallel [(set (reg:CCU CC_REGNUM) (compare:CCU (match_dup 0) (match_dup 1))) *************** *** 3803,3809 **** (match_operand:BLK 1 "memory_operand" ""))) (use (match_operand 2 "register_operand" "")) (use (match_operand 3 "memory_operand" "")) ! (clobber (scratch))] "reload_completed" [(parallel [(unspec [(match_dup 2) (match_dup 3) --- 3804,3810 ---- (match_operand:BLK 1 "memory_operand" ""))) (use (match_operand 2 "register_operand" "")) (use (match_operand 3 "memory_operand" "")) ! (clobber (match_scratch 4))] "reload_completed" [(parallel [(unspec [(match_dup 2) (match_dup 3) *************** *** 3818,3824 **** (match_operand:BLK 1 "memory_operand" ""))) (use (match_operand 2 "register_operand" "")) (use (const:BLK (unspec:BLK [(const_int 0)] UNSPEC_INSN))) ! (clobber (scratch))] "TARGET_Z10 && reload_completed" [(parallel [(unspec [(match_dup 2) (const_int 0) --- 3819,3825 ---- (match_operand:BLK 1 "memory_operand" ""))) (use (match_operand 2 "register_operand" "")) (use (const:BLK (unspec:BLK [(const_int 0)] UNSPEC_INSN))) ! (clobber (match_scratch 3))] "TARGET_Z10 && reload_completed" [(parallel [(unspec [(match_dup 2) (const_int 0) *************** *** 5013,5019 **** (parallel [(set (strict_low_part (match_dup 2)) (match_dup 1)) (clobber (reg:CC CC_REGNUM))])] ! "operands[2] = s390_gen_lowpart_subreg (HImode, operands[0]);") (define_insn_and_split "*zero_extendqisi2_31" [(set (match_operand:SI 0 "register_operand" "=&d") --- 5014,5020 ---- (parallel [(set (strict_low_part (match_dup 2)) (match_dup 1)) (clobber (reg:CC CC_REGNUM))])] ! "operands[2] = gen_lowpart (HImode, operands[0]);") (define_insn_and_split "*zero_extendqisi2_31" [(set (match_operand:SI 0 "register_operand" "=&d") *************** *** 5023,5029 **** "&& reload_completed" [(set (match_dup 0) (const_int 0)) (set (strict_low_part (match_dup 2)) (match_dup 1))] ! "operands[2] = s390_gen_lowpart_subreg (QImode, operands[0]);") ; ; zero_extendqihi2 instruction pattern(s). --- 5024,5030 ---- "&& reload_completed" [(set (match_dup 0) (const_int 0)) (set (strict_low_part (match_dup 2)) (match_dup 1))] ! "operands[2] = gen_lowpart (QImode, operands[0]);") ; ; zero_extendqihi2 instruction pattern(s). *************** *** 5055,5061 **** "&& reload_completed" [(set (match_dup 0) (const_int 0)) (set (strict_low_part (match_dup 2)) (match_dup 1))] ! "operands[2] = s390_gen_lowpart_subreg (QImode, operands[0]);") ; ; fixuns_trunc(dd|td|sf|df|tf)(si|di)2 expander --- 5056,5062 ---- "&& reload_completed" [(set (match_dup 0) (const_int 0)) (set (strict_low_part (match_dup 2)) (match_dup 1))] ! "operands[2] = gen_lowpart (QImode, operands[0]);") ; ; fixuns_trunc(dd|td|sf|df|tf)(si|di)2 expander *************** *** 9472,9478 **** (define_insn "*icjump_64" [(set (pc) (if_then_else ! (match_operator 1 "s390_comparison" [(reg CC_REGNUM) (const_int 0)]) (pc) (label_ref (match_operand 0 "" ""))))] "" --- 9473,9480 ---- (define_insn "*icjump_64" [(set (pc) (if_then_else ! (match_operator 1 "s390_comparison" [(reg CC_REGNUM) ! (match_operand 2 "const_int_operand" "")]) (pc) (label_ref (match_operand 0 "" ""))))] "" diff -Nrcpad gcc-12.4.0/gcc/config/s390/vector.md gcc-12.5.0-RC-20250704/gcc/config/s390/vector.md *** gcc-12.4.0/gcc/config/s390/vector.md Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/config/s390/vector.md Fri Jul 4 07:24:42 2025 *************** *** 134,140 **** (V1TI "q") (TI "q") (V1SF "f") (V2SF "f") (V4SF "f") (V1DF "g") (V2DF "g") ! (V1TF "q")]) ; This is for vmalhw. It gets an 'w' attached to avoid confusion with ; multiply and add logical high vmalh. --- 134,140 ---- (V1TI "q") (TI "q") (V1SF "f") (V2SF "f") (V4SF "f") (V1DF "g") (V2DF "g") ! (V1TF "q") (TF "q")]) ; This is for vmalhw. It gets an 'w' attached to avoid confusion with ; multiply and add logical high vmalh. *************** *** 357,364 **** lr\t%0,%1 mvi\t%0,0 mviy\t%0,0 ! mvi\t%0,-1 ! mviy\t%0,-1 lhi\t%0,0 lhi\t%0,-1 llc\t%0,%1 --- 357,364 ---- lr\t%0,%1 mvi\t%0,0 mviy\t%0,0 ! mvi\t%0,255 ! mviy\t%0,255 lhi\t%0,0 lhi\t%0,-1 llc\t%0,%1 *************** *** 900,935 **** "vmrlg\t%0,%1,%2"; [(set_attr "op_type" "VRR")]) ! ! (define_insn "*tf_to_fprx2_0" ! [(set (subreg:DF (match_operand:FPRX2 0 "nonimmediate_operand" "+f") 0) ! (subreg:DF (match_operand:TF 1 "general_operand" "v") 0))] ! "TARGET_VXE" ! ; M4 == 1 corresponds to %v0[0] = %v1[0]; %v0[1] = %v0[1]; ! "vpdi\t%v0,%v1,%v0,1" ! [(set_attr "op_type" "VRR")]) ! ! (define_insn "*tf_to_fprx2_1" ! [(set (subreg:DF (match_operand:FPRX2 0 "nonimmediate_operand" "+f") 8) ! (subreg:DF (match_operand:TF 1 "general_operand" "v") 8))] ! "TARGET_VXE" ! ; M4 == 5 corresponds to %V0[0] = %v1[1]; %V0[1] = %V0[1]; ! "vpdi\t%V0,%v1,%V0,5" ! [(set_attr "op_type" "VRR")]) ! ! (define_insn_and_split "tf_to_fprx2" ! [(set (match_operand:FPRX2 0 "nonimmediate_operand" "=f,f") ! (subreg:FPRX2 (match_operand:TF 1 "general_operand" "v,AR") 0))] "TARGET_VXE" - "#" - "!(MEM_P (operands[1]) && MEM_VOLATILE_P (operands[1]))" - [(set (match_dup 2) (match_dup 3)) - (set (match_dup 4) (match_dup 5))] { ! operands[2] = simplify_gen_subreg (DFmode, operands[0], FPRX2mode, 0); ! operands[3] = simplify_gen_subreg (DFmode, operands[1], TFmode, 0); ! operands[4] = simplify_gen_subreg (DFmode, operands[0], FPRX2mode, 8); ! operands[5] = simplify_gen_subreg (DFmode, operands[1], TFmode, 8); }) --- 900,944 ---- "vmrlg\t%0,%1,%2"; [(set_attr "op_type" "VRR")]) ! (define_insn "tf_to_fprx2" ! [(set (match_operand:FPRX2 0 "register_operand" "=f,f ,f") ! (unspec:FPRX2 [(match_operand:TF 1 "general_operand" "v,AR,AT")] ! UNSPEC_TF_TO_FPRX2))] "TARGET_VXE" { ! char buf[64]; ! const char *reg_pair = reg_names[REGNO (operands[0]) + 1]; ! switch (which_alternative) ! { ! case 0: ! if (REGNO (operands[0]) == REGNO (operands[1])) ! { ! reg_pair += 2; // get rid of prefix %f ! snprintf (buf, sizeof (buf), "vpdi\t%%%%v%s,%%v1,%%%%v%s,5", reg_pair, reg_pair); ! output_asm_insn (buf, operands); ! return ""; ! } ! else ! { ! reg_pair += 2; // get rid of prefix %f ! snprintf (buf, sizeof (buf), "vlr\t%%v0,%%v1;vpdi\t%%%%v%s,%%v1,%%%%v%s,5", reg_pair, reg_pair); ! output_asm_insn (buf, operands); ! return ""; ! } ! case 1: ! { ! snprintf (buf, sizeof (buf), "ld\t%%f0,%%1;ld\t%%%s,8+%%1", reg_pair); ! output_asm_insn (buf, operands); ! return ""; ! } ! case 2: ! { ! snprintf (buf, sizeof (buf), "ldy\t%%f0,%%1;ldy\t%%%s,8+%%1", reg_pair); ! output_asm_insn (buf, operands); ! return ""; ! } ! default: gcc_unreachable (); ! } }) *************** *** 2548,2556 **** ; There is no instruction for rounding an extended BFP operand in a VR into ; a signed integer, therefore copy it into a FPR pair first. (define_expand "fix_trunctf2_vr" ! [(set (subreg:DF (match_dup 2) 0) ! (subreg:DF (match_operand:TF 1 "register_operand" "") 0)) ! (set (subreg:DF (match_dup 2) 8) (subreg:DF (match_dup 1) 8)) (parallel [(set (match_operand:GPR 0 "register_operand" "") (fix:GPR (match_dup 2))) (unspec:GPR [(const_int BFP_RND_TOWARD_0)] UNSPEC_ROUND) --- 2557,2564 ---- ; There is no instruction for rounding an extended BFP operand in a VR into ; a signed integer, therefore copy it into a FPR pair first. (define_expand "fix_trunctf2_vr" ! [(set (match_dup 2) ! (unspec:FPRX2 [(match_operand:TF 1 "register_operand")] UNSPEC_TF_TO_FPRX2)) (parallel [(set (match_operand:GPR 0 "register_operand" "") (fix:GPR (match_dup 2))) (unspec:GPR [(const_int BFP_RND_TOWARD_0)] UNSPEC_ROUND) *************** *** 2582,2590 **** ; There is no instruction for rounding an extended BFP operand in a VR into ; an unsigned integer, therefore copy it into a FPR pair first. (define_expand "fixuns_trunctf2_vr" ! [(set (subreg:DF (match_dup 2) 0) ! (subreg:DF (match_operand:TF 1 "register_operand" "") 0)) ! (set (subreg:DF (match_dup 2) 8) (subreg:DF (match_dup 1) 8)) (parallel [(set (match_operand:GPR 0 "register_operand" "") (unsigned_fix:GPR (match_dup 2))) (unspec:GPR [(const_int BFP_RND_TOWARD_0)] UNSPEC_ROUND) --- 2590,2597 ---- ; There is no instruction for rounding an extended BFP operand in a VR into ; an unsigned integer, therefore copy it into a FPR pair first. (define_expand "fixuns_trunctf2_vr" ! [(set (match_dup 2) ! (unspec:FPRX2 [(match_operand:TF 1 "register_operand")] UNSPEC_TF_TO_FPRX2)) (parallel [(set (match_operand:GPR 0 "register_operand" "") (unsigned_fix:GPR (match_dup 2))) (unspec:GPR [(const_int BFP_RND_TOWARD_0)] UNSPEC_ROUND) diff -Nrcpad gcc-12.4.0/gcc/config/sh/sh.cc gcc-12.5.0-RC-20250704/gcc/config/sh/sh.cc *** gcc-12.4.0/gcc/config/sh/sh.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/config/sh/sh.cc Fri Jul 4 07:24:42 2025 *************** sh_recog_treg_set_expr (rtx op, machine_ *** 12278,12284 **** have to capture its current state and restore it afterwards. */ recog_data_d prev_recog_data = recog_data; ! rtx_insn* i = make_insn_raw (gen_rtx_SET (get_t_reg_rtx (), op)); SET_PREV_INSN (i) = NULL; SET_NEXT_INSN (i) = NULL; --- 12278,12294 ---- have to capture its current state and restore it afterwards. */ recog_data_d prev_recog_data = recog_data; ! /* Note we can't use insn_raw here since that increases the uid ! and could cause debug compare differences; this insn never leaves ! this function so create a dummy one. */ ! rtx_insn* i = as_a (rtx_alloc (INSN)); ! ! INSN_UID (i) = 1; ! PATTERN (i) = gen_rtx_SET (get_t_reg_rtx (), op); ! INSN_CODE (i) = -1; ! REG_NOTES (i) = NULL; ! INSN_LOCATION (i) = curr_insn_location (); ! BLOCK_FOR_INSN (i) = NULL; SET_PREV_INSN (i) = NULL; SET_NEXT_INSN (i) = NULL; diff -Nrcpad gcc-12.4.0/gcc/config.gcc gcc-12.5.0-RC-20250704/gcc/config.gcc *** gcc-12.4.0/gcc/config.gcc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/config.gcc Fri Jul 4 07:24:42 2025 *************** c7 esther" *** 663,671 **** # 64-bit x86 processors supported by --with-arch=. Each processor # MUST be separated by exactly one space. x86_64_archs="amdfam10 athlon64 athlon64-sse3 barcelona bdver1 bdver2 \ ! bdver3 bdver4 znver1 znver2 znver3 znver4 btver1 btver2 k8 k8-sse3 opteron \ ! opteron-sse3 nocona core2 corei7 corei7-avx core-avx-i core-avx2 atom \ ! slm nehalem westmere sandybridge ivybridge haswell broadwell bonnell \ silvermont knl knm skylake-avx512 cannonlake icelake-client icelake-server \ skylake goldmont goldmont-plus tremont cascadelake tigerlake cooperlake \ sapphirerapids alderlake rocketlake eden-x2 nano nano-1000 nano-2000 nano-3000 \ --- 663,671 ---- # 64-bit x86 processors supported by --with-arch=. Each processor # MUST be separated by exactly one space. x86_64_archs="amdfam10 athlon64 athlon64-sse3 barcelona bdver1 bdver2 \ ! bdver3 bdver4 znver1 znver2 znver3 znver4 znver5 btver1 btver2 k8 k8-sse3 \ ! opteron opteron-sse3 nocona core2 corei7 corei7-avx core-avx-i core-avx2 \ ! atom slm nehalem westmere sandybridge ivybridge haswell broadwell bonnell \ silvermont knl knm skylake-avx512 cannonlake icelake-client icelake-server \ skylake goldmont goldmont-plus tremont cascadelake tigerlake cooperlake \ sapphirerapids alderlake rocketlake eden-x2 nano nano-1000 nano-2000 nano-3000 \ *************** case ${target} in *** 3744,3749 **** --- 3744,3753 ---- arch=znver4 cpu=znver4 ;; + znver5-*) + arch=znver5 + cpu=znver5 + ;; bdver4-*) arch=bdver4 cpu=bdver4 *************** case ${target} in *** 3873,3878 **** --- 3877,3886 ---- arch=znver4 cpu=znver4 ;; + znver5-*) + arch=znver5 + cpu=znver5 + ;; bdver4-*) arch=bdver4 cpu=bdver4 diff -Nrcpad gcc-12.4.0/gcc/config.in gcc-12.5.0-RC-20250704/gcc/config.in *** gcc-12.4.0/gcc/config.in Thu Jun 20 08:10:28 2024 --- gcc-12.5.0-RC-20250704/gcc/config.in Fri Jul 4 07:24:47 2025 *************** *** 635,642 **** #endif ! /* Define if your Mac OS X assembler supports the -mmacos-version-min option. ! */ #ifndef USED_FOR_TARGET #undef HAVE_AS_MMACOSX_VERSION_MIN_OPTION #endif --- 635,641 ---- #endif ! /* Define if your macOS assembler supports the -mmacos-version-min option. */ #ifndef USED_FOR_TARGET #undef HAVE_AS_MMACOSX_VERSION_MIN_OPTION #endif *************** *** 2232,2237 **** --- 2231,2243 ---- #endif + /* Define if personality and ADDR_NO_RANDOMIZE are declared in + sys/personality.h. */ + #ifndef USED_FOR_TARGET + #undef HOST_HAS_PERSONALITY_ADDR_NO_RANDOMIZE + #endif + + /* Define which stat syscall is able to handle 64bit indodes. */ #ifndef USED_FOR_TARGET #undef HOST_STAT_FOR_64BIT_INODES *************** *** 2256,2261 **** --- 2262,2273 ---- #endif + /* Define to 1 if ld64 supports '-macos_version_min'. */ + #ifndef USED_FOR_TARGET + #undef LD64_HAS_MACOS_VERSION_MIN + #endif + + /* Define to 1 if ld64 supports '-platform_version'. */ #ifndef USED_FOR_TARGET #undef LD64_HAS_PLATFORM_VERSION diff -Nrcpad gcc-12.4.0/gcc/configure gcc-12.5.0-RC-20250704/gcc/configure *** gcc-12.4.0/gcc/configure Thu Jun 20 08:10:28 2024 --- gcc-12.5.0-RC-20250704/gcc/configure Fri Jul 4 07:24:42 2025 *************** if test x"${DEFAULT_LINKER+set}" = x"set *** 3885,3891 **** as_fn_error $? "cannot execute: $DEFAULT_LINKER: check --with-ld or env. var. DEFAULT_LINKER" "$LINENO" 5 elif $DEFAULT_LINKER -v < /dev/null 2>&1 | grep GNU > /dev/null; then gnu_ld_flag=yes ! elif $DEFAULT_LINKER -v < /dev/null 2>&1 | grep ld64- > /dev/null; then ld64_flag=yes fi --- 3885,3891 ---- as_fn_error $? "cannot execute: $DEFAULT_LINKER: check --with-ld or env. var. DEFAULT_LINKER" "$LINENO" 5 elif $DEFAULT_LINKER -v < /dev/null 2>&1 | grep GNU > /dev/null; then gnu_ld_flag=yes ! elif $DEFAULT_LINKER -v < /dev/null 2>&1 | grep 'PROJECT:ld\(64\)*-' > /dev/null; then ld64_flag=yes fi *************** $as_echo "#define HOST_HAS_O_CLOEXEC 1" *** 12478,12483 **** --- 12478,12520 ---- fi + # Check if personality and ADDR_NO_RANDOMIZE are declared + # in sys/personality.h + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for personality ADDR_NO_RANDOMIZE" >&5 + $as_echo_n "checking for personality ADDR_NO_RANDOMIZE... " >&6; } + if ${ac_cv_personality_addr_no_randomize+:} false; then : + $as_echo_n "(cached) " >&6 + else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext + /* end confdefs.h. */ + + #include + int + main () + { + + personality (personality (0xffffffffU) | ADDR_NO_RANDOMIZE); + ; + return 0; + } + _ACEOF + if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_personality_addr_no_randomize=yes + else + ac_cv_personality_addr_no_randomize=no + fi + rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_personality_addr_no_randomize" >&5 + $as_echo "$ac_cv_personality_addr_no_randomize" >&6; } + if test $ac_cv_personality_addr_no_randomize = yes; then + + $as_echo "#define HOST_HAS_PERSONALITY_ADDR_NO_RANDOMIZE 1" >>confdefs.h + + fi + + # C++ Modules would like some networking features to provide the mapping # server. You can still use modules without them though. # The following network-related checks could probably do with some *************** else *** 19691,19697 **** lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF ! #line 19694 "configure" #include "confdefs.h" #if HAVE_DLFCN_H --- 19728,19734 ---- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF ! #line 19731 "configure" #include "confdefs.h" #if HAVE_DLFCN_H *************** else *** 19797,19803 **** lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF ! #line 19800 "configure" #include "confdefs.h" #if HAVE_DLFCN_H --- 19834,19840 ---- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF ! #line 19837 "configure" #include "confdefs.h" #if HAVE_DLFCN_H *************** if test x"$ld64_flag" = x"yes"; then *** 30851,30856 **** --- 30888,30894 ---- # Set defaults for possibly untestable items. gcc_cv_ld64_export_dynamic=0 gcc_cv_ld64_platform_version=0 + gcc_cv_ld64_macos_version_min=0 if test "$build" = "$host"; then darwin_try_test=1 *************** $as_echo "$gcc_cv_ld64_major" >&6; } *** 30879,30892 **** fi if test "$gcc_cv_ld64_major" -ge 512; then gcc_cv_ld64_platform_version=1 fi elif test -x "$gcc_cv_ld" -a "$darwin_try_test" -eq 1; then # If the version was not specified, try to find it. { $as_echo "$as_me:${as_lineno-$LINENO}: checking linker version" >&5 $as_echo_n "checking linker version... " >&6; } if test x"${gcc_cv_ld64_version}" = x; then ! gcc_cv_ld64_version=`$gcc_cv_ld -v 2>&1 | $EGREP 'ld64|dyld' \ ! | sed -e 's/.*ld64-//' -e 's/.*dyld-//'| awk '{print $1}'` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_ld64_version" >&5 $as_echo "$gcc_cv_ld64_version" >&6; } --- 30917,30932 ---- fi if test "$gcc_cv_ld64_major" -ge 512; then gcc_cv_ld64_platform_version=1 + gcc_cv_ld64_macos_version_min=1 fi elif test -x "$gcc_cv_ld" -a "$darwin_try_test" -eq 1; then # If the version was not specified, try to find it. { $as_echo "$as_me:${as_lineno-$LINENO}: checking linker version" >&5 $as_echo_n "checking linker version... " >&6; } if test x"${gcc_cv_ld64_version}" = x; then ! gcc_cv_ld64_version=`$gcc_cv_ld -v 2>&1 | $EGREP 'ld64|dyld|PROJECT:ld' \ ! | sed -e 's/.*ld64-//' -e 's/.*dyld-//' -e 's/.*PROJECT:ld-//' \ ! | awk '{print $1}'` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_ld64_version" >&5 $as_echo "$gcc_cv_ld64_version" >&6; } *************** $as_echo_n "checking linker for -platfor *** 30908,30913 **** --- 30948,30962 ---- fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_ld64_platform_version" >&5 $as_echo "$gcc_cv_ld64_platform_version" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking linker for -macos_version_min" >&5 + $as_echo_n "checking linker for -macos_version_min... " >&6; } + gcc_cv_ld64_macos_version_min=1 + if $gcc_cv_ld -macos_version_min 10.5 < /dev/null 2>&1 | grep 'unknown option' > /dev/null; then + gcc_cv_ld64_macos_version_min=0 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_ld64_macos_version_min" >&5 + $as_echo "$gcc_cv_ld64_macos_version_min" >&6; } fi if test x"${gcc_cv_ld64_version}" != x; then *************** cat >>confdefs.h <<_ACEOF *** 30929,30934 **** --- 30978,30989 ---- #define LD64_HAS_PLATFORM_VERSION $gcc_cv_ld64_platform_version _ACEOF + + + cat >>confdefs.h <<_ACEOF + #define LD64_HAS_MACOS_VERSION_MIN $gcc_cv_ld64_macos_version_min + _ACEOF + fi if test x"$dsymutil_flag" = x"yes"; then diff -Nrcpad gcc-12.4.0/gcc/configure.ac gcc-12.5.0-RC-20250704/gcc/configure.ac *** gcc-12.4.0/gcc/configure.ac Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/configure.ac Fri Jul 4 07:24:42 2025 *************** if test x"${DEFAULT_LINKER+set}" = x"set *** 357,363 **** AC_MSG_ERROR([cannot execute: $DEFAULT_LINKER: check --with-ld or env. var. DEFAULT_LINKER]) elif $DEFAULT_LINKER -v < /dev/null 2>&1 | grep GNU > /dev/null; then gnu_ld_flag=yes ! elif $DEFAULT_LINKER -v < /dev/null 2>&1 | grep ld64- > /dev/null; then ld64_flag=yes fi AC_DEFINE_UNQUOTED(DEFAULT_LINKER,"$DEFAULT_LINKER", --- 357,363 ---- AC_MSG_ERROR([cannot execute: $DEFAULT_LINKER: check --with-ld or env. var. DEFAULT_LINKER]) elif $DEFAULT_LINKER -v < /dev/null 2>&1 | grep GNU > /dev/null; then gnu_ld_flag=yes ! elif $DEFAULT_LINKER -v < /dev/null 2>&1 | grep 'PROJECT:ld\(64\)*-' > /dev/null; then ld64_flag=yes fi AC_DEFINE_UNQUOTED(DEFAULT_LINKER,"$DEFAULT_LINKER", *************** if test $ac_cv_o_cloexec = yes; then *** 1729,1734 **** --- 1729,1750 ---- [Define if O_CLOEXEC supported by fcntl.]) fi + # Check if personality and ADDR_NO_RANDOMIZE are declared + # in sys/personality.h + AC_CACHE_CHECK(for personality ADDR_NO_RANDOMIZE, + ac_cv_personality_addr_no_randomize, [ + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + #include ]], [[ + personality (personality (0xffffffffU) | ADDR_NO_RANDOMIZE);]])], + [ac_cv_personality_addr_no_randomize=yes], + [ac_cv_personality_addr_no_randomize=no])]) + if test $ac_cv_personality_addr_no_randomize = yes; then + AC_DEFINE(HOST_HAS_PERSONALITY_ADDR_NO_RANDOMIZE, 1, + [Define if personality and ADDR_NO_RANDOMIZE are declared in + sys/personality.h.]) + fi + + # C++ Modules would like some networking features to provide the mapping # server. You can still use modules without them though. # The following network-related checks could probably do with some *************** if test x"$ld64_flag" = x"yes"; then *** 6383,6388 **** --- 6399,6405 ---- # Set defaults for possibly untestable items. gcc_cv_ld64_export_dynamic=0 gcc_cv_ld64_platform_version=0 + gcc_cv_ld64_macos_version_min=0 if test "$build" = "$host"; then darwin_try_test=1 *************** if test x"$ld64_flag" = x"yes"; then *** 6409,6421 **** fi if test "$gcc_cv_ld64_major" -ge 512; then gcc_cv_ld64_platform_version=1 fi elif test -x "$gcc_cv_ld" -a "$darwin_try_test" -eq 1; then # If the version was not specified, try to find it. AC_MSG_CHECKING(linker version) if test x"${gcc_cv_ld64_version}" = x; then ! gcc_cv_ld64_version=`$gcc_cv_ld -v 2>&1 | $EGREP 'ld64|dyld' \ ! | sed -e 's/.*ld64-//' -e 's/.*dyld-//'| awk '{print $1}'` fi AC_MSG_RESULT($gcc_cv_ld64_version) --- 6426,6440 ---- fi if test "$gcc_cv_ld64_major" -ge 512; then gcc_cv_ld64_platform_version=1 + gcc_cv_ld64_macos_version_min=1 fi elif test -x "$gcc_cv_ld" -a "$darwin_try_test" -eq 1; then # If the version was not specified, try to find it. AC_MSG_CHECKING(linker version) if test x"${gcc_cv_ld64_version}" = x; then ! gcc_cv_ld64_version=`$gcc_cv_ld -v 2>&1 | $EGREP 'ld64|dyld|PROJECT:ld' \ ! | sed -e 's/.*ld64-//' -e 's/.*dyld-//' -e 's/.*PROJECT:ld-//' \ ! | awk '{print $1}'` fi AC_MSG_RESULT($gcc_cv_ld64_version) *************** if test x"$ld64_flag" = x"yes"; then *** 6432,6437 **** --- 6451,6463 ---- gcc_cv_ld64_platform_version=0 fi AC_MSG_RESULT($gcc_cv_ld64_platform_version) + + AC_MSG_CHECKING(linker for -macos_version_min) + gcc_cv_ld64_macos_version_min=1 + if $gcc_cv_ld -macos_version_min 10.5 < /dev/null 2>&1 | grep 'unknown option' > /dev/null; then + gcc_cv_ld64_macos_version_min=0 + fi + AC_MSG_RESULT($gcc_cv_ld64_macos_version_min) fi if test x"${gcc_cv_ld64_version}" != x; then *************** if test x"$ld64_flag" = x"yes"; then *** 6444,6449 **** --- 6470,6478 ---- AC_DEFINE_UNQUOTED(LD64_HAS_PLATFORM_VERSION, $gcc_cv_ld64_platform_version, [Define to 1 if ld64 supports '-platform_version'.]) + + AC_DEFINE_UNQUOTED(LD64_HAS_MACOS_VERSION_MIN, $gcc_cv_ld64_macos_version_min, + [Define to 1 if ld64 supports '-macos_version_min'.]) fi if test x"$dsymutil_flag" = x"yes"; then diff -Nrcpad gcc-12.4.0/gcc/cp/ChangeLog gcc-12.5.0-RC-20250704/gcc/cp/ChangeLog *** gcc-12.4.0/gcc/cp/ChangeLog Thu Jun 20 08:09:01 2024 --- gcc-12.5.0-RC-20250704/gcc/cp/ChangeLog Fri Jul 4 07:24:42 2025 *************** *** 1,3 **** --- 1,270 ---- + 2025-07-03 Jakub Jelinek + + Backported from master: + 2025-07-03 Jakub Jelinek + + PR c++/120940 + * typeck.cc (cp_build_array_ref): Fix a pasto. + + 2025-07-03 Jakub Jelinek + + Backported from master: + 2025-07-01 Jakub Jelinek + + PR c++/120471 + * typeck.cc (cp_build_array_ref) : If idx is not + INTEGER_CST, don't optimize the case (but cp_default_conversion on + array early if it has ARRAY_TYPE) or use + SAVE_EXPR , SAVE_EXPR , SAVE_EXPR as new op0 depending + on flag_strong_eval_order and whether op1 and op2 are arrays with + invariant address or tree invariant pointers. Formatting fixes. + + 2025-06-24 Richard Biener + + Backported from master: + 2025-02-03 Richard Biener + + PR c++/79786 + * rtti.cc (emit_tinfo_decl): Fix DATA_ABI_ALIGNMENT invocation. + + 2025-06-18 Patrick Palka + + Backported from master: + 2025-01-09 Patrick Palka + + PR c++/117792 + * pt.cc (type_dependent_expression_p): Consider the dependence + of the address of each template argument of a function + template-id. + + 2025-06-18 Patrick Palka + + Backported from master: + 2024-08-15 Patrick Palka + + PR c++/116320 + * semantics.cc (check_accessibility_of_qualified_id): Try + currently_open_class when using the object type as the + effective qualifying type. + + 2025-06-18 Patrick Palka + + Backported from master: + 2024-04-11 Patrick Palka + + PR c++/114303 + * constraint.cc (tsubst_requires_expr): Clear + REQUIRES_EXPR_EXTRA_ARGS before calling build_extra_args. + * pt.cc (tree_extra_args): Define. + (extract_locals_r): Assert *_EXTRA_ARGS is empty. + (tsubst_stmt) : Clear IF_SCOPE on the new + IF_STMT. Call build_extra_args on the new IF_STMT instead + of t which might already have IF_STMT_EXTRA_ARGS. + + 2025-06-17 Patrick Palka + + Backported from master: + 2024-09-12 Patrick Palka + + PR c++/116418 + * tree.cc (strip_typedefs_expr) : Replace + this error path with ... + : ... this, returning the original tree. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2024-02-28 Jakub Jelinek + Patrick Palka + + PR c++/113976 + * decl.cc (grokdeclarator): Don't call cp_apply_type_quals_to_decl + on DECL_TEMPLATE_INSTANTIATED VAR_DECLs. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2024-09-12 Jakub Jelinek + + PR c++/116636 + * method.cc: Include decl.h. + (use_thunk): Temporarily change deprecated_state to + UNAVAILABLE_DEPRECATED_SUPPRESS. + + 2025-06-13 Marek Polacek + + Backported from master: + 2024-09-05 Marek Polacek + + PR c++/116606 + * decl2.cc (mark_vtable_entries): Temporarily override deprecated_state to + UNAVAILABLE_DEPRECATED_SUPPRESS. Remove a warning_sentinel. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2025-03-06 Jakub Jelinek + + PR c++/98533 + PR c++/119123 + * parser.cc (cp_parser_class_specifier): Update TYPE_FIELDS of + variant types in case cp_parser_late_parsing_default_args etc. change + TYPE_FIELDS on the main variant. Add switch_to_class lambda and + use it to simplify repeated class switching code. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2025-02-07 Jakub Jelinek + + PR c++/118763 + * init.cc (build_new_1): Don't set CLEANUP_EH_ONLY. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2025-02-07 Jakub Jelinek + + PR c++/118661 + * constexpr.cc (potential_constant_expression_1): Don't diagnose + lvalue-to-rvalue conversion of volatile lvalue if it has NULLPTR_TYPE. + * decl2.cc (decl_maybe_constant_var_p): Return true for constexpr + decls with NULLPTR_TYPE even if they are volatile. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2025-01-25 Jakub Jelinek + + PR c++/117827 + * init.cc (build_new_1): Pass address of a make_tree_vector () + initialized gc tree vector to build_vec_init and append + build_disable_temp_cleanup to init_expr from it. + + 2025-06-13 Jakub Jelinek + + PR c++/118509 + * typeck.cc (get_member_function_from_ptrfunc): Wrap force_target_expr + with save_expr. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2025-01-08 Jakub Jelinek + + PR c++/117825 + * typeck.cc (cp_build_function_call_vec): Don't call + check_function_arguments if complain doesn't have tf_warning bit set. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2024-12-17 Jakub Jelinek + + PR c++/116108 + * decl.cc (grokdeclarator): Pass TYYPE_MAIN_VARIANT (type) + rather than type to same_type_p when checking if the non-static + data member doesn't have current class type. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2024-11-08 Jakub Jelinek + + PR c++/117317 + * semantics.cc (emit_associated_thunks): Do nothing for + !DECL_INTERFACE_KNOWN && DECL_DEFER_OUTPUT fns. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2024-10-24 Jakub Jelinek + + PR c++/117259 + * typeck.cc (get_member_function_from_ptrfunc): Use force_target_expr + rather than save_expr for instance_ptr and function. Don't call it + for TREE_CONSTANT. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2024-09-13 Jakub Jelinek + + PR c++/116678 + * optimize.cc: Include decl.h. + (maybe_thunk_body): Temporarily change deprecated_state to + UNAVAILABLE_DEPRECATED_SUPPRESS. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2024-09-10 Jakub Jelinek + + PR c++/116449 + * typeck.cc (get_member_function_from_ptrfunc): Use save_expr + on instance_ptr and function even if it doesn't have side-effects, + as long as it isn't a decl. + + 2025-06-02 Jason Merrill + + PR c++/120123 + * lambda.cc (nonlambda_method_basetype): Look through lambdas + even when current_class_ref is null. + + 2025-04-23 Jason Merrill + + Backported from master: + 2025-04-16 Jason Merrill + + PR c++/114772 + PR c++/101180 + * pt.cc (apply_late_template_attributes): Also override + target_option_current_node. + + 2025-01-20 Simon Martin + + Backported from master: + 2025-01-17 Simon Martin + + PR c++/118255 + * name-lookup.cc (pushdecl): Don't call check_template_shadow + for hidden bindings. + + 2025-01-17 Nathaniel Shead + + Backported from master: + 2025-01-17 Nathaniel Shead + + PR c++/118147 + * parser.cc (cp_parser_cache_defarg): Don't error when + CPP_PRAGMA_EOL. + + 2024-12-05 Simon Martin + + Backported from master: + 2024-12-04 Simon Martin + + PR c++/117615 + * constexpr.cc (cxx_eval_constant_expression): Don't reject + INTEGER_CSTs with type POINTER_TYPE to METHOD_TYPE. + + 2024-11-05 Simon Martin + + Backported from master: + 2024-11-05 Simon Martin + + PR c++/117158 + * typeck.cc (cp_build_array_ref): Only wrap array expression + into a SAVE_EXPR at template instantiation time. + + 2024-09-17 Marek Polacek + + Backported from master: + 2024-09-17 Marek Polacek + + PR c++/116676 + * constexpr.cc (maybe_warn_about_constant_value): Check DECL_NAME. + 2024-06-20 Release Manager * GCC 12.4.0 released. diff -Nrcpad gcc-12.4.0/gcc/cp/constexpr.cc gcc-12.5.0-RC-20250704/gcc/cp/constexpr.cc *** gcc-12.4.0/gcc/cp/constexpr.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/cp/constexpr.cc Fri Jul 4 07:24:42 2025 *************** maybe_warn_about_constant_value (locatio *** 6434,6439 **** --- 6434,6440 ---- && warn_interference_size && !OPTION_SET_P (param_destruct_interfere_size) && DECL_CONTEXT (decl) == std_node + && DECL_NAME (decl) && id_equal (DECL_NAME (decl), "hardware_destructive_interference_size") && (LOCATION_FILE (input_location) != main_input_filename || module_exporting_p ()) *************** cxx_eval_constant_expression (const cons *** 7352,7357 **** --- 7353,7364 ---- return t; } } + else if (TYPE_PTR_P (type) + && TREE_CODE (TREE_TYPE (type)) == METHOD_TYPE) + /* INTEGER_CST with pointer-to-method type is only used + for a virtual method in a pointer to member function. + Don't reject those. */ + ; else { /* This detects for example: *************** potential_constant_expression_1 (tree t, *** 8596,8602 **** available, so we don't bother with switch tracking. */ return true; ! if (TREE_THIS_VOLATILE (t) && want_rval) { if (flags & tf_error) error_at (loc, "lvalue-to-rvalue conversion of a volatile lvalue " --- 8603,8610 ---- available, so we don't bother with switch tracking. */ return true; ! if (TREE_THIS_VOLATILE (t) && want_rval ! && !NULLPTR_TYPE_P (TREE_TYPE (t))) { if (flags & tf_error) error_at (loc, "lvalue-to-rvalue conversion of a volatile lvalue " diff -Nrcpad gcc-12.4.0/gcc/cp/constraint.cc gcc-12.5.0-RC-20250704/gcc/cp/constraint.cc *** gcc-12.4.0/gcc/cp/constraint.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/cp/constraint.cc Fri Jul 4 07:24:42 2025 *************** tsubst_requires_expr (tree t, tree args, *** 2268,2273 **** --- 2268,2274 ---- checked out of order, so instead just remember the template arguments and wait until we can substitute them all at once. */ t = copy_node (t); + REQUIRES_EXPR_EXTRA_ARGS (t) = NULL_TREE; REQUIRES_EXPR_EXTRA_ARGS (t) = build_extra_args (t, args, info.complain); return t; } diff -Nrcpad gcc-12.4.0/gcc/cp/decl.cc gcc-12.5.0-RC-20250704/gcc/cp/decl.cc *** gcc-12.4.0/gcc/cp/decl.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/cp/decl.cc Fri Jul 4 07:24:42 2025 *************** grokdeclarator (const cp_declarator *dec *** 14130,14136 **** } else if (!staticp && ((current_class_type ! && same_type_p (type, current_class_type)) || (!dependent_type_p (type) && !COMPLETE_TYPE_P (complete_type (type)) && (!complete_or_array_type_p (type) --- 14130,14137 ---- } else if (!staticp && ((current_class_type ! && same_type_p (TYPE_MAIN_VARIANT (type), ! current_class_type)) || (!dependent_type_p (type) && !COMPLETE_TYPE_P (complete_type (type)) && (!complete_or_array_type_p (type) *************** grokdeclarator (const cp_declarator *dec *** 14604,14610 **** /* Record constancy and volatility on the DECL itself . There's no need to do this when processing a template; we'll do this for the instantiated declaration based on the type of DECL. */ ! if (!processing_template_decl) cp_apply_type_quals_to_decl (type_quals, decl); return decl; --- 14605,14616 ---- /* Record constancy and volatility on the DECL itself . There's no need to do this when processing a template; we'll do this for the instantiated declaration based on the type of DECL. */ ! if (!processing_template_decl ! /* Don't do it for instantiated variable templates either, ! cp_apply_type_quals_to_decl should have been called on it ! already and might have been overridden in cp_finish_decl ! if initializer needs runtime initialization. */ ! && (!VAR_P (decl) || !DECL_TEMPLATE_INSTANTIATED (decl))) cp_apply_type_quals_to_decl (type_quals, decl); return decl; diff -Nrcpad gcc-12.4.0/gcc/cp/decl2.cc gcc-12.5.0-RC-20250704/gcc/cp/decl2.cc *** gcc-12.4.0/gcc/cp/decl2.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/cp/decl2.cc Fri Jul 4 07:24:42 2025 *************** static void *** 2058,2064 **** mark_vtable_entries (tree decl, vec &consteval_vtables) { /* It's OK for the vtable to refer to deprecated virtual functions. */ ! warning_sentinel w(warn_deprecated_decl); bool consteval_seen = false; --- 2058,2065 ---- mark_vtable_entries (tree decl, vec &consteval_vtables) { /* It's OK for the vtable to refer to deprecated virtual functions. */ ! auto du = make_temp_override (deprecated_state, ! UNAVAILABLE_DEPRECATED_SUPPRESS); bool consteval_seen = false; *************** decl_maybe_constant_var_p (tree decl) *** 4677,4683 **** tree type = TREE_TYPE (decl); if (!VAR_P (decl)) return false; ! if (DECL_DECLARED_CONSTEXPR_P (decl) && !TREE_THIS_VOLATILE (decl)) return true; if (DECL_HAS_VALUE_EXPR_P (decl)) /* A proxy isn't constant. */ --- 4678,4685 ---- tree type = TREE_TYPE (decl); if (!VAR_P (decl)) return false; ! if (DECL_DECLARED_CONSTEXPR_P (decl) ! && (!TREE_THIS_VOLATILE (decl) || NULLPTR_TYPE_P (type))) return true; if (DECL_HAS_VALUE_EXPR_P (decl)) /* A proxy isn't constant. */ diff -Nrcpad gcc-12.4.0/gcc/cp/init.cc gcc-12.5.0-RC-20250704/gcc/cp/init.cc *** gcc-12.4.0/gcc/cp/init.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/cp/init.cc Fri Jul 4 07:24:42 2025 *************** build_new_1 (vec **placemen *** 3664,3669 **** --- 3664,3674 ---- error ("parenthesized initializer in array new"); return error_mark_node; } + + /* Collect flags for disabling subobject cleanups once the complete + object is fully constructed. */ + vec *flags = make_tree_vector (); + init_expr = build_vec_init (data_addr, cp_build_binary_op (input_location, *************** build_new_1 (vec **placemen *** 3673,3679 **** vecinit, explicit_value_init_p, /*from_array=*/0, ! complain); } else { --- 3678,3705 ---- vecinit, explicit_value_init_p, /*from_array=*/0, ! complain, ! &flags); ! ! for (tree f : flags) ! { ! /* See maybe_push_temp_cleanup. */ ! tree d = f; ! tree i = boolean_false_node; ! if (TREE_CODE (f) == TREE_LIST) ! { ! /* To disable a build_vec_init cleanup, set ! iterator = maxindex. */ ! d = TREE_PURPOSE (f); ! i = TREE_VALUE (f); ! ggc_free (f); ! } ! tree cl = build2 (MODIFY_EXPR, TREE_TYPE (d), d, i); ! cl = convert_to_void (cl, ICV_STATEMENT, complain); ! init_expr = build2 (COMPOUND_EXPR, void_type_node, ! init_expr, cl); ! } ! release_tree_vector (flags); } else { *************** build_new_1 (vec **placemen *** 3782,3788 **** tree end, sentry, begin; begin = get_target_expr (boolean_true_node); - CLEANUP_EH_ONLY (begin) = 1; sentry = TARGET_EXPR_SLOT (begin); --- 3808,3813 ---- diff -Nrcpad gcc-12.4.0/gcc/cp/lambda.cc gcc-12.5.0-RC-20250704/gcc/cp/lambda.cc *** gcc-12.4.0/gcc/cp/lambda.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/cp/lambda.cc Fri Jul 4 07:24:42 2025 *************** current_nonlambda_function (void) *** 975,986 **** tree nonlambda_method_basetype (void) { - if (!current_class_ref) - return NULL_TREE; - tree type = current_class_type; if (!type || !LAMBDA_TYPE_P (type)) ! return type; while (true) { --- 975,983 ---- tree nonlambda_method_basetype (void) { tree type = current_class_type; if (!type || !LAMBDA_TYPE_P (type)) ! return current_class_ref ? type : NULL_TREE; while (true) { diff -Nrcpad gcc-12.4.0/gcc/cp/method.cc gcc-12.5.0-RC-20250704/gcc/cp/method.cc *** gcc-12.4.0/gcc/cp/method.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/cp/method.cc Fri Jul 4 07:24:42 2025 *************** along with GCC; see the file COPYING3. *** 26,31 **** --- 26,32 ---- #include "coretypes.h" #include "target.h" #include "cp-tree.h" + #include "decl.h" #include "stringpool.h" #include "cgraph.h" #include "varasm.h" *************** use_thunk (tree thunk_fndecl, bool emit_ *** 283,288 **** --- 284,294 ---- /* Thunks are always addressable; they only appear in vtables. */ TREE_ADDRESSABLE (thunk_fndecl) = 1; + /* Don't diagnose deprecated or unavailable functions just because they + have thunks emitted for them. */ + auto du = make_temp_override (deprecated_state, + UNAVAILABLE_DEPRECATED_SUPPRESS); + /* Figure out what function is being thunked to. It's referenced in this translation unit. */ TREE_ADDRESSABLE (function) = 1; diff -Nrcpad gcc-12.4.0/gcc/cp/name-lookup.cc gcc-12.5.0-RC-20250704/gcc/cp/name-lookup.cc *** gcc-12.4.0/gcc/cp/name-lookup.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/cp/name-lookup.cc Fri Jul 4 07:24:42 2025 *************** pushdecl (tree decl, bool hiding) *** 3741,3747 **** if (old && anticipated_builtin_p (old)) old = OVL_CHAIN (old); ! check_template_shadow (decl); if (DECL_DECLARES_FUNCTION_P (decl)) { --- 3741,3750 ---- if (old && anticipated_builtin_p (old)) old = OVL_CHAIN (old); ! if (hiding) ! ; /* Hidden bindings don't shadow anything. */ ! else ! check_template_shadow (decl); if (DECL_DECLARES_FUNCTION_P (decl)) { diff -Nrcpad gcc-12.4.0/gcc/cp/optimize.cc gcc-12.5.0-RC-20250704/gcc/cp/optimize.cc *** gcc-12.4.0/gcc/cp/optimize.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/cp/optimize.cc Fri Jul 4 07:24:42 2025 *************** along with GCC; see the file COPYING3. *** 23,28 **** --- 23,29 ---- #include "coretypes.h" #include "target.h" #include "cp-tree.h" + #include "decl.h" #include "stringpool.h" #include "cgraph.h" #include "debug.h" *************** maybe_thunk_body (tree fn, bool force) *** 295,300 **** --- 296,306 ---- if (ctor_omit_inherited_parms (fns[0])) return 0; + /* Don't diagnose deprecated or unavailable cdtors just because they + have thunks emitted for them. */ + auto du = make_temp_override (deprecated_state, + UNAVAILABLE_DEPRECATED_SUPPRESS); + DECL_ABSTRACT_P (fn) = false; if (!DECL_WEAK (fn)) { diff -Nrcpad gcc-12.4.0/gcc/cp/parser.cc gcc-12.5.0-RC-20250704/gcc/cp/parser.cc *** gcc-12.4.0/gcc/cp/parser.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/cp/parser.cc Fri Jul 4 07:24:42 2025 *************** cp_parser_class_specifier_1 (cp_parser* *** 26050,26055 **** --- 26050,26056 ---- { tree decl; tree class_type = NULL_TREE; + tree class_type_fields = NULL_TREE; tree pushed_scope = NULL_TREE; unsigned ix; cp_default_arg_entry *e; *************** cp_parser_class_specifier_1 (cp_parser* *** 26063,26068 **** --- 26064,26096 ---- vec_safe_truncate (unparsed_funs_with_definitions, 0); } + auto switch_to_class = [&] (tree t) + { + if (class_type != t) + { + /* cp_parser_late_parsing_default_args etc. could have changed + TYPE_FIELDS (class_type), propagate that to all variants. */ + if (class_type + && RECORD_OR_UNION_TYPE_P (class_type) + && TYPE_FIELDS (class_type) != class_type_fields) + for (tree variant = TYPE_NEXT_VARIANT (class_type); + variant; variant = TYPE_NEXT_VARIANT (variant)) + TYPE_FIELDS (variant) = TYPE_FIELDS (class_type); + if (pushed_scope) + pop_scope (pushed_scope); + class_type = t; + class_type_fields = NULL_TREE; + if (t) + { + if (RECORD_OR_UNION_TYPE_P (class_type)) + class_type_fields = TYPE_FIELDS (class_type); + pushed_scope = push_scope (class_type); + } + else + pushed_scope = NULL_TREE; + } + }; + /* In a first pass, parse default arguments to the functions. Then, in a second pass, parse the bodies of the functions. This two-phased approach handles cases like: *************** cp_parser_class_specifier_1 (cp_parser* *** 26078,26090 **** decl = e->decl; /* If there are default arguments that have not yet been processed, take care of them now. */ ! if (class_type != e->class_type) ! { ! if (pushed_scope) ! pop_scope (pushed_scope); ! class_type = e->class_type; ! pushed_scope = push_scope (class_type); ! } /* Make sure that any template parameters are in scope. */ maybe_begin_member_template_processing (decl); /* Parse the default argument expressions. */ --- 26106,26112 ---- decl = e->decl; /* If there are default arguments that have not yet been processed, take care of them now. */ ! switch_to_class (e->class_type); /* Make sure that any template parameters are in scope. */ maybe_begin_member_template_processing (decl); /* Parse the default argument expressions. */ *************** cp_parser_class_specifier_1 (cp_parser* *** 26100,26112 **** FOR_EACH_VEC_SAFE_ELT (unparsed_noexcepts, ix, decl) { tree ctx = DECL_CONTEXT (decl); ! if (class_type != ctx) ! { ! if (pushed_scope) ! pop_scope (pushed_scope); ! class_type = ctx; ! pushed_scope = push_scope (class_type); ! } tree def_parse = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)); def_parse = TREE_PURPOSE (def_parse); --- 26122,26128 ---- FOR_EACH_VEC_SAFE_ELT (unparsed_noexcepts, ix, decl) { tree ctx = DECL_CONTEXT (decl); ! switch_to_class (ctx); tree def_parse = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)); def_parse = TREE_PURPOSE (def_parse); *************** cp_parser_class_specifier_1 (cp_parser* *** 26161,26181 **** /* Now parse any NSDMIs. */ FOR_EACH_VEC_SAFE_ELT (unparsed_nsdmis, ix, decl) { ! if (class_type != DECL_CONTEXT (decl)) ! { ! if (pushed_scope) ! pop_scope (pushed_scope); ! class_type = DECL_CONTEXT (decl); ! pushed_scope = push_scope (class_type); ! } inject_this_parameter (class_type, TYPE_UNQUALIFIED); cp_parser_late_parsing_nsdmi (parser, decl); } vec_safe_truncate (unparsed_nsdmis, 0); current_class_ptr = NULL_TREE; current_class_ref = NULL_TREE; ! if (pushed_scope) ! pop_scope (pushed_scope); /* Now parse the body of the functions. */ if (flag_openmp) --- 26177,26190 ---- /* Now parse any NSDMIs. */ FOR_EACH_VEC_SAFE_ELT (unparsed_nsdmis, ix, decl) { ! switch_to_class (DECL_CONTEXT (decl)); inject_this_parameter (class_type, TYPE_UNQUALIFIED); cp_parser_late_parsing_nsdmi (parser, decl); } vec_safe_truncate (unparsed_nsdmis, 0); current_class_ptr = NULL_TREE; current_class_ref = NULL_TREE; ! switch_to_class (NULL_TREE); /* Now parse the body of the functions. */ if (flag_openmp) *************** cp_parser_cache_defarg (cp_parser *parse *** 34110,34116 **** /* If we run out of tokens, issue an error message. */ case CPP_EOF: - case CPP_PRAGMA_EOL: error_at (token->location, "file ends in default argument"); return error_mark_node; --- 34119,34124 ---- diff -Nrcpad gcc-12.4.0/gcc/cp/pt.cc gcc-12.5.0-RC-20250704/gcc/cp/pt.cc *** gcc-12.4.0/gcc/cp/pt.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/cp/pt.cc Fri Jul 4 07:24:42 2025 *************** has_extra_args_mechanism_p (const_tree t *** 3896,3901 **** --- 3896,3919 ---- && IF_STMT_CONSTEXPR_P (t))); /* IF_STMT_EXTRA_ARGS */ } + /* Return *_EXTRA_ARGS of the given supported tree T. */ + + static tree& + tree_extra_args (tree t) + { + gcc_checking_assert (has_extra_args_mechanism_p (t)); + + if (PACK_EXPANSION_P (t)) + return PACK_EXPANSION_EXTRA_ARGS (t); + else if (TREE_CODE (t) == REQUIRES_EXPR) + return REQUIRES_EXPR_EXTRA_ARGS (t); + else if (TREE_CODE (t) == IF_STMT + && IF_STMT_CONSTEXPR_P (t)) + return IF_STMT_EXTRA_ARGS (t); + + gcc_unreachable (); + } + /* Structure used to track the progress of find_parameter_packs_r. */ struct find_parameter_pack_data { *************** apply_late_template_attributes (tree *de *** 11907,11912 **** --- 11925,11932 ---- auto o3 = make_temp_override (current_target_pragma, NULL_TREE); auto o4 = make_temp_override (scope_chain->omp_declare_target_attribute, NULL); + auto o6 = make_temp_override (target_option_current_node, + target_option_default_node); cplus_decl_attributes (decl_p, late_attrs, attr_flags); *************** extract_locals_r (tree *tp, int *walk_su *** 13049,13054 **** --- 13069,13084 ---- /* Remember local typedefs (85214). */ tp = &TYPE_NAME (*tp); + if (has_extra_args_mechanism_p (*tp)) + /* Assert *_EXTRA_ARGS is empty, because we don't want to walk it and + potentially see a previously captured local in an evaluated context + that's really only used in an unevaluated context (PR114303). This + means callers of build_extra_args need to clear *_EXTRA_ARGS of the + outermost tree. Nested *_EXTRA_ARGS should naturally be empty since + the outermost (extra-args) tree will intercept any substitution before + a nested tree can. */ + gcc_checking_assert (tree_extra_args (*tp) == NULL_TREE); + if (TREE_CODE (*tp) == DECL_EXPR) { tree decl = DECL_EXPR_DECL (*tp); *************** tsubst_expr (tree t, tree args, tsubst_f *** 18909,18918 **** of the constexpr if is still dependent. Don't substitute into the branches now, just remember the template arguments. */ do_poplevel (IF_SCOPE (stmt)); IF_COND (stmt) = IF_COND (t); THEN_CLAUSE (stmt) = THEN_CLAUSE (t); ELSE_CLAUSE (stmt) = ELSE_CLAUSE (t); ! IF_STMT_EXTRA_ARGS (stmt) = build_extra_args (t, args, complain); add_stmt (stmt); break; } --- 18939,18949 ---- of the constexpr if is still dependent. Don't substitute into the branches now, just remember the template arguments. */ do_poplevel (IF_SCOPE (stmt)); + IF_SCOPE (stmt) = NULL_TREE; IF_COND (stmt) = IF_COND (t); THEN_CLAUSE (stmt) = THEN_CLAUSE (t); ELSE_CLAUSE (stmt) = ELSE_CLAUSE (t); ! IF_STMT_EXTRA_ARGS (stmt) = build_extra_args (stmt, args, complain); add_stmt (stmt); break; } *************** type_dependent_expression_p (tree expres *** 28106,28114 **** if (TREE_CODE (expression) == TEMPLATE_ID_EXPR) { ! if (any_dependent_template_arguments_p ! (TREE_OPERAND (expression, 1))) return true; expression = TREE_OPERAND (expression, 0); if (identifier_p (expression)) return true; --- 28137,28151 ---- if (TREE_CODE (expression) == TEMPLATE_ID_EXPR) { ! tree args = TREE_OPERAND (expression, 1); ! if (any_dependent_template_arguments_p (args)) return true; + /* Arguments of a function template-id aren't necessarily coerced + yet so we must conservatively assume that the address (and not + just value) of the argument matters as per [temp.dep.temp]/3. */ + for (int i = 0; i < TREE_VEC_LENGTH (args); i++) + if (has_value_dependent_address (TREE_VEC_ELT (args, i))) + return true; expression = TREE_OPERAND (expression, 0); if (identifier_p (expression)) return true; diff -Nrcpad gcc-12.4.0/gcc/cp/rtti.cc gcc-12.5.0-RC-20250704/gcc/cp/rtti.cc *** gcc-12.4.0/gcc/cp/rtti.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/cp/rtti.cc Fri Jul 4 07:24:42 2025 *************** emit_tinfo_decl (tree decl) *** 1707,1713 **** /* Avoid targets optionally bumping up the alignment to improve vector instruction accesses, tinfo are never accessed this way. */ #ifdef DATA_ABI_ALIGNMENT ! SET_DECL_ALIGN (decl, DATA_ABI_ALIGNMENT (decl, TYPE_ALIGN (TREE_TYPE (decl)))); DECL_USER_ALIGN (decl) = true; #endif return true; --- 1707,1714 ---- /* Avoid targets optionally bumping up the alignment to improve vector instruction accesses, tinfo are never accessed this way. */ #ifdef DATA_ABI_ALIGNMENT ! SET_DECL_ALIGN (decl, DATA_ABI_ALIGNMENT (TREE_TYPE (decl), ! TYPE_ALIGN (TREE_TYPE (decl)))); DECL_USER_ALIGN (decl) = true; #endif return true; diff -Nrcpad gcc-12.4.0/gcc/cp/semantics.cc gcc-12.5.0-RC-20250704/gcc/cp/semantics.cc *** gcc-12.4.0/gcc/cp/semantics.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/cp/semantics.cc Fri Jul 4 07:24:42 2025 *************** check_accessibility_of_qualified_id (tre *** 2286,2294 **** OBJECT_TYPE. */ && CLASS_TYPE_P (object_type) && DERIVED_FROM_P (scope, object_type)) ! /* If we are processing a `->' or `.' expression, use the type of the ! left-hand side. */ ! qualifying_type = object_type; else if (nested_name_specifier) { /* If the reference is to a non-static member of the --- 2286,2299 ---- OBJECT_TYPE. */ && CLASS_TYPE_P (object_type) && DERIVED_FROM_P (scope, object_type)) ! { ! /* If we are processing a `->' or `.' expression, use the type of the ! left-hand side. */ ! if (tree open = currently_open_class (object_type)) ! qualifying_type = open; ! else ! qualifying_type = object_type; ! } else if (nested_name_specifier) { /* If the reference is to a non-static member of the *************** emit_associated_thunks (tree fn) *** 4702,4708 **** enabling you to output all the thunks with the function itself. */ if (DECL_VIRTUAL_P (fn) /* Do not emit thunks for extern template instantiations. */ ! && ! DECL_REALLY_EXTERN (fn)) { tree thunk; --- 4707,4716 ---- enabling you to output all the thunks with the function itself. */ if (DECL_VIRTUAL_P (fn) /* Do not emit thunks for extern template instantiations. */ ! && ! DECL_REALLY_EXTERN (fn) ! /* Do not emit thunks for tentative decls, those will be processed ! again at_eof if really needed. */ ! && (DECL_INTERFACE_KNOWN (fn) || !DECL_DEFER_OUTPUT (fn))) { tree thunk; diff -Nrcpad gcc-12.4.0/gcc/cp/tree.cc gcc-12.5.0-RC-20250704/gcc/cp/tree.cc *** gcc-12.4.0/gcc/cp/tree.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/cp/tree.cc Fri Jul 4 07:24:42 2025 *************** strip_typedefs_expr (tree t, bool *remov *** 2011,2022 **** } case LAMBDA_EXPR: return t; - case STATEMENT_LIST: - error ("statement-expression in a constant expression"); - return error_mark_node; - default: break; } --- 2011,2019 ---- } case LAMBDA_EXPR: + case STMT_EXPR: return t; default: break; } diff -Nrcpad gcc-12.4.0/gcc/cp/typeck.cc gcc-12.5.0-RC-20250704/gcc/cp/typeck.cc *** gcc-12.4.0/gcc/cp/typeck.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/cp/typeck.cc Fri Jul 4 07:24:42 2025 *************** cp_build_array_ref (location_t loc, tree *** 3811,3823 **** } case COND_EXPR: ! ret = build_conditional_expr ! (loc, TREE_OPERAND (array, 0), ! cp_build_array_ref (loc, TREE_OPERAND (array, 1), idx, ! complain), ! cp_build_array_ref (loc, TREE_OPERAND (array, 2), idx, ! complain), ! complain); protected_set_expr_location (ret, loc); return ret; --- 3811,3939 ---- } case COND_EXPR: ! tree op0, op1, op2; ! op0 = TREE_OPERAND (array, 0); ! op1 = TREE_OPERAND (array, 1); ! op2 = TREE_OPERAND (array, 2); ! if (TREE_SIDE_EFFECTS (idx) || !tree_invariant_p (idx)) ! { ! /* If idx could possibly have some SAVE_EXPRs, turning ! (op0 ? op1 : op2)[idx] into ! op0 ? op1[idx] : op2[idx] can lead into temporaries ! initialized in one conditional path and uninitialized ! uses of them in the other path. ! And if idx is a really large expression, evaluating it ! twice is also not optimal. ! On the other side, op0 must be sequenced before evaluation ! of op1 and op2 and for C++17 op0, op1 and op2 must be ! sequenced before idx. ! If idx is INTEGER_CST, we can just do the optimization ! without any SAVE_EXPRs, if op1 and op2 are both ARRAY_TYPE ! VAR_DECLs or COMPONENT_REFs thereof (so their address ! is constant or relative to frame), optimize into ! (SAVE_EXPR , SAVE_EXPR , SAVE_EXPR ) ! ? op1[SAVE_EXPR ] : op2[SAVE_EXPR ] ! Otherwise avoid this optimization. */ ! if (flag_strong_eval_order == 2) ! { ! if (TREE_CODE (TREE_TYPE (array)) == ARRAY_TYPE) ! { ! tree xop1 = op1; ! tree xop2 = op2; ! while (xop1 && handled_component_p (xop1)) ! { ! switch (TREE_CODE (xop1)) ! { ! case ARRAY_REF: ! case ARRAY_RANGE_REF: ! if (!tree_invariant_p (TREE_OPERAND (xop1, 1)) ! || TREE_OPERAND (xop1, 2) != NULL_TREE ! || TREE_OPERAND (xop1, 3) != NULL_TREE) ! { ! xop1 = NULL_TREE; ! continue; ! } ! break; ! ! case COMPONENT_REF: ! if (TREE_OPERAND (xop1, 2) != NULL_TREE) ! { ! xop1 = NULL_TREE; ! continue; ! } ! break; ! ! default: ! break; ! } ! xop1 = TREE_OPERAND (xop1, 0); ! } ! if (xop1) ! STRIP_ANY_LOCATION_WRAPPER (xop1); ! while (xop2 && handled_component_p (xop2)) ! { ! switch (TREE_CODE (xop2)) ! { ! case ARRAY_REF: ! case ARRAY_RANGE_REF: ! if (!tree_invariant_p (TREE_OPERAND (xop2, 1)) ! || TREE_OPERAND (xop2, 2) != NULL_TREE ! || TREE_OPERAND (xop2, 3) != NULL_TREE) ! { ! xop2 = NULL_TREE; ! continue; ! } ! break; ! ! case COMPONENT_REF: ! if (TREE_OPERAND (xop2, 2) != NULL_TREE) ! { ! xop2 = NULL_TREE; ! continue; ! } ! break; ! ! default: ! break; ! } ! xop2 = TREE_OPERAND (xop2, 0); ! } ! if (xop2) ! STRIP_ANY_LOCATION_WRAPPER (xop2); ! ! if (!xop1 ! || !xop2 ! || !(CONSTANT_CLASS_P (xop1) ! || decl_address_invariant_p (xop1)) ! || !(CONSTANT_CLASS_P (xop2) ! || decl_address_invariant_p (xop2))) ! { ! /* Force default conversion on array if ! we can't optimize this and array is ARRAY_TYPE ! COND_EXPR, we can't leave COND_EXPRs with ! ARRAY_TYPE in the IL. */ ! array = cp_default_conversion (array, complain); ! if (error_operand_p (array)) ! return error_mark_node; ! break; ! } ! } ! else if (!POINTER_TYPE_P (TREE_TYPE (array)) ! || !tree_invariant_p (op1) ! || !tree_invariant_p (op2)) ! break; ! } ! if (TREE_SIDE_EFFECTS (idx)) ! { ! idx = save_expr (idx); ! op0 = save_expr (op0); ! tree tem = build_compound_expr (loc, op0, idx); ! op0 = build_compound_expr (loc, tem, op0); ! } ! } ! op1 = cp_build_array_ref (loc, op1, idx, complain); ! op2 = cp_build_array_ref (loc, op2, idx, complain); ! ret = build_conditional_expr (loc, op0, op1, op2, complain); protected_set_expr_location (ret, loc); return ret; *************** cp_build_array_ref (location_t loc, tree *** 3919,3925 **** tree ar = cp_default_conversion (array, complain); tree ind = cp_default_conversion (idx, complain); ! if (!first && flag_strong_eval_order == 2 && TREE_SIDE_EFFECTS (ind)) ar = first = save_expr (ar); /* Put the integer in IND to simplify error checking. */ --- 4035,4042 ---- tree ar = cp_default_conversion (array, complain); tree ind = cp_default_conversion (idx, complain); ! if (!processing_template_decl ! && !first && flag_strong_eval_order == 2 && TREE_SIDE_EFFECTS (ind)) ar = first = save_expr (ar); /* Put the integer in IND to simplify error checking. */ *************** get_member_function_from_ptrfunc (tree * *** 4021,4031 **** if (!nonvirtual && is_dummy_object (instance_ptr)) nonvirtual = true; ! if (TREE_SIDE_EFFECTS (instance_ptr)) ! instance_ptr = instance_save_expr = save_expr (instance_ptr); ! if (TREE_SIDE_EFFECTS (function)) ! function = save_expr (function); /* Start by extracting all the information from the PMF itself. */ e3 = pfn_from_ptrmemfunc (function); --- 4138,4165 ---- if (!nonvirtual && is_dummy_object (instance_ptr)) nonvirtual = true; ! /* Use force_target_expr even when instance_ptr doesn't have ! side-effects, unless it is a simple decl or constant, so ! that we don't ubsan instrument the expression multiple times. ! Don't use save_expr, as save_expr can avoid building a SAVE_EXPR ! and building a SAVE_EXPR manually can be optimized away during ! cp_fold. See PR116449 and PR117259. */ ! if (TREE_SIDE_EFFECTS (instance_ptr) ! || (!nonvirtual ! && !DECL_P (instance_ptr) ! && !TREE_CONSTANT (instance_ptr))) ! instance_ptr = instance_save_expr ! = save_expr (force_target_expr (TREE_TYPE (instance_ptr), ! instance_ptr, complain)); ! /* See above comment. */ ! if (TREE_SIDE_EFFECTS (function) ! || (!nonvirtual ! && !DECL_P (function) ! && !TREE_CONSTANT (function))) ! function ! = save_expr (force_target_expr (TREE_TYPE (function), function, ! complain)); /* Start by extracting all the information from the PMF itself. */ e3 = pfn_from_ptrmemfunc (function); *************** cp_build_function_call_vec (tree functio *** 4298,4305 **** /* Check for errors in format strings and inappropriately null parameters. */ ! bool warned_p = check_function_arguments (input_location, fndecl, fntype, ! nargs, argarray, NULL); ret = build_cxx_call (function, nargs, argarray, complain, orig_fndecl); --- 4432,4441 ---- /* Check for errors in format strings and inappropriately null parameters. */ ! bool warned_p ! = ((complain & tf_warning) ! && check_function_arguments (input_location, fndecl, fntype, ! nargs, argarray, NULL)); ret = build_cxx_call (function, nargs, argarray, complain, orig_fndecl); diff -Nrcpad gcc-12.4.0/gcc/cse.cc gcc-12.5.0-RC-20250704/gcc/cse.cc *** gcc-12.4.0/gcc/cse.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/cse.cc Fri Jul 4 07:24:42 2025 *************** static int next_qty; *** 239,245 **** the constant being compared against, or zero if the comparison is not against a constant. `comparison_qty' holds the quantity being compared against when the result is known. If the comparison ! is not with a register, `comparison_qty' is -1. */ struct qty_table_elem { --- 239,245 ---- the constant being compared against, or zero if the comparison is not against a constant. `comparison_qty' holds the quantity being compared against when the result is known. If the comparison ! is not with a register, `comparison_qty' is INT_MIN. */ struct qty_table_elem { *************** record_jump_cond (enum rtx_code code, ma *** 4068,4074 **** else { ent->comparison_const = op1; ! ent->comparison_qty = -1; } return; --- 4068,4074 ---- else { ent->comparison_const = op1; ! ent->comparison_qty = INT_MIN; } return; diff -Nrcpad gcc-12.4.0/gcc/d/ChangeLog gcc-12.5.0-RC-20250704/gcc/d/ChangeLog *** gcc-12.4.0/gcc/d/ChangeLog Thu Jun 20 08:09:01 2024 --- gcc-12.5.0-RC-20250704/gcc/d/ChangeLog Fri Jul 4 07:24:42 2025 *************** *** 1,3 **** --- 1,71 ---- + 2025-06-13 Arsen Arsenović + + Backported from master: + 2025-01-29 Arsen Arsenović + Jakub Jelinek + + PR d/118477 + * Make-lang.in (DCOMPILE, DPOSTCOMPILE): Use $(basename $(@F)) + instead of $(*F). + + 2025-04-20 Iain Buclaw + + Backported from master: + 2025-04-15 Iain Buclaw + + PR d/119817 + * imports.cc (ImportVisitor::visit (OverloadSet *)): Don't push + NULL_TREE to vector of import symbols. + + 2025-03-11 Iain Buclaw + + Backported from master: + 2025-03-11 Iain Buclaw + + PR d/119139 + * decl.cc (get_symbol_decl): Don't set TREE_READONLY for __result + declarations. + + 2025-03-02 Iain Buclaw + + Backported from master: + 2025-02-28 Iain Buclaw + + PR d/116961 + * d-codegen.cc (build_float_cst): Change new_value type from real_t to + real_value. + * d-ctfloat.cc (CTFloat::fabs): Default initialize the return value. + (CTFloat::ldexp): Likewise. + (CTFloat::parse): Likewise. + * d-longdouble.cc (longdouble::add): Likewise. + (longdouble::sub): Likewise. + (longdouble::mul): Likewise. + (longdouble::div): Likewise. + (longdouble::mod): Likewise. + (longdouble::neg): Likewise. + * d-port.cc (Port::isFloat32LiteralOutOfRange): Likewise. + (Port::isFloat64LiteralOutOfRange): Likewise. + + 2025-01-21 Iain Buclaw + + Backported from master: + 2024-04-19 Iain Buclaw + + PR d/111650 + * decl.cc (get_fndecl_arguments): Move generation of frame type to ... + (DeclVisitor::visit (FuncDeclaration *)): ... here, after the call to + build_closure. + + 2025-01-20 Iain Buclaw + + Backported from master: + 2025-01-20 Iain Buclaw + + PR d/114434 + * expr.cc (ExprVisitor::visit (PtrExp *)): Get the offset as a + dinteger_t rather than a size_t. + (ExprVisitor::visit (SymOffExp *)): Likewise. + 2024-06-20 Release Manager * GCC 12.4.0 released. diff -Nrcpad gcc-12.4.0/gcc/d/Make-lang.in gcc-12.5.0-RC-20250704/gcc/d/Make-lang.in *** gcc-12.4.0/gcc/d/Make-lang.in Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/d/Make-lang.in Fri Jul 4 07:24:42 2025 *************** ALL_DFLAGS = $(DFLAGS-$@) $(GDCFLAGS) -f *** 61,68 **** $(PICFLAG) $(ALIASING_FLAGS) $(COVERAGE_FLAGS) $(WARN_DFLAGS) DCOMPILE.base = $(GDC) $(NO_PIE_CFLAGS) -c $(ALL_DFLAGS) -o $@ ! DCOMPILE = $(DCOMPILE.base) -MT $@ -MMD -MP -MF $(@D)/$(DEPDIR)/$(*F).TPo ! DPOSTCOMPILE = @mv $(@D)/$(DEPDIR)/$(*F).TPo $(@D)/$(DEPDIR)/$(*F).Po DLINKER = $(GDC) $(NO_PIE_FLAG) -lstdc++ # Like LINKER, but use a mutex for serializing front end links. --- 61,68 ---- $(PICFLAG) $(ALIASING_FLAGS) $(COVERAGE_FLAGS) $(WARN_DFLAGS) DCOMPILE.base = $(GDC) $(NO_PIE_CFLAGS) -c $(ALL_DFLAGS) -o $@ ! DCOMPILE = $(DCOMPILE.base) -MT $@ -MMD -MP -MF $(@D)/$(DEPDIR)/$(basename $(@F)).TPo ! DPOSTCOMPILE = @mv $(@D)/$(DEPDIR)/$(basename $(@F)).TPo $(@D)/$(DEPDIR)/$(basename $(@F)).Po DLINKER = $(GDC) $(NO_PIE_FLAG) -lstdc++ # Like LINKER, but use a mutex for serializing front end links. diff -Nrcpad gcc-12.4.0/gcc/d/d-codegen.cc gcc-12.5.0-RC-20250704/gcc/d/d-codegen.cc *** gcc-12.4.0/gcc/d/d-codegen.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/d/d-codegen.cc Fri Jul 4 07:24:42 2025 *************** build_integer_cst (dinteger_t value, tre *** 244,258 **** tree build_float_cst (const real_t &value, Type *totype) { ! real_t new_value; TypeBasic *tb = totype->isTypeBasic (); gcc_assert (tb != NULL); tree type_node = build_ctype (tb); ! real_convert (&new_value.rv (), TYPE_MODE (type_node), &value.rv ()); ! return build_real (type_node, new_value.rv ()); } /* Returns the .length component from the D dynamic array EXP. */ --- 244,258 ---- tree build_float_cst (const real_t &value, Type *totype) { ! real_value new_value; TypeBasic *tb = totype->isTypeBasic (); gcc_assert (tb != NULL); tree type_node = build_ctype (tb); ! real_convert (&new_value, TYPE_MODE (type_node), &value.rv ()); ! return build_real (type_node, new_value); } /* Returns the .length component from the D dynamic array EXP. */ diff -Nrcpad gcc-12.4.0/gcc/d/d-ctfloat.cc gcc-12.5.0-RC-20250704/gcc/d/d-ctfloat.cc *** gcc-12.4.0/gcc/d/d-ctfloat.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/d/d-ctfloat.cc Fri Jul 4 07:24:42 2025 *************** along with GCC; see the file COPYING3. *** 33,39 **** real_t CTFloat::fabs (real_t r) { ! real_t x; real_arithmetic (&x.rv (), ABS_EXPR, &r.rv (), NULL); return x.normalize (); } --- 33,39 ---- real_t CTFloat::fabs (real_t r) { ! real_t x = {}; real_arithmetic (&x.rv (), ABS_EXPR, &r.rv (), NULL); return x.normalize (); } *************** CTFloat::fabs (real_t r) *** 43,49 **** real_t CTFloat::ldexp (real_t r, int exp) { ! real_t x; real_ldexp (&x.rv (), &r.rv (), exp); return x.normalize (); } --- 43,49 ---- real_t CTFloat::ldexp (real_t r, int exp) { ! real_t x = {}; real_ldexp (&x.rv (), &r.rv (), exp); return x.normalize (); } *************** CTFloat::isInfinity (real_t r) *** 87,93 **** real_t CTFloat::parse (const char *buffer, bool *overflow) { ! real_t r; real_from_string3 (&r.rv (), buffer, TYPE_MODE (long_double_type_node)); /* Front-end checks overflow to see if the value is representable. */ --- 87,93 ---- real_t CTFloat::parse (const char *buffer, bool *overflow) { ! real_t r = {}; real_from_string3 (&r.rv (), buffer, TYPE_MODE (long_double_type_node)); /* Front-end checks overflow to see if the value is representable. */ diff -Nrcpad gcc-12.4.0/gcc/d/d-longdouble.cc gcc-12.5.0-RC-20250704/gcc/d/d-longdouble.cc *** gcc-12.4.0/gcc/d/d-longdouble.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/d/d-longdouble.cc Fri Jul 4 07:24:42 2025 *************** longdouble::to_bool (void) const *** 113,119 **** longdouble longdouble::add (const longdouble &r) const { ! longdouble x; real_arithmetic (&x.rv (), PLUS_EXPR, &this->rv (), &r.rv ()); return x.normalize (); } --- 113,119 ---- longdouble longdouble::add (const longdouble &r) const { ! longdouble x = {}; real_arithmetic (&x.rv (), PLUS_EXPR, &this->rv (), &r.rv ()); return x.normalize (); } *************** longdouble::add (const longdouble &r) co *** 121,127 **** longdouble longdouble::sub (const longdouble &r) const { ! longdouble x; real_arithmetic (&x.rv (), MINUS_EXPR, &this->rv (), &r.rv ()); return x.normalize (); } --- 121,127 ---- longdouble longdouble::sub (const longdouble &r) const { ! longdouble x = {}; real_arithmetic (&x.rv (), MINUS_EXPR, &this->rv (), &r.rv ()); return x.normalize (); } *************** longdouble::sub (const longdouble &r) co *** 129,135 **** longdouble longdouble::mul (const longdouble &r) const { ! longdouble x; real_arithmetic (&x.rv (), MULT_EXPR, &this->rv (), &r.rv ()); return x.normalize (); } --- 129,135 ---- longdouble longdouble::mul (const longdouble &r) const { ! longdouble x = {}; real_arithmetic (&x.rv (), MULT_EXPR, &this->rv (), &r.rv ()); return x.normalize (); } *************** longdouble::mul (const longdouble &r) co *** 137,143 **** longdouble longdouble::div (const longdouble &r) const { ! longdouble x; real_arithmetic (&x.rv (), RDIV_EXPR, &this->rv (), &r.rv ()); return x.normalize (); } --- 137,143 ---- longdouble longdouble::div (const longdouble &r) const { ! longdouble x = {}; real_arithmetic (&x.rv (), RDIV_EXPR, &this->rv (), &r.rv ()); return x.normalize (); } *************** longdouble::div (const longdouble &r) co *** 145,151 **** longdouble longdouble::mod (const longdouble &r) const { ! longdouble x; real_value q; if (r.rv ().cl == rvc_zero || REAL_VALUE_ISINF (this->rv ())) --- 145,151 ---- longdouble longdouble::mod (const longdouble &r) const { ! longdouble x = {}; real_value q; if (r.rv ().cl == rvc_zero || REAL_VALUE_ISINF (this->rv ())) *************** longdouble::mod (const longdouble &r) co *** 172,178 **** longdouble longdouble::neg (void) const { ! longdouble x; real_arithmetic (&x.rv (), NEGATE_EXPR, &this->rv (), NULL); return x.normalize (); } --- 172,178 ---- longdouble longdouble::neg (void) const { ! longdouble x = {}; real_arithmetic (&x.rv (), NEGATE_EXPR, &this->rv (), NULL); return x.normalize (); } diff -Nrcpad gcc-12.4.0/gcc/d/d-port.cc gcc-12.5.0-RC-20250704/gcc/d/d-port.cc *** gcc-12.4.0/gcc/d/d-port.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/d/d-port.cc Fri Jul 4 07:24:42 2025 *************** Port::strupr (char *s) *** 74,80 **** bool Port::isFloat32LiteralOutOfRange (const char *buffer) { ! real_t r; real_from_string3 (&r.rv (), buffer, TYPE_MODE (float_type_node)); --- 74,80 ---- bool Port::isFloat32LiteralOutOfRange (const char *buffer) { ! real_t r = {}; real_from_string3 (&r.rv (), buffer, TYPE_MODE (float_type_node)); *************** Port::isFloat32LiteralOutOfRange (const *** 87,93 **** bool Port::isFloat64LiteralOutOfRange (const char *buffer) { ! real_t r; real_from_string3 (&r.rv (), buffer, TYPE_MODE (double_type_node)); --- 87,93 ---- bool Port::isFloat64LiteralOutOfRange (const char *buffer) { ! real_t r = {}; real_from_string3 (&r.rv (), buffer, TYPE_MODE (double_type_node)); diff -Nrcpad gcc-12.4.0/gcc/d/decl.cc gcc-12.5.0-RC-20250704/gcc/d/decl.cc *** gcc-12.4.0/gcc/d/decl.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/d/decl.cc Fri Jul 4 07:24:42 2025 *************** get_fndecl_arguments (FuncDeclaration *d *** 162,177 **** tree parm_decl = get_symbol_decl (decl->vthis); DECL_ARTIFICIAL (parm_decl) = 1; TREE_READONLY (parm_decl) = 1; - - if (decl->vthis->type == Type::tvoidptr) - { - /* Replace generic pointer with back-end closure type - (this wins for gdb). */ - tree frame_type = FRAMEINFO_TYPE (get_frameinfo (decl)); - gcc_assert (frame_type != NULL_TREE); - TREE_TYPE (parm_decl) = build_pointer_type (frame_type); - } - param_list = chainon (param_list, parm_decl); } --- 162,167 ---- *************** public: *** 1047,1052 **** --- 1037,1052 ---- /* May change cfun->static_chain. */ build_closure (d); + /* Replace generic pointer with back-end closure type + (this wins for gdb). */ + if (d->vthis && d->vthis->type == Type::tvoidptr) + { + tree frame_type = FRAMEINFO_TYPE (get_frameinfo (d)); + gcc_assert (frame_type != NULL_TREE); + tree parm_decl = get_symbol_decl (d->vthis); + TREE_TYPE (parm_decl) = build_pointer_type (frame_type); + } + if (d->vresult) declare_local_var (d->vresult); *************** get_symbol_decl (Declaration *decl) *** 1300,1306 **** /* `const` applies to data that cannot be changed by the const reference to that data. It may, however, be changed by another reference to that same data. */ ! if (vd->isConst () && !vd->isDataseg ()) TREE_READONLY (decl->csym) = 1; } --- 1300,1306 ---- /* `const` applies to data that cannot be changed by the const reference to that data. It may, however, be changed by another reference to that same data. */ ! if (vd->isConst () && !vd->isResult () && !vd->isDataseg ()) TREE_READONLY (decl->csym) = 1; } diff -Nrcpad gcc-12.4.0/gcc/d/expr.cc gcc-12.5.0-RC-20250704/gcc/d/expr.cc *** gcc-12.4.0/gcc/d/expr.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/d/expr.cc Fri Jul 4 07:24:42 2025 *************** public: *** 1537,1543 **** void visit (PtrExp *e) { Type *tnext = NULL; ! size_t offset; tree result; if (e->e1->op == EXP::add) --- 1537,1543 ---- void visit (PtrExp *e) { Type *tnext = NULL; ! dinteger_t offset; tree result; if (e->e1->op == EXP::add) *************** public: *** 2115,2121 **** void visit (SymOffExp *e) { /* Build the address and offset of the symbol. */ ! size_t soffset = e->isSymOffExp ()->offset; tree result = get_decl_tree (e->var); TREE_USED (result) = 1; --- 2115,2121 ---- void visit (SymOffExp *e) { /* Build the address and offset of the symbol. */ ! dinteger_t soffset = e->isSymOffExp ()->offset; tree result = get_decl_tree (e->var); TREE_USED (result) = 1; diff -Nrcpad gcc-12.4.0/gcc/d/imports.cc gcc-12.5.0-RC-20250704/gcc/d/imports.cc *** gcc-12.4.0/gcc/d/imports.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/d/imports.cc Fri Jul 4 07:24:42 2025 *************** public: *** 182,188 **** vec_alloc (tset, d->a.length); for (size_t i = 0; i < d->a.length; i++) ! vec_safe_push (tset, build_import_decl (d->a[i])); this->result_ = build_tree_list_vec (tset); tset->truncate (0); --- 182,192 ---- vec_alloc (tset, d->a.length); for (size_t i = 0; i < d->a.length; i++) ! { ! tree overload = build_import_decl (d->a[i]); ! if (overload != NULL_TREE) ! vec_safe_push (tset, overload); ! } this->result_ = build_tree_list_vec (tset); tset->truncate (0); diff -Nrcpad gcc-12.4.0/gcc/df-problems.cc gcc-12.5.0-RC-20250704/gcc/df-problems.cc *** gcc-12.4.0/gcc/df-problems.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/df-problems.cc Fri Jul 4 07:24:42 2025 *************** df_simulate_defs (rtx_insn *insn, bitmap *** 3855,3863 **** { unsigned int dregno = DF_REF_REGNO (def); ! /* If the def is to only part of the reg, it does ! not kill the other defs that reach here. */ ! if (!(DF_REF_FLAGS (def) & (DF_REF_PARTIAL | DF_REF_CONDITIONAL))) bitmap_clear_bit (live, dregno); } } --- 3855,3865 ---- { unsigned int dregno = DF_REF_REGNO (def); ! /* If the def is to only part of the reg, model it as a RMW operation ! by marking it live. It only kills the reg if it is a complete def. */ ! if (DF_REF_FLAGS (def) & (DF_REF_PARTIAL | DF_REF_CONDITIONAL)) ! bitmap_set_bit (live, dregno); ! else bitmap_clear_bit (live, dregno); } } diff -Nrcpad gcc-12.4.0/gcc/doc/cpp.1 gcc-12.5.0-RC-20250704/gcc/doc/cpp.1 *** gcc-12.4.0/gcc/doc/cpp.1 Thu Jun 20 08:11:52 2024 --- gcc-12.5.0-RC-20250704/gcc/doc/cpp.1 Fri Jul 4 07:26:03 2025 *************** *** 1,4 **** ! .\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.43) .\" .\" Standard preamble: .\" ======================================================================== --- 1,4 ---- ! .\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35) .\" .\" Standard preamble: .\" ======================================================================== *************** *** 54,73 **** .\" Avoid warning from groff about undefined register 'F'. .de IX .. ! .nr rF 0 ! .if \n(.g .if rF .nr rF 1 ! .if (\n(rF:(\n(.g==0)) \{\ ! . if \nF \{\ ! . de IX ! . tm Index:\\$1\t\\n%\t"\\$2" .. ! . if !\nF==2 \{\ ! . nr % 0 ! . nr F 2 ! . \} . \} .\} - .rr rF .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. --- 54,69 ---- .\" Avoid warning from groff about undefined register 'F'. .de IX .. ! .if !\nF .nr F 0 ! .if \nF>0 \{\ ! . de IX ! . tm Index:\\$1\t\\n%\t"\\$2" .. ! . if !\nF==2 \{\ ! . nr % 0 ! . nr F 2 . \} .\} .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. *************** *** 133,139 **** .\" ======================================================================== .\" .IX Title "CPP 1" ! .TH CPP 1 "2024-06-20" "gcc-12.4.0" "GNU" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l --- 129,135 ---- .\" ======================================================================== .\" .IX Title "CPP 1" ! .TH CPP 1 "2025-07-04" "gcc-12.4.1" "GNU" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l *************** time of the source or package and it sho *** 924,931 **** process. .SH "SEE ALSO" .IX Header "SEE ALSO" ! \&\fBgpl\fR\|(7), \fBgfdl\fR\|(7), \fBfsf\-funding\fR\|(7), ! \&\fBgcc\fR\|(1), and the Info entries for \fIcpp\fR and \fIgcc\fR. .SH "COPYRIGHT" .IX Header "COPYRIGHT" Copyright (c) 1987\-2022 Free Software Foundation, Inc. --- 920,927 ---- process. .SH "SEE ALSO" .IX Header "SEE ALSO" ! \&\fIgpl\fR\|(7), \fIgfdl\fR\|(7), \fIfsf\-funding\fR\|(7), ! \&\fIgcc\fR\|(1), and the Info entries for \fIcpp\fR and \fIgcc\fR. .SH "COPYRIGHT" .IX Header "COPYRIGHT" Copyright (c) 1987\-2022 Free Software Foundation, Inc. *************** Permission is granted to copy, distribut *** 934,940 **** under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation. A copy of the license is included in the ! man page \fBgfdl\fR\|(7). This manual contains no Invariant Sections. The Front-Cover Texts are (a) (see below), and the Back-Cover Texts are (b) (see below). .PP --- 930,936 ---- under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation. A copy of the license is included in the ! man page \fIgfdl\fR\|(7). This manual contains no Invariant Sections. The Front-Cover Texts are (a) (see below), and the Back-Cover Texts are (b) (see below). .PP diff -Nrcpad gcc-12.4.0/gcc/doc/cpp.info gcc-12.5.0-RC-20250704/gcc/doc/cpp.info *** gcc-12.4.0/gcc/doc/cpp.info Thu Jun 20 08:26:15 2024 --- gcc-12.5.0-RC-20250704/gcc/doc/cpp.info Fri Jul 4 07:38:21 2025 *************** *** 1,4 **** ! This is cpp.info, produced by makeinfo version 6.8 from cpp.texi. Copyright (C) 1987-2022 Free Software Foundation, Inc. --- 1,4 ---- ! This is cpp.info, produced by makeinfo version 6.5 from cpp.texi. Copyright (C) 1987-2022 Free Software Foundation, Inc. *************** double underscores. *** 1764,1770 **** #if __GNUC__ > 3 || \ (__GNUC__ == 3 && (__GNUC_MINOR__ > 2 || \ (__GNUC_MINOR__ == 2 && \ ! __GNUC_PATCHLEVEL__ > 0)) Another approach is to use the predefined macros to calculate a single number, then compare that against a threshold: --- 1764,1770 ---- #if __GNUC__ > 3 || \ (__GNUC__ == 3 && (__GNUC_MINOR__ > 2 || \ (__GNUC_MINOR__ == 2 && \ ! __GNUC_PATCHLEVEL__ > 0))) Another approach is to use the predefined macros to calculate a single number, then compare that against a threshold: *************** without any initial '-' or '--'. *** 5303,5389 **** [index] * Menu: ! * A: Invocation. (line 337) ! * C: Invocation. (line 346) ! * CC: Invocation. (line 358) * CPATH: Environment Variables. (line 15) * CPLUS_INCLUDE_PATH: Environment Variables. (line 17) * C_INCLUDE_PATH: Environment Variables. (line 16) ! * D: Invocation. (line 43) ! * d: Invocation. (line 407) ! * dD: Invocation. (line 426) * DEPENDENCIES_OUTPUT: Environment Variables. ! (line 44) ! * dI: Invocation. (line 436) ! * dM: Invocation. (line 415) ! * dN: Invocation. (line 432) ! * dU: Invocation. (line 440) ! * fdebug-cpp: Invocation. (line 447) ! * fdirectives-only: Invocation. (line 230) ! * fdollars-in-identifiers: Invocation. (line 251) ! * fexec-charset: Invocation. (line 298) ! * fextended-identifiers: Invocation. (line 254) ! * finput-charset: Invocation. (line 313) ! * fmacro-prefix-map: Invocation. (line 289) ! * fmax-include-depth: Invocation. (line 263) ! * fno-canonical-system-headers: Invocation. (line 259) ! * fno-working-directory: Invocation. (line 323) ! * fpreprocessed: Invocation. (line 217) ! * ftabstop: Invocation. (line 266) ! * ftrack-macro-expansion: Invocation. (line 272) ! * fwide-exec-charset: Invocation. (line 303) ! * fworking-directory: Invocation. (line 323) ! * H: Invocation. (line 400) ! * I: Invocation. (line 458) ! * I-: Invocation. (line 512) ! * idirafter: Invocation. (line 458) ! * imacros: Invocation. (line 81) ! * imultilib: Invocation. (line 546) ! * include: Invocation. (line 70) ! * iprefix: Invocation. (line 528) ! * iquote: Invocation. (line 458) ! * isysroot: Invocation. (line 540) ! * isystem: Invocation. (line 458) ! * iwithprefix: Invocation. (line 534) ! * iwithprefixbefore: Invocation. (line 534) ! * M: Invocation. (line 102) ! * MD: Invocation. (line 197) ! * MF: Invocation. (line 136) ! * MG: Invocation. (line 147) ! * MM: Invocation. (line 127) ! * MMD: Invocation. (line 213) ! * Mno-modules: Invocation. (line 157) ! * MP: Invocation. (line 160) ! * MQ: Invocation. (line 187) ! * MT: Invocation. (line 172) ! * nostdinc: Invocation. (line 550) ! * nostdinc++: Invocation. (line 556) * OBJC_INCLUDE_PATH: Environment Variables. (line 18) ! * P: Invocation. (line 370) ! * pthread: Invocation. (line 95) ! * remap: Invocation. (line 396) * SOURCE_DATE_EPOCH: Environment Variables. ! (line 66) * SUNPRO_DEPENDENCIES: Environment Variables. ! (line 60) ! * traditional: Invocation. (line 378) ! * traditional-cpp: Invocation. (line 378) ! * trigraphs: Invocation. (line 387) ! * U: Invocation. (line 66) ! * undef: Invocation. (line 90) ! * Wcomment: Invocation. (line 562) ! * Wcomments: Invocation. (line 562) ! * Wendif-labels: Invocation. (line 606) ! * Wexpansion-to-defined: Invocation. (line 581) ! * Wno-endif-labels: Invocation. (line 606) ! * Wno-undef: Invocation. (line 577) ! * Wtrigraphs: Invocation. (line 567) ! * Wundef: Invocation. (line 577) ! * Wunused-macros: Invocation. (line 587)  File: cpp.info, Node: Concept Index, Prev: Option Index, Up: Top --- 5303,5389 ---- [index] * Menu: ! * A: Invocation. (line 338) ! * C: Invocation. (line 347) ! * CC: Invocation. (line 359) * CPATH: Environment Variables. (line 15) * CPLUS_INCLUDE_PATH: Environment Variables. (line 17) * C_INCLUDE_PATH: Environment Variables. (line 16) ! * D: Invocation. (line 44) ! * d: Invocation. (line 408) ! * dD: Invocation. (line 427) * DEPENDENCIES_OUTPUT: Environment Variables. ! (line 45) ! * dI: Invocation. (line 437) ! * dM: Invocation. (line 416) ! * dN: Invocation. (line 433) ! * dU: Invocation. (line 441) ! * fdebug-cpp: Invocation. (line 448) ! * fdirectives-only: Invocation. (line 231) ! * fdollars-in-identifiers: Invocation. (line 252) ! * fexec-charset: Invocation. (line 299) ! * fextended-identifiers: Invocation. (line 255) ! * finput-charset: Invocation. (line 314) ! * fmacro-prefix-map: Invocation. (line 290) ! * fmax-include-depth: Invocation. (line 264) ! * fno-canonical-system-headers: Invocation. (line 260) ! * fno-working-directory: Invocation. (line 324) ! * fpreprocessed: Invocation. (line 218) ! * ftabstop: Invocation. (line 267) ! * ftrack-macro-expansion: Invocation. (line 273) ! * fwide-exec-charset: Invocation. (line 304) ! * fworking-directory: Invocation. (line 324) ! * H: Invocation. (line 401) ! * I: Invocation. (line 459) ! * I-: Invocation. (line 513) ! * idirafter: Invocation. (line 459) ! * imacros: Invocation. (line 82) ! * imultilib: Invocation. (line 547) ! * include: Invocation. (line 71) ! * iprefix: Invocation. (line 529) ! * iquote: Invocation. (line 459) ! * isysroot: Invocation. (line 541) ! * isystem: Invocation. (line 459) ! * iwithprefix: Invocation. (line 535) ! * iwithprefixbefore: Invocation. (line 535) ! * M: Invocation. (line 103) ! * MD: Invocation. (line 198) ! * MF: Invocation. (line 137) ! * MG: Invocation. (line 148) ! * MM: Invocation. (line 128) ! * MMD: Invocation. (line 214) ! * Mno-modules: Invocation. (line 158) ! * MP: Invocation. (line 161) ! * MQ: Invocation. (line 188) ! * MT: Invocation. (line 173) ! * nostdinc: Invocation. (line 551) ! * nostdinc++: Invocation. (line 557) * OBJC_INCLUDE_PATH: Environment Variables. (line 18) ! * P: Invocation. (line 371) ! * pthread: Invocation. (line 96) ! * remap: Invocation. (line 397) * SOURCE_DATE_EPOCH: Environment Variables. ! (line 67) * SUNPRO_DEPENDENCIES: Environment Variables. ! (line 61) ! * traditional: Invocation. (line 379) ! * traditional-cpp: Invocation. (line 379) ! * trigraphs: Invocation. (line 388) ! * U: Invocation. (line 67) ! * undef: Invocation. (line 91) ! * Wcomment: Invocation. (line 563) ! * Wcomments: Invocation. (line 563) ! * Wendif-labels: Invocation. (line 607) ! * Wexpansion-to-defined: Invocation. (line 582) ! * Wno-endif-labels: Invocation. (line 607) ! * Wno-undef: Invocation. (line 578) ! * Wtrigraphs: Invocation. (line 568) ! * Wundef: Invocation. (line 578) ! * Wunused-macros: Invocation. (line 588)  File: cpp.info, Node: Concept Index, Prev: Option Index, Up: Top *************** Concept Index *** 5409,5420 **** * assertions, canceling: Obsolete Features. (line 59) * backslash-newline: Initial processing. (line 61) * block comments: Initial processing. (line 77) ! * C language, traditional: Invocation. (line 376) * C++ named operators: C++ Named Operators. (line 6) * character constants: Tokenization. (line 81) ! * character set, execution: Invocation. (line 298) ! * character set, input: Invocation. (line 313) ! * character set, wide execution: Invocation. (line 303) * command line: Invocation. (line 6) * commenting out code: Deleted Code. (line 6) * comments: Initial processing. (line 77) --- 5409,5420 ---- * assertions, canceling: Obsolete Features. (line 59) * backslash-newline: Initial processing. (line 61) * block comments: Initial processing. (line 77) ! * C language, traditional: Invocation. (line 377) * C++ named operators: C++ Named Operators. (line 6) * character constants: Tokenization. (line 81) ! * character set, execution: Invocation. (line 299) ! * character set, input: Invocation. (line 314) ! * character set, wide execution: Invocation. (line 304) * command line: Invocation. (line 6) * commenting out code: Deleted Code. (line 6) * comments: Initial processing. (line 77) *************** Concept Index *** 5428,5437 **** * controlling macro: Once-Only Headers. (line 35) * defined: Defined. (line 6) * dependencies for make as output: Environment Variables. ! (line 45) * dependencies for make as output <1>: Environment Variables. ! (line 61) ! * dependencies, make: Invocation. (line 102) * diagnostic: Diagnostics. (line 6) * digraphs: Tokenization. (line 100) * directive line: The preprocessing language. --- 5428,5437 ---- * controlling macro: Once-Only Headers. (line 35) * defined: Defined. (line 6) * dependencies for make as output: Environment Variables. ! (line 46) * dependencies for make as output <1>: Environment Variables. ! (line 62) ! * dependencies, make: Invocation. (line 103) * diagnostic: Diagnostics. (line 6) * digraphs: Tokenization. (line 100) * directive line: The preprocessing language. *************** Concept Index *** 5470,5476 **** * macros in include: Computed Includes. (line 6) * macros with arguments: Macro Arguments. (line 6) * macros with variable arguments: Variadic Macros. (line 6) ! * make: Invocation. (line 102) * manifest constants: Object-like Macros. (line 6) * named operators: C++ Named Operators. (line 6) * newlines in macro arguments: Newlines in Arguments. --- 5470,5476 ---- * macros in include: Computed Includes. (line 6) * macros with arguments: Macro Arguments. (line 6) * macros with variable arguments: Variadic Macros. (line 6) ! * make: Invocation. (line 103) * manifest constants: Object-like Macros. (line 6) * named operators: C++ Named Operators. (line 6) * newlines in macro arguments: Newlines in Arguments. *************** Concept Index *** 5478,5484 **** * null directive: Other Directives. (line 15) * numbers: Tokenization. (line 58) * object-like macro: Object-like Macros. (line 6) ! * options: Invocation. (line 42) * options, grouping: Invocation. (line 38) * other tokens: Tokenization. (line 114) * output format: Preprocessor Output. (line 12) --- 5478,5484 ---- * null directive: Other Directives. (line 15) * numbers: Tokenization. (line 58) * object-like macro: Object-like Macros. (line 6) ! * options: Invocation. (line 43) * options, grouping: Invocation. (line 38) * other tokens: Tokenization. (line 114) * output format: Preprocessor Output. (line 12) *************** Concept Index *** 5525,5531 **** * token concatenation: Concatenation. (line 6) * token pasting: Concatenation. (line 6) * tokens: Tokenization. (line 6) ! * traditional C language: Invocation. (line 376) * trigraphs: Initial processing. (line 32) * undefining macros: Undefining and Redefining Macros. (line 6) --- 5525,5531 ---- * token concatenation: Concatenation. (line 6) * token pasting: Concatenation. (line 6) * tokens: Tokenization. (line 6) ! * traditional C language: Invocation. (line 377) * trigraphs: Initial processing. (line 32) * undefining macros: Undefining and Redefining Macros. (line 6) *************** Node: Variadic Macros59129 *** 5567,5626 **** Node: Predefined Macros64081 Node: Standard Predefined Macros64669 Node: Common Predefined Macros71043 ! Node: System-specific Predefined Macros93678 ! Node: C++ Named Operators95701 ! Node: Undefining and Redefining Macros96665 ! Node: Directives Within Macro Arguments98763 ! Node: Macro Pitfalls99704 ! Node: Misnesting100237 ! Node: Operator Precedence Problems101349 ! Node: Swallowing the Semicolon103215 ! Node: Duplication of Side Effects105238 ! Node: Self-Referential Macros107421 ! Node: Argument Prescan109830 ! Node: Newlines in Arguments113581 ! Node: Conditionals114532 ! Node: Conditional Uses116228 ! Node: Conditional Syntax117586 ! Node: Ifdef118008 ! Node: If121165 ! Node: Defined123469 ! Node: Else124862 ! Node: Elif125432 ! Node: __has_attribute126745 ! Node: __has_cpp_attribute128339 ! Node: __has_c_attribute129229 ! Node: __has_builtin130002 ! Node: __has_include131135 ! Node: Deleted Code132724 ! Node: Diagnostics133971 ! Node: Line Control135520 ! Node: Pragmas137798 ! Node: Other Directives142195 ! Node: Preprocessor Output143245 ! Node: Traditional Mode146398 ! Node: Traditional lexical analysis147535 ! Node: Traditional macros150038 ! Node: Traditional miscellany153835 ! Node: Traditional warnings154831 ! Node: Implementation Details157028 ! Node: Implementation-defined behavior157591 ! Ref: Identifier characters158341 ! Node: Implementation limits161390 ! Node: Obsolete Features164063 ! Node: Invocation166907 ! Ref: dashMF172942 ! Ref: fdollars-in-identifiers177604 ! Ref: Wtrigraphs191850 ! Node: Environment Variables193905 ! Node: GNU Free Documentation License197596 ! Node: Index of Directives222743 ! Node: Option Index224896 ! Node: Concept Index230998  End Tag Table - -  - Local Variables: - coding: utf-8 - End: --- 5567,5621 ---- Node: Predefined Macros64081 Node: Standard Predefined Macros64669 Node: Common Predefined Macros71043 ! Node: System-specific Predefined Macros93679 ! Node: C++ Named Operators95702 ! Node: Undefining and Redefining Macros96666 ! Node: Directives Within Macro Arguments98764 ! Node: Macro Pitfalls99705 ! Node: Misnesting100238 ! Node: Operator Precedence Problems101350 ! Node: Swallowing the Semicolon103216 ! Node: Duplication of Side Effects105239 ! Node: Self-Referential Macros107422 ! Node: Argument Prescan109831 ! Node: Newlines in Arguments113582 ! Node: Conditionals114533 ! Node: Conditional Uses116229 ! Node: Conditional Syntax117587 ! Node: Ifdef118009 ! Node: If121166 ! Node: Defined123470 ! Node: Else124863 ! Node: Elif125433 ! Node: __has_attribute126746 ! Node: __has_cpp_attribute128340 ! Node: __has_c_attribute129230 ! Node: __has_builtin130003 ! Node: __has_include131136 ! Node: Deleted Code132725 ! Node: Diagnostics133972 ! Node: Line Control135521 ! Node: Pragmas137799 ! Node: Other Directives142196 ! Node: Preprocessor Output143246 ! Node: Traditional Mode146399 ! Node: Traditional lexical analysis147536 ! Node: Traditional macros150039 ! Node: Traditional miscellany153836 ! Node: Traditional warnings154832 ! Node: Implementation Details157029 ! Node: Implementation-defined behavior157592 ! Ref: Identifier characters158342 ! Node: Implementation limits161391 ! Node: Obsolete Features164064 ! Node: Invocation166908 ! Ref: dashMF172943 ! Ref: fdollars-in-identifiers177605 ! Ref: Wtrigraphs191851 ! Node: Environment Variables193906 ! Node: GNU Free Documentation License197597 ! Node: Index of Directives222744 ! Node: Option Index224897 ! Node: Concept Index230999  End Tag Table diff -Nrcpad gcc-12.4.0/gcc/doc/cpp.texi gcc-12.5.0-RC-20250704/gcc/doc/cpp.texi *** gcc-12.4.0/gcc/doc/cpp.texi Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/doc/cpp.texi Fri Jul 4 07:24:42 2025 *************** like this: *** 1970,1976 **** #if __GNUC__ > 3 || \ (__GNUC__ == 3 && (__GNUC_MINOR__ > 2 || \ (__GNUC_MINOR__ == 2 && \ ! __GNUC_PATCHLEVEL__ > 0)) @end smallexample @noindent --- 1970,1976 ---- #if __GNUC__ > 3 || \ (__GNUC__ == 3 && (__GNUC_MINOR__ > 2 || \ (__GNUC_MINOR__ == 2 && \ ! __GNUC_PATCHLEVEL__ > 0))) @end smallexample @noindent diff -Nrcpad gcc-12.4.0/gcc/doc/cppinternals.info gcc-12.5.0-RC-20250704/gcc/doc/cppinternals.info *** gcc-12.4.0/gcc/doc/cppinternals.info Thu Jun 20 08:26:15 2024 --- gcc-12.5.0-RC-20250704/gcc/doc/cppinternals.info Fri Jul 4 07:38:21 2025 *************** *** 1,4 **** ! This is cppinternals.info, produced by makeinfo version 6.8 from cppinternals.texi. INFO-DIR-SECTION Software development --- 1,4 ---- ! This is cppinternals.info, produced by makeinfo version 6.5 from cppinternals.texi. INFO-DIR-SECTION Software development *************** will be removed, so I'll not discuss it *** 137,143 **** The job of '_cpp_lex_direct' is simply to lex a token. It is not responsible for issues like directive handling, returning lookahead tokens directly, multiple-include optimization, or conditional block ! skipping. It necessarily has a minor rôle to play in memory management of lexed lines. I discuss these issues in a separate section (*note Lexing a line::). --- 137,143 ---- The job of '_cpp_lex_direct' is simply to lex a token. It is not responsible for issues like directive handling, returning lookahead tokens directly, multiple-include optimization, or conditional block ! skipping. It necessarily has a minor ro^le to play in memory management of lexed lines. I discuss these issues in a separate section (*note Lexing a line::). *************** Node: Files44875 *** 1039,1046 **** Node: Concept Index48342  End Tag Table - -  - Local Variables: - coding: utf-8 - End: --- 1039,1041 ---- diff -Nrcpad gcc-12.4.0/gcc/doc/extend.texi gcc-12.5.0-RC-20250704/gcc/doc/extend.texi *** gcc-12.4.0/gcc/doc/extend.texi Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/doc/extend.texi Fri Jul 4 07:24:42 2025 *************** builtins (@pxref{__atomic Builtins}). T *** 12216,12231 **** code which should use the @samp{__atomic} builtins instead. Not all operations are supported by all target processors. If a particular ! operation cannot be implemented on the target processor, a warning is ! generated and a call to an external function is generated. The external ! function carries the same name as the built-in version, ! with an additional suffix @samp{_@var{n}} where @var{n} is the size of the data type. - @c ??? Should we have a mechanism to suppress this warning? This is almost - @c useful for implementing the operation under the control of an external - @c mutex. - In most cases, these built-in functions are considered a @dfn{full barrier}. That is, no memory operand is moved across the operation, either forward or --- 12216,12226 ---- code which should use the @samp{__atomic} builtins instead. Not all operations are supported by all target processors. If a particular ! operation cannot be implemented on the target processor, a call to an ! external function is generated. The external function carries the same name ! as the built-in version, with an additional suffix @samp{_@var{n}} where @var{n} is the size of the data type. In most cases, these built-in functions are considered a @dfn{full barrier}. That is, no memory operand is moved across the operation, either forward or *************** AMD Family 19h Zen version 3. *** 22024,22029 **** --- 22019,22027 ---- @item znver4 AMD Family 19h Zen version 4. + + @item znver5 + AMD Family 1ah Zen version 5. @end table Here is an example: diff -Nrcpad gcc-12.4.0/gcc/doc/fsf-funding.7 gcc-12.5.0-RC-20250704/gcc/doc/fsf-funding.7 *** gcc-12.4.0/gcc/doc/fsf-funding.7 Thu Jun 20 08:11:52 2024 --- gcc-12.5.0-RC-20250704/gcc/doc/fsf-funding.7 Fri Jul 4 07:26:03 2025 *************** *** 1,4 **** ! .\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.43) .\" .\" Standard preamble: .\" ======================================================================== --- 1,4 ---- ! .\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35) .\" .\" Standard preamble: .\" ======================================================================== *************** *** 54,73 **** .\" Avoid warning from groff about undefined register 'F'. .de IX .. ! .nr rF 0 ! .if \n(.g .if rF .nr rF 1 ! .if (\n(rF:(\n(.g==0)) \{\ ! . if \nF \{\ ! . de IX ! . tm Index:\\$1\t\\n%\t"\\$2" .. ! . if !\nF==2 \{\ ! . nr % 0 ! . nr F 2 ! . \} . \} .\} - .rr rF .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. --- 54,69 ---- .\" Avoid warning from groff about undefined register 'F'. .de IX .. ! .if !\nF .nr F 0 ! .if \nF>0 \{\ ! . de IX ! . tm Index:\\$1\t\\n%\t"\\$2" .. ! . if !\nF==2 \{\ ! . nr % 0 ! . nr F 2 . \} .\} .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. *************** *** 133,139 **** .\" ======================================================================== .\" .IX Title "FSF-FUNDING 7" ! .TH FSF-FUNDING 7 "2024-06-20" "gcc-12.4.0" "GNU" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l --- 129,135 ---- .\" ======================================================================== .\" .IX Title "FSF-FUNDING 7" ! .TH FSF-FUNDING 7 "2025-07-04" "gcc-12.4.1" "GNU" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l *************** proper thing to do\*(R" when distributin *** 185,191 **** assure a steady flow of resources into making more free software. .SH "SEE ALSO" .IX Header "SEE ALSO" ! \&\fBgpl\fR\|(7), \fBgfdl\fR\|(7). .SH "COPYRIGHT" .IX Header "COPYRIGHT" Copyright (c) 1994 Free Software Foundation, Inc. --- 181,187 ---- assure a steady flow of resources into making more free software. .SH "SEE ALSO" .IX Header "SEE ALSO" ! \&\fIgpl\fR\|(7), \fIgfdl\fR\|(7). .SH "COPYRIGHT" .IX Header "COPYRIGHT" Copyright (c) 1994 Free Software Foundation, Inc. diff -Nrcpad gcc-12.4.0/gcc/doc/g++.1 gcc-12.5.0-RC-20250704/gcc/doc/g++.1 *** gcc-12.4.0/gcc/doc/g++.1 Thu Jun 20 08:26:16 2024 --- gcc-12.5.0-RC-20250704/gcc/doc/g++.1 Fri Jul 4 07:38:22 2025 *************** *** 1,4 **** ! .\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.43) .\" .\" Standard preamble: .\" ======================================================================== --- 1,4 ---- ! .\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35) .\" .\" Standard preamble: .\" ======================================================================== *************** *** 54,73 **** .\" Avoid warning from groff about undefined register 'F'. .de IX .. ! .nr rF 0 ! .if \n(.g .if rF .nr rF 1 ! .if (\n(rF:(\n(.g==0)) \{\ ! . if \nF \{\ ! . de IX ! . tm Index:\\$1\t\\n%\t"\\$2" .. ! . if !\nF==2 \{\ ! . nr % 0 ! . nr F 2 ! . \} . \} .\} - .rr rF .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. --- 54,69 ---- .\" Avoid warning from groff about undefined register 'F'. .de IX .. ! .if !\nF .nr F 0 ! .if \nF>0 \{\ ! . de IX ! . tm Index:\\$1\t\\n%\t"\\$2" .. ! . if !\nF==2 \{\ ! . nr % 0 ! . nr F 2 . \} .\} .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. *************** *** 133,139 **** .\" ======================================================================== .\" .IX Title "GCC 1" ! .TH GCC 1 "2024-06-20" "gcc-12.4.0" "GNU" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l --- 129,135 ---- .\" ======================================================================== .\" .IX Title "GCC 1" ! .TH GCC 1 "2025-07-04" "gcc-12.4.1" "GNU" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l *************** This is useful if you need to make sure *** 4462,4469 **** be compiled with older versions of \s-1GCC.\s0 .IP "\fB\-freplace\-objc\-classes\fR" 4 .IX Item "-freplace-objc-classes" ! Emit a special marker instructing \fB\fBld\fB\|(1)\fR not to statically link in ! the resulting object file, and allow \fB\fBdyld\fB\|(1)\fR to load it in at run time instead. This is used in conjunction with the Fix-and-Continue debugging mode, where the object file in question may be recompiled and dynamically reloaded in the course of program execution, without the need --- 4458,4465 ---- be compiled with older versions of \s-1GCC.\s0 .IP "\fB\-freplace\-objc\-classes\fR" 4 .IX Item "-freplace-objc-classes" ! Emit a special marker instructing \fB\f(BIld\fB\|(1)\fR not to statically link in ! the resulting object file, and allow \fB\f(BIdyld\fB\|(1)\fR to load it in at run time instead. This is used in conjunction with the Fix-and-Continue debugging mode, where the object file in question may be recompiled and dynamically reloaded in the course of program execution, without the need *************** example of how this can happen: *** 6816,6822 **** .Sp If the value of \f(CW\*(C`y\*(C'\fR is always 1, 2 or 3, then \f(CW\*(C`x\*(C'\fR is always initialized, but \s-1GCC\s0 doesn't know this. To suppress the ! warning, you need to provide a default case with \fBassert\fR\|(0) or similar code. .Sp This option also warns when a non-volatile automatic variable might be --- 6812,6818 ---- .Sp If the value of \f(CW\*(C`y\*(C'\fR is always 1, 2 or 3, then \f(CW\*(C`x\*(C'\fR is always initialized, but \s-1GCC\s0 doesn't know this. To suppress the ! warning, you need to provide a default case with \fIassert\fR\|(0) or similar code. .Sp This option also warns when a non-volatile automatic variable might be *************** run-time callbacks. *** 13949,13955 **** Emit special instrumentation for accesses to volatiles. .IP "\fBtsan-instrument-func-entry-exit\fR" 4 .IX Item "tsan-instrument-func-entry-exit" ! Emit instrumentation calls to _\|\fB_tsan_func_entry()\fR and _\|\fB_tsan_func_exit()\fR. .IP "\fBmax-fsm-thread-path-insns\fR" 4 .IX Item "max-fsm-thread-path-insns" Maximum number of instructions to copy when duplicating blocks on a --- 13945,13951 ---- Emit special instrumentation for accesses to volatiles. .IP "\fBtsan-instrument-func-entry-exit\fR" 4 .IX Item "tsan-instrument-func-entry-exit" ! Emit instrumentation calls to _\|\fI_tsan_func_entry()\fR and _\|\fI_tsan_func_exit()\fR. .IP "\fBmax-fsm-thread-path-insns\fR" 4 .IX Item "max-fsm-thread-path-insns" Maximum number of instructions to copy when duplicating blocks on a *************** performance of the code. Permissible va *** 18453,18460 **** \&\fBcortex\-a78\fR, \fBcortex\-a78ae\fR, \fBcortex\-a78c\fR, \&\fBares\fR, \fBexynos\-m1\fR, \fBemag\fR, \fBfalkor\fR, \&\fBneoverse\-512tvb\fR, \fBneoverse\-e1\fR, \fBneoverse\-n1\fR, ! \&\fBneoverse\-n2\fR, \fBneoverse\-v1\fR, \fBneoverse\-v2\fR, \fBqdf24xx\fR, ! \&\fBsaphira\fR, \fBphecda\fR, \fBxgene1\fR, \fBvulcan\fR, \&\fBocteontx\fR, \fBocteontx81\fR, \fBocteontx83\fR, \&\fBocteontx2\fR, \fBocteontx2t98\fR, \fBocteontx2t96\fR \&\fBocteontx2t93\fR, \fBocteontx2f95\fR, \fBocteontx2f95n\fR, --- 18449,18456 ---- \&\fBcortex\-a78\fR, \fBcortex\-a78ae\fR, \fBcortex\-a78c\fR, \&\fBares\fR, \fBexynos\-m1\fR, \fBemag\fR, \fBfalkor\fR, \&\fBneoverse\-512tvb\fR, \fBneoverse\-e1\fR, \fBneoverse\-n1\fR, ! \&\fBneoverse\-n2\fR, \fBneoverse\-v1\fR, \fBneoverse\-v2\fR, \fBgrace\fR, ! \&\fBqdf24xx\fR, \fBsaphira\fR, \fBphecda\fR, \fBxgene1\fR, \fBvulcan\fR, \&\fBocteontx\fR, \fBocteontx81\fR, \fBocteontx83\fR, \&\fBocteontx2\fR, \fBocteontx2t98\fR, \fBocteontx2t96\fR \&\fBocteontx2t93\fR, \fBocteontx2f95\fR, \fBocteontx2f95n\fR, *************** are provided for backwards compatibility *** 22144,22150 **** .IP "\fB\-all_load\fR" 4 .IX Item "-all_load" Loads all members of static archive libraries. ! See man \fBld\fR\|(1) for more information. .IP "\fB\-arch_errors_fatal\fR" 4 .IX Item "-arch_errors_fatal" Cause the errors having to do with files that have the wrong architecture --- 22140,22146 ---- .IP "\fB\-all_load\fR" 4 .IX Item "-all_load" Loads all members of static archive libraries. ! See man \fIld\fR\|(1) for more information. .IP "\fB\-arch_errors_fatal\fR" 4 .IX Item "-arch_errors_fatal" Cause the errors having to do with files that have the wrong architecture *************** bind all undefined references when the f *** 22156,22166 **** .IP "\fB\-bundle\fR" 4 .IX Item "-bundle" Produce a Mach-o bundle format file. ! See man \fBld\fR\|(1) for more information. .IP "\fB\-bundle_loader\fR \fIexecutable\fR" 4 .IX Item "-bundle_loader executable" This option specifies the \fIexecutable\fR that will load the build ! output file being linked. See man \fBld\fR\|(1) for more information. .IP "\fB\-dynamiclib\fR" 4 .IX Item "-dynamiclib" When passed this option, \s-1GCC\s0 produces a dynamic library instead of --- 22152,22162 ---- .IP "\fB\-bundle\fR" 4 .IX Item "-bundle" Produce a Mach-o bundle format file. ! See man \fIld\fR\|(1) for more information. .IP "\fB\-bundle_loader\fR \fIexecutable\fR" 4 .IX Item "-bundle_loader executable" This option specifies the \fIexecutable\fR that will load the build ! output file being linked. See man \fIld\fR\|(1) for more information. .IP "\fB\-dynamiclib\fR" 4 .IX Item "-dynamiclib" When passed this option, \s-1GCC\s0 produces a dynamic library instead of *************** Intel Core 2 \s-1CPU\s0 with 64\-bit ext *** 30370,30375 **** --- 30366,30375 ---- SAHF\s0 and \s-1FXSR\s0 instruction set support. .IP "\fBnehalem\fR" 4 .IX Item "nehalem" + .PD 0 + .IP "\fBcorei7\fR" 4 + .IX Item "corei7" + .PD Intel Nehalem \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF\s0 and \s-1FXSR\s0 instruction set support. .IP "\fBwestmere\fR" 4 *************** Intel Westmere \s-1CPU\s0 with 64\-bit e *** 30378,30394 **** SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR\s0 and \s-1PCLMUL\s0 instruction set support. .IP "\fBsandybridge\fR" 4 .IX Item "sandybridge" Intel Sandy Bridge \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE\s0 and \s-1PCLMUL\s0 instruction set support. .IP "\fBivybridge\fR" 4 .IX Item "ivybridge" Intel Ivy Bridge \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND\s0 and F16C instruction set support. .IP "\fBhaswell\fR" 4 .IX Item "haswell" ! Intel Haswell \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE\s0 and \s-1HLE\s0 instruction set support. .IP "\fBbroadwell\fR" 4 --- 30378,30406 ---- SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR\s0 and \s-1PCLMUL\s0 instruction set support. .IP "\fBsandybridge\fR" 4 .IX Item "sandybridge" + .PD 0 + .IP "\fBcorei7\-avx\fR" 4 + .IX Item "corei7-avx" + .PD Intel Sandy Bridge \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE\s0 and \s-1PCLMUL\s0 instruction set support. .IP "\fBivybridge\fR" 4 .IX Item "ivybridge" + .PD 0 + .IP "\fBcore-avx-i\fR" 4 + .IX Item "core-avx-i" + .PD Intel Ivy Bridge \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND\s0 and F16C instruction set support. .IP "\fBhaswell\fR" 4 .IX Item "haswell" ! .PD 0 ! .IP "\fBcore\-avx2\fR" 4 ! .IX Item "core-avx2" ! .PD ! Intel Haswell \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE\s0 and \s-1HLE\s0 instruction set support. .IP "\fBbroadwell\fR" 4 *************** Intel Skylake \s-1CPU\s0 with 64\-bit ex *** 30403,30449 **** SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, CLFLUSHOPT, XSAVEC, XSAVES\s0 and \s-1SGX\s0 instruction set support. - .IP "\fBbonnell\fR" 4 - .IX Item "bonnell" - Intel Bonnell \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3\s0 and \s-1SSSE3\s0 - instruction set support. - .IP "\fBsilvermont\fR" 4 - .IX Item "silvermont" - Intel Silvermont \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, - SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW\s0 and \s-1RDRND\s0 - instruction set support. - .IP "\fBgoldmont\fR" 4 - .IX Item "goldmont" - Intel Goldmont \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, - SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW, RDRND, AES, SHA, - RDSEED, XSAVE, XSAVEC, XSAVES, XSAVEOPT, CLFLUSHOPT\s0 and \s-1FSGSBASE\s0 instruction - set support. - .IP "\fBgoldmont-plus\fR" 4 - .IX Item "goldmont-plus" - Intel Goldmont Plus \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, - SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW, RDRND, AES, - SHA, RDSEED, XSAVE, XSAVEC, XSAVES, XSAVEOPT, CLFLUSHOPT, FSGSBASE, PTWRITE, - RDPID\s0 and \s-1SGX\s0 instruction set support. - .IP "\fBtremont\fR" 4 - .IX Item "tremont" - Intel Tremont \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, - SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW, RDRND, AES, SHA, - RDSEED, XSAVE, XSAVEC, XSAVES, XSAVEOPT, CLFLUSHOPT, FSGSBASE, PTWRITE, RDPID, - SGX, CLWB,\s0 GFNI-SSE, \s-1MOVDIRI, MOVDIR64B, CLDEMOTE\s0 and \s-1WAITPKG\s0 instruction set - support. - .IP "\fBknl\fR" 4 - .IX Item "knl" - Intel Knight's Landing \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, - SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, - RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, - AVX512PF, AVX512ER, AVX512F, AVX512CD\s0 and \s-1PREFETCHWT1\s0 instruction set support. - .IP "\fBknm\fR" 4 - .IX Item "knm" - Intel Knights Mill \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, - SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, - RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, - AVX512PF, AVX512ER, AVX512F, AVX512CD\s0 and \s-1PREFETCHWT1, AVX5124VNNIW, - AVX5124FMAPS\s0 and \s-1AVX512VPOPCNTDQ\s0 instruction set support. .IP "\fBskylake\-avx512\fR" 4 .IX Item "skylake-avx512" Intel Skylake Server \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, --- 30415,30420 ---- *************** SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAH *** 30451,30467 **** RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL, AVX512BW, AVX512DQ\s0 and \s-1AVX512CD\s0 instruction set support. .IP "\fBcannonlake\fR" 4 .IX Item "cannonlake" ! Intel Cannonlake Server \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA\s0 and \s-1SHA\s0 instruction set support. .IP "\fBicelake-client\fR" 4 .IX Item "icelake-client" ! Intel Icelake Client \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ, --- 30422,30452 ---- RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL, AVX512BW, AVX512DQ\s0 and \s-1AVX512CD\s0 instruction set support. + .IP "\fBcascadelake\fR" 4 + .IX Item "cascadelake" + Intel Cascade Lake \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3, + SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, + F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, + CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL, AVX512BW, AVX512DQ, + AVX512CD\s0 and \s-1AVX512VNNI\s0 instruction set support. .IP "\fBcannonlake\fR" 4 .IX Item "cannonlake" ! Intel Cannon Lake Server \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA\s0 and \s-1SHA\s0 instruction set support. + .IP "\fBcooperlake\fR" 4 + .IX Item "cooperlake" + Intel Cooper Lake \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3, + SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, + F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, + CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL, AVX512BW, AVX512DQ, + AVX512CD, AVX512VNNI\s0 and \s-1AVX512BF16\s0 instruction set support. .IP "\fBicelake-client\fR" 4 .IX Item "icelake-client" ! Intel Ice Lake Client \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ, *************** AVX512CD, PKU, AVX512VBMI, AVX512IFMA, S *** 30469,30531 **** , VPCLMULQDQ, AVX512BITALG, RDPID\s0 and \s-1AVX512VPOPCNTDQ\s0 instruction set support. .IP "\fBicelake-server\fR" 4 .IX Item "icelake-server" ! Intel Icelake Server \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2 , VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, PCONFIG, WBNOINVD\s0 and \s-1CLWB\s0 instruction set support. - .IP "\fBcascadelake\fR" 4 - .IX Item "cascadelake" - Intel Cascadelake \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, - SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, - F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, - CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL, AVX512BW, AVX512DQ, - AVX512CD\s0 and \s-1AVX512VNNI\s0 instruction set support. - .IP "\fBcooperlake\fR" 4 - .IX Item "cooperlake" - Intel cooperlake \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, - SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, - F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, - CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL, AVX512BW, AVX512DQ, - AVX512CD, AVX512VNNI\s0 and \s-1AVX512BF16\s0 instruction set support. .IP "\fBtigerlake\fR" 4 .IX Item "tigerlake" ! Intel Tigerlake \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, ! CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD ! PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2, VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, MOVDIRI, MOVDIR64B, CLWB, AVX512VP2INTERSECT\s0 and \s-1KEYLOCKER\s0 instruction set support. .IP "\fBsapphirerapids\fR" 4 .IX Item "sapphirerapids" ! Intel sapphirerapids \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, ! SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, ! RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, ! AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2, VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, PCONFIG, WBNOINVD, CLWB, MOVDIRI, MOVDIR64B, ENQCMD, CLDEMOTE, PTWRITE, WAITPKG, SERIALIZE, TSXLDTRK, UINTR, AMX\-BF16,\s0 AMX-TILE, \s-1AMX\-INT8,\s0 AVX-VNNI, \s-1AVX512\-FP16\s0 and \s-1AVX512BF16\s0 instruction set support. ! .IP "\fBalderlake\fR" 4 ! .IX Item "alderlake" ! Intel Alderlake \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, ! SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC, XSAVES, ! XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX,\s0 GFNI-SSE, \s-1CLWB, MOVDIRI, MOVDIR64B, ! CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT, PCONFIG, PKU, ! VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL\s0 and AVX-VNNI instruction set support. ! .IP "\fBrocketlake\fR" 4 ! .IX Item "rocketlake" ! Intel Rocketlake \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3 ! , SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, ! F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, ! CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD ! PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2, ! VPCLMULQDQ, AVX512BITALG, RDPID\s0 and \s-1AVX512VPOPCNTDQ\s0 instruction set support. .IP "\fBk6\fR" 4 .IX Item "k6" \&\s-1AMD K6 CPU\s0 with \s-1MMX\s0 instruction set support. --- 30454,30550 ---- , VPCLMULQDQ, AVX512BITALG, RDPID\s0 and \s-1AVX512VPOPCNTDQ\s0 instruction set support. .IP "\fBicelake-server\fR" 4 .IX Item "icelake-server" ! Intel Ice Lake Server \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2 , VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, PCONFIG, WBNOINVD\s0 and \s-1CLWB\s0 instruction set support. .IP "\fBtigerlake\fR" 4 .IX Item "tigerlake" ! Intel Tiger Lake \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, ! CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ, ! AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2, VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, MOVDIRI, MOVDIR64B, CLWB, AVX512VP2INTERSECT\s0 and \s-1KEYLOCKER\s0 instruction set support. + .IP "\fBrocketlake\fR" 4 + .IX Item "rocketlake" + Intel Rocket Lake \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3, + SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, + F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, + CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD, + PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2, + VPCLMULQDQ, AVX512BITALG, RDPID\s0 and \s-1AVX512VPOPCNTDQ\s0 instruction set support. + .IP "\fBalderlake\fR" 4 + .IX Item "alderlake" + Intel Alder Lake \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, + SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC, XSAVES, + XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX,\s0 GFNI-SSE, \s-1CLWB, MOVDIRI, MOVDIR64B, + WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT, PCONFIG, PKU, VAES, + VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL\s0 and AVX-VNNI instruction set support. .IP "\fBsapphirerapids\fR" 4 .IX Item "sapphirerapids" ! Intel Sapphire Rapids \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3, ! SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, ! F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, ! CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2, VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, PCONFIG, WBNOINVD, CLWB, MOVDIRI, MOVDIR64B, ENQCMD, CLDEMOTE, PTWRITE, WAITPKG, SERIALIZE, TSXLDTRK, UINTR, AMX\-BF16,\s0 AMX-TILE, \s-1AMX\-INT8,\s0 AVX-VNNI, \s-1AVX512\-FP16\s0 and \s-1AVX512BF16\s0 instruction set support. ! .IP "\fBbonnell\fR" 4 ! .IX Item "bonnell" ! .PD 0 ! .IP "\fBatom\fR" 4 ! .IX Item "atom" ! .PD ! Intel Bonnell \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3\s0 and \s-1SSSE3\s0 ! instruction set support. ! .IP "\fBsilvermont\fR" 4 ! .IX Item "silvermont" ! .PD 0 ! .IP "\fBslm\fR" 4 ! .IX Item "slm" ! .PD ! Intel Silvermont \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, ! SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW\s0 and \s-1RDRND\s0 ! instruction set support. ! .IP "\fBgoldmont\fR" 4 ! .IX Item "goldmont" ! Intel Goldmont \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, ! SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW, RDRND, AES, SHA, ! RDSEED, XSAVE, XSAVEC, XSAVES, XSAVEOPT, CLFLUSHOPT\s0 and \s-1FSGSBASE\s0 instruction ! set support. ! .IP "\fBgoldmont-plus\fR" 4 ! .IX Item "goldmont-plus" ! Intel Goldmont Plus \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, ! SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW, RDRND, AES, ! SHA, RDSEED, XSAVE, XSAVEC, XSAVES, XSAVEOPT, CLFLUSHOPT, FSGSBASE, PTWRITE, ! RDPID\s0 and \s-1SGX\s0 instruction set support. ! .IP "\fBtremont\fR" 4 ! .IX Item "tremont" ! Intel Tremont \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, ! SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW, RDRND, AES, SHA, ! RDSEED, XSAVE, XSAVEC, XSAVES, XSAVEOPT, CLFLUSHOPT, FSGSBASE, PTWRITE, RDPID, ! SGX, CLWB,\s0 GFNI-SSE, \s-1MOVDIRI, MOVDIR64B, CLDEMOTE\s0 and \s-1WAITPKG\s0 instruction set support. ! .IP "\fBknl\fR" 4 ! .IX Item "knl" ! Intel Knights Landing \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, ! SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, ! RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, ! AVX512PF, AVX512ER, AVX512F, AVX512CD\s0 and \s-1PREFETCHWT1\s0 instruction set support. ! .IP "\fBknm\fR" 4 ! .IX Item "knm" ! Intel Knights Mill \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, ! SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, ! RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, ! AVX512PF, AVX512ER, AVX512F, AVX512CD\s0 and \s-1PREFETCHWT1, AVX5124VNNIW, ! AVX5124FMAPS\s0 and \s-1AVX512VPOPCNTDQ\s0 instruction set support. .IP "\fBk6\fR" 4 .IX Item "k6" \&\s-1AMD K6 CPU\s0 with \s-1MMX\s0 instruction set support. *************** SSSE3, SSE4.1, SSE4.2, ABM, XSAVEC, XSAV *** 30639,30644 **** --- 30658,30673 ---- WBNOINVD, PKU, VPCLMULQDQ, VAES, AVX512F, AVX512DQ, AVX512IFMA, AVX512CD, AVX512BW, AVX512VL, AVX512BF16, AVX512VBMI, AVX512VBMI2, AVX512VNNI, AVX512BITALG, AVX512VPOPCNTDQ, GFNI\s0 and 64\-bit instruction set extensions.) + .IP "\fBznver5\fR" 4 + .IX Item "znver5" + \&\s-1AMD\s0 Family 1ah core based CPUs with x86\-64 instruction set support. (This + supersets \s-1BMI, BMI2, CLWB, F16C, FMA, FSGSBASE, AVX, AVX2, ADCX, RDSEED, + MWAITX, SHA, CLZERO, AES, PCLMUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, + SSSE3, SSE4.1, SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT, RDPID, + WBNOINVD, PKU, VPCLMULQDQ, VAES, AVX512F, AVX512DQ, AVX512IFMA, AVX512CD, + AVX512BW, AVX512VL, AVX512BF16, AVX512VBMI, AVX512VBMI2, AVX512VNNI, + AVX512BITALG, AVX512VPOPCNTDQ, GFNI, AVXVNNI, MOVDIRI, MOVDIR64B, + AVX512VP2INTERSECT, PREFETCHI\s0 and 64\-bit instruction set extensions.) .IP "\fBbtver1\fR" 4 .IX Item "btver1" CPUs based on \s-1AMD\s0 Family 14h cores with x86\-64 instruction set support. (This *************** to subtle defects. Supplying them in ca *** 32501,32508 **** is innocuous. .SH "SEE ALSO" .IX Header "SEE ALSO" ! \&\fBgpl\fR\|(7), \fBgfdl\fR\|(7), \fBfsf\-funding\fR\|(7), ! \&\fBcpp\fR\|(1), \fBgcov\fR\|(1), \fBas\fR\|(1), \fBld\fR\|(1), \fBgdb\fR\|(1), \fBdbx\fR\|(1) and the Info entries for \fIgcc\fR, \fIcpp\fR, \fIas\fR, \&\fIld\fR, \fIbinutils\fR and \fIgdb\fR. .SH "AUTHOR" --- 32530,32537 ---- is innocuous. .SH "SEE ALSO" .IX Header "SEE ALSO" ! \&\fIgpl\fR\|(7), \fIgfdl\fR\|(7), \fIfsf\-funding\fR\|(7), ! \&\fIcpp\fR\|(1), \fIgcov\fR\|(1), \fIas\fR\|(1), \fIld\fR\|(1), \fIgdb\fR\|(1), \fIdbx\fR\|(1) and the Info entries for \fIgcc\fR, \fIcpp\fR, \fIas\fR, \&\fIld\fR, \fIbinutils\fR and \fIgdb\fR. .SH "AUTHOR" *************** any later version published by the Free *** 32520,32526 **** Invariant Sections being \*(L"\s-1GNU\s0 General Public License\*(R" and \*(L"Funding Free Software\*(R", the Front-Cover texts being (a) (see below), and with the Back-Cover Texts being (b) (see below). A copy of the license is ! included in the \fBgfdl\fR\|(7) man page. .PP (a) The \s-1FSF\s0's Front-Cover Text is: .PP --- 32549,32555 ---- Invariant Sections being \*(L"\s-1GNU\s0 General Public License\*(R" and \*(L"Funding Free Software\*(R", the Front-Cover texts being (a) (see below), and with the Back-Cover Texts being (b) (see below). A copy of the license is ! included in the \fIgfdl\fR\|(7) man page. .PP (a) The \s-1FSF\s0's Front-Cover Text is: .PP diff -Nrcpad gcc-12.4.0/gcc/doc/gcc.1 gcc-12.5.0-RC-20250704/gcc/doc/gcc.1 *** gcc-12.4.0/gcc/doc/gcc.1 Thu Jun 20 08:26:16 2024 --- gcc-12.5.0-RC-20250704/gcc/doc/gcc.1 Fri Jul 4 07:38:22 2025 *************** *** 1,4 **** ! .\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.43) .\" .\" Standard preamble: .\" ======================================================================== --- 1,4 ---- ! .\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35) .\" .\" Standard preamble: .\" ======================================================================== *************** *** 54,73 **** .\" Avoid warning from groff about undefined register 'F'. .de IX .. ! .nr rF 0 ! .if \n(.g .if rF .nr rF 1 ! .if (\n(rF:(\n(.g==0)) \{\ ! . if \nF \{\ ! . de IX ! . tm Index:\\$1\t\\n%\t"\\$2" .. ! . if !\nF==2 \{\ ! . nr % 0 ! . nr F 2 ! . \} . \} .\} - .rr rF .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. --- 54,69 ---- .\" Avoid warning from groff about undefined register 'F'. .de IX .. ! .if !\nF .nr F 0 ! .if \nF>0 \{\ ! . de IX ! . tm Index:\\$1\t\\n%\t"\\$2" .. ! . if !\nF==2 \{\ ! . nr % 0 ! . nr F 2 . \} .\} .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. *************** *** 133,139 **** .\" ======================================================================== .\" .IX Title "GCC 1" ! .TH GCC 1 "2024-06-20" "gcc-12.4.0" "GNU" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l --- 129,135 ---- .\" ======================================================================== .\" .IX Title "GCC 1" ! .TH GCC 1 "2025-07-04" "gcc-12.4.1" "GNU" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l *************** This is useful if you need to make sure *** 4462,4469 **** be compiled with older versions of \s-1GCC.\s0 .IP "\fB\-freplace\-objc\-classes\fR" 4 .IX Item "-freplace-objc-classes" ! Emit a special marker instructing \fB\fBld\fB\|(1)\fR not to statically link in ! the resulting object file, and allow \fB\fBdyld\fB\|(1)\fR to load it in at run time instead. This is used in conjunction with the Fix-and-Continue debugging mode, where the object file in question may be recompiled and dynamically reloaded in the course of program execution, without the need --- 4458,4465 ---- be compiled with older versions of \s-1GCC.\s0 .IP "\fB\-freplace\-objc\-classes\fR" 4 .IX Item "-freplace-objc-classes" ! Emit a special marker instructing \fB\f(BIld\fB\|(1)\fR not to statically link in ! the resulting object file, and allow \fB\f(BIdyld\fB\|(1)\fR to load it in at run time instead. This is used in conjunction with the Fix-and-Continue debugging mode, where the object file in question may be recompiled and dynamically reloaded in the course of program execution, without the need *************** example of how this can happen: *** 6816,6822 **** .Sp If the value of \f(CW\*(C`y\*(C'\fR is always 1, 2 or 3, then \f(CW\*(C`x\*(C'\fR is always initialized, but \s-1GCC\s0 doesn't know this. To suppress the ! warning, you need to provide a default case with \fBassert\fR\|(0) or similar code. .Sp This option also warns when a non-volatile automatic variable might be --- 6812,6818 ---- .Sp If the value of \f(CW\*(C`y\*(C'\fR is always 1, 2 or 3, then \f(CW\*(C`x\*(C'\fR is always initialized, but \s-1GCC\s0 doesn't know this. To suppress the ! warning, you need to provide a default case with \fIassert\fR\|(0) or similar code. .Sp This option also warns when a non-volatile automatic variable might be *************** run-time callbacks. *** 13949,13955 **** Emit special instrumentation for accesses to volatiles. .IP "\fBtsan-instrument-func-entry-exit\fR" 4 .IX Item "tsan-instrument-func-entry-exit" ! Emit instrumentation calls to _\|\fB_tsan_func_entry()\fR and _\|\fB_tsan_func_exit()\fR. .IP "\fBmax-fsm-thread-path-insns\fR" 4 .IX Item "max-fsm-thread-path-insns" Maximum number of instructions to copy when duplicating blocks on a --- 13945,13951 ---- Emit special instrumentation for accesses to volatiles. .IP "\fBtsan-instrument-func-entry-exit\fR" 4 .IX Item "tsan-instrument-func-entry-exit" ! Emit instrumentation calls to _\|\fI_tsan_func_entry()\fR and _\|\fI_tsan_func_exit()\fR. .IP "\fBmax-fsm-thread-path-insns\fR" 4 .IX Item "max-fsm-thread-path-insns" Maximum number of instructions to copy when duplicating blocks on a *************** performance of the code. Permissible va *** 18453,18460 **** \&\fBcortex\-a78\fR, \fBcortex\-a78ae\fR, \fBcortex\-a78c\fR, \&\fBares\fR, \fBexynos\-m1\fR, \fBemag\fR, \fBfalkor\fR, \&\fBneoverse\-512tvb\fR, \fBneoverse\-e1\fR, \fBneoverse\-n1\fR, ! \&\fBneoverse\-n2\fR, \fBneoverse\-v1\fR, \fBneoverse\-v2\fR, \fBqdf24xx\fR, ! \&\fBsaphira\fR, \fBphecda\fR, \fBxgene1\fR, \fBvulcan\fR, \&\fBocteontx\fR, \fBocteontx81\fR, \fBocteontx83\fR, \&\fBocteontx2\fR, \fBocteontx2t98\fR, \fBocteontx2t96\fR \&\fBocteontx2t93\fR, \fBocteontx2f95\fR, \fBocteontx2f95n\fR, --- 18449,18456 ---- \&\fBcortex\-a78\fR, \fBcortex\-a78ae\fR, \fBcortex\-a78c\fR, \&\fBares\fR, \fBexynos\-m1\fR, \fBemag\fR, \fBfalkor\fR, \&\fBneoverse\-512tvb\fR, \fBneoverse\-e1\fR, \fBneoverse\-n1\fR, ! \&\fBneoverse\-n2\fR, \fBneoverse\-v1\fR, \fBneoverse\-v2\fR, \fBgrace\fR, ! \&\fBqdf24xx\fR, \fBsaphira\fR, \fBphecda\fR, \fBxgene1\fR, \fBvulcan\fR, \&\fBocteontx\fR, \fBocteontx81\fR, \fBocteontx83\fR, \&\fBocteontx2\fR, \fBocteontx2t98\fR, \fBocteontx2t96\fR \&\fBocteontx2t93\fR, \fBocteontx2f95\fR, \fBocteontx2f95n\fR, *************** are provided for backwards compatibility *** 22144,22150 **** .IP "\fB\-all_load\fR" 4 .IX Item "-all_load" Loads all members of static archive libraries. ! See man \fBld\fR\|(1) for more information. .IP "\fB\-arch_errors_fatal\fR" 4 .IX Item "-arch_errors_fatal" Cause the errors having to do with files that have the wrong architecture --- 22140,22146 ---- .IP "\fB\-all_load\fR" 4 .IX Item "-all_load" Loads all members of static archive libraries. ! See man \fIld\fR\|(1) for more information. .IP "\fB\-arch_errors_fatal\fR" 4 .IX Item "-arch_errors_fatal" Cause the errors having to do with files that have the wrong architecture *************** bind all undefined references when the f *** 22156,22166 **** .IP "\fB\-bundle\fR" 4 .IX Item "-bundle" Produce a Mach-o bundle format file. ! See man \fBld\fR\|(1) for more information. .IP "\fB\-bundle_loader\fR \fIexecutable\fR" 4 .IX Item "-bundle_loader executable" This option specifies the \fIexecutable\fR that will load the build ! output file being linked. See man \fBld\fR\|(1) for more information. .IP "\fB\-dynamiclib\fR" 4 .IX Item "-dynamiclib" When passed this option, \s-1GCC\s0 produces a dynamic library instead of --- 22152,22162 ---- .IP "\fB\-bundle\fR" 4 .IX Item "-bundle" Produce a Mach-o bundle format file. ! See man \fIld\fR\|(1) for more information. .IP "\fB\-bundle_loader\fR \fIexecutable\fR" 4 .IX Item "-bundle_loader executable" This option specifies the \fIexecutable\fR that will load the build ! output file being linked. See man \fIld\fR\|(1) for more information. .IP "\fB\-dynamiclib\fR" 4 .IX Item "-dynamiclib" When passed this option, \s-1GCC\s0 produces a dynamic library instead of *************** Intel Core 2 \s-1CPU\s0 with 64\-bit ext *** 30370,30375 **** --- 30366,30375 ---- SAHF\s0 and \s-1FXSR\s0 instruction set support. .IP "\fBnehalem\fR" 4 .IX Item "nehalem" + .PD 0 + .IP "\fBcorei7\fR" 4 + .IX Item "corei7" + .PD Intel Nehalem \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF\s0 and \s-1FXSR\s0 instruction set support. .IP "\fBwestmere\fR" 4 *************** Intel Westmere \s-1CPU\s0 with 64\-bit e *** 30378,30394 **** SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR\s0 and \s-1PCLMUL\s0 instruction set support. .IP "\fBsandybridge\fR" 4 .IX Item "sandybridge" Intel Sandy Bridge \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE\s0 and \s-1PCLMUL\s0 instruction set support. .IP "\fBivybridge\fR" 4 .IX Item "ivybridge" Intel Ivy Bridge \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND\s0 and F16C instruction set support. .IP "\fBhaswell\fR" 4 .IX Item "haswell" ! Intel Haswell \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE\s0 and \s-1HLE\s0 instruction set support. .IP "\fBbroadwell\fR" 4 --- 30378,30406 ---- SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR\s0 and \s-1PCLMUL\s0 instruction set support. .IP "\fBsandybridge\fR" 4 .IX Item "sandybridge" + .PD 0 + .IP "\fBcorei7\-avx\fR" 4 + .IX Item "corei7-avx" + .PD Intel Sandy Bridge \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE\s0 and \s-1PCLMUL\s0 instruction set support. .IP "\fBivybridge\fR" 4 .IX Item "ivybridge" + .PD 0 + .IP "\fBcore-avx-i\fR" 4 + .IX Item "core-avx-i" + .PD Intel Ivy Bridge \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND\s0 and F16C instruction set support. .IP "\fBhaswell\fR" 4 .IX Item "haswell" ! .PD 0 ! .IP "\fBcore\-avx2\fR" 4 ! .IX Item "core-avx2" ! .PD ! Intel Haswell \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE\s0 and \s-1HLE\s0 instruction set support. .IP "\fBbroadwell\fR" 4 *************** Intel Skylake \s-1CPU\s0 with 64\-bit ex *** 30403,30449 **** SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, CLFLUSHOPT, XSAVEC, XSAVES\s0 and \s-1SGX\s0 instruction set support. - .IP "\fBbonnell\fR" 4 - .IX Item "bonnell" - Intel Bonnell \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3\s0 and \s-1SSSE3\s0 - instruction set support. - .IP "\fBsilvermont\fR" 4 - .IX Item "silvermont" - Intel Silvermont \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, - SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW\s0 and \s-1RDRND\s0 - instruction set support. - .IP "\fBgoldmont\fR" 4 - .IX Item "goldmont" - Intel Goldmont \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, - SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW, RDRND, AES, SHA, - RDSEED, XSAVE, XSAVEC, XSAVES, XSAVEOPT, CLFLUSHOPT\s0 and \s-1FSGSBASE\s0 instruction - set support. - .IP "\fBgoldmont-plus\fR" 4 - .IX Item "goldmont-plus" - Intel Goldmont Plus \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, - SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW, RDRND, AES, - SHA, RDSEED, XSAVE, XSAVEC, XSAVES, XSAVEOPT, CLFLUSHOPT, FSGSBASE, PTWRITE, - RDPID\s0 and \s-1SGX\s0 instruction set support. - .IP "\fBtremont\fR" 4 - .IX Item "tremont" - Intel Tremont \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, - SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW, RDRND, AES, SHA, - RDSEED, XSAVE, XSAVEC, XSAVES, XSAVEOPT, CLFLUSHOPT, FSGSBASE, PTWRITE, RDPID, - SGX, CLWB,\s0 GFNI-SSE, \s-1MOVDIRI, MOVDIR64B, CLDEMOTE\s0 and \s-1WAITPKG\s0 instruction set - support. - .IP "\fBknl\fR" 4 - .IX Item "knl" - Intel Knight's Landing \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, - SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, - RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, - AVX512PF, AVX512ER, AVX512F, AVX512CD\s0 and \s-1PREFETCHWT1\s0 instruction set support. - .IP "\fBknm\fR" 4 - .IX Item "knm" - Intel Knights Mill \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, - SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, - RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, - AVX512PF, AVX512ER, AVX512F, AVX512CD\s0 and \s-1PREFETCHWT1, AVX5124VNNIW, - AVX5124FMAPS\s0 and \s-1AVX512VPOPCNTDQ\s0 instruction set support. .IP "\fBskylake\-avx512\fR" 4 .IX Item "skylake-avx512" Intel Skylake Server \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, --- 30415,30420 ---- *************** SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAH *** 30451,30467 **** RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL, AVX512BW, AVX512DQ\s0 and \s-1AVX512CD\s0 instruction set support. .IP "\fBcannonlake\fR" 4 .IX Item "cannonlake" ! Intel Cannonlake Server \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA\s0 and \s-1SHA\s0 instruction set support. .IP "\fBicelake-client\fR" 4 .IX Item "icelake-client" ! Intel Icelake Client \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ, --- 30422,30452 ---- RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL, AVX512BW, AVX512DQ\s0 and \s-1AVX512CD\s0 instruction set support. + .IP "\fBcascadelake\fR" 4 + .IX Item "cascadelake" + Intel Cascade Lake \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3, + SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, + F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, + CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL, AVX512BW, AVX512DQ, + AVX512CD\s0 and \s-1AVX512VNNI\s0 instruction set support. .IP "\fBcannonlake\fR" 4 .IX Item "cannonlake" ! Intel Cannon Lake Server \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA\s0 and \s-1SHA\s0 instruction set support. + .IP "\fBcooperlake\fR" 4 + .IX Item "cooperlake" + Intel Cooper Lake \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3, + SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, + F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, + CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL, AVX512BW, AVX512DQ, + AVX512CD, AVX512VNNI\s0 and \s-1AVX512BF16\s0 instruction set support. .IP "\fBicelake-client\fR" 4 .IX Item "icelake-client" ! Intel Ice Lake Client \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ, *************** AVX512CD, PKU, AVX512VBMI, AVX512IFMA, S *** 30469,30531 **** , VPCLMULQDQ, AVX512BITALG, RDPID\s0 and \s-1AVX512VPOPCNTDQ\s0 instruction set support. .IP "\fBicelake-server\fR" 4 .IX Item "icelake-server" ! Intel Icelake Server \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2 , VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, PCONFIG, WBNOINVD\s0 and \s-1CLWB\s0 instruction set support. - .IP "\fBcascadelake\fR" 4 - .IX Item "cascadelake" - Intel Cascadelake \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, - SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, - F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, - CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL, AVX512BW, AVX512DQ, - AVX512CD\s0 and \s-1AVX512VNNI\s0 instruction set support. - .IP "\fBcooperlake\fR" 4 - .IX Item "cooperlake" - Intel cooperlake \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, - SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, - F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, - CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL, AVX512BW, AVX512DQ, - AVX512CD, AVX512VNNI\s0 and \s-1AVX512BF16\s0 instruction set support. .IP "\fBtigerlake\fR" 4 .IX Item "tigerlake" ! Intel Tigerlake \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, ! CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD ! PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2, VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, MOVDIRI, MOVDIR64B, CLWB, AVX512VP2INTERSECT\s0 and \s-1KEYLOCKER\s0 instruction set support. .IP "\fBsapphirerapids\fR" 4 .IX Item "sapphirerapids" ! Intel sapphirerapids \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, ! SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, ! RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, ! AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2, VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, PCONFIG, WBNOINVD, CLWB, MOVDIRI, MOVDIR64B, ENQCMD, CLDEMOTE, PTWRITE, WAITPKG, SERIALIZE, TSXLDTRK, UINTR, AMX\-BF16,\s0 AMX-TILE, \s-1AMX\-INT8,\s0 AVX-VNNI, \s-1AVX512\-FP16\s0 and \s-1AVX512BF16\s0 instruction set support. ! .IP "\fBalderlake\fR" 4 ! .IX Item "alderlake" ! Intel Alderlake \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, ! SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC, XSAVES, ! XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX,\s0 GFNI-SSE, \s-1CLWB, MOVDIRI, MOVDIR64B, ! CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT, PCONFIG, PKU, ! VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL\s0 and AVX-VNNI instruction set support. ! .IP "\fBrocketlake\fR" 4 ! .IX Item "rocketlake" ! Intel Rocketlake \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3 ! , SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, ! F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, ! CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD ! PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2, ! VPCLMULQDQ, AVX512BITALG, RDPID\s0 and \s-1AVX512VPOPCNTDQ\s0 instruction set support. .IP "\fBk6\fR" 4 .IX Item "k6" \&\s-1AMD K6 CPU\s0 with \s-1MMX\s0 instruction set support. --- 30454,30550 ---- , VPCLMULQDQ, AVX512BITALG, RDPID\s0 and \s-1AVX512VPOPCNTDQ\s0 instruction set support. .IP "\fBicelake-server\fR" 4 .IX Item "icelake-server" ! Intel Ice Lake Server \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2 , VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, PCONFIG, WBNOINVD\s0 and \s-1CLWB\s0 instruction set support. .IP "\fBtigerlake\fR" 4 .IX Item "tigerlake" ! Intel Tiger Lake \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, ! CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ, ! AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2, VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, MOVDIRI, MOVDIR64B, CLWB, AVX512VP2INTERSECT\s0 and \s-1KEYLOCKER\s0 instruction set support. + .IP "\fBrocketlake\fR" 4 + .IX Item "rocketlake" + Intel Rocket Lake \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3, + SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, + F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, + CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD, + PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2, + VPCLMULQDQ, AVX512BITALG, RDPID\s0 and \s-1AVX512VPOPCNTDQ\s0 instruction set support. + .IP "\fBalderlake\fR" 4 + .IX Item "alderlake" + Intel Alder Lake \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, + SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC, XSAVES, + XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX,\s0 GFNI-SSE, \s-1CLWB, MOVDIRI, MOVDIR64B, + WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT, PCONFIG, PKU, VAES, + VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL\s0 and AVX-VNNI instruction set support. .IP "\fBsapphirerapids\fR" 4 .IX Item "sapphirerapids" ! Intel Sapphire Rapids \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3, ! SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, ! F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, ! CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2, VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, PCONFIG, WBNOINVD, CLWB, MOVDIRI, MOVDIR64B, ENQCMD, CLDEMOTE, PTWRITE, WAITPKG, SERIALIZE, TSXLDTRK, UINTR, AMX\-BF16,\s0 AMX-TILE, \s-1AMX\-INT8,\s0 AVX-VNNI, \s-1AVX512\-FP16\s0 and \s-1AVX512BF16\s0 instruction set support. ! .IP "\fBbonnell\fR" 4 ! .IX Item "bonnell" ! .PD 0 ! .IP "\fBatom\fR" 4 ! .IX Item "atom" ! .PD ! Intel Bonnell \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3\s0 and \s-1SSSE3\s0 ! instruction set support. ! .IP "\fBsilvermont\fR" 4 ! .IX Item "silvermont" ! .PD 0 ! .IP "\fBslm\fR" 4 ! .IX Item "slm" ! .PD ! Intel Silvermont \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, ! SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW\s0 and \s-1RDRND\s0 ! instruction set support. ! .IP "\fBgoldmont\fR" 4 ! .IX Item "goldmont" ! Intel Goldmont \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, ! SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW, RDRND, AES, SHA, ! RDSEED, XSAVE, XSAVEC, XSAVES, XSAVEOPT, CLFLUSHOPT\s0 and \s-1FSGSBASE\s0 instruction ! set support. ! .IP "\fBgoldmont-plus\fR" 4 ! .IX Item "goldmont-plus" ! Intel Goldmont Plus \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, ! SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW, RDRND, AES, ! SHA, RDSEED, XSAVE, XSAVEC, XSAVES, XSAVEOPT, CLFLUSHOPT, FSGSBASE, PTWRITE, ! RDPID\s0 and \s-1SGX\s0 instruction set support. ! .IP "\fBtremont\fR" 4 ! .IX Item "tremont" ! Intel Tremont \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, ! SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW, RDRND, AES, SHA, ! RDSEED, XSAVE, XSAVEC, XSAVES, XSAVEOPT, CLFLUSHOPT, FSGSBASE, PTWRITE, RDPID, ! SGX, CLWB,\s0 GFNI-SSE, \s-1MOVDIRI, MOVDIR64B, CLDEMOTE\s0 and \s-1WAITPKG\s0 instruction set support. ! .IP "\fBknl\fR" 4 ! .IX Item "knl" ! Intel Knights Landing \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, ! SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, ! RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, ! AVX512PF, AVX512ER, AVX512F, AVX512CD\s0 and \s-1PREFETCHWT1\s0 instruction set support. ! .IP "\fBknm\fR" 4 ! .IX Item "knm" ! Intel Knights Mill \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, ! SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, ! RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, ! AVX512PF, AVX512ER, AVX512F, AVX512CD\s0 and \s-1PREFETCHWT1, AVX5124VNNIW, ! AVX5124FMAPS\s0 and \s-1AVX512VPOPCNTDQ\s0 instruction set support. .IP "\fBk6\fR" 4 .IX Item "k6" \&\s-1AMD K6 CPU\s0 with \s-1MMX\s0 instruction set support. *************** SSSE3, SSE4.1, SSE4.2, ABM, XSAVEC, XSAV *** 30639,30644 **** --- 30658,30673 ---- WBNOINVD, PKU, VPCLMULQDQ, VAES, AVX512F, AVX512DQ, AVX512IFMA, AVX512CD, AVX512BW, AVX512VL, AVX512BF16, AVX512VBMI, AVX512VBMI2, AVX512VNNI, AVX512BITALG, AVX512VPOPCNTDQ, GFNI\s0 and 64\-bit instruction set extensions.) + .IP "\fBznver5\fR" 4 + .IX Item "znver5" + \&\s-1AMD\s0 Family 1ah core based CPUs with x86\-64 instruction set support. (This + supersets \s-1BMI, BMI2, CLWB, F16C, FMA, FSGSBASE, AVX, AVX2, ADCX, RDSEED, + MWAITX, SHA, CLZERO, AES, PCLMUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, + SSSE3, SSE4.1, SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT, RDPID, + WBNOINVD, PKU, VPCLMULQDQ, VAES, AVX512F, AVX512DQ, AVX512IFMA, AVX512CD, + AVX512BW, AVX512VL, AVX512BF16, AVX512VBMI, AVX512VBMI2, AVX512VNNI, + AVX512BITALG, AVX512VPOPCNTDQ, GFNI, AVXVNNI, MOVDIRI, MOVDIR64B, + AVX512VP2INTERSECT, PREFETCHI\s0 and 64\-bit instruction set extensions.) .IP "\fBbtver1\fR" 4 .IX Item "btver1" CPUs based on \s-1AMD\s0 Family 14h cores with x86\-64 instruction set support. (This *************** to subtle defects. Supplying them in ca *** 32501,32508 **** is innocuous. .SH "SEE ALSO" .IX Header "SEE ALSO" ! \&\fBgpl\fR\|(7), \fBgfdl\fR\|(7), \fBfsf\-funding\fR\|(7), ! \&\fBcpp\fR\|(1), \fBgcov\fR\|(1), \fBas\fR\|(1), \fBld\fR\|(1), \fBgdb\fR\|(1), \fBdbx\fR\|(1) and the Info entries for \fIgcc\fR, \fIcpp\fR, \fIas\fR, \&\fIld\fR, \fIbinutils\fR and \fIgdb\fR. .SH "AUTHOR" --- 32530,32537 ---- is innocuous. .SH "SEE ALSO" .IX Header "SEE ALSO" ! \&\fIgpl\fR\|(7), \fIgfdl\fR\|(7), \fIfsf\-funding\fR\|(7), ! \&\fIcpp\fR\|(1), \fIgcov\fR\|(1), \fIas\fR\|(1), \fIld\fR\|(1), \fIgdb\fR\|(1), \fIdbx\fR\|(1) and the Info entries for \fIgcc\fR, \fIcpp\fR, \fIas\fR, \&\fIld\fR, \fIbinutils\fR and \fIgdb\fR. .SH "AUTHOR" *************** any later version published by the Free *** 32520,32526 **** Invariant Sections being \*(L"\s-1GNU\s0 General Public License\*(R" and \*(L"Funding Free Software\*(R", the Front-Cover texts being (a) (see below), and with the Back-Cover Texts being (b) (see below). A copy of the license is ! included in the \fBgfdl\fR\|(7) man page. .PP (a) The \s-1FSF\s0's Front-Cover Text is: .PP --- 32549,32555 ---- Invariant Sections being \*(L"\s-1GNU\s0 General Public License\*(R" and \*(L"Funding Free Software\*(R", the Front-Cover texts being (a) (see below), and with the Back-Cover Texts being (b) (see below). A copy of the license is ! included in the \fIgfdl\fR\|(7) man page. .PP (a) The \s-1FSF\s0's Front-Cover Text is: .PP diff -Nrcpad gcc-12.4.0/gcc/doc/gcc.info gcc-12.5.0-RC-20250704/gcc/doc/gcc.info *** gcc-12.4.0/gcc/doc/gcc.info Thu Jun 20 08:26:23 2024 --- gcc-12.5.0-RC-20250704/gcc/doc/gcc.info Fri Jul 4 07:38:25 2025 *************** *** 1,4 **** ! This is gcc.info, produced by makeinfo version 6.8 from gcc.texi. Copyright (C) 1988-2022 Free Software Foundation, Inc. --- 1,4 ---- ! This is gcc.info, produced by makeinfo version 6.5 from gcc.texi. Copyright (C) 1988-2022 Free Software Foundation, Inc. *************** Copies published by the Free Software Fo *** 53,66 **** development.  ! File: gcc.info, Node: Top, Next: G++ and GCC, Up: (dir) Introduction ************ This manual documents how to use the GNU compilers, as well as their features and incompatibilities, and how to report bugs. It corresponds ! to the compilers (GCC) version 12.4.0. The internals of the GNU compilers, including how to port them to new targets and some information about how to write front ends for new languages, are documented in a separate manual. *Note Introduction: (gccint)Top. --- 53,66 ---- development.  ! File: gcc.info, Node: Top, Next: G++ and GCC Introduction ************ This manual documents how to use the GNU compilers, as well as their features and incompatibilities, and how to report bugs. It corresponds ! to the compilers (GCC) version 12.4.1. The internals of the GNU compilers, including how to port them to new targets and some information about how to write front ends for new languages, are documented in a separate manual. *Note Introduction: (gccint)Top. *************** These options are defined for AArch64 im *** 18045,18055 **** 'cortex-a65ae', 'cortex-a34', 'cortex-a78', 'cortex-a78ae', 'cortex-a78c', 'ares', 'exynos-m1', 'emag', 'falkor', 'neoverse-512tvb', 'neoverse-e1', 'neoverse-n1', 'neoverse-n2', ! 'neoverse-v1', 'neoverse-v2', 'qdf24xx', 'saphira', 'phecda', ! 'xgene1', 'vulcan', 'octeontx', 'octeontx81', 'octeontx83', ! 'octeontx2', 'octeontx2t98', 'octeontx2t96' 'octeontx2t93', ! 'octeontx2f95', 'octeontx2f95n', 'octeontx2f95mm', 'a64fx', ! 'thunderx', 'thunderxt88', 'thunderxt88p1', 'thunderxt81', 'tsv110', 'thunderxt83', 'thunderx2t99', 'thunderx3t110', 'zeus', 'cortex-a57.cortex-a53', 'cortex-a72.cortex-a53', 'cortex-a73.cortex-a35', 'cortex-a73.cortex-a53', --- 18045,18055 ---- 'cortex-a65ae', 'cortex-a34', 'cortex-a78', 'cortex-a78ae', 'cortex-a78c', 'ares', 'exynos-m1', 'emag', 'falkor', 'neoverse-512tvb', 'neoverse-e1', 'neoverse-n1', 'neoverse-n2', ! 'neoverse-v1', 'neoverse-v2', 'grace', 'qdf24xx', 'saphira', ! 'phecda', 'xgene1', 'vulcan', 'octeontx', 'octeontx81', ! 'octeontx83', 'octeontx2', 'octeontx2t98', 'octeontx2t96' ! 'octeontx2t93', 'octeontx2f95', 'octeontx2f95n', 'octeontx2f95mm', ! 'a64fx', 'thunderx', 'thunderxt88', 'thunderxt88p1', 'thunderxt81', 'tsv110', 'thunderxt83', 'thunderx2t99', 'thunderx3t110', 'zeus', 'cortex-a57.cortex-a53', 'cortex-a72.cortex-a53', 'cortex-a73.cortex-a35', 'cortex-a73.cortex-a53', *************** These options are defined for AVR implem *** 20161,20167 **** 'avr3' "Classic" devices with 16 KiB up to 64 KiB of program memory. - MCU = 'at76c711', 'at43usb355'. 'avr31' --- 20161,20166 ---- *************** These '-m' options are defined for the x *** 28658,28663 **** --- 28657,28663 ---- SSSE3, CX16, SAHF and FXSR instruction set support. 'nehalem' + 'corei7' Intel Nehalem CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF and FXSR instruction set support. *************** These '-m' options are defined for the x *** 28668,28688 **** PCLMUL instruction set support. 'sandybridge' Intel Sandy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE and PCLMUL instruction set support. 'ivybridge' Intel Ivy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND and F16C instruction set support. 'haswell' ! Intel Haswell CPU with 64-bit extensions, MOVBE, MMX, SSE, ! SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, ! AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, ! LZCNT, FMA, MOVBE and HLE instruction set support. 'broadwell' Intel Broadwell CPU with 64-bit extensions, MOVBE, MMX, SSE, --- 28668,28691 ---- PCLMUL instruction set support. 'sandybridge' + 'corei7-avx' Intel Sandy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE and PCLMUL instruction set support. 'ivybridge' + 'core-avx-i' Intel Ivy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND and F16C instruction set support. 'haswell' ! 'core-avx2' ! Intel Haswell CPU with 64-bit extensions, MMX, SSE, SSE2, ! SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, ! XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, ! FMA, MOVBE and HLE instruction set support. 'broadwell' Intel Broadwell CPU with 64-bit extensions, MOVBE, MMX, SSE, *************** These '-m' options are defined for the x *** 28698,28708 **** --- 28701,28812 ---- LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, CLFLUSHOPT, XSAVEC, XSAVES and SGX instruction set support. + 'skylake-avx512' + Intel Skylake Server CPU with 64-bit extensions, MOVBE, MMX, + SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, + FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, + BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, + CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL, + AVX512BW, AVX512DQ and AVX512CD instruction set support. + + 'cascadelake' + Intel Cascade Lake CPU with 64-bit extensions, MMX, SSE, SSE2, + SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, + XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, + FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, CLFLUSHOPT, + XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL, AVX512BW, + AVX512DQ, AVX512CD and AVX512VNNI instruction set support. + + 'cannonlake' + Intel Cannon Lake Server CPU with 64-bit extensions, MMX, SSE, + SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, + AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, + LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, + CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, + AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA and SHA + instruction set support. + + 'cooperlake' + Intel Cooper Lake CPU with 64-bit extensions, MMX, SSE, SSE2, + SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, + XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, + FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, CLFLUSHOPT, + XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL, AVX512BW, + AVX512DQ, AVX512CD, AVX512VNNI and AVX512BF16 instruction set + support. + + 'icelake-client' + Intel Ice Lake Client CPU with 64-bit extensions, MMX, SSE, + SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, + AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, + LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, + CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, + AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, + AVX512VNNI, GFNI, VAES, AVX512VBMI2 , VPCLMULQDQ, + AVX512BITALG, RDPID and AVX512VPOPCNTDQ instruction set + support. + + 'icelake-server' + Intel Ice Lake Server CPU with 64-bit extensions, MMX, SSE, + SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, + AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, + LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, + CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, + AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, + AVX512VNNI, GFNI, VAES, AVX512VBMI2 , VPCLMULQDQ, + AVX512BITALG, RDPID, AVX512VPOPCNTDQ, PCONFIG, WBNOINVD and + CLWB instruction set support. + + 'tigerlake' + Intel Tiger Lake CPU with 64-bit extensions, MMX, SSE, SSE2, + SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, + XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, + FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, CLFLUSHOPT, + XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ, + AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, + VAES, AVX512VBMI2, VPCLMULQDQ, AVX512BITALG, RDPID, + AVX512VPOPCNTDQ, MOVDIRI, MOVDIR64B, CLWB, AVX512VP2INTERSECT + and KEYLOCKER instruction set support. + + 'rocketlake' + Intel Rocket Lake CPU with 64-bit extensions, MMX, SSE, SSE2, + SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, + XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, + FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, CLFLUSHOPT, + XSAVEC, XSAVES, AVX512F, AVX512VL, AVX512BW, AVX512DQ, + AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, + VAES, AVX512VBMI2, VPCLMULQDQ, AVX512BITALG, RDPID and + AVX512VPOPCNTDQ instruction set support. + + 'alderlake' + Intel Alder Lake CPU with 64-bit extensions, MOVBE, MMX, SSE, + SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, + PCLMUL, RDRND, XSAVE, XSAVEC, XSAVES, XSAVEOPT, FSGSBASE, + PTWRITE, RDPID, SGX, GFNI-SSE, CLWB, MOVDIRI, MOVDIR64B, + WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT, + PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL + and AVX-VNNI instruction set support. + + 'sapphirerapids' + Intel Sapphire Rapids CPU with 64-bit extensions, MMX, SSE, + SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, + AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, + LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, + CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, + AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, + AVX512VNNI, GFNI, VAES, AVX512VBMI2, VPCLMULQDQ, AVX512BITALG, + RDPID, AVX512VPOPCNTDQ, PCONFIG, WBNOINVD, CLWB, MOVDIRI, + MOVDIR64B, ENQCMD, CLDEMOTE, PTWRITE, WAITPKG, SERIALIZE, + TSXLDTRK, UINTR, AMX-BF16, AMX-TILE, AMX-INT8, AVX-VNNI, + AVX512-FP16 and AVX512BF16 instruction set support. + 'bonnell' + 'atom' Intel Bonnell CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3 and SSSE3 instruction set support. 'silvermont' + 'slm' Intel Silvermont CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW and RDRND instruction set support. *************** These '-m' options are defined for the x *** 28730,28736 **** instruction set support. 'knl' ! Intel Knight's Landing CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, --- 28834,28840 ---- instruction set support. 'knl' ! Intel Knights Landing CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, *************** These '-m' options are defined for the x *** 28746,28851 **** AVX5124VNNIW, AVX5124FMAPS and AVX512VPOPCNTDQ instruction set support. - 'skylake-avx512' - Intel Skylake Server CPU with 64-bit extensions, MOVBE, MMX, - SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, - FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, - BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, - CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL, - AVX512BW, AVX512DQ and AVX512CD instruction set support. - - 'cannonlake' - Intel Cannonlake Server CPU with 64-bit extensions, MOVBE, - MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, - SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, - BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, - AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, - AVX512BW, AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA and - SHA instruction set support. - - 'icelake-client' - Intel Icelake Client CPU with 64-bit extensions, MOVBE, MMX, - SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, - FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, - BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, - CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, - AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, - AVX512VNNI, GFNI, VAES, AVX512VBMI2 , VPCLMULQDQ, - AVX512BITALG, RDPID and AVX512VPOPCNTDQ instruction set - support. - - 'icelake-server' - Intel Icelake Server CPU with 64-bit extensions, MOVBE, MMX, - SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, - FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, - BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, - CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, - AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, - AVX512VNNI, GFNI, VAES, AVX512VBMI2 , VPCLMULQDQ, - AVX512BITALG, RDPID, AVX512VPOPCNTDQ, PCONFIG, WBNOINVD and - CLWB instruction set support. - - 'cascadelake' - Intel Cascadelake CPU with 64-bit extensions, MOVBE, MMX, SSE, - SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, - AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, - LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, - CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL, - AVX512BW, AVX512DQ, AVX512CD and AVX512VNNI instruction set - support. - - 'cooperlake' - Intel cooperlake CPU with 64-bit extensions, MOVBE, MMX, SSE, - SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, - AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, - LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, - CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL, - AVX512BW, AVX512DQ, AVX512CD, AVX512VNNI and AVX512BF16 - instruction set support. - - 'tigerlake' - Intel Tigerlake CPU with 64-bit extensions, MOVBE, MMX, SSE, - SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, - AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, - LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, - CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, - AVX512DQ, AVX512CD PKU, AVX512VBMI, AVX512IFMA, SHA, - AVX512VNNI, GFNI, VAES, AVX512VBMI2, VPCLMULQDQ, AVX512BITALG, - RDPID, AVX512VPOPCNTDQ, MOVDIRI, MOVDIR64B, CLWB, - AVX512VP2INTERSECT and KEYLOCKER instruction set support. - - 'sapphirerapids' - Intel sapphirerapids CPU with 64-bit extensions, MOVBE, MMX, - SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, - FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, - BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, - CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, - AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, - AVX512VNNI, GFNI, VAES, AVX512VBMI2, VPCLMULQDQ, AVX512BITALG, - RDPID, AVX512VPOPCNTDQ, PCONFIG, WBNOINVD, CLWB, MOVDIRI, - MOVDIR64B, ENQCMD, CLDEMOTE, PTWRITE, WAITPKG, SERIALIZE, - TSXLDTRK, UINTR, AMX-BF16, AMX-TILE, AMX-INT8, AVX-VNNI, - AVX512-FP16 and AVX512BF16 instruction set support. - - 'alderlake' - Intel Alderlake CPU with 64-bit extensions, MOVBE, MMX, SSE, - SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, - PCLMUL, RDRND, XSAVE, XSAVEC, XSAVES, XSAVEOPT, FSGSBASE, - PTWRITE, RDPID, SGX, GFNI-SSE, CLWB, MOVDIRI, MOVDIR64B, - CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, - LZCNT, PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, - WIDEKL and AVX-VNNI instruction set support. - - 'rocketlake' - Intel Rocketlake CPU with 64-bit extensions, MOVBE, MMX, SSE, - SSE2, SSE3, SSSE3 , SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, - AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, - LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, - CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, AVX512VL, AVX512BW, - AVX512DQ, AVX512CD PKU, AVX512VBMI, AVX512IFMA, SHA, - AVX512VNNI, GFNI, VAES, AVX512VBMI2, VPCLMULQDQ, AVX512BITALG, - RDPID and AVX512VPOPCNTDQ instruction set support. - 'k6' AMD K6 CPU with MMX instruction set support. --- 28850,28855 ---- *************** These '-m' options are defined for the x *** 28948,28953 **** --- 28952,28970 ---- AVX512VBMI, AVX512VBMI2, AVX512VNNI, AVX512BITALG, AVX512VPOPCNTDQ, GFNI and 64-bit instruction set extensions.) + 'znver5' + AMD Family 1ah core based CPUs with x86-64 instruction set + support. (This supersets BMI, BMI2, CLWB, F16C, FMA, + FSGSBASE, AVX, AVX2, ADCX, RDSEED, MWAITX, SHA, CLZERO, AES, + PCLMUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, + SSE4.1, SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT, + RDPID, WBNOINVD, PKU, VPCLMULQDQ, VAES, AVX512F, AVX512DQ, + AVX512IFMA, AVX512CD, AVX512BW, AVX512VL, AVX512BF16, + AVX512VBMI, AVX512VBMI2, AVX512VNNI, AVX512BITALG, + AVX512VPOPCNTDQ, GFNI, AVXVNNI, MOVDIRI, MOVDIR64B, + AVX512VP2INTERSECT, PREFETCHI and 64-bit instruction set + extensions.) + 'btver1' CPUs based on AMD Family 14h cores with x86-64 instruction set support. (This supersets MMX, SSE, SSE2, SSE3, SSSE3, SSE4A, *************** should use the '__atomic' builtins inste *** 45755,45763 **** Not all operations are supported by all target processors. If a particular operation cannot be implemented on the target processor, a ! warning is generated and a call to an external function is generated. ! The external function carries the same name as the built-in version, ! with an additional suffix '_N' where N is the size of the data type. In most cases, these built-in functions are considered a "full barrier". That is, no memory operand is moved across the operation, --- 45772,45780 ---- Not all operations are supported by all target processors. If a particular operation cannot be implemented on the target processor, a ! call to an external function is generated. The external function ! carries the same name as the built-in version, with an additional suffix ! '_N' where N is the size of the data type. In most cases, these built-in functions are considered a "full barrier". That is, no memory operand is moved across the operation, *************** vec_div (vector unsigned long long a, ve *** 52831,52838 **** in doubleword element 'i' of a is divided by the integer in doubleword element 'i' of b. The unique integer quotient is placed into the doubleword element 'i' of the vector returned. If an attempt is made to ! perform any of the divisions 0x8000_0000_0000_0000 ÷ -1 or ÷ ! 0 then the quotient is undefined. vector signed int vec_dive (vector signed int a, vector signed int b); --- 52848,52855 ---- in doubleword element 'i' of a is divided by the integer in doubleword element 'i' of b. The unique integer quotient is placed into the doubleword element 'i' of the vector returned. If an attempt is made to ! perform any of the divisions 0x8000_0000_0000_0000 ÷ -1 or ! ÷ 0 then the quotient is undefined. vector signed int vec_dive (vector signed int a, vector signed int b); *************** to check the target platform type. *** 54251,54256 **** --- 54268,54276 ---- 'znver4' AMD Family 19h Zen version 4. + 'znver5' + AMD Family 1ah Zen version 5. + Here is an example: if (__builtin_cpu_is ("corei7")) { *************** alphabetical order. *** 62406,62412 **** * Ralf Corsepius for SH testing and minor bug fixing. ! * François-Xavier Coudert for contributions to GNU Fortran. * Stan Cox for care and feeding of the x86 port and lots of behind the scenes hacking. --- 62426,62432 ---- * Ralf Corsepius for SH testing and minor bug fixing. ! * Franc,ois-Xavier Coudert for contributions to GNU Fortran. * Stan Cox for care and feeding of the x86 port and lots of behind the scenes hacking. *************** alphabetical order. *** 62449,62455 **** disbursement, configuration architecture, libio maintenance, and early math work. ! * François Dumont for his work on libstdc++-v3, especially maintaining and improving 'debug-mode' and associative and unordered containers. --- 62469,62475 ---- disbursement, configuration architecture, libio maintenance, and early math work. ! * Franc,ois Dumont for his work on libstdc++-v3, especially maintaining and improving 'debug-mode' and associative and unordered containers. *************** alphabetical order. *** 62708,62720 **** * Weiwen Liu for testing and various bug fixes. ! * Manuel López-Ibáñez for improving '-Wconversion' and many other diagnostics fixes and improvements. * Dave Love for his ongoing work with the Fortran front end and runtime libraries. ! * Martin von Löwis for internal consistency checking infrastructure, various C++ improvements including namespace support, and tons of assistance with libstdc++/compiler merges. --- 62728,62740 ---- * Weiwen Liu for testing and various bug fixes. ! * Manuel Lo'pez-Iba'n~ez for improving '-Wconversion' and many other diagnostics fixes and improvements. * Dave Love for his ongoing work with the Fortran front end and runtime libraries. ! * Martin von Lo"wis for internal consistency checking infrastructure, various C++ improvements including namespace support, and tons of assistance with libstdc++/compiler merges. *************** alphabetical order. *** 62906,62912 **** * Craig Rodrigues for processing tons of bug reports. ! * Ola Rönnerup for work on mt_alloc. * Gavin Romig-Koch for lots of behind the scenes MIPS work. --- 62926,62932 ---- * Craig Rodrigues for processing tons of bug reports. ! * Ola Ro"nnerup for work on mt_alloc. * Gavin Romig-Koch for lots of behind the scenes MIPS work. *************** alphabetical order. *** 62920,62926 **** * Paul Rubin wrote most of the preprocessor. ! * Pétur Runólfsson for major performance improvements in C++ formatted I/O and large file support in C++ filebuf. * Chip Salzenberg for libstdc++ patches and improvements to locales, --- 62940,62946 ---- * Paul Rubin wrote most of the preprocessor. ! * Pe'tur Runo'lfsson for major performance improvements in C++ formatted I/O and large file support in C++ filebuf. * Chip Salzenberg for libstdc++ patches and improvements to locales, *************** alphabetical order. *** 62941,62947 **** * William Schelter did most of the work on the Intel 80386 support. ! * Tobias Schlüter for work on GNU Fortran. * Bernd Schmidt for various code generation improvements and major work in the reload pass, serving as release manager for GCC 2.95.3, --- 62961,62967 ---- * William Schelter did most of the work on the Intel 80386 support. ! * Tobias Schlu"ter for work on GNU Fortran. * Bernd Schmidt for various code generation improvements and major work in the reload pass, serving as release manager for GCC 2.95.3, *************** contributions to testing: *** 63438,63444 **** * Robert A. French ! * Jörgen Freyh * Mark K. Gardner --- 63458,63464 ---- * Robert A. French ! * Jo"rgen Freyh * Mark K. Gardner *************** look up both forms. *** 63583,63589 **** * -msingle-float: LoongArch Options. (line 70) * -msmall-data-limit: LoongArch Options. (line 114) * -mstrict-align: LoongArch Options. (line 109) ! * 80387: x86 Options. (line 603) * A: Preprocessor Options. (line 337) * allowable_client: Darwin Options. (line 204) --- 63603,63609 ---- * -msingle-float: LoongArch Options. (line 70) * -msmall-data-limit: LoongArch Options. (line 114) * -mstrict-align: LoongArch Options. (line 109) ! * 80387: x86 Options. (line 621) * A: Preprocessor Options. (line 337) * allowable_client: Darwin Options. (line 204) *************** look up both forms. *** 63661,63670 **** * E: Overall Options. (line 186) * E <1>: Link Options. (line 20) * e: Link Options. (line 172) ! * EB: ARC Options. (line 588) * EB <1>: C-SKY Options. (line 29) * EB <2>: MIPS Options. (line 7) ! * EL: ARC Options. (line 595) * EL <1>: C-SKY Options. (line 31) * EL <2>: MIPS Options. (line 10) * entry: Link Options. (line 172) --- 63681,63690 ---- * E: Overall Options. (line 186) * E <1>: Link Options. (line 20) * e: Link Options. (line 172) ! * EB: ARC Options. (line 590) * EB <1>: C-SKY Options. (line 29) * EB <2>: MIPS Options. (line 7) ! * EL: ARC Options. (line 599) * EL <1>: C-SKY Options. (line 31) * EL <2>: MIPS Options. (line 10) * entry: Link Options. (line 172) *************** look up both forms. *** 64247,64253 **** (line 46) * fno-show-column: Diagnostic Message Formatting Options. (line 408) ! * fno-signed-bitfields: C Dialect Options. (line 449) * fno-signed-zeros: Optimize Options. (line 2412) * fno-stack-limit: Instrumentation Options. (line 823) --- 64267,64273 ---- (line 46) * fno-show-column: Diagnostic Message Formatting Options. (line 408) ! * fno-signed-bitfields: C Dialect Options. (line 451) * fno-signed-zeros: Optimize Options. (line 2412) * fno-stack-limit: Instrumentation Options. (line 823) *************** look up both forms. *** 64255,64261 **** (line 464) * fno-toplevel-reorder: Optimize Options. (line 1859) * fno-trapping-math: Optimize Options. (line 2422) ! * fno-unsigned-bitfields: C Dialect Options. (line 449) * fno-use-cxa-get-exception-ptr: C++ Dialect Options. (line 477) * fno-var-tracking-assignments: Debugging Options. (line 193) --- 64275,64281 ---- (line 464) * fno-toplevel-reorder: Optimize Options. (line 1859) * fno-trapping-math: Optimize Options. (line 2422) ! * fno-unsigned-bitfields: C Dialect Options. (line 451) * fno-use-cxa-get-exception-ptr: C++ Dialect Options. (line 477) * fno-var-tracking-assignments: Debugging Options. (line 193) *************** look up both forms. *** 64290,64298 **** * foffload-options: C Dialect Options. (line 373) * fomit-frame-pointer: Optimize Options. (line 256) * fopenacc: C Dialect Options. (line 388) ! * fopenacc-dim: C Dialect Options. (line 396) ! * fopenmp: C Dialect Options. (line 402) ! * fopenmp-simd: C Dialect Options. (line 410) * foperator-names: C++ Dialect Options. (line 383) * fopt-info: Developer Options. (line 487) --- 64310,64318 ---- * foffload-options: C Dialect Options. (line 373) * fomit-frame-pointer: Optimize Options. (line 256) * fopenacc: C Dialect Options. (line 388) ! * fopenacc-dim: C Dialect Options. (line 397) ! * fopenmp: C Dialect Options. (line 403) ! * fopenmp-simd: C Dialect Options. (line 412) * foperator-names: C++ Dialect Options. (line 383) * fopt-info: Developer Options. (line 487) *************** look up both forms. *** 64317,64330 **** * fpeephole2: Optimize Options. (line 1596) * fpermissive: C++ Dialect Options. (line 392) ! * fpermitted-flt-eval-methods: C Dialect Options. (line 414) ! * fpermitted-flt-eval-methods=c11: C Dialect Options. (line 414) ! * fpermitted-flt-eval-methods=ts-18661-3: C Dialect Options. (line 414) * fpic: Code Gen Options. (line 356) * fPIC: Code Gen Options. (line 377) * fpie: Code Gen Options. (line 390) * fPIE: Code Gen Options. (line 390) ! * fplan9-extensions: C Dialect Options. (line 436) * fplan9-extensions <1>: Unnamed Fields. (line 43) * fplt: Code Gen Options. (line 399) * fplugin: Overall Options. (line 639) --- 64337,64350 ---- * fpeephole2: Optimize Options. (line 1596) * fpermissive: C++ Dialect Options. (line 392) ! * fpermitted-flt-eval-methods: C Dialect Options. (line 416) ! * fpermitted-flt-eval-methods=c11: C Dialect Options. (line 416) ! * fpermitted-flt-eval-methods=ts-18661-3: C Dialect Options. (line 416) * fpic: Code Gen Options. (line 356) * fPIC: Code Gen Options. (line 377) * fpie: Code Gen Options. (line 390) * fPIE: Code Gen Options. (line 390) ! * fplan9-extensions: C Dialect Options. (line 438) * fplan9-extensions <1>: Unnamed Fields. (line 43) * fplt: Code Gen Options. (line 399) * fplugin: Overall Options. (line 639) *************** look up both forms. *** 64503,64511 **** * fshrink-wrap: Optimize Options. (line 923) * fshrink-wrap-separate: Optimize Options. (line 928) * fsignaling-nans: Optimize Options. (line 2457) ! * fsigned-bitfields: C Dialect Options. (line 449) * fsigned-bitfields <1>: Non-bugs. (line 57) ! * fsigned-char: C Dialect Options. (line 455) * fsigned-char <1>: Characters implementation. (line 31) * fsigned-zeros: Optimize Options. (line 2412) --- 64523,64531 ---- * fshrink-wrap: Optimize Options. (line 923) * fshrink-wrap-separate: Optimize Options. (line 928) * fsignaling-nans: Optimize Options. (line 2457) ! * fsigned-bitfields: C Dialect Options. (line 451) * fsigned-bitfields <1>: Non-bugs. (line 57) ! * fsigned-char: C Dialect Options. (line 457) * fsigned-char <1>: Characters implementation. (line 31) * fsigned-zeros: Optimize Options. (line 2412) *************** look up both forms. *** 64524,64530 **** * fsplit-wide-types-early: Optimize Options. (line 482) * fssa-backprop: Optimize Options. (line 1188) * fssa-phiopt: Optimize Options. (line 1194) ! * fsso-struct: C Dialect Options. (line 480) * fstack-check: Instrumentation Options. (line 766) * fstack-clash-protection: Instrumentation Options. --- 64544,64550 ---- * fsplit-wide-types-early: Optimize Options. (line 482) * fssa-backprop: Optimize Options. (line 1188) * fssa-phiopt: Optimize Options. (line 1194) ! * fsso-struct: C Dialect Options. (line 482) * fstack-check: Instrumentation Options. (line 766) * fstack-clash-protection: Instrumentation Options. *************** look up both forms. *** 64550,64559 **** * fstrict-enums: C++ Dialect Options. (line 434) * fstrict-overflow: Code Gen Options. (line 115) ! * fstrict-volatile-bitfields: Code Gen Options. (line 600) * fstrong-eval-order: C++ Dialect Options. (line 443) ! * fsync-libcalls: Code Gen Options. (line 632) * fsyntax-only: Warning Options. (line 14) * ftabstop: Preprocessor Options. (line 241) --- 64570,64579 ---- * fstrict-enums: C++ Dialect Options. (line 434) * fstrict-overflow: Code Gen Options. (line 115) ! * fstrict-volatile-bitfields: Code Gen Options. (line 601) * fstrong-eval-order: C++ Dialect Options. (line 443) ! * fsync-libcalls: Code Gen Options. (line 633) * fsyntax-only: Warning Options. (line 14) * ftabstop: Preprocessor Options. (line 241) *************** look up both forms. *** 64617,64627 **** * funroll-all-loops: Optimize Options. (line 2604) * funroll-loops: Optimize Options. (line 2594) * funsafe-math-optimizations: Optimize Options. (line 2355) ! * funsigned-bitfields: C Dialect Options. (line 449) * funsigned-bitfields <1>: Structures unions enumerations and bit-fields implementation. (line 17) * funsigned-bitfields <2>: Non-bugs. (line 57) ! * funsigned-char: C Dialect Options. (line 462) * funsigned-char <1>: Characters implementation. (line 31) * funswitch-loops: Optimize Options. (line 2636) --- 64637,64647 ---- * funroll-all-loops: Optimize Options. (line 2604) * funroll-loops: Optimize Options. (line 2594) * funsafe-math-optimizations: Optimize Options. (line 2355) ! * funsigned-bitfields: C Dialect Options. (line 451) * funsigned-bitfields <1>: Structures unions enumerations and bit-fields implementation. (line 17) * funsigned-bitfields <2>: Non-bugs. (line 57) ! * funsigned-char: C Dialect Options. (line 464) * funsigned-char <1>: Characters implementation. (line 31) * funswitch-loops: Optimize Options. (line 2636) *************** look up both forms. *** 64671,64677 **** * fzero-link: Objective-C and Objective-C++ Dialect Options. (line 143) * g: Debugging Options. (line 28) ! * G: ARC Options. (line 414) * G <1>: M32R/D Options. (line 57) * G <2>: MIPS Options. (line 460) * G <3>: Nios II Options. (line 9) --- 64691,64697 ---- * fzero-link: Objective-C and Objective-C++ Dialect Options. (line 143) * g: Debugging Options. (line 28) ! * G: ARC Options. (line 416) * G <1>: M32R/D Options. (line 57) * G <2>: MIPS Options. (line 460) * G <3>: Nios II Options. (line 9) *************** look up both forms. *** 64750,64758 **** (line 521) * m1: SH Options. (line 9) * m10: PDP-11 Options. (line 29) ! * m128bit-long-double: x86 Options. (line 655) ! * m16: x86 Options. (line 1551) ! * m16-bit: CRIS Options. (line 62) * m16-bit <1>: NDS32 Options. (line 51) * m1reg-: Adapteva Epiphany Options. (line 131) --- 64770,64778 ---- (line 521) * m1: SH Options. (line 9) * m10: PDP-11 Options. (line 29) ! * m128bit-long-double: x86 Options. (line 673) ! * m16: x86 Options. (line 1569) ! * m16-bit: CRIS Options. (line 63) * m16-bit <1>: NDS32 Options. (line 51) * m1reg-: Adapteva Epiphany Options. (line 131) *************** look up both forms. *** 64770,64785 **** * m32 <1>: SPARC Options. (line 315) * m32 <2>: TILE-Gx Options. (line 23) * m32 <3>: TILEPro Options. (line 13) ! * m32 <4>: x86 Options. (line 1551) ! * m32-bit: CRIS Options. (line 62) * m32bit-doubles: RL78 Options. (line 73) * m32bit-doubles <1>: RX Options. (line 10) * m32r: M32R/D Options. (line 15) * m32r2: M32R/D Options. (line 9) * m32rx: M32R/D Options. (line 12) * m340: MCore Options. (line 43) ! * m3dnow: x86 Options. (line 887) ! * m3dnowa: x86 Options. (line 888) * m3e: SH Options. (line 37) * m4: SH Options. (line 51) * m4-100: SH Options. (line 54) --- 64790,64805 ---- * m32 <1>: SPARC Options. (line 315) * m32 <2>: TILE-Gx Options. (line 23) * m32 <3>: TILEPro Options. (line 13) ! * m32 <4>: x86 Options. (line 1569) ! * m32-bit: CRIS Options. (line 63) * m32bit-doubles: RL78 Options. (line 73) * m32bit-doubles <1>: RX Options. (line 10) * m32r: M32R/D Options. (line 15) * m32r2: M32R/D Options. (line 9) * m32rx: M32R/D Options. (line 12) * m340: MCore Options. (line 43) ! * m3dnow: x86 Options. (line 905) ! * m3dnowa: x86 Options. (line 906) * m3e: SH Options. (line 37) * m4: SH Options. (line 51) * m4-100: SH Options. (line 54) *************** look up both forms. *** 64819,64825 **** (line 86) * m64 <3>: SPARC Options. (line 315) * m64 <4>: TILE-Gx Options. (line 23) ! * m64 <5>: x86 Options. (line 1551) * m64bit-doubles: RL78 Options. (line 73) * m64bit-doubles <1>: RX Options. (line 10) * m68000: M680x0 Options. (line 94) --- 64839,64845 ---- (line 86) * m64 <3>: SPARC Options. (line 315) * m64 <4>: TILE-Gx Options. (line 23) ! * m64 <5>: x86 Options. (line 1569) * m64bit-doubles: RL78 Options. (line 73) * m64bit-doubles <1>: RX Options. (line 10) * m68000: M680x0 Options. (line 94) *************** look up both forms. *** 64831,64840 **** * m68040: M680x0 Options. (line 118) * m68060: M680x0 Options. (line 127) * m68881: M680x0 Options. (line 195) ! * m8-bit: CRIS Options. (line 62) ! * m8bit-idiv: x86 Options. (line 1453) * m8byte-align: V850 Options. (line 170) ! * m96bit-long-double: x86 Options. (line 655) * mA6: ARC Options. (line 23) * mA7: ARC Options. (line 30) * mabi: AArch64 Options. (line 9) --- 64851,64860 ---- * m68040: M680x0 Options. (line 118) * m68060: M680x0 Options. (line 127) * m68881: M680x0 Options. (line 195) ! * m8-bit: CRIS Options. (line 63) ! * m8bit-idiv: x86 Options. (line 1471) * m8byte-align: V850 Options. (line 170) ! * m96bit-long-double: x86 Options. (line 673) * mA6: ARC Options. (line 23) * mA7: ARC Options. (line 30) * mabi: AArch64 Options. (line 9) *************** look up both forms. *** 64844,64850 **** * mabi <4>: RISC-V Options. (line 17) * mabi <5>: RS/6000 and PowerPC Options. (line 552) ! * mabi <6>: x86 Options. (line 1146) * mabi <7>: Xtensa Options. (line 103) * mabi=32: MIPS Options. (line 156) * mabi=64: MIPS Options. (line 156) --- 64864,64870 ---- * mabi <4>: RISC-V Options. (line 17) * mabi <5>: RS/6000 and PowerPC Options. (line 552) ! * mabi <6>: x86 Options. (line 1164) * mabi <7>: Xtensa Options. (line 103) * mabi=32: MIPS Options. (line 156) * mabi=64: MIPS Options. (line 156) *************** look up both forms. *** 64864,64887 **** * mabi=o64: MIPS Options. (line 156) * mabi=windowed: Xtensa Options. (line 115) * mabicalls: MIPS Options. (line 192) ! * mabm: x86 Options. (line 890) * mabort-on-noreturn: ARM Options. (line 752) * mabs=2008: MIPS Options. (line 300) * mabs=legacy: MIPS Options. (line 300) ! * mabsdata: AVR Options. (line 180) * mabsdiff: MeP Options. (line 7) * mac0: PDP-11 Options. (line 16) * macc-4: FRV Options. (line 139) * macc-8: FRV Options. (line 143) ! * maccumulate-args: AVR Options. (line 187) * maccumulate-outgoing-args: SH Options. (line 314) ! * maccumulate-outgoing-args <1>: x86 Options. (line 1190) ! * maddress-mode=long: x86 Options. (line 1601) ! * maddress-mode=short: x86 Options. (line 1606) * mads: RS/6000 and PowerPC Options. (line 614) ! * madx: x86 Options. (line 891) ! * maes: x86 Options. (line 868) * maix-struct-return: RS/6000 and PowerPC Options. (line 545) * maix32: RS/6000 and PowerPC Options. --- 64884,64907 ---- * mabi=o64: MIPS Options. (line 156) * mabi=windowed: Xtensa Options. (line 115) * mabicalls: MIPS Options. (line 192) ! * mabm: x86 Options. (line 908) * mabort-on-noreturn: ARM Options. (line 752) * mabs=2008: MIPS Options. (line 300) * mabs=legacy: MIPS Options. (line 300) ! * mabsdata: AVR Options. (line 181) * mabsdiff: MeP Options. (line 7) * mac0: PDP-11 Options. (line 16) * macc-4: FRV Options. (line 139) * macc-8: FRV Options. (line 143) ! * maccumulate-args: AVR Options. (line 188) * maccumulate-outgoing-args: SH Options. (line 314) ! * maccumulate-outgoing-args <1>: x86 Options. (line 1208) ! * maddress-mode=long: x86 Options. (line 1619) ! * maddress-mode=short: x86 Options. (line 1624) * mads: RS/6000 and PowerPC Options. (line 614) ! * madx: x86 Options. (line 909) ! * maes: x86 Options. (line 886) * maix-struct-return: RS/6000 and PowerPC Options. (line 545) * maix32: RS/6000 and PowerPC Options. *************** look up both forms. *** 64889,64898 **** * maix64: RS/6000 and PowerPC Options. (line 283) * malign-300: H8/300 Options. (line 41) ! * malign-call: ARC Options. (line 433) * malign-data: RISC-V Options. (line 168) ! * malign-data <1>: x86 Options. (line 695) ! * malign-double: x86 Options. (line 640) * malign-int: M680x0 Options. (line 262) * malign-labels: FRV Options. (line 128) * malign-loops: M32R/D Options. (line 73) --- 64909,64918 ---- * maix64: RS/6000 and PowerPC Options. (line 283) * malign-300: H8/300 Options. (line 41) ! * malign-call: ARC Options. (line 435) * malign-data: RISC-V Options. (line 168) ! * malign-data <1>: x86 Options. (line 713) ! * malign-double: x86 Options. (line 658) * malign-int: M680x0 Options. (line 262) * malign-labels: FRV Options. (line 128) * malign-loops: M32R/D Options. (line 73) *************** look up both forms. *** 64900,64906 **** (line 321) * malign-power: RS/6000 and PowerPC Options. (line 321) ! * malign-stringops: x86 Options. (line 1326) * mall-opts: MeP Options. (line 11) * malloc-cc: FRV Options. (line 31) * mallow-string-insns: RX Options. (line 150) --- 64920,64926 ---- (line 321) * malign-power: RS/6000 and PowerPC Options. (line 321) ! * malign-stringops: x86 Options. (line 1344) * mall-opts: MeP Options. (line 11) * malloc-cc: FRV Options. (line 31) * mallow-string-insns: RX Options. (line 150) *************** look up both forms. *** 64911,64919 **** * mam33: MN10300 Options. (line 17) * mam33-2: MN10300 Options. (line 24) * mam34: MN10300 Options. (line 27) ! * mamx-bf16: x86 Options. (line 929) ! * mamx-int8: x86 Options. (line 928) ! * mamx-tile: x86 Options. (line 927) * manchor: C-SKY Options. (line 126) * mandroid: GNU/Linux Options. (line 26) * mannotate-align: ARC Options. (line 382) --- 64931,64939 ---- * mam33: MN10300 Options. (line 17) * mam33-2: MN10300 Options. (line 24) * mam34: MN10300 Options. (line 27) ! * mamx-bf16: x86 Options. (line 947) ! * mamx-int8: x86 Options. (line 946) ! * mamx-tile: x86 Options. (line 945) * manchor: C-SKY Options. (line 126) * mandroid: GNU/Linux Options. (line 26) * mannotate-align: ARC Options. (line 382) *************** look up both forms. *** 64943,64986 **** * march <15>: x86 Options. (line 9) * march=: C-SKY Options. (line 9) * marclinux: ARC Options. (line 388) ! * marclinux_prof: ARC Options. (line 394) ! * margonaut: ARC Options. (line 584) * marm: ARM Options. (line 824) * mas100-syntax: RX Options. (line 76) * masm-hex: MSP430 Options. (line 9) * masm-syntax-unified: ARM Options. (line 932) ! * masm=DIALECT: x86 Options. (line 589) * matomic: ARC Options. (line 155) * matomic-model=MODEL: SH Options. (line 193) * mauto-litpools: Xtensa Options. (line 60) ! * mauto-modify-reg: ARC Options. (line 436) * mauto-pic: IA-64 Options. (line 50) * maverage: MeP Options. (line 16) * mavoid-indexed-addresses: RS/6000 and PowerPC Options. (line 360) ! * mavx: x86 Options. (line 856) ! * mavx2: x86 Options. (line 857) ! * mavx256-split-unaligned-load: x86 Options. (line 1461) ! * mavx256-split-unaligned-store: x86 Options. (line 1461) ! * mavx5124fmaps: x86 Options. (line 921) ! * mavx5124vnniw: x86 Options. (line 924) ! * mavx512bf16: x86 Options. (line 907) ! * mavx512bitalg: x86 Options. (line 913) ! * mavx512bw: x86 Options. (line 863) ! * mavx512cd: x86 Options. (line 861) ! * mavx512dq: x86 Options. (line 864) ! * mavx512er: x86 Options. (line 860) ! * mavx512f: x86 Options. (line 858) ! * mavx512fp16: x86 Options. (line 908) ! * mavx512ifma: x86 Options. (line 865) ! * mavx512pf: x86 Options. (line 859) ! * mavx512vbmi: x86 Options. (line 866) ! * mavx512vbmi2: x86 Options. (line 906) ! * mavx512vl: x86 Options. (line 862) ! * mavx512vnni: x86 Options. (line 922) ! * mavx512vp2intersect: x86 Options. (line 920) ! * mavx512vpopcntdq: x86 Options. (line 919) ! * mavxvnni: x86 Options. (line 923) * max-vect-align: Adapteva Epiphany Options. (line 119) * mb: SH Options. (line 126) --- 64963,65006 ---- * march <15>: x86 Options. (line 9) * march=: C-SKY Options. (line 9) * marclinux: ARC Options. (line 388) ! * marclinux_prof: ARC Options. (line 395) ! * margonaut: ARC Options. (line 586) * marm: ARM Options. (line 824) * mas100-syntax: RX Options. (line 76) * masm-hex: MSP430 Options. (line 9) * masm-syntax-unified: ARM Options. (line 932) ! * masm=DIALECT: x86 Options. (line 607) * matomic: ARC Options. (line 155) * matomic-model=MODEL: SH Options. (line 193) * mauto-litpools: Xtensa Options. (line 60) ! * mauto-modify-reg: ARC Options. (line 438) * mauto-pic: IA-64 Options. (line 50) * maverage: MeP Options. (line 16) * mavoid-indexed-addresses: RS/6000 and PowerPC Options. (line 360) ! * mavx: x86 Options. (line 874) ! * mavx2: x86 Options. (line 875) ! * mavx256-split-unaligned-load: x86 Options. (line 1479) ! * mavx256-split-unaligned-store: x86 Options. (line 1479) ! * mavx5124fmaps: x86 Options. (line 939) ! * mavx5124vnniw: x86 Options. (line 942) ! * mavx512bf16: x86 Options. (line 925) ! * mavx512bitalg: x86 Options. (line 931) ! * mavx512bw: x86 Options. (line 881) ! * mavx512cd: x86 Options. (line 879) ! * mavx512dq: x86 Options. (line 882) ! * mavx512er: x86 Options. (line 878) ! * mavx512f: x86 Options. (line 876) ! * mavx512fp16: x86 Options. (line 926) ! * mavx512ifma: x86 Options. (line 883) ! * mavx512pf: x86 Options. (line 877) ! * mavx512vbmi: x86 Options. (line 884) ! * mavx512vbmi2: x86 Options. (line 924) ! * mavx512vl: x86 Options. (line 880) ! * mavx512vnni: x86 Options. (line 940) ! * mavx512vp2intersect: x86 Options. (line 938) ! * mavx512vpopcntdq: x86 Options. (line 937) ! * mavxvnni: x86 Options. (line 941) * max-vect-align: Adapteva Epiphany Options. (line 119) * mb: SH Options. (line 126) *************** look up both forms. *** 64988,65002 **** (line 35) * mbarrel-shift-enabled: LM32 Options. (line 9) * mbarrel-shifter: ARC Options. (line 10) ! * mbarrel_shifter: ARC Options. (line 601) * mbase-addresses: MMIX Options. (line 53) * mbased=: MeP Options. (line 20) ! * mbbit-peephole: ARC Options. (line 439) * mbe8: ARM Options. (line 72) * mbig: RS/6000 and PowerPC Options. (line 440) * mbig-endian: AArch64 Options. (line 20) ! * mbig-endian <1>: ARC Options. (line 587) * mbig-endian <2>: ARM Options. (line 67) * mbig-endian <3>: C6X Options. (line 13) * mbig-endian <4>: C-SKY Options. (line 28) --- 65008,65022 ---- (line 35) * mbarrel-shift-enabled: LM32 Options. (line 9) * mbarrel-shifter: ARC Options. (line 10) ! * mbarrel_shifter: ARC Options. (line 606) * mbase-addresses: MMIX Options. (line 53) * mbased=: MeP Options. (line 20) ! * mbbit-peephole: ARC Options. (line 441) * mbe8: ARM Options. (line 72) * mbig: RS/6000 and PowerPC Options. (line 440) * mbig-endian: AArch64 Options. (line 20) ! * mbig-endian <1>: ARC Options. (line 589) * mbig-endian <2>: ARM Options. (line 67) * mbig-endian <3>: C6X Options. (line 13) * mbig-endian <4>: C-SKY Options. (line 28) *************** look up both forms. *** 65025,65036 **** (line 700) * mblock-move-inline-limit: RS/6000 and PowerPC Options. (line 688) ! * mbmi: x86 Options. (line 892) ! * mbmi2: x86 Options. (line 893) * mboard: OpenRISC Options. (line 9) * mbranch-cost: Adapteva Epiphany Options. (line 18) ! * mbranch-cost <1>: AVR Options. (line 202) * mbranch-cost <2>: MIPS Options. (line 791) * mbranch-cost <3>: RISC-V Options. (line 9) * mbranch-cost=: C-SKY Options. (line 159) --- 65045,65056 ---- (line 700) * mblock-move-inline-limit: RS/6000 and PowerPC Options. (line 688) ! * mbmi: x86 Options. (line 910) ! * mbmi2: x86 Options. (line 911) * mboard: OpenRISC Options. (line 9) * mbranch-cost: Adapteva Epiphany Options. (line 18) ! * mbranch-cost <1>: AVR Options. (line 203) * mbranch-cost <2>: MIPS Options. (line 791) * mbranch-cost <3>: RISC-V Options. (line 9) * mbranch-cost=: C-SKY Options. (line 159) *************** look up both forms. *** 65057,65068 **** (line 529) * mcall-linux: RS/6000 and PowerPC Options. (line 525) ! * mcall-ms2sysv-xlogues: x86 Options. (line 1166) * mcall-netbsd: RS/6000 and PowerPC Options. (line 533) * mcall-netbsd <1>: RS/6000 and PowerPC Options. (line 537) ! * mcall-prologues: AVR Options. (line 207) * mcall-sysv: RS/6000 and PowerPC Options. (line 507) * mcall-sysv-eabi: RS/6000 and PowerPC Options. --- 65077,65088 ---- (line 529) * mcall-linux: RS/6000 and PowerPC Options. (line 525) ! * mcall-ms2sysv-xlogues: x86 Options. (line 1184) * mcall-netbsd: RS/6000 and PowerPC Options. (line 533) * mcall-netbsd <1>: RS/6000 and PowerPC Options. (line 537) ! * mcall-prologues: AVR Options. (line 208) * mcall-sysv: RS/6000 and PowerPC Options. (line 507) * mcall-sysv-eabi: RS/6000 and PowerPC Options. *************** look up both forms. *** 65073,65113 **** * mcaller-copies: HPPA Options. (line 23) * mcaller-super-interworking: ARM Options. (line 860) * mcallgraph-data: MCore Options. (line 31) ! * mcase-vector-pcrel: ARC Options. (line 448) * mcbcond: SPARC Options. (line 260) * mcbranch-force-delay-slot: SH Options. (line 349) ! * mcc-init: CRIS Options. (line 40) * mccrt: C-SKY Options. (line 155) * mcfv4e: M680x0 Options. (line 170) * mcheck-zero-division: MIPS Options. (line 570) * mcix: DEC Alpha Options. (line 163) ! * mcld: x86 Options. (line 984) ! * mcldemote: x86 Options. (line 925) * mclear-hwcap: Solaris 2 Options. (line 9) ! * mclflushopt: x86 Options. (line 870) * mclip: MeP Options. (line 35) ! * mclwb: x86 Options. (line 871) ! * mclzero: x86 Options. (line 904) * mcmodel: NDS32 Options. (line 67) * mcmodel <1>: SPARC Options. (line 320) ! * mcmodel=kernel: x86 Options. (line 1585) * mcmodel=large: AArch64 Options. (line 45) * mcmodel=large <1>: OpenRISC Options. (line 77) * mcmodel=large <2>: RS/6000 and PowerPC Options. (line 131) * mcmodel=large <3>: TILE-Gx Options. (line 14) ! * mcmodel=large <4>: x86 Options. (line 1597) * mcmodel=medany: RISC-V Options. (line 142) * mcmodel=medium: RS/6000 and PowerPC Options. (line 126) ! * mcmodel=medium <1>: x86 Options. (line 1590) * mcmodel=medlow: RISC-V Options. (line 135) * mcmodel=small: AArch64 Options. (line 39) * mcmodel=small <1>: OpenRISC Options. (line 73) * mcmodel=small <2>: RS/6000 and PowerPC Options. (line 122) * mcmodel=small <3>: TILE-Gx Options. (line 9) ! * mcmodel=small <4>: x86 Options. (line 1579) * mcmodel=tiny: AArch64 Options. (line 34) * mcmov: NDS32 Options. (line 21) * mcmov <1>: OpenRISC Options. (line 45) --- 65093,65133 ---- * mcaller-copies: HPPA Options. (line 23) * mcaller-super-interworking: ARM Options. (line 860) * mcallgraph-data: MCore Options. (line 31) ! * mcase-vector-pcrel: ARC Options. (line 450) * mcbcond: SPARC Options. (line 260) * mcbranch-force-delay-slot: SH Options. (line 349) ! * mcc-init: CRIS Options. (line 41) * mccrt: C-SKY Options. (line 155) * mcfv4e: M680x0 Options. (line 170) * mcheck-zero-division: MIPS Options. (line 570) * mcix: DEC Alpha Options. (line 163) ! * mcld: x86 Options. (line 1002) ! * mcldemote: x86 Options. (line 943) * mclear-hwcap: Solaris 2 Options. (line 9) ! * mclflushopt: x86 Options. (line 888) * mclip: MeP Options. (line 35) ! * mclwb: x86 Options. (line 889) ! * mclzero: x86 Options. (line 922) * mcmodel: NDS32 Options. (line 67) * mcmodel <1>: SPARC Options. (line 320) ! * mcmodel=kernel: x86 Options. (line 1603) * mcmodel=large: AArch64 Options. (line 45) * mcmodel=large <1>: OpenRISC Options. (line 77) * mcmodel=large <2>: RS/6000 and PowerPC Options. (line 131) * mcmodel=large <3>: TILE-Gx Options. (line 14) ! * mcmodel=large <4>: x86 Options. (line 1615) * mcmodel=medany: RISC-V Options. (line 142) * mcmodel=medium: RS/6000 and PowerPC Options. (line 126) ! * mcmodel=medium <1>: x86 Options. (line 1608) * mcmodel=medlow: RISC-V Options. (line 135) * mcmodel=small: AArch64 Options. (line 39) * mcmodel=small <1>: OpenRISC Options. (line 73) * mcmodel=small <2>: RS/6000 and PowerPC Options. (line 122) * mcmodel=small <3>: TILE-Gx Options. (line 9) ! * mcmodel=small <4>: x86 Options. (line 1597) * mcmodel=tiny: AArch64 Options. (line 34) * mcmov: NDS32 Options. (line 21) * mcmov <1>: OpenRISC Options. (line 45) *************** look up both forms. *** 65118,65130 **** * mcmse: ARM Options. (line 961) * mco-re: eBPF Options. (line 56) * mcode-density: ARC Options. (line 163) ! * mcode-density-frame: ARC Options. (line 509) * mcode-readable: MIPS Options. (line 530) * mcode-region: MSP430 Options. (line 150) * mcompact-branches=always: MIPS Options. (line 810) * mcompact-branches=never: MIPS Options. (line 810) * mcompact-branches=optimal: MIPS Options. (line 810) ! * mcompact-casesi: ARC Options. (line 452) * mcompat-align-parm: RS/6000 and PowerPC Options. (line 899) * mcompress: FT32 Options. (line 26) --- 65138,65150 ---- * mcmse: ARM Options. (line 961) * mco-re: eBPF Options. (line 56) * mcode-density: ARC Options. (line 163) ! * mcode-density-frame: ARC Options. (line 511) * mcode-readable: MIPS Options. (line 530) * mcode-region: MSP430 Options. (line 150) * mcompact-branches=always: MIPS Options. (line 810) * mcompact-branches=never: MIPS Options. (line 810) * mcompact-branches=optimal: MIPS Options. (line 810) ! * mcompact-casesi: ARC Options. (line 454) * mcompat-align-parm: RS/6000 and PowerPC Options. (line 899) * mcompress: FT32 Options. (line 26) *************** look up both forms. *** 65133,65139 **** * mconfig=: MeP Options. (line 39) * mconsole: x86 Windows Options. (line 9) ! * mconst-align: CRIS Options. (line 53) * mconst16: Xtensa Options. (line 10) * mconstant-cfstrings: Darwin Options. (line 74) * mconstant-gp: IA-64 Options. (line 46) --- 65153,65159 ---- * mconfig=: MeP Options. (line 39) * mconsole: x86 Windows Options. (line 9) ! * mconst-align: CRIS Options. (line 54) * mconst16: Xtensa Options. (line 10) * mconstant-cfstrings: Darwin Options. (line 74) * mconstant-gp: IA-64 Options. (line 46) *************** look up both forms. *** 65162,65168 **** * mcpu <14>: TILE-Gx Options. (line 18) * mcpu <15>: TILEPro Options. (line 9) * mcpu <16>: Visium Options. (line 33) ! * mcpu <17>: x86 Options. (line 535) * mcpu32: M680x0 Options. (line 136) * mcpu=: Blackfin Options. (line 7) * mcpu= <1>: C-SKY Options. (line 14) --- 65182,65188 ---- * mcpu <14>: TILE-Gx Options. (line 18) * mcpu <15>: TILEPro Options. (line 9) * mcpu <16>: Visium Options. (line 33) ! * mcpu <17>: x86 Options. (line 553) * mcpu32: M680x0 Options. (line 136) * mcpu=: Blackfin Options. (line 7) * mcpu= <1>: C-SKY Options. (line 14) *************** look up both forms. *** 65172,65178 **** * mcr16c: CR16 Options. (line 14) * mcr16cplus: CR16 Options. (line 14) * mcrc: MIPS Options. (line 416) ! * mcrc32: x86 Options. (line 1062) * mcrypto: RS/6000 and PowerPC Options. (line 178) * mcsync-anomaly: Blackfin Options. (line 57) --- 65192,65198 ---- * mcr16c: CR16 Options. (line 14) * mcr16cplus: CR16 Options. (line 14) * mcrc: MIPS Options. (line 416) ! * mcrc32: x86 Options. (line 1080) * mcrypto: RS/6000 and PowerPC Options. (line 178) * mcsync-anomaly: Blackfin Options. (line 57) *************** look up both forms. *** 65180,65193 **** * mctor-dtor: NDS32 Options. (line 81) * mcustom-fpu-cfg: Nios II Options. (line 259) * mcustom-INSN: Nios II Options. (line 139) ! * mcx16: x86 Options. (line 1035) * MD: Preprocessor Options. (line 172) * mdalign: SH Options. (line 132) ! * mdata-align: CRIS Options. (line 53) * mdata-model: CR16 Options. (line 28) * mdata-region: MSP430 Options. (line 150) ! * mdaz-ftz: x86 Options. (line 783) * mdc: MeP Options. (line 62) * mdebug: M32R/D Options. (line 69) * mdebug <1>: S/390 and zSeries Options. --- 65200,65213 ---- * mctor-dtor: NDS32 Options. (line 81) * mcustom-fpu-cfg: Nios II Options. (line 259) * mcustom-INSN: Nios II Options. (line 139) ! * mcx16: x86 Options. (line 1053) * MD: Preprocessor Options. (line 172) * mdalign: SH Options. (line 132) ! * mdata-align: CRIS Options. (line 54) * mdata-model: CR16 Options. (line 28) * mdata-region: MSP430 Options. (line 150) ! * mdaz-ftz: x86 Options. (line 801) * mdc: MeP Options. (line 62) * mdebug: M32R/D Options. (line 69) * mdebug <1>: S/390 and zSeries Options. *************** look up both forms. *** 65195,65201 **** * mdebug <2>: Visium Options. (line 7) * mdebug-main=PREFIX: VMS Options. (line 13) * mdec-asm: PDP-11 Options. (line 46) ! * mdirect-extern-access: x86 Options. (line 1617) * mdisable-callt: V850 Options. (line 92) * mdisable-fpregs: HPPA Options. (line 34) * mdisable-indexing: HPPA Options. (line 40) --- 65215,65221 ---- * mdebug <2>: Visium Options. (line 7) * mdebug-main=PREFIX: VMS Options. (line 13) * mdec-asm: PDP-11 Options. (line 46) ! * mdirect-extern-access: x86 Options. (line 1635) * mdisable-callt: V850 Options. (line 92) * mdisable-fpregs: HPPA Options. (line 34) * mdisable-indexing: HPPA Options. (line 40) *************** look up both forms. *** 65215,65221 **** * mdlmzb: RS/6000 and PowerPC Options. (line 385) * mdmx: MIPS Options. (line 376) ! * mdouble: AVR Options. (line 212) * mdouble <1>: FRV Options. (line 48) * mdouble-float: C-SKY Options. (line 58) * mdouble-float <1>: MIPS Options. (line 288) --- 65235,65241 ---- * mdlmzb: RS/6000 and PowerPC Options. (line 385) * mdmx: MIPS Options. (line 376) ! * mdouble: AVR Options. (line 213) * mdouble <1>: FRV Options. (line 48) * mdouble-float: C-SKY Options. (line 58) * mdouble-float <1>: MIPS Options. (line 288) *************** look up both forms. *** 65223,65236 **** * mdpfp: ARC Options. (line 99) * mdpfp-compact: ARC Options. (line 100) * mdpfp-fast: ARC Options. (line 104) ! * mdpfp_compact: ARC Options. (line 604) ! * mdpfp_fast: ARC Options. (line 607) * mdsp: C-SKY Options. (line 102) * mdsp <1>: MIPS Options. (line 353) * mdsp-packa: ARC Options. (line 335) * mdspr2: MIPS Options. (line 359) ! * mdsp_packa: ARC Options. (line 610) ! * mdump-tune-features: x86 Options. (line 966) * mdvbf: ARC Options. (line 340) * mdwarf2-asm: IA-64 Options. (line 94) * mdword: FRV Options. (line 40) --- 65243,65256 ---- * mdpfp: ARC Options. (line 99) * mdpfp-compact: ARC Options. (line 100) * mdpfp-fast: ARC Options. (line 104) ! * mdpfp_compact: ARC Options. (line 609) ! * mdpfp_fast: ARC Options. (line 612) * mdsp: C-SKY Options. (line 102) * mdsp <1>: MIPS Options. (line 353) * mdsp-packa: ARC Options. (line 335) * mdspr2: MIPS Options. (line 359) ! * mdsp_packa: ARC Options. (line 615) ! * mdump-tune-features: x86 Options. (line 984) * mdvbf: ARC Options. (line 340) * mdwarf2-asm: IA-64 Options. (line 94) * mdword: FRV Options. (line 40) *************** look up both forms. *** 65238,65247 **** * mdynamic-no-pic: RS/6000 and PowerPC Options. (line 445) * mea: ARC Options. (line 112) ! * mEA: ARC Options. (line 613) * meabi: RS/6000 and PowerPC Options. (line 633) ! * mearly-cbranchsi: ARC Options. (line 474) * mearly-stop-bits: IA-64 Options. (line 100) * meb: MeP Options. (line 68) * meb <1>: Moxie Options. (line 7) --- 65258,65267 ---- * mdynamic-no-pic: RS/6000 and PowerPC Options. (line 445) * mea: ARC Options. (line 112) ! * mEA: ARC Options. (line 618) * meabi: RS/6000 and PowerPC Options. (line 633) ! * mearly-cbranchsi: ARC Options. (line 476) * mearly-stop-bits: IA-64 Options. (line 100) * meb: MeP Options. (line 68) * meb <1>: Moxie Options. (line 7) *************** look up both forms. *** 65252,65273 **** * mel <1>: Moxie Options. (line 11) * mel <2>: Nios II Options. (line 90) * mel <3>: Score Options. (line 12) ! * melf: CRIS Options. (line 78) * melf <1>: MMIX Options. (line 43) * melrw: C-SKY Options. (line 76) * memb: RS/6000 and PowerPC Options. (line 628) * membedded-data: MIPS Options. (line 517) * memregs=: M32C Options. (line 21) ! * menqcmd: x86 Options. (line 916) * mep: V850 Options. (line 16) * mepsilon: MMIX Options. (line 15) * mesa: S/390 and zSeries Options. (line 94) ! * metrax100: CRIS Options. (line 25) ! * metrax4: CRIS Options. (line 25) * meva: MIPS Options. (line 403) ! * mexpand-adddi: ARC Options. (line 477) * mexplicit-relocs: DEC Alpha Options. (line 176) * mexplicit-relocs <1>: MIPS Options. (line 561) * mexr: H8/300 Options. (line 28) --- 65272,65293 ---- * mel <1>: Moxie Options. (line 11) * mel <2>: Nios II Options. (line 90) * mel <3>: Score Options. (line 12) ! * melf: CRIS Options. (line 79) * melf <1>: MMIX Options. (line 43) * melrw: C-SKY Options. (line 76) * memb: RS/6000 and PowerPC Options. (line 628) * membedded-data: MIPS Options. (line 517) * memregs=: M32C Options. (line 21) ! * menqcmd: x86 Options. (line 934) * mep: V850 Options. (line 16) * mepsilon: MMIX Options. (line 15) * mesa: S/390 and zSeries Options. (line 94) ! * metrax100: CRIS Options. (line 26) ! * metrax4: CRIS Options. (line 26) * meva: MIPS Options. (line 403) ! * mexpand-adddi: ARC Options. (line 479) * mexplicit-relocs: DEC Alpha Options. (line 176) * mexplicit-relocs <1>: MIPS Options. (line 561) * mexr: H8/300 Options. (line 28) *************** look up both forms. *** 65278,65285 **** * mextern-sdata: MIPS Options. (line 480) * MF: Preprocessor Options. (line 111) ! * mf16c: x86 Options. (line 875) ! * mfancy-math-387: x86 Options. (line 630) * mfast-fp: Blackfin Options. (line 130) * mfast-indirect-calls: HPPA Options. (line 52) * mfast-sw-div: Nios II Options. (line 115) --- 65298,65305 ---- * mextern-sdata: MIPS Options. (line 480) * MF: Preprocessor Options. (line 111) ! * mf16c: x86 Options. (line 893) ! * mfancy-math-387: x86 Options. (line 648) * mfast-fp: Blackfin Options. (line 130) * mfast-indirect-calls: HPPA Options. (line 52) * mfast-sw-div: Nios II Options. (line 115) *************** look up both forms. *** 65288,65296 **** * mfdivdu: C-SKY Options. (line 64) * mfdpic: ARM Options. (line 984) * mfdpic <1>: FRV Options. (line 72) ! * mfentry: x86 Options. (line 1400) ! * mfentry-name: x86 Options. (line 1431) ! * mfentry-section: x86 Options. (line 1435) * mfix: DEC Alpha Options. (line 163) * mfix-24k: MIPS Options. (line 647) * mfix-and-continue: Darwin Options. (line 112) --- 65308,65316 ---- * mfdivdu: C-SKY Options. (line 64) * mfdpic: ARM Options. (line 984) * mfdpic <1>: FRV Options. (line 72) ! * mfentry: x86 Options. (line 1418) ! * mfentry-name: x86 Options. (line 1449) ! * mfentry-section: x86 Options. (line 1453) * mfix: DEC Alpha Options. (line 163) * mfix-24k: MIPS Options. (line 647) * mfix-and-continue: Darwin Options. (line 112) *************** look up both forms. *** 65328,65351 **** * mflush-func: MIPS Options. (line 782) * mflush-func=NAME: M32R/D Options. (line 93) * mflush-trap=NUMBER: M32R/D Options. (line 86) ! * mfma: x86 Options. (line 876) ! * mfma4: x86 Options. (line 879) * mfmaf: SPARC Options. (line 267) * mfmovd: SH Options. (line 148) ! * mforce-indirect-call: x86 Options. (line 1155) * mforce-no-pic: Xtensa Options. (line 41) * mfp-exceptions: MIPS Options. (line 830) * mfp-mode: Adapteva Epiphany Options. (line 71) * mfp-reg: DEC Alpha Options. (line 25) ! * mfp-ret-in-387: x86 Options. (line 620) * mfp-rounding-mode: DEC Alpha Options. (line 85) * mfp-trap-mode: DEC Alpha Options. (line 63) * mfp16-format: ARM Options. (line 730) * mfp32: MIPS Options. (line 258) * mfp64: MIPS Options. (line 261) * mfpmath: Optimize Options. (line 2316) ! * mfpmath <1>: x86 Options. (line 538) * mfpr-32: FRV Options. (line 15) * mfpr-64: FRV Options. (line 19) * mfprnd: RS/6000 and PowerPC Options. --- 65348,65371 ---- * mflush-func: MIPS Options. (line 782) * mflush-func=NAME: M32R/D Options. (line 93) * mflush-trap=NUMBER: M32R/D Options. (line 86) ! * mfma: x86 Options. (line 894) ! * mfma4: x86 Options. (line 897) * mfmaf: SPARC Options. (line 267) * mfmovd: SH Options. (line 148) ! * mforce-indirect-call: x86 Options. (line 1173) * mforce-no-pic: Xtensa Options. (line 41) * mfp-exceptions: MIPS Options. (line 830) * mfp-mode: Adapteva Epiphany Options. (line 71) * mfp-reg: DEC Alpha Options. (line 25) ! * mfp-ret-in-387: x86 Options. (line 638) * mfp-rounding-mode: DEC Alpha Options. (line 85) * mfp-trap-mode: DEC Alpha Options. (line 63) * mfp16-format: ARM Options. (line 730) * mfp32: MIPS Options. (line 258) * mfp64: MIPS Options. (line 261) * mfpmath: Optimize Options. (line 2316) ! * mfpmath <1>: x86 Options. (line 556) * mfpr-32: FRV Options. (line 15) * mfpr-64: FRV Options. (line 19) * mfprnd: RS/6000 and PowerPC Options. *************** look up both forms. *** 65358,65376 **** * mfpu <5>: Visium Options. (line 19) * mfpu=: C-SKY Options. (line 69) * mfpxx: MIPS Options. (line 264) ! * mfract-convert-truncate: AVR Options. (line 302) * mframe-header-opt: MIPS Options. (line 891) * mfriz: RS/6000 and PowerPC Options. (line 870) * mfsca: SH Options. (line 365) ! * mfsgsbase: x86 Options. (line 872) * mfsmuld: SPARC Options. (line 274) * mfsrra: SH Options. (line 374) * mft32b: FT32 Options. (line 23) * mfull-regs: NDS32 Options. (line 18) * mfull-toc: RS/6000 and PowerPC Options. (line 256) ! * mfunction-return: x86 Options. (line 1509) * mfused-madd: IA-64 Options. (line 88) * mfused-madd <1>: MIPS Options. (line 630) * mfused-madd <2>: RS/6000 and PowerPC Options. --- 65378,65396 ---- * mfpu <5>: Visium Options. (line 19) * mfpu=: C-SKY Options. (line 69) * mfpxx: MIPS Options. (line 264) ! * mfract-convert-truncate: AVR Options. (line 304) * mframe-header-opt: MIPS Options. (line 891) * mfriz: RS/6000 and PowerPC Options. (line 870) * mfsca: SH Options. (line 365) ! * mfsgsbase: x86 Options. (line 890) * mfsmuld: SPARC Options. (line 274) * mfsrra: SH Options. (line 374) * mft32b: FT32 Options. (line 23) * mfull-regs: NDS32 Options. (line 18) * mfull-toc: RS/6000 and PowerPC Options. (line 256) ! * mfunction-return: x86 Options. (line 1527) * mfused-madd: IA-64 Options. (line 88) * mfused-madd <1>: MIPS Options. (line 630) * mfused-madd <2>: RS/6000 and PowerPC Options. *************** look up both forms. *** 65379,65385 **** (line 183) * mfused-madd <4>: SH Options. (line 356) * mfused-madd <5>: Xtensa Options. (line 19) ! * mfxsr: x86 Options. (line 895) * MG: Preprocessor Options. (line 122) * mg: VAX Options. (line 17) --- 65399,65405 ---- (line 183) * mfused-madd <4>: SH Options. (line 356) * mfused-madd <5>: Xtensa Options. (line 19) ! * mfxsr: x86 Options. (line 913) * MG: Preprocessor Options. (line 122) * mg: VAX Options. (line 17) *************** look up both forms. *** 65387,65398 **** * mg13: RL78 Options. (line 62) * mg14: RL78 Options. (line 62) * mgas: HPPA Options. (line 75) ! * mgas-isr-prologues: AVR Options. (line 220) * mgcc-abi: V850 Options. (line 148) * mgeneral-regs-only: AArch64 Options. (line 24) * mgeneral-regs-only <1>: ARM Options. (line 57) ! * mgeneral-regs-only <2>: x86 Options. (line 1479) ! * mgfni: x86 Options. (line 909) * mghs: V850 Options. (line 127) * mginv: MIPS Options. (line 421) * mglibc: GNU/Linux Options. (line 9) --- 65407,65418 ---- * mg13: RL78 Options. (line 62) * mg14: RL78 Options. (line 62) * mgas: HPPA Options. (line 75) ! * mgas-isr-prologues: AVR Options. (line 221) * mgcc-abi: V850 Options. (line 148) * mgeneral-regs-only: AArch64 Options. (line 24) * mgeneral-regs-only <1>: ARM Options. (line 57) ! * mgeneral-regs-only <2>: x86 Options. (line 1497) ! * mgfni: x86 Options. (line 927) * mghs: V850 Options. (line 127) * mginv: MIPS Options. (line 421) * mglibc: GNU/Linux Options. (line 9) *************** look up both forms. *** 65434,65451 **** * mhard-float <8>: SPARC Options. (line 34) * mhard-float <9>: V850 Options. (line 113) * mhard-float <10>: Visium Options. (line 19) ! * mhard-float <11>: x86 Options. (line 603) * mhard-mul: OpenRISC Options. (line 24) * mhard-quad-float: SPARC Options. (line 55) * mharden-sls: AArch64 Options. (line 301) ! * mharden-sls <1>: x86 Options. (line 1531) * mhardlit: MCore Options. (line 10) * mhigh-registers: C-SKY Options. (line 120) ! * mhle: x86 Options. (line 901) * mhotpatch: S/390 and zSeries Options. (line 218) * mhp-ld: HPPA Options. (line 123) ! * mhreset: x86 Options. (line 930) * mhtm: RS/6000 and PowerPC Options. (line 184) * mhtm <1>: S/390 and zSeries Options. --- 65454,65471 ---- * mhard-float <8>: SPARC Options. (line 34) * mhard-float <9>: V850 Options. (line 113) * mhard-float <10>: Visium Options. (line 19) ! * mhard-float <11>: x86 Options. (line 621) * mhard-mul: OpenRISC Options. (line 24) * mhard-quad-float: SPARC Options. (line 55) * mharden-sls: AArch64 Options. (line 301) ! * mharden-sls <1>: x86 Options. (line 1549) * mhardlit: MCore Options. (line 10) * mhigh-registers: C-SKY Options. (line 120) ! * mhle: x86 Options. (line 919) * mhotpatch: S/390 and zSeries Options. (line 218) * mhp-ld: HPPA Options. (line 123) ! * mhreset: x86 Options. (line 948) * mhtm: RS/6000 and PowerPC Options. (line 184) * mhtm <1>: S/390 and zSeries Options. *************** look up both forms. *** 65454,65477 **** * mhw-mul: Nios II Options. (line 124) * mhw-mulx: Nios II Options. (line 124) * mhwmult=: MSP430 Options. (line 93) ! * miamcu: x86 Options. (line 1551) * micplb: Blackfin Options. (line 175) * mid-shared-library: Blackfin Options. (line 78) * mid-shared-library <1>: Blackfin Options. (line 85) * mieee: DEC Alpha Options. (line 39) * mieee <1>: SH Options. (line 165) * mieee-conformant: DEC Alpha Options. (line 134) ! * mieee-fp: x86 Options. (line 597) * mieee-with-inexact: DEC Alpha Options. (line 52) * milp32: IA-64 Options. (line 121) * mimadd: MIPS Options. (line 623) * mimpure-text: Solaris 2 Options. (line 15) ! * mincoming-stack-boundary: x86 Options. (line 822) ! * mindexed-loads: ARC Options. (line 481) ! * mindirect-branch: x86 Options. (line 1490) ! * mindirect-branch-cs-prefix: x86 Options. (line 1538) ! * mindirect-branch-register: x86 Options. (line 1528) ! * minline-all-stringops: x86 Options. (line 1331) * minline-float-divide-max-throughput: IA-64 Options. (line 58) * minline-float-divide-min-latency: IA-64 Options. (line 54) * minline-ic_invalidate: SH Options. (line 174) --- 65474,65497 ---- * mhw-mul: Nios II Options. (line 124) * mhw-mulx: Nios II Options. (line 124) * mhwmult=: MSP430 Options. (line 93) ! * miamcu: x86 Options. (line 1569) * micplb: Blackfin Options. (line 175) * mid-shared-library: Blackfin Options. (line 78) * mid-shared-library <1>: Blackfin Options. (line 85) * mieee: DEC Alpha Options. (line 39) * mieee <1>: SH Options. (line 165) * mieee-conformant: DEC Alpha Options. (line 134) ! * mieee-fp: x86 Options. (line 615) * mieee-with-inexact: DEC Alpha Options. (line 52) * milp32: IA-64 Options. (line 121) * mimadd: MIPS Options. (line 623) * mimpure-text: Solaris 2 Options. (line 15) ! * mincoming-stack-boundary: x86 Options. (line 840) ! * mindexed-loads: ARC Options. (line 483) ! * mindirect-branch: x86 Options. (line 1508) ! * mindirect-branch-cs-prefix: x86 Options. (line 1556) ! * mindirect-branch-register: x86 Options. (line 1546) ! * minline-all-stringops: x86 Options. (line 1349) * minline-float-divide-max-throughput: IA-64 Options. (line 58) * minline-float-divide-min-latency: IA-64 Options. (line 54) * minline-ic_invalidate: SH Options. (line 174) *************** look up both forms. *** 65482,65499 **** * minline-plt <1>: FRV Options. (line 81) * minline-sqrt-max-throughput: IA-64 Options. (line 80) * minline-sqrt-min-latency: IA-64 Options. (line 76) ! * minline-stringops-dynamically: x86 Options. (line 1339) * minrt: MSP430 Options. (line 115) * minrt <1>: PRU Options. (line 9) * minsert-sched-nops: RS/6000 and PowerPC Options. (line 485) ! * minstrument-return: x86 Options. (line 1419) * mint-register: RX Options. (line 100) * mint16: PDP-11 Options. (line 33) * mint32: CR16 Options. (line 22) * mint32 <1>: H8/300 Options. (line 38) * mint32 <2>: PDP-11 Options. (line 37) ! * mint8: AVR Options. (line 229) * minterlink-compressed: MIPS Options. (line 135) * minterlink-mips16: MIPS Options. (line 147) * mio-volatile: MeP Options. (line 74) --- 65502,65519 ---- * minline-plt <1>: FRV Options. (line 81) * minline-sqrt-max-throughput: IA-64 Options. (line 80) * minline-sqrt-min-latency: IA-64 Options. (line 76) ! * minline-stringops-dynamically: x86 Options. (line 1357) * minrt: MSP430 Options. (line 115) * minrt <1>: PRU Options. (line 9) * minsert-sched-nops: RS/6000 and PowerPC Options. (line 485) ! * minstrument-return: x86 Options. (line 1437) * mint-register: RX Options. (line 100) * mint16: PDP-11 Options. (line 33) * mint32: CR16 Options. (line 22) * mint32 <1>: H8/300 Options. (line 38) * mint32 <2>: PDP-11 Options. (line 37) ! * mint8: AVR Options. (line 231) * minterlink-compressed: MIPS Options. (line 135) * minterlink-mips16: MIPS Options. (line 147) * mio-volatile: MeP Options. (line 74) *************** look up both forms. *** 65530,65542 **** * mjump-in-delay: HPPA Options. (line 30) * mkernel: Darwin Options. (line 90) * mkernel <1>: eBPF Options. (line 13) ! * mkl: x86 Options. (line 931) * mknuthdiv: MMIX Options. (line 32) * ml: MeP Options. (line 78) * ml <1>: SH Options. (line 129) * mlarge: MSP430 Options. (line 82) * mlarge-data: DEC Alpha Options. (line 187) ! * mlarge-data-threshold: x86 Options. (line 702) * mlarge-text: DEC Alpha Options. (line 205) * mleadz: MeP Options. (line 81) * mleaf-id-shared-library: Blackfin Options. (line 89) --- 65550,65562 ---- * mjump-in-delay: HPPA Options. (line 30) * mkernel: Darwin Options. (line 90) * mkernel <1>: eBPF Options. (line 13) ! * mkl: x86 Options. (line 949) * mknuthdiv: MMIX Options. (line 32) * ml: MeP Options. (line 78) * ml <1>: SH Options. (line 129) * mlarge: MSP430 Options. (line 82) * mlarge-data: DEC Alpha Options. (line 187) ! * mlarge-data-threshold: x86 Options. (line 720) * mlarge-text: DEC Alpha Options. (line 205) * mleadz: MeP Options. (line 81) * mleaf-id-shared-library: Blackfin Options. (line 89) *************** look up both forms. *** 65548,65554 **** * mlittle: RS/6000 and PowerPC Options. (line 434) * mlittle-endian: AArch64 Options. (line 30) ! * mlittle-endian <1>: ARC Options. (line 594) * mlittle-endian <2>: ARM Options. (line 63) * mlittle-endian <3>: C6X Options. (line 16) * mlittle-endian <4>: C-SKY Options. (line 30) --- 65568,65574 ---- * mlittle: RS/6000 and PowerPC Options. (line 434) * mlittle-endian: AArch64 Options. (line 30) ! * mlittle-endian <1>: ARC Options. (line 598) * mlittle-endian <2>: ARM Options. (line 63) * mlittle-endian <3>: C6X Options. (line 16) * mlittle-endian <4>: C-SKY Options. (line 30) *************** look up both forms. *** 65570,65590 **** * mlock: ARC Options. (line 345) * mlong-calls: Adapteva Epiphany Options. (line 55) ! * mlong-calls <1>: ARC Options. (line 402) * mlong-calls <2>: ARM Options. (line 757) * mlong-calls <3>: Blackfin Options. (line 118) * mlong-calls <4>: FRV Options. (line 122) * mlong-calls <5>: HPPA Options. (line 136) * mlong-calls <6>: MIPS Options. (line 609) * mlong-calls <7>: V850 Options. (line 10) ! * mlong-double: AVR Options. (line 212) * mlong-double-128: S/390 and zSeries Options. (line 29) ! * mlong-double-128 <1>: x86 Options. (line 681) * mlong-double-64: S/390 and zSeries Options. (line 29) ! * mlong-double-64 <1>: x86 Options. (line 681) ! * mlong-double-80: x86 Options. (line 681) * mlong-jump-table-offsets: M680x0 Options. (line 340) * mlong-jumps: V850 Options. (line 108) * mlong-load-store: HPPA Options. (line 66) --- 65590,65610 ---- * mlock: ARC Options. (line 345) * mlong-calls: Adapteva Epiphany Options. (line 55) ! * mlong-calls <1>: ARC Options. (line 404) * mlong-calls <2>: ARM Options. (line 757) * mlong-calls <3>: Blackfin Options. (line 118) * mlong-calls <4>: FRV Options. (line 122) * mlong-calls <5>: HPPA Options. (line 136) * mlong-calls <6>: MIPS Options. (line 609) * mlong-calls <7>: V850 Options. (line 10) ! * mlong-double: AVR Options. (line 213) * mlong-double-128: S/390 and zSeries Options. (line 29) ! * mlong-double-128 <1>: x86 Options. (line 699) * mlong-double-64: S/390 and zSeries Options. (line 29) ! * mlong-double-64 <1>: x86 Options. (line 699) ! * mlong-double-80: x86 Options. (line 699) * mlong-jump-table-offsets: M680x0 Options. (line 340) * mlong-jumps: V850 Options. (line 108) * mlong-load-store: HPPA Options. (line 66) *************** look up both forms. *** 65604,65620 **** * mlow64k: Blackfin Options. (line 67) * mlp64: IA-64 Options. (line 121) * mlpc-width: ARC Options. (line 313) ! * mlra: ARC Options. (line 486) * mlra <1>: FT32 Options. (line 16) * mlra <2>: PDP-11 Options. (line 52) * mlra <3>: SPARC Options. (line 111) * mlra <4>: VAX Options. (line 22) ! * mlra-priority-compact: ARC Options. (line 494) ! * mlra-priority-noncompact: ARC Options. (line 497) ! * mlra-priority-none: ARC Options. (line 491) ! * mlwp: x86 Options. (line 886) * mlxc1-sxc1: MIPS Options. (line 901) ! * mlzcnt: x86 Options. (line 894) * MM: Preprocessor Options. (line 102) * mm: MeP Options. (line 84) --- 65624,65640 ---- * mlow64k: Blackfin Options. (line 67) * mlp64: IA-64 Options. (line 121) * mlpc-width: ARC Options. (line 313) ! * mlra: ARC Options. (line 488) * mlra <1>: FT32 Options. (line 16) * mlra <2>: PDP-11 Options. (line 52) * mlra <3>: SPARC Options. (line 111) * mlra <4>: VAX Options. (line 22) ! * mlra-priority-compact: ARC Options. (line 496) ! * mlra-priority-noncompact: ARC Options. (line 499) ! * mlra-priority-none: ARC Options. (line 493) ! * mlwp: x86 Options. (line 904) * mlxc1-sxc1: MIPS Options. (line 901) ! * mlzcnt: x86 Options. (line 912) * MM: Preprocessor Options. (line 102) * mm: MeP Options. (line 84) *************** look up both forms. *** 65623,65640 **** * mmac-24: ARC Options. (line 354) * mmac-d16: ARC Options. (line 350) * mmacosx-version-min: Darwin Options. (line 79) ! * mmac_24: ARC Options. (line 616) ! * mmac_d16: ARC Options. (line 619) * mmad: MIPS Options. (line 618) * mmadd4: MIPS Options. (line 906) ! * mmain-is-OS_task: AVR Options. (line 235) * mmainkernel: Nvidia PTX Options. (line 41) * mmalloc64: VMS Options. (line 17) ! * mmanual-endbr: x86 Options. (line 1160) * mmax: DEC Alpha Options. (line 163) * mmax-constant-size: RX Options. (line 82) * mmax-inline-shift=: MSP430 Options. (line 134) ! * mmax-stack-frame: CRIS Options. (line 21) * mmcount-ra-address: MIPS Options. (line 878) * mmcu: AVR Options. (line 9) * mmcu <1>: MIPS Options. (line 399) --- 65643,65660 ---- * mmac-24: ARC Options. (line 354) * mmac-d16: ARC Options. (line 350) * mmacosx-version-min: Darwin Options. (line 79) ! * mmac_24: ARC Options. (line 621) ! * mmac_d16: ARC Options. (line 624) * mmad: MIPS Options. (line 618) * mmadd4: MIPS Options. (line 906) ! * mmain-is-OS_task: AVR Options. (line 237) * mmainkernel: Nvidia PTX Options. (line 41) * mmalloc64: VMS Options. (line 17) ! * mmanual-endbr: x86 Options. (line 1178) * mmax: DEC Alpha Options. (line 163) * mmax-constant-size: RX Options. (line 82) * mmax-inline-shift=: MSP430 Options. (line 134) ! * mmax-stack-frame: CRIS Options. (line 22) * mmcount-ra-address: MIPS Options. (line 878) * mmcu: AVR Options. (line 9) * mmcu <1>: MIPS Options. (line 399) *************** look up both forms. *** 65643,65680 **** * MMD: Preprocessor Options. (line 188) * mmedia: FRV Options. (line 56) ! * mmedium-calls: ARC Options. (line 406) * mmemcpy: MicroBlaze Options. (line 13) * mmemcpy <1>: MIPS Options. (line 603) ! * mmemcpy-strategy=STRATEGY: x86 Options. (line 1361) * mmemory-latency: DEC Alpha Options. (line 268) * mmemory-model: SPARC Options. (line 348) ! * mmemset-strategy=STRATEGY: x86 Options. (line 1373) * mmfcrf: RS/6000 and PowerPC Options. (line 25) * mmicromips: MIPS Options. (line 387) ! * mmillicode: ARC Options. (line 500) * mminimal-toc: RS/6000 and PowerPC Options. (line 256) * mminmax: MeP Options. (line 87) ! * mmixed-code: ARC Options. (line 514) * mmma: RS/6000 and PowerPC Options. (line 944) ! * mmmx: x86 Options. (line 847) * mmodel=large: M32R/D Options. (line 33) * mmodel=medium: M32R/D Options. (line 27) * mmodel=small: M32R/D Options. (line 18) ! * mmovbe: x86 Options. (line 1054) ! * mmovdir64b: x86 Options. (line 915) ! * mmovdiri: x86 Options. (line 914) ! * mmove-max: x86 Options. (line 1012) * mmp: C-SKY Options. (line 87) * mmpy: ARC Options. (line 117) * mmpy-option: ARC Options. (line 173) ! * mms-bitfields: x86 Options. (line 1206) * mmt: MIPS Options. (line 395) * mmul: RL78 Options. (line 15) ! * mmul-bug-workaround: CRIS Options. (line 30) * mmul.x: Moxie Options. (line 14) * mmul32x16: ARC Options. (line 121) * mmul64: ARC Options. (line 124) --- 65663,65700 ---- * MMD: Preprocessor Options. (line 188) * mmedia: FRV Options. (line 56) ! * mmedium-calls: ARC Options. (line 408) * mmemcpy: MicroBlaze Options. (line 13) * mmemcpy <1>: MIPS Options. (line 603) ! * mmemcpy-strategy=STRATEGY: x86 Options. (line 1379) * mmemory-latency: DEC Alpha Options. (line 268) * mmemory-model: SPARC Options. (line 348) ! * mmemset-strategy=STRATEGY: x86 Options. (line 1391) * mmfcrf: RS/6000 and PowerPC Options. (line 25) * mmicromips: MIPS Options. (line 387) ! * mmillicode: ARC Options. (line 502) * mminimal-toc: RS/6000 and PowerPC Options. (line 256) * mminmax: MeP Options. (line 87) ! * mmixed-code: ARC Options. (line 516) * mmma: RS/6000 and PowerPC Options. (line 944) ! * mmmx: x86 Options. (line 865) * mmodel=large: M32R/D Options. (line 33) * mmodel=medium: M32R/D Options. (line 27) * mmodel=small: M32R/D Options. (line 18) ! * mmovbe: x86 Options. (line 1072) ! * mmovdir64b: x86 Options. (line 933) ! * mmovdiri: x86 Options. (line 932) ! * mmove-max: x86 Options. (line 1030) * mmp: C-SKY Options. (line 87) * mmpy: ARC Options. (line 117) * mmpy-option: ARC Options. (line 173) ! * mms-bitfields: x86 Options. (line 1224) * mmt: MIPS Options. (line 395) * mmul: RL78 Options. (line 15) ! * mmul-bug-workaround: CRIS Options. (line 31) * mmul.x: Moxie Options. (line 14) * mmul32x16: ARC Options. (line 121) * mmul64: ARC Options. (line 124) *************** look up both forms. *** 65683,65689 **** (line 378) * mmult: MeP Options. (line 90) * mmult-bug: MN10300 Options. (line 9) ! * mmultcost: ARC Options. (line 574) * mmulti-cond-exec: FRV Options. (line 215) * mmulticore: Blackfin Options. (line 139) * mmultiple: RS/6000 and PowerPC Options. --- 65703,65709 ---- (line 378) * mmult: MeP Options. (line 90) * mmult-bug: MN10300 Options. (line 9) ! * mmultcost: ARC Options. (line 576) * mmulti-cond-exec: FRV Options. (line 215) * mmulticore: Blackfin Options. (line 139) * mmultiple: RS/6000 and PowerPC Options. *************** look up both forms. *** 65694,65706 **** (line 138) * mmvme: RS/6000 and PowerPC Options. (line 609) ! * mmwait: x86 Options. (line 1068) ! * mmwaitx: x86 Options. (line 903) * mn: H8/300 Options. (line 20) ! * mn-flash: AVR Options. (line 240) * mnan=2008: MIPS Options. (line 320) * mnan=legacy: MIPS Options. (line 320) ! * mneeded: x86 Options. (line 1612) * mneon-for-64bits: ARM Options. (line 923) * mnested-cond-exec: FRV Options. (line 230) * mnewlib: OpenRISC Options. (line 13) --- 65714,65726 ---- (line 138) * mmvme: RS/6000 and PowerPC Options. (line 609) ! * mmwait: x86 Options. (line 1086) ! * mmwaitx: x86 Options. (line 921) * mn: H8/300 Options. (line 20) ! * mn-flash: AVR Options. (line 242) * mnan=2008: MIPS Options. (line 320) * mnan=legacy: MIPS Options. (line 320) ! * mneeded: x86 Options. (line 1630) * mneon-for-64bits: ARM Options. (line 923) * mnested-cond-exec: FRV Options. (line 230) * mnewlib: OpenRISC Options. (line 13) *************** look up both forms. *** 65710,65719 **** * mno-8byte-align: V850 Options. (line 170) * mno-abicalls: MIPS Options. (line 192) * mno-ac0: PDP-11 Options. (line 20) ! * mno-align-double: x86 Options. (line 640) * mno-align-int: M680x0 Options. (line 262) * mno-align-loops: M32R/D Options. (line 76) ! * mno-align-stringops: x86 Options. (line 1326) * mno-allow-string-insns: RX Options. (line 150) * mno-altivec: RS/6000 and PowerPC Options. (line 137) --- 65730,65739 ---- * mno-8byte-align: V850 Options. (line 170) * mno-abicalls: MIPS Options. (line 192) * mno-ac0: PDP-11 Options. (line 20) ! * mno-align-double: x86 Options. (line 658) * mno-align-int: M680x0 Options. (line 262) * mno-align-loops: M32R/D Options. (line 76) ! * mno-align-stringops: x86 Options. (line 1344) * mno-allow-string-insns: RX Options. (line 150) * mno-altivec: RS/6000 and PowerPC Options. (line 137) *************** look up both forms. *** 65732,65742 **** * mno-bitfield: M680x0 Options. (line 228) * mno-branch-likely: MIPS Options. (line 798) * mno-branch-predict: MMIX Options. (line 48) ! * mno-brcc: ARC Options. (line 442) * mno-bwx: DEC Alpha Options. (line 163) * mno-bypass-cache: Nios II Options. (line 103) * mno-cache-volatile: Nios II Options. (line 109) ! * mno-call-ms2sysv-xlogues: x86 Options. (line 1166) * mno-callgraph-data: MCore Options. (line 31) * mno-cbcond: SPARC Options. (line 260) * mno-check-zero-division: MIPS Options. (line 570) --- 65752,65762 ---- * mno-bitfield: M680x0 Options. (line 228) * mno-branch-likely: MIPS Options. (line 798) * mno-branch-predict: MMIX Options. (line 48) ! * mno-brcc: ARC Options. (line 444) * mno-bwx: DEC Alpha Options. (line 163) * mno-bypass-cache: Nios II Options. (line 103) * mno-cache-volatile: Nios II Options. (line 109) ! * mno-call-ms2sysv-xlogues: x86 Options. (line 1184) * mno-callgraph-data: MCore Options. (line 31) * mno-cbcond: SPARC Options. (line 260) * mno-check-zero-division: MIPS Options. (line 570) *************** look up both forms. *** 65746,65755 **** * mno-cmpb: RS/6000 and PowerPC Options. (line 25) * mno-co-re: eBPF Options. (line 60) ! * mno-cond-exec: ARC Options. (line 456) * mno-cond-exec <1>: FRV Options. (line 194) * mno-cond-move: FRV Options. (line 166) ! * mno-const-align: CRIS Options. (line 53) * mno-const16: Xtensa Options. (line 10) * mno-crc: MIPS Options. (line 416) * mno-crt0: MN10300 Options. (line 43) --- 65766,65775 ---- * mno-cmpb: RS/6000 and PowerPC Options. (line 25) * mno-co-re: eBPF Options. (line 60) ! * mno-cond-exec: ARC Options. (line 458) * mno-cond-exec <1>: FRV Options. (line 194) * mno-cond-move: FRV Options. (line 166) ! * mno-const-align: CRIS Options. (line 54) * mno-const16: Xtensa Options. (line 10) * mno-crc: MIPS Options. (line 416) * mno-crt0: MN10300 Options. (line 43) *************** look up both forms. *** 65758,65768 **** (line 178) * mno-csync-anomaly: Blackfin Options. (line 63) * mno-custom-INSN: Nios II Options. (line 139) ! * mno-data-align: CRIS Options. (line 53) * mno-debug: S/390 and zSeries Options. (line 144) ! * mno-default: x86 Options. (line 980) ! * mno-direct-extern-access: x86 Options. (line 1617) * mno-direct-extern-access <1>: x86 Function Attributes. (line 712) * mno-disable-callt: V850 Options. (line 92) --- 65778,65788 ---- (line 178) * mno-csync-anomaly: Blackfin Options. (line 63) * mno-custom-INSN: Nios II Options. (line 139) ! * mno-data-align: CRIS Options. (line 54) * mno-debug: S/390 and zSeries Options. (line 144) ! * mno-default: x86 Options. (line 998) ! * mno-direct-extern-access: x86 Options. (line 1635) * mno-direct-extern-access <1>: x86 Function Attributes. (line 712) * mno-disable-callt: V850 Options. (line 92) *************** look up both forms. *** 65791,65797 **** * mno-ext-perf2: NDS32 Options. (line 36) * mno-ext-string: NDS32 Options. (line 42) * mno-extern-sdata: MIPS Options. (line 480) ! * mno-fancy-math-387: x86 Options. (line 630) * mno-fast-sw-div: Nios II Options. (line 115) * mno-faster-structs: SPARC Options. (line 91) * mno-fdpic: ARM Options. (line 984) --- 65811,65817 ---- * mno-ext-perf2: NDS32 Options. (line 36) * mno-ext-string: NDS32 Options. (line 42) * mno-extern-sdata: MIPS Options. (line 480) ! * mno-fancy-math-387: x86 Options. (line 648) * mno-fast-sw-div: Nios II Options. (line 115) * mno-faster-structs: SPARC Options. (line 91) * mno-fdpic: ARM Options. (line 984) *************** look up both forms. *** 65814,65820 **** * mno-fp-in-toc: RS/6000 and PowerPC Options. (line 256) * mno-fp-regs: DEC Alpha Options. (line 25) ! * mno-fp-ret-in-387: x86 Options. (line 620) * mno-fprnd: RS/6000 and PowerPC Options. (line 25) * mno-fpu: SPARC Options. (line 39) --- 65834,65840 ---- * mno-fp-in-toc: RS/6000 and PowerPC Options. (line 256) * mno-fp-regs: DEC Alpha Options. (line 25) ! * mno-fp-ret-in-387: x86 Options. (line 638) * mno-fprnd: RS/6000 and PowerPC Options. (line 25) * mno-fpu: SPARC Options. (line 39) *************** look up both forms. *** 65851,65857 **** * mno-hw-mulx: Nios II Options. (line 124) * mno-id-shared-library: Blackfin Options. (line 85) * mno-ieee: SH Options. (line 165) ! * mno-ieee-fp: x86 Options. (line 597) * mno-imadd: MIPS Options. (line 623) * mno-inline-float-divide: IA-64 Options. (line 62) * mno-inline-int-divide: IA-64 Options. (line 73) --- 65871,65877 ---- * mno-hw-mulx: Nios II Options. (line 124) * mno-id-shared-library: Blackfin Options. (line 85) * mno-ieee: SH Options. (line 165) ! * mno-ieee-fp: x86 Options. (line 615) * mno-imadd: MIPS Options. (line 623) * mno-inline-float-divide: IA-64 Options. (line 62) * mno-inline-int-divide: IA-64 Options. (line 73) *************** look up both forms. *** 65860,65866 **** * mno-int32: PDP-11 Options. (line 33) * mno-interlink-compressed: MIPS Options. (line 135) * mno-interlink-mips16: MIPS Options. (line 147) ! * mno-interrupts: AVR Options. (line 243) * mno-isel: RS/6000 and PowerPC Options. (line 167) * mno-jsr: RX Options. (line 169) --- 65880,65886 ---- * mno-int32: PDP-11 Options. (line 33) * mno-interlink-compressed: MIPS Options. (line 135) * mno-interlink-mips16: MIPS Options. (line 147) ! * mno-interrupts: AVR Options. (line 245) * mno-isel: RS/6000 and PowerPC Options. (line 167) * mno-jsr: RX Options. (line 169) *************** look up both forms. *** 65908,65916 **** * Mno-modules: Preprocessor Options. (line 132) * mno-mpy: ARC Options. (line 117) ! * mno-ms-bitfields: x86 Options. (line 1206) * mno-mt: MIPS Options. (line 395) ! * mno-mul-bug-workaround: CRIS Options. (line 30) * mno-muladd: FRV Options. (line 68) * mno-mulhw: RS/6000 and PowerPC Options. (line 378) --- 65928,65936 ---- * Mno-modules: Preprocessor Options. (line 132) * mno-mpy: ARC Options. (line 117) ! * mno-ms-bitfields: x86 Options. (line 1224) * mno-mt: MIPS Options. (line 395) ! * mno-mul-bug-workaround: CRIS Options. (line 31) * mno-muladd: FRV Options. (line 68) * mno-mulhw: RS/6000 and PowerPC Options. (line 378) *************** look up both forms. *** 65961,65977 **** * mno-privileged: RS/6000 and PowerPC Options. (line 955) * mno-prolog-function: V850 Options. (line 23) ! * mno-prologue-epilogue: CRIS Options. (line 69) * mno-prototype: RS/6000 and PowerPC Options. (line 593) ! * mno-push-args: x86 Options. (line 1183) * mno-quad-memory: RS/6000 and PowerPC Options. (line 203) * mno-quad-memory-atomic: RS/6000 and PowerPC Options. (line 209) * mno-readonly-in-sdata: RS/6000 and PowerPC Options. (line 684) ! * mno-red-zone: x86 Options. (line 1571) * mno-register-names: IA-64 Options. (line 37) * mno-regnames: RS/6000 and PowerPC Options. (line 722) --- 65981,65997 ---- * mno-privileged: RS/6000 and PowerPC Options. (line 955) * mno-prolog-function: V850 Options. (line 23) ! * mno-prologue-epilogue: CRIS Options. (line 70) * mno-prototype: RS/6000 and PowerPC Options. (line 593) ! * mno-push-args: x86 Options. (line 1201) * mno-quad-memory: RS/6000 and PowerPC Options. (line 203) * mno-quad-memory-atomic: RS/6000 and PowerPC Options. (line 209) * mno-readonly-in-sdata: RS/6000 and PowerPC Options. (line 684) ! * mno-red-zone: x86 Options. (line 1589) * mno-register-names: IA-64 Options. (line 37) * mno-regnames: RS/6000 and PowerPC Options. (line 722) *************** look up both forms. *** 65999,66005 **** * mno-sched-prefer-non-control-spec-insns: IA-64 Options. (line 178) * mno-sched-prefer-non-data-spec-insns: IA-64 Options. (line 171) * mno-sched-prolog: ARM Options. (line 32) ! * mno-sdata: ARC Options. (line 420) * mno-sdata <1>: IA-64 Options. (line 42) * mno-sdata <2>: RS/6000 and PowerPC Options. (line 679) --- 66019,66025 ---- * mno-sched-prefer-non-control-spec-insns: IA-64 Options. (line 178) * mno-sched-prefer-non-data-spec-insns: IA-64 Options. (line 171) * mno-sched-prolog: ARM Options. (line 32) ! * mno-sdata: ARC Options. (line 422) * mno-sdata <1>: IA-64 Options. (line 42) * mno-sdata <2>: RS/6000 and PowerPC Options. (line 679) *************** look up both forms. *** 66007,66013 **** * mno-serialize-volatile: Xtensa Options. (line 35) * mno-setlb: MN10300 Options. (line 69) * mno-short: M680x0 Options. (line 223) ! * mno-side-effects: CRIS Options. (line 44) * mno-sim: RX Options. (line 71) * mno-single-exit: MMIX Options. (line 65) * mno-slow-bytes: MCore Options. (line 35) --- 66027,66033 ---- * mno-serialize-volatile: Xtensa Options. (line 35) * mno-setlb: MN10300 Options. (line 69) * mno-short: M680x0 Options. (line 223) ! * mno-side-effects: CRIS Options. (line 45) * mno-sim: RX Options. (line 71) * mno-single-exit: MMIX Options. (line 65) * mno-slow-bytes: MCore Options. (line 35) *************** look up both forms. *** 66022,66028 **** * mno-split-addresses: MIPS Options. (line 555) * mno-split-lohi: Adapteva Epiphany Options. (line 109) ! * mno-stack-align: CRIS Options. (line 53) * mno-stack-bias: SPARC Options. (line 372) * mno-std-struct-return: SPARC Options. (line 102) * mno-strict-align: AArch64 Options. (line 52) --- 66042,66048 ---- * mno-split-addresses: MIPS Options. (line 555) * mno-split-lohi: Adapteva Epiphany Options. (line 109) ! * mno-stack-align: CRIS Options. (line 54) * mno-stack-bias: SPARC Options. (line 372) * mno-std-struct-return: SPARC Options. (line 102) * mno-strict-align: AArch64 Options. (line 52) *************** look up both forms. *** 66064,66070 **** * mno-vis4b: SPARC Options. (line 251) * mno-vliw-branch: FRV Options. (line 208) * mno-volatile-asm-stop: IA-64 Options. (line 32) ! * mno-volatile-cache: ARC Options. (line 429) * mno-vrsave: RS/6000 and PowerPC Options. (line 153) * mno-vsx: RS/6000 and PowerPC Options. --- 66084,66090 ---- * mno-vis4b: SPARC Options. (line 251) * mno-vliw-branch: FRV Options. (line 208) * mno-volatile-asm-stop: IA-64 Options. (line 32) ! * mno-volatile-cache: ARC Options. (line 431) * mno-vrsave: RS/6000 and PowerPC Options. (line 153) * mno-vsx: RS/6000 and PowerPC Options. *************** look up both forms. *** 66089,66095 **** * mnomacsave: SH Options. (line 160) * mnop-fun-dllimport: x86 Windows Options. (line 22) ! * mnop-mcount: x86 Options. (line 1413) * mnopm: FT32 Options. (line 29) * mnops: Adapteva Epiphany Options. (line 26) --- 66109,66115 ---- * mnomacsave: SH Options. (line 160) * mnop-fun-dllimport: x86 Windows Options. (line 22) ! * mnop-mcount: x86 Options. (line 1431) * mnopm: FT32 Options. (line 29) * mnops: Adapteva Epiphany Options. (line 26) *************** look up both forms. *** 66097,66103 **** * modd-spreg: MIPS Options. (line 293) * momit-leaf-frame-pointer: AArch64 Options. (line 58) * momit-leaf-frame-pointer <1>: Blackfin Options. (line 43) ! * momit-leaf-frame-pointer <2>: x86 Options. (line 1377) * mone-byte-bool: Darwin Options. (line 98) * moptimize: Nvidia PTX Options. (line 45) * moptimize-membar: FRV Options. (line 244) --- 66117,66123 ---- * modd-spreg: MIPS Options. (line 293) * momit-leaf-frame-pointer: AArch64 Options. (line 58) * momit-leaf-frame-pointer <1>: Blackfin Options. (line 43) ! * momit-leaf-frame-pointer <2>: x86 Options. (line 1395) * mone-byte-bool: Darwin Options. (line 98) * moptimize: Nvidia PTX Options. (line 45) * moptimize-membar: FRV Options. (line 244) *************** look up both forms. *** 66114,66128 **** * mpadstruct: SH Options. (line 189) * mpaired-single: MIPS Options. (line 370) * mpc-relative-literal-loads: AArch64 Options. (line 274) ! * mpc32: x86 Options. (line 762) ! * mpc64: x86 Options. (line 762) ! * mpc80: x86 Options. (line 762) ! * mpclmul: x86 Options. (line 869) ! * mpconfig: x86 Options. (line 877) * mpcrel: M680x0 Options. (line 273) * mpcrel <1>: RS/6000 and PowerPC Options. (line 932) ! * mpdebug: CRIS Options. (line 34) * mpe: RS/6000 and PowerPC Options. (line 310) * mpe-aligned-commons: x86 Windows Options. --- 66134,66148 ---- * mpadstruct: SH Options. (line 189) * mpaired-single: MIPS Options. (line 370) * mpc-relative-literal-loads: AArch64 Options. (line 274) ! * mpc32: x86 Options. (line 780) ! * mpc64: x86 Options. (line 780) ! * mpc80: x86 Options. (line 780) ! * mpclmul: x86 Options. (line 887) ! * mpconfig: x86 Options. (line 895) * mpcrel: M680x0 Options. (line 273) * mpcrel <1>: RS/6000 and PowerPC Options. (line 932) ! * mpdebug: CRIS Options. (line 35) * mpe: RS/6000 and PowerPC Options. (line 310) * mpe-aligned-commons: x86 Windows Options. *************** look up both forms. *** 66131,66137 **** * mpic-data-is-text-relative <1>: MicroBlaze Options. (line 92) * mpic-register: ARM Options. (line 787) * mpid: RX Options. (line 117) ! * mpku: x86 Options. (line 905) * mplt: MIPS Options. (line 219) * mpltseq: RS/6000 and PowerPC Options. (line 765) --- 66151,66157 ---- * mpic-data-is-text-relative <1>: MicroBlaze Options. (line 92) * mpic-register: ARM Options. (line 787) * mpid: RX Options. (line 117) ! * mpku: x86 Options. (line 923) * mplt: MIPS Options. (line 219) * mpltseq: RS/6000 and PowerPC Options. (line 765) *************** look up both forms. *** 66140,66146 **** (line 878) * mpoke-function-name: ARM Options. (line 802) * mpopc: SPARC Options. (line 281) ! * mpopcnt: x86 Options. (line 889) * mpopcntb: RS/6000 and PowerPC Options. (line 25) * mpopcntd: RS/6000 and PowerPC Options. --- 66160,66166 ---- (line 878) * mpoke-function-name: ARM Options. (line 802) * mpopc: SPARC Options. (line 281) ! * mpopcnt: x86 Options. (line 907) * mpopcntb: RS/6000 and PowerPC Options. (line 25) * mpopcntd: RS/6000 and PowerPC Options. *************** look up both forms. *** 66160,66224 **** (line 25) * mpowerpc64: RS/6000 and PowerPC Options. (line 25) ! * mprefer-avx128: x86 Options. (line 1004) * mprefer-short-insn-regs: Adapteva Epiphany Options. (line 13) ! * mprefer-vector-width: x86 Options. (line 1008) * mprefergot: SH Options. (line 268) * mpreferred-stack-boundary: RISC-V Options. (line 101) ! * mpreferred-stack-boundary <1>: x86 Options. (line 801) ! * mprefetchwt1: x86 Options. (line 882) * mprefixed: RS/6000 and PowerPC Options. (line 938) * mpretend-cmove: SH Options. (line 383) ! * mprfchw: x86 Options. (line 880) * mprint-tune-info: ARM Options. (line 944) * mprioritize-restricted-insns: RS/6000 and PowerPC Options. (line 457) * mprivileged: RS/6000 and PowerPC Options. (line 955) * mprolog-function: V850 Options. (line 23) ! * mprologue-epilogue: CRIS Options. (line 69) * mprototype: RS/6000 and PowerPC Options. (line 593) ! * mptwrite: x86 Options. (line 873) * mptx: Nvidia PTX Options. (line 30) * mpure-code: ARM Options. (line 954) ! * mpush-args: x86 Options. (line 1183) * mpushpop: C-SKY Options. (line 130) * MQ: Preprocessor Options. (line 162) ! * mq-class: ARC Options. (line 517) * mquad-memory: RS/6000 and PowerPC Options. (line 203) * mquad-memory-atomic: RS/6000 and PowerPC Options. (line 209) * mr0rel-sec: Nios II Options. (line 76) * mr10k-cache-barrier: MIPS Options. (line 720) ! * mRcq: ARC Options. (line 521) ! * mRcw: ARC Options. (line 525) ! * mrdpid: x86 Options. (line 881) ! * mrdrnd: x86 Options. (line 874) ! * mrdseed: x86 Options. (line 883) * mreadonly-in-sdata: RS/6000 and PowerPC Options. (line 684) * mrecip: RS/6000 and PowerPC Options. (line 785) ! * mrecip <1>: x86 Options. (line 1073) * mrecip-precision: RS/6000 and PowerPC Options. (line 842) * mrecip=opt: RS/6000 and PowerPC Options. (line 798) ! * mrecip=opt <1>: x86 Options. (line 1095) ! * mrecord-mcount: x86 Options. (line 1407) ! * mrecord-return: x86 Options. (line 1427) ! * mred-zone: x86 Options. (line 1571) * mreduced-regs: NDS32 Options. (line 15) * mregister-names: IA-64 Options. (line 37) * mregnames: RS/6000 and PowerPC Options. (line 722) ! * mregparm: x86 Options. (line 732) ! * mrelax: AVR Options. (line 247) * mrelax <1>: H8/300 Options. (line 9) * mrelax <2>: MN10300 Options. (line 46) * mrelax <3>: MSP430 Options. (line 88) --- 66180,66244 ---- (line 25) * mpowerpc64: RS/6000 and PowerPC Options. (line 25) ! * mprefer-avx128: x86 Options. (line 1022) * mprefer-short-insn-regs: Adapteva Epiphany Options. (line 13) ! * mprefer-vector-width: x86 Options. (line 1026) * mprefergot: SH Options. (line 268) * mpreferred-stack-boundary: RISC-V Options. (line 101) ! * mpreferred-stack-boundary <1>: x86 Options. (line 819) ! * mprefetchwt1: x86 Options. (line 900) * mprefixed: RS/6000 and PowerPC Options. (line 938) * mpretend-cmove: SH Options. (line 383) ! * mprfchw: x86 Options. (line 898) * mprint-tune-info: ARM Options. (line 944) * mprioritize-restricted-insns: RS/6000 and PowerPC Options. (line 457) * mprivileged: RS/6000 and PowerPC Options. (line 955) * mprolog-function: V850 Options. (line 23) ! * mprologue-epilogue: CRIS Options. (line 70) * mprototype: RS/6000 and PowerPC Options. (line 593) ! * mptwrite: x86 Options. (line 891) * mptx: Nvidia PTX Options. (line 30) * mpure-code: ARM Options. (line 954) ! * mpush-args: x86 Options. (line 1201) * mpushpop: C-SKY Options. (line 130) * MQ: Preprocessor Options. (line 162) ! * mq-class: ARC Options. (line 519) * mquad-memory: RS/6000 and PowerPC Options. (line 203) * mquad-memory-atomic: RS/6000 and PowerPC Options. (line 209) * mr0rel-sec: Nios II Options. (line 76) * mr10k-cache-barrier: MIPS Options. (line 720) ! * mRcq: ARC Options. (line 523) ! * mRcw: ARC Options. (line 527) ! * mrdpid: x86 Options. (line 899) ! * mrdrnd: x86 Options. (line 892) ! * mrdseed: x86 Options. (line 901) * mreadonly-in-sdata: RS/6000 and PowerPC Options. (line 684) * mrecip: RS/6000 and PowerPC Options. (line 785) ! * mrecip <1>: x86 Options. (line 1091) * mrecip-precision: RS/6000 and PowerPC Options. (line 842) * mrecip=opt: RS/6000 and PowerPC Options. (line 798) ! * mrecip=opt <1>: x86 Options. (line 1113) ! * mrecord-mcount: x86 Options. (line 1425) ! * mrecord-return: x86 Options. (line 1445) ! * mred-zone: x86 Options. (line 1589) * mreduced-regs: NDS32 Options. (line 15) * mregister-names: IA-64 Options. (line 37) * mregnames: RS/6000 and PowerPC Options. (line 722) ! * mregparm: x86 Options. (line 750) ! * mrelax: AVR Options. (line 249) * mrelax <1>: H8/300 Options. (line 9) * mrelax <2>: MN10300 Options. (line 46) * mrelax <3>: MSP430 Options. (line 88) *************** look up both forms. *** 66226,66232 **** * mrelax <5>: RX Options. (line 95) * mrelax <6>: SH Options. (line 137) * mrelax <7>: V850 Options. (line 103) ! * mrelax-cmpxchg-loop: x86 Options. (line 1484) * mrelax-immediate: MCore Options. (line 19) * mrelax-pic-calls: MIPS Options. (line 865) * mrelocatable: RS/6000 and PowerPC Options. --- 66246,66252 ---- * mrelax <5>: RX Options. (line 95) * mrelax <6>: SH Options. (line 137) * mrelax <7>: V850 Options. (line 103) ! * mrelax-cmpxchg-loop: x86 Options. (line 1502) * mrelax-immediate: MCore Options. (line 19) * mrelax-pic-calls: MIPS Options. (line 865) * mrelocatable: RS/6000 and PowerPC Options. *************** look up both forms. *** 66241,66247 **** * mrgf-banked-regs: ARC Options. (line 304) * mrh850-abi: V850 Options. (line 127) * mrl78: RL78 Options. (line 62) ! * mrmw: AVR Options. (line 261) * mrop-protect: RS/6000 and PowerPC Options. (line 949) * mror: OpenRISC Options. (line 49) --- 66261,66267 ---- * mrgf-banked-regs: ARC Options. (line 304) * mrh850-abi: V850 Options. (line 127) * mrl78: RL78 Options. (line 62) ! * mrmw: AVR Options. (line 263) * mrop-protect: RS/6000 and PowerPC Options. (line 949) * mror: OpenRISC Options. (line 49) *************** look up both forms. *** 66249,66264 **** * mround-nearest: Adapteva Epiphany Options. (line 51) * mrtd: M680x0 Options. (line 237) ! * mrtd <1>: x86 Options. (line 708) * mrtd <2>: x86 Function Attributes. (line 9) ! * mrtm: x86 Options. (line 900) * mrtp: VxWorks Options. (line 11) * mrtsc: ARC Options. (line 358) * ms: H8/300 Options. (line 17) * ms <1>: MeP Options. (line 100) * ms2600: H8/300 Options. (line 24) ! * msahf: x86 Options. (line 1044) * msatur: MeP Options. (line 105) * msave-acc-in-interrupts: RX Options. (line 109) * msave-mduc-in-interrupts: RL78 Options. (line 79) --- 66269,66284 ---- * mround-nearest: Adapteva Epiphany Options. (line 51) * mrtd: M680x0 Options. (line 237) ! * mrtd <1>: x86 Options. (line 726) * mrtd <2>: x86 Function Attributes. (line 9) ! * mrtm: x86 Options. (line 918) * mrtp: VxWorks Options. (line 11) * mrtsc: ARC Options. (line 358) * ms: H8/300 Options. (line 17) * ms <1>: MeP Options. (line 100) * ms2600: H8/300 Options. (line 24) ! * msahf: x86 Options. (line 1062) * msatur: MeP Options. (line 105) * msave-acc-in-interrupts: RX Options. (line 109) * msave-mduc-in-interrupts: RL78 Options. (line 79) *************** look up both forms. *** 66291,66297 **** * mscore7: Score Options. (line 31) * mscore7d: Score Options. (line 35) * msda: V850 Options. (line 40) ! * msdata: ARC Options. (line 420) * msdata <1>: IA-64 Options. (line 42) * msdata <2>: RS/6000 and PowerPC Options. (line 666) --- 66311,66317 ---- * mscore7: Score Options. (line 31) * mscore7d: Score Options. (line 35) * msda: V850 Options. (line 40) ! * msdata: ARC Options. (line 422) * msdata <1>: IA-64 Options. (line 42) * msdata <2>: RS/6000 and PowerPC Options. (line 666) *************** look up both forms. *** 66319,66338 **** * msel-sched-dont-check-control-spec: IA-64 Options. (line 207) * msep-data: Blackfin Options. (line 107) * msep-data <1>: Blackfin Options. (line 113) ! * mserialize: x86 Options. (line 926) * mserialize-volatile: Xtensa Options. (line 35) * msetlb: MN10300 Options. (line 64) * msext: OpenRISC Options. (line 59) * msfimm: OpenRISC Options. (line 63) ! * msgx: x86 Options. (line 884) ! * msha: x86 Options. (line 867) * mshared-library-id: Blackfin Options. (line 100) * mshftimm: OpenRISC Options. (line 68) * mshort: M680x0 Options. (line 217) ! * mshort-calls: AVR Options. (line 265) * mshorten-memrefs: RISC-V Options. (line 121) ! * mshstk: x86 Options. (line 1058) ! * mside-effects: CRIS Options. (line 44) * msign-extend-enabled: LM32 Options. (line 18) * msign-return-address: AArch64 Options. (line 280) * msilicon-errata: MSP430 Options. (line 159) --- 66339,66358 ---- * msel-sched-dont-check-control-spec: IA-64 Options. (line 207) * msep-data: Blackfin Options. (line 107) * msep-data <1>: Blackfin Options. (line 113) ! * mserialize: x86 Options. (line 944) * mserialize-volatile: Xtensa Options. (line 35) * msetlb: MN10300 Options. (line 64) * msext: OpenRISC Options. (line 59) * msfimm: OpenRISC Options. (line 63) ! * msgx: x86 Options. (line 902) ! * msha: x86 Options. (line 885) * mshared-library-id: Blackfin Options. (line 100) * mshftimm: OpenRISC Options. (line 68) * mshort: M680x0 Options. (line 217) ! * mshort-calls: AVR Options. (line 267) * mshorten-memrefs: RISC-V Options. (line 121) ! * mshstk: x86 Options. (line 1076) ! * mside-effects: CRIS Options. (line 45) * msign-extend-enabled: LM32 Options. (line 18) * msign-return-address: AArch64 Options. (line 280) * msilicon-errata: MSP430 Options. (line 159) *************** look up both forms. *** 66359,66366 **** * msingle-pic-base <1>: RS/6000 and PowerPC Options. (line 451) * msio: HPPA Options. (line 105) ! * msize-level: ARC Options. (line 529) ! * mskip-rax-setup: x86 Options. (line 1440) * mslow-bytes: MCore Options. (line 35) * mslow-flash-data: ARM Options. (line 926) * msmall: MSP430 Options. (line 85) --- 66379,66386 ---- * msingle-pic-base <1>: RS/6000 and PowerPC Options. (line 451) * msio: HPPA Options. (line 105) ! * msize-level: ARC Options. (line 531) ! * mskip-rax-setup: x86 Options. (line 1458) * mslow-bytes: MCore Options. (line 35) * mslow-flash-data: ARM Options. (line 926) * msmall: MSP430 Options. (line 85) *************** look up both forms. *** 66398,66408 **** * msoft-float <13>: SPARC Options. (line 39) * msoft-float <14>: V850 Options. (line 113) * msoft-float <15>: Visium Options. (line 24) ! * msoft-float <16>: x86 Options. (line 607) * msoft-mul: OpenRISC Options. (line 24) * msoft-quad-float: SPARC Options. (line 59) * msoft-stack: Nvidia PTX Options. (line 49) ! * msp8: AVR Options. (line 272) * mspace: V850 Options. (line 30) * mspace-regs: HPPA Options. (line 45) * mspecld-anomaly: Blackfin Options. (line 48) --- 66418,66428 ---- * msoft-float <13>: SPARC Options. (line 39) * msoft-float <14>: V850 Options. (line 113) * msoft-float <15>: Visium Options. (line 24) ! * msoft-float <16>: x86 Options. (line 625) * msoft-mul: OpenRISC Options. (line 24) * msoft-quad-float: SPARC Options. (line 59) * msoft-stack: Nvidia PTX Options. (line 49) ! * msp8: AVR Options. (line 274) * mspace: V850 Options. (line 30) * mspace-regs: HPPA Options. (line 45) * mspecld-anomaly: Blackfin Options. (line 48) *************** look up both forms. *** 66410,66417 **** * mspfp: ARC Options. (line 132) * mspfp-compact: ARC Options. (line 133) * mspfp-fast: ARC Options. (line 137) ! * mspfp_compact: ARC Options. (line 622) ! * mspfp_fast: ARC Options. (line 625) * msplit: PDP-11 Options. (line 40) * msplit-addresses: MIPS Options. (line 555) * msplit-lohi: Adapteva Epiphany Options. --- 66430,66437 ---- * mspfp: ARC Options. (line 132) * mspfp-compact: ARC Options. (line 133) * mspfp-fast: ARC Options. (line 137) ! * mspfp_compact: ARC Options. (line 627) ! * mspfp_fast: ARC Options. (line 630) * msplit: PDP-11 Options. (line 40) * msplit-addresses: MIPS Options. (line 555) * msplit-lohi: Adapteva Epiphany Options. *************** look up both forms. *** 66419,66435 **** * msplit-vecmove-early: Adapteva Epiphany Options. (line 126) * msram-ecc: AMD GCN Options. (line 25) ! * msse: x86 Options. (line 848) ! * msse2: x86 Options. (line 849) ! * msse2avx: x86 Options. (line 1395) ! * msse3: x86 Options. (line 850) ! * msse4: x86 Options. (line 852) ! * msse4.1: x86 Options. (line 854) ! * msse4.2: x86 Options. (line 855) ! * msse4a: x86 Options. (line 853) ! * msseregparm: x86 Options. (line 743) ! * mssse3: x86 Options. (line 851) ! * mstack-align: CRIS Options. (line 53) * mstack-bias: SPARC Options. (line 372) * mstack-check-l1: Blackfin Options. (line 74) * mstack-guard: S/390 and zSeries Options. --- 66439,66455 ---- * msplit-vecmove-early: Adapteva Epiphany Options. (line 126) * msram-ecc: AMD GCN Options. (line 25) ! * msse: x86 Options. (line 866) ! * msse2: x86 Options. (line 867) ! * msse2avx: x86 Options. (line 1413) ! * msse3: x86 Options. (line 868) ! * msse4: x86 Options. (line 870) ! * msse4.1: x86 Options. (line 872) ! * msse4.2: x86 Options. (line 873) ! * msse4a: x86 Options. (line 871) ! * msseregparm: x86 Options. (line 761) ! * mssse3: x86 Options. (line 869) ! * mstack-align: CRIS Options. (line 54) * mstack-bias: SPARC Options. (line 372) * mstack-check-l1: Blackfin Options. (line 74) * mstack-guard: S/390 and zSeries Options. *************** look up both forms. *** 66442,66477 **** * mstack-protector-guard <2>: RISC-V Options. (line 185) * mstack-protector-guard <3>: RS/6000 and PowerPC Options. (line 916) ! * mstack-protector-guard <4>: x86 Options. (line 1466) * mstack-protector-guard-offset: AArch64 Options. (line 64) * mstack-protector-guard-offset <1>: ARM Options. (line 976) * mstack-protector-guard-offset <2>: RISC-V Options. (line 185) * mstack-protector-guard-offset <3>: RS/6000 and PowerPC Options. (line 916) ! * mstack-protector-guard-offset <4>: x86 Options. (line 1466) * mstack-protector-guard-reg: AArch64 Options. (line 64) * mstack-protector-guard-reg <1>: RISC-V Options. (line 185) * mstack-protector-guard-reg <2>: RS/6000 and PowerPC Options. (line 916) ! * mstack-protector-guard-reg <3>: x86 Options. (line 1466) * mstack-protector-guard-symbol: RS/6000 and PowerPC Options. (line 916) * mstack-size: AMD GCN Options. (line 31) * mstack-size <1>: C-SKY Options. (line 150) * mstack-size <2>: S/390 and zSeries Options. (line 202) ! * mstackrealign: x86 Options. (line 792) * mstd-struct-return: SPARC Options. (line 102) ! * mstore-max: x86 Options. (line 1017) * mstrict-align: AArch64 Options. (line 52) * mstrict-align <1>: M680x0 Options. (line 281) * mstrict-align <2>: RISC-V Options. (line 130) * mstrict-align <3>: RS/6000 and PowerPC Options. (line 403) ! * mstrict-X: AVR Options. (line 285) * mstring-compare-inline-limit: RS/6000 and PowerPC Options. (line 708) ! * mstringop-strategy=ALG: x86 Options. (line 1343) * mstructure-size-boundary: ARM Options. (line 736) * msubxc: SPARC Options. (line 288) * msv-mode: Visium Options. (line 52) --- 66462,66497 ---- * mstack-protector-guard <2>: RISC-V Options. (line 185) * mstack-protector-guard <3>: RS/6000 and PowerPC Options. (line 916) ! * mstack-protector-guard <4>: x86 Options. (line 1484) * mstack-protector-guard-offset: AArch64 Options. (line 64) * mstack-protector-guard-offset <1>: ARM Options. (line 976) * mstack-protector-guard-offset <2>: RISC-V Options. (line 185) * mstack-protector-guard-offset <3>: RS/6000 and PowerPC Options. (line 916) ! * mstack-protector-guard-offset <4>: x86 Options. (line 1484) * mstack-protector-guard-reg: AArch64 Options. (line 64) * mstack-protector-guard-reg <1>: RISC-V Options. (line 185) * mstack-protector-guard-reg <2>: RS/6000 and PowerPC Options. (line 916) ! * mstack-protector-guard-reg <3>: x86 Options. (line 1484) * mstack-protector-guard-symbol: RS/6000 and PowerPC Options. (line 916) * mstack-size: AMD GCN Options. (line 31) * mstack-size <1>: C-SKY Options. (line 150) * mstack-size <2>: S/390 and zSeries Options. (line 202) ! * mstackrealign: x86 Options. (line 810) * mstd-struct-return: SPARC Options. (line 102) ! * mstore-max: x86 Options. (line 1035) * mstrict-align: AArch64 Options. (line 52) * mstrict-align <1>: M680x0 Options. (line 281) * mstrict-align <2>: RISC-V Options. (line 130) * mstrict-align <3>: RS/6000 and PowerPC Options. (line 403) ! * mstrict-X: AVR Options. (line 287) * mstring-compare-inline-limit: RS/6000 and PowerPC Options. (line 708) ! * mstringop-strategy=ALG: x86 Options. (line 1361) * mstructure-size-boundary: ARM Options. (line 736) * msubxc: SPARC Options. (line 288) * msv-mode: Visium Options. (line 52) *************** look up both forms. *** 66488,66513 **** (line 147) * mtarget-align: Xtensa Options. (line 74) * mtas: SH Options. (line 259) ! * mtbm: x86 Options. (line 902) * mtda: V850 Options. (line 34) * mtelephony: ARC Options. (line 368) * mtext-section-literals: Xtensa Options. (line 47) * mtf: MeP Options. (line 121) ! * mthreads: x86 Options. (line 1198) * mthreads <1>: x86 Windows Options. (line 26) * mthumb: ARM Options. (line 824) * mthumb-interwork: ARM Options. (line 24) * mtiny-printf: MSP430 Options. (line 122) ! * mtiny-stack: AVR Options. (line 299) * mtiny=: MeP Options. (line 125) * mTLS: FRV Options. (line 90) * mtls: FRV Options. (line 94) * mtls-dialect: ARM Options. (line 876) ! * mtls-dialect <1>: x86 Options. (line 1176) * mtls-dialect=desc: AArch64 Options. (line 77) * mtls-dialect=traditional: AArch64 Options. (line 81) ! * mtls-direct-seg-refs: x86 Options. (line 1385) * mtls-markers: RS/6000 and PowerPC Options. (line 777) * mtls-size: AArch64 Options. (line 85) --- 66508,66533 ---- (line 147) * mtarget-align: Xtensa Options. (line 74) * mtas: SH Options. (line 259) ! * mtbm: x86 Options. (line 920) * mtda: V850 Options. (line 34) * mtelephony: ARC Options. (line 368) * mtext-section-literals: Xtensa Options. (line 47) * mtf: MeP Options. (line 121) ! * mthreads: x86 Options. (line 1216) * mthreads <1>: x86 Windows Options. (line 26) * mthumb: ARM Options. (line 824) * mthumb-interwork: ARM Options. (line 24) * mtiny-printf: MSP430 Options. (line 122) ! * mtiny-stack: AVR Options. (line 301) * mtiny=: MeP Options. (line 125) * mTLS: FRV Options. (line 90) * mtls: FRV Options. (line 94) * mtls-dialect: ARM Options. (line 876) ! * mtls-dialect <1>: x86 Options. (line 1194) * mtls-dialect=desc: AArch64 Options. (line 77) * mtls-dialect=traditional: AArch64 Options. (line 81) ! * mtls-direct-seg-refs: x86 Options. (line 1403) * mtls-markers: RS/6000 and PowerPC Options. (line 777) * mtls-size: AArch64 Options. (line 85) *************** look up both forms. *** 66528,66540 **** (line 541) * mtrap-precision: DEC Alpha Options. (line 109) * mtrust: C-SKY Options. (line 99) ! * mtsxldtrk: x86 Options. (line 918) * mtune: AArch64 Options. (line 189) * mtune <1>: AMD GCN Options. (line 10) ! * mtune <2>: ARC Options. (line 550) ! * mtune <3>: ARC Options. (line 628) * mtune <4>: ARM Options. (line 571) ! * mtune <5>: CRIS Options. (line 15) * mtune <6>: DEC Alpha Options. (line 259) * mtune <7>: IA-64 Options. (line 116) * mtune <8>: LoongArch Options. (line 32) --- 66548,66560 ---- (line 541) * mtrap-precision: DEC Alpha Options. (line 109) * mtrust: C-SKY Options. (line 99) ! * mtsxldtrk: x86 Options. (line 936) * mtune: AArch64 Options. (line 189) * mtune <1>: AMD GCN Options. (line 10) ! * mtune <2>: ARC Options. (line 552) ! * mtune <3>: ARC Options. (line 633) * mtune <4>: ARM Options. (line 571) ! * mtune <5>: CRIS Options. (line 16) * mtune <6>: DEC Alpha Options. (line 259) * mtune <7>: IA-64 Options. (line 116) * mtune <8>: LoongArch Options. (line 32) *************** look up both forms. *** 66548,66566 **** (line 162) * mtune <15>: SPARC Options. (line 199) * mtune <16>: Visium Options. (line 47) ! * mtune <17>: x86 Options. (line 481) ! * mtune-ctrl=FEATURE-LIST: x86 Options. (line 971) * muclibc: GNU/Linux Options. (line 14) ! * muintr: x86 Options. (line 917) * muls: Score Options. (line 18) ! * multcost: ARC Options. (line 633) * multcost=NUMBER: SH Options. (line 281) * multilib-library-pic: FRV Options. (line 110) * multiply-enabled: LM32 Options. (line 15) * multiply_defined: Darwin Options. (line 204) * multiply_defined_unused: Darwin Options. (line 204) * multi_module: Darwin Options. (line 204) ! * munalign-prob-threshold: ARC Options. (line 578) * munaligned-access: ARM Options. (line 910) * munaligned-access <1>: MIPS Options. (line 597) * munaligned-doubles: SPARC Options. (line 73) --- 66568,66586 ---- (line 162) * mtune <15>: SPARC Options. (line 199) * mtune <16>: Visium Options. (line 47) ! * mtune <17>: x86 Options. (line 499) ! * mtune-ctrl=FEATURE-LIST: x86 Options. (line 989) * muclibc: GNU/Linux Options. (line 14) ! * muintr: x86 Options. (line 935) * muls: Score Options. (line 18) ! * multcost: ARC Options. (line 638) * multcost=NUMBER: SH Options. (line 281) * multilib-library-pic: FRV Options. (line 110) * multiply-enabled: LM32 Options. (line 15) * multiply_defined: Darwin Options. (line 204) * multiply_defined_unused: Darwin Options. (line 204) * multi_module: Darwin Options. (line 204) ! * munalign-prob-threshold: ARC Options. (line 580) * munaligned-access: ARM Options. (line 910) * munaligned-access <1>: MIPS Options. (line 597) * munaligned-doubles: SPARC Options. (line 73) *************** look up both forms. *** 66587,66600 **** * mv850e3v5: V850 Options. (line 52) * mv850es: V850 Options. (line 75) * mv8plus: SPARC Options. (line 214) ! * mvaes: x86 Options. (line 910) * mvdsp: C-SKY Options. (line 104) * mveclibabi: RS/6000 and PowerPC Options. (line 851) ! * mveclibabi <1>: x86 Options. (line 1124) * mvect-double: Adapteva Epiphany Options. (line 115) ! * mvect8-ret-in-mem: x86 Options. (line 753) * mverbose-cost-dump: AArch64 Options. (line 269) * mverbose-cost-dump <1>: ARM Options. (line 950) * mvirt: MIPS Options. (line 407) --- 66607,66620 ---- * mv850e3v5: V850 Options. (line 52) * mv850es: V850 Options. (line 75) * mv8plus: SPARC Options. (line 214) ! * mvaes: x86 Options. (line 928) * mvdsp: C-SKY Options. (line 104) * mveclibabi: RS/6000 and PowerPC Options. (line 851) ! * mveclibabi <1>: x86 Options. (line 1142) * mvect-double: Adapteva Epiphany Options. (line 115) ! * mvect8-ret-in-mem: x86 Options. (line 771) * mverbose-cost-dump: AArch64 Options. (line 269) * mverbose-cost-dump <1>: ARM Options. (line 950) * mvirt: MIPS Options. (line 407) *************** look up both forms. *** 66606,66614 **** * mvliw-branch: FRV Options. (line 201) * mvms-return-codes: VMS Options. (line 9) * mvolatile-asm-stop: IA-64 Options. (line 32) ! * mvolatile-cache: ARC Options. (line 425) ! * mvolatile-cache <1>: ARC Options. (line 429) ! * mvpclmulqdq: x86 Options. (line 912) * mvr4130-align: MIPS Options. (line 840) * mvrsave: RS/6000 and PowerPC Options. (line 153) --- 66626,66634 ---- * mvliw-branch: FRV Options. (line 201) * mvms-return-codes: VMS Options. (line 9) * mvolatile-asm-stop: IA-64 Options. (line 32) ! * mvolatile-cache: ARC Options. (line 427) ! * mvolatile-cache <1>: ARC Options. (line 431) ! * mvpclmulqdq: x86 Options. (line 930) * mvr4130-align: MIPS Options. (line 840) * mvrsave: RS/6000 and PowerPC Options. (line 153) *************** look up both forms. *** 66618,66625 **** (line 112) * mvxworks: RS/6000 and PowerPC Options. (line 624) ! * mvzeroupper: x86 Options. (line 998) ! * mwaitpkg: x86 Options. (line 911) * mwarn-devices-csv: MSP430 Options. (line 168) * mwarn-dynamicstack: S/390 and zSeries Options. (line 196) --- 66638,66645 ---- (line 112) * mvxworks: RS/6000 and PowerPC Options. (line 624) ! * mvzeroupper: x86 Options. (line 1016) ! * mwaitpkg: x86 Options. (line 929) * mwarn-devices-csv: MSP430 Options. (line 168) * mwarn-dynamicstack: S/390 and zSeries Options. (line 196) *************** look up both forms. *** 66627,66641 **** (line 188) * mwarn-mcu: MSP430 Options. (line 65) * mwarn-multiple-fast-interrupts: RX Options. (line 143) ! * mwbnoinvd: x86 Options. (line 878) * mwide-bitfields: MCore Options. (line 23) ! * mwidekl: x86 Options. (line 932) * mwin32: x86 Windows Options. (line 35) * mwindows: x86 Windows Options. (line 41) * mword-relocations: ARM Options. (line 887) ! * mx32: x86 Options. (line 1551) * mxgot: M680x0 Options. (line 313) * mxgot <1>: MIPS Options. (line 229) * mxl-barrel-shift: MicroBlaze Options. (line 32) --- 66647,66661 ---- (line 188) * mwarn-mcu: MSP430 Options. (line 65) * mwarn-multiple-fast-interrupts: RX Options. (line 143) ! * mwbnoinvd: x86 Options. (line 896) * mwide-bitfields: MCore Options. (line 23) ! * mwidekl: x86 Options. (line 950) * mwin32: x86 Windows Options. (line 35) * mwindows: x86 Windows Options. (line 41) * mword-relocations: ARM Options. (line 887) ! * mx32: x86 Options. (line 1569) * mxgot: M680x0 Options. (line 313) * mxgot <1>: MIPS Options. (line 229) * mxl-barrel-shift: MicroBlaze Options. (line 32) *************** look up both forms. *** 66651,66662 **** * mxl-soft-mul: MicroBlaze Options. (line 26) * mxl-stack-check: MicroBlaze Options. (line 41) * mxnack: AMD GCN Options. (line 38) ! * mxop: x86 Options. (line 885) * mxpa: MIPS Options. (line 411) ! * mxsave: x86 Options. (line 896) ! * mxsavec: x86 Options. (line 898) ! * mxsaveopt: x86 Options. (line 897) ! * mxsaves: x86 Options. (line 899) * mxy: ARC Options. (line 373) * myellowknife: RS/6000 and PowerPC Options. (line 619) --- 66671,66682 ---- * mxl-soft-mul: MicroBlaze Options. (line 26) * mxl-stack-check: MicroBlaze Options. (line 41) * mxnack: AMD GCN Options. (line 38) ! * mxop: x86 Options. (line 903) * mxpa: MIPS Options. (line 411) ! * mxsave: x86 Options. (line 914) ! * mxsavec: x86 Options. (line 916) ! * mxsaveopt: x86 Options. (line 915) ! * mxsaves: x86 Options. (line 917) * mxy: ARC Options. (line 373) * myellowknife: RS/6000 and PowerPC Options. (line 619) *************** look up both forms. *** 66667,66673 **** * mzero-extend: MMIX Options. (line 26) * mzvector: S/390 and zSeries Options. (line 123) ! * no-80387: x86 Options. (line 607) * no-block-ops-unaligned-vsx: RS/6000 and PowerPC Options. (line 959) * no-canonical-prefixes: Directory Options. (line 164) --- 66687,66693 ---- * mzero-extend: MMIX Options. (line 26) * mzvector: S/390 and zSeries Options. (line 123) ! * no-80387: x86 Options. (line 625) * no-block-ops-unaligned-vsx: RS/6000 and PowerPC Options. (line 959) * no-canonical-prefixes: Directory Options. (line 164) *************** look up both forms. *** 66678,66685 **** * noall_load: Darwin Options. (line 204) * nocpp: MIPS Options. (line 642) * nodefaultlibs: Link Options. (line 122) ! * nodevicelib: AVR Options. (line 306) ! * nodevicespecs: AVR Options. (line 309) * nofixprebinding: Darwin Options. (line 204) * nofpu: RX Options. (line 17) * nolibc: Link Options. (line 134) --- 66698,66705 ---- * noall_load: Darwin Options. (line 204) * nocpp: MIPS Options. (line 642) * nodefaultlibs: Link Options. (line 122) ! * nodevicelib: AVR Options. (line 308) ! * nodevicespecs: AVR Options. (line 311) * nofixprebinding: Darwin Options. (line 204) * nofpu: RX Options. (line 17) * nolibc: Link Options. (line 134) *************** look up both forms. *** 66784,66791 **** * shared-libgcc: Link Options. (line 230) * short-calls: Adapteva Epiphany Options. (line 61) ! * sim: CRIS Options. (line 81) ! * sim2: CRIS Options. (line 86) * single_module: Darwin Options. (line 204) * specs: Overall Options. (line 611) * static: Link Options. (line 217) --- 66804,66811 ---- * shared-libgcc: Link Options. (line 230) * short-calls: Adapteva Epiphany Options. (line 61) ! * sim: CRIS Options. (line 82) ! * sim2: CRIS Options. (line 87) * single_module: Darwin Options. (line 204) * specs: Overall Options. (line 611) * static: Link Options. (line 217) *************** look up both forms. *** 66842,66848 **** * Wabi-tag: C++ Dialect Options. (line 590) * Wabsolute-value: Warning Options. (line 2352) ! * Waddr-space-convert: AVR Options. (line 324) * Waddress: Warning Options. (line 2781) * Waddress-of-packed-member: Warning Options. (line 2815) * Waggregate-return: Warning Options. (line 2843) --- 66862,66868 ---- * Wabi-tag: C++ Dialect Options. (line 590) * Wabsolute-value: Warning Options. (line 2352) ! * Waddr-space-convert: AVR Options. (line 326) * Waddress: Warning Options. (line 2781) * Waddress-of-packed-member: Warning Options. (line 2815) * Waggregate-return: Warning Options. (line 2843) *************** look up both forms. *** 67096,67102 **** * Wmissing-prototypes: Warning Options. (line 2928) * Wmissing-requires: Warning Options. (line 2978) * Wmissing-template-keyword: Warning Options. (line 2995) ! * Wmisspelled-isr: AVR Options. (line 329) * Wmultichar: Warning Options. (line 3023) * Wmultiple-inheritance: C++ Dialect Options. (line 1098) --- 67116,67122 ---- * Wmissing-prototypes: Warning Options. (line 2928) * Wmissing-requires: Warning Options. (line 2978) * Wmissing-template-keyword: Warning Options. (line 2995) ! * Wmisspelled-isr: AVR Options. (line 331) * Wmultichar: Warning Options. (line 3023) * Wmultiple-inheritance: C++ Dialect Options. (line 1098) *************** look up both forms. *** 67108,67114 **** * Wnested-externs: Warning Options. (line 3195) * Wno-abi: Warning Options. (line 267) * Wno-absolute-value: Warning Options. (line 2352) ! * Wno-addr-space-convert: AVR Options. (line 324) * Wno-address: Warning Options. (line 2781) * Wno-address-of-packed-member: Warning Options. (line 2815) * Wno-aggregate-return: Warning Options. (line 2843) --- 67128,67134 ---- * Wnested-externs: Warning Options. (line 3195) * Wno-abi: Warning Options. (line 267) * Wno-absolute-value: Warning Options. (line 2352) ! * Wno-addr-space-convert: AVR Options. (line 326) * Wno-address: Warning Options. (line 2781) * Wno-address-of-packed-member: Warning Options. (line 2815) * Wno-aggregate-return: Warning Options. (line 2843) *************** look up both forms. *** 67344,67350 **** * Wno-missing-prototypes: Warning Options. (line 2928) * Wno-missing-requires: Warning Options. (line 2978) * Wno-missing-template-keyword: Warning Options. (line 2995) ! * Wno-misspelled-isr: AVR Options. (line 329) * Wno-multichar: Warning Options. (line 3023) * Wno-multiple-inheritance: C++ Dialect Options. (line 1098) --- 67364,67370 ---- * Wno-missing-prototypes: Warning Options. (line 2928) * Wno-missing-requires: Warning Options. (line 2978) * Wno-missing-template-keyword: Warning Options. (line 2995) ! * Wno-misspelled-isr: AVR Options. (line 331) * Wno-multichar: Warning Options. (line 3023) * Wno-multiple-inheritance: C++ Dialect Options. (line 1098) *************** Keyword Index *** 67904,67910 **** * __builtin_cpu_supports: Basic PowerPC Built-in Functions Available on all Configurations. (line 70) * __builtin_cpu_supports <1>: x86 Built-in Functions. ! (line 252) * __builtin_ctz: Other Builtins. (line 969) * __builtin_ctzl: Other Builtins. (line 991) * __builtin_ctzll: Other Builtins. (line 1014) --- 67924,67930 ---- * __builtin_cpu_supports: Basic PowerPC Built-in Functions Available on all Configurations. (line 70) * __builtin_cpu_supports <1>: x86 Built-in Functions. ! (line 255) * __builtin_ctz: Other Builtins. (line 969) * __builtin_ctzl: Other Builtins. (line 991) * __builtin_ctzll: Other Builtins. (line 1014) *************** Keyword Index *** 68205,68211 **** * __far M32C Named Address Spaces: Named Address Spaces. (line 153) * __far RL78 Named Address Spaces: Named Address Spaces. ! (line 176) * __flash AVR Named Address Spaces: Named Address Spaces. (line 44) * __flash1 AVR Named Address Spaces: Named Address Spaces. --- 68225,68231 ---- * __far M32C Named Address Spaces: Named Address Spaces. (line 153) * __far RL78 Named Address Spaces: Named Address Spaces. ! (line 177) * __flash AVR Named Address Spaces: Named Address Spaces. (line 44) * __flash1 AVR Named Address Spaces: Named Address Spaces. *************** Keyword Index *** 68232,68242 **** * __PRETTY_FUNCTION__ identifier: Function Names. (line 6) * __real__ keyword: Complex. (line 43) * __regio_symbol PRU Named Address Spaces: Named Address Spaces. ! (line 161) * __seg_fs x86 named address space: Named Address Spaces. ! (line 189) * __seg_gs x86 named address space: Named Address Spaces. ! (line 189) * __STDC_HOSTED__: Standards. (line 13) * __sync_add_and_fetch: __sync Builtins. (line 72) * __sync_and_and_fetch: __sync Builtins. (line 72) --- 68252,68262 ---- * __PRETTY_FUNCTION__ identifier: Function Names. (line 6) * __real__ keyword: Complex. (line 43) * __regio_symbol PRU Named Address Spaces: Named Address Spaces. ! (line 162) * __seg_fs x86 named address space: Named Address Spaces. ! (line 190) * __seg_gs x86 named address space: Named Address Spaces. ! (line 190) * __STDC_HOSTED__: Standards. (line 13) * __sync_add_and_fetch: __sync Builtins. (line 72) * __sync_and_and_fetch: __sync Builtins. (line 72) *************** Keyword Index *** 68646,68658 **** * declaring static data in C++: Static Definitions. (line 6) * defining static data in C++: Static Definitions. (line 6) * dependencies for make as output: Environment Variables. ! (line 172) * dependencies for make as output <1>: Environment Variables. ! (line 188) * dependencies, make: Preprocessor Options. (line 77) * DEPENDENCIES_OUTPUT: Environment Variables. ! (line 171) * dependent name lookup: Name lookup. (line 6) * deprecated enumerator attribute: Enumerator Attributes. (line 28) --- 68666,68678 ---- * declaring static data in C++: Static Definitions. (line 6) * defining static data in C++: Static Definitions. (line 6) * dependencies for make as output: Environment Variables. ! (line 173) * dependencies for make as output <1>: Environment Variables. ! (line 189) * dependencies, make: Preprocessor Options. (line 77) * DEPENDENCIES_OUTPUT: Environment Variables. ! (line 172) * dependent name lookup: Name lookup. (line 6) * deprecated enumerator attribute: Enumerator Attributes. (line 28) *************** Keyword Index *** 68714,68720 **** (line 9) * eightbit_data variable attribute, H8/300: H8/300 Variable Attributes. (line 9) ! * EIND: AVR Options. (line 335) * either function attribute, MSP430: MSP430 Function Attributes. (line 57) * either variable attribute, MSP430: MSP430 Variable Attributes. --- 68734,68740 ---- (line 9) * eightbit_data variable attribute, H8/300: H8/300 Variable Attributes. (line 9) ! * EIND: AVR Options. (line 337) * either function attribute, MSP430: MSP430 Function Attributes. (line 57) * either variable attribute, MSP430: MSP430 Variable Attributes. *************** Keyword Index *** 69004,69010 **** * increment operators: Bug Criteria. (line 17) * index: Other Builtins. (line 6) * indirect calls, ARC: ARC Function Attributes. ! (line 26) * indirect calls, ARM: ARM Function Attributes. (line 38) * indirect calls, Blackfin: Blackfin Function Attributes. --- 69024,69030 ---- * increment operators: Bug Criteria. (line 17) * index: Other Builtins. (line 6) * indirect calls, ARC: ARC Function Attributes. ! (line 27) * indirect calls, ARM: ARM Function Attributes. (line 38) * indirect calls, Blackfin: Blackfin Function Attributes. *************** Keyword Index *** 69151,69159 **** * j1f: Other Builtins. (line 6) * j1l: Other Builtins. (line 6) * jli_always function attribute, ARC: ARC Function Attributes. ! (line 43) * jli_fixed function attribute, ARC: ARC Function Attributes. ! (line 49) * jn: Other Builtins. (line 6) * jnf: Other Builtins. (line 6) * jnl: Other Builtins. (line 6) --- 69171,69179 ---- * j1f: Other Builtins. (line 6) * j1l: Other Builtins. (line 6) * jli_always function attribute, ARC: ARC Function Attributes. ! (line 44) * jli_fixed function attribute, ARC: ARC Function Attributes. ! (line 50) * jn: Other Builtins. (line 6) * jnf: Other Builtins. (line 6) * jnl: Other Builtins. (line 6) *************** Keyword Index *** 69270,69276 **** * longjmp incompatibilities: Incompatibilities. (line 39) * longjmp warnings: Warning Options. (line 1375) * long_call function attribute, ARC: ARC Function Attributes. ! (line 26) * long_call function attribute, ARM: ARM Function Attributes. (line 38) * long_call function attribute, Epiphany: Epiphany Function Attributes. --- 69290,69296 ---- * longjmp incompatibilities: Incompatibilities. (line 39) * longjmp warnings: Warning Options. (line 1375) * long_call function attribute, ARC: ARC Function Attributes. ! (line 27) * long_call function attribute, ARM: ARM Function Attributes. (line 38) * long_call function attribute, Epiphany: Epiphany Function Attributes. *************** Keyword Index *** 69313,69319 **** (line 245) * MCore options: MCore Options. (line 6) * medium_call function attribute, ARC: ARC Function Attributes. ! (line 26) * member fns, automatically inline: Inline. (line 68) * memchr: Other Builtins. (line 6) * memcmp: Other Builtins. (line 6) --- 69333,69339 ---- (line 245) * MCore options: MCore Options. (line 6) * medium_call function attribute, ARC: ARC Function Attributes. ! (line 27) * member fns, automatically inline: Inline. (line 68) * memchr: Other Builtins. (line 6) * memcmp: Other Builtins. (line 6) *************** Keyword Index *** 69376,69382 **** * multiprecision arithmetic: Long Long. (line 6) * n in constraint: Simple Constraints. (line 73) * naked function attribute, ARC: ARC Function Attributes. ! (line 58) * naked function attribute, ARM: ARM Function Attributes. (line 48) * naked function attribute, AVR: AVR Function Attributes. --- 69396,69402 ---- * multiprecision arithmetic: Long Long. (line 6) * n in constraint: Simple Constraints. (line 73) * naked function attribute, ARC: ARC Function Attributes. ! (line 59) * naked function attribute, ARM: ARM Function Attributes. (line 48) * naked function attribute, AVR: AVR Function Attributes. *************** Keyword Index *** 69530,69543 **** * omitted middle-operands: Conditionals. (line 6) * open coding: Inline. (line 6) * OpenACC accelerator programming: C Dialect Options. (line 388) ! * OpenACC accelerator programming <1>: C Dialect Options. (line 396) * OpenACC accelerator programming <2>: Warning Options. (line 3096) * OpenACC offloading options: C Dialect Options. (line 373) * OpenACC offloading targets: C Dialect Options. (line 360) * OpenMP offloading options: C Dialect Options. (line 373) * OpenMP offloading targets: C Dialect Options. (line 360) ! * OpenMP parallel: C Dialect Options. (line 402) ! * OpenMP SIMD: C Dialect Options. (line 410) * OpenRISC Options: OpenRISC Options. (line 6) * operand constraints, asm: Constraints. (line 6) * optimize function attribute: Common Function Attributes. --- 69550,69563 ---- * omitted middle-operands: Conditionals. (line 6) * open coding: Inline. (line 6) * OpenACC accelerator programming: C Dialect Options. (line 388) ! * OpenACC accelerator programming <1>: C Dialect Options. (line 397) * OpenACC accelerator programming <2>: Warning Options. (line 3096) * OpenACC offloading options: C Dialect Options. (line 373) * OpenACC offloading targets: C Dialect Options. (line 360) * OpenMP offloading options: C Dialect Options. (line 373) * OpenMP offloading targets: C Dialect Options. (line 360) ! * OpenMP parallel: C Dialect Options. (line 403) ! * OpenMP SIMD: C Dialect Options. (line 412) * OpenRISC Options: OpenRISC Options. (line 6) * operand constraints, asm: Constraints. (line 6) * optimize function attribute: Common Function Attributes. *************** Keyword Index *** 69703,69712 **** * r fixed-suffix: Fixed-Point. (line 6) * R fixed-suffix: Fixed-Point. (line 6) * r in constraint: Simple Constraints. (line 64) ! * RAMPD: AVR Options. (line 446) ! * RAMPX: AVR Options. (line 446) ! * RAMPY: AVR Options. (line 446) ! * RAMPZ: AVR Options. (line 446) * range1 GCC_COLORS capability: Diagnostic Message Formatting Options. (line 107) * range2 GCC_COLORS capability: Diagnostic Message Formatting Options. --- 69723,69732 ---- * r fixed-suffix: Fixed-Point. (line 6) * R fixed-suffix: Fixed-Point. (line 6) * r in constraint: Simple Constraints. (line 64) ! * RAMPD: AVR Options. (line 448) ! * RAMPX: AVR Options. (line 448) ! * RAMPY: AVR Options. (line 448) ! * RAMPZ: AVR Options. (line 448) * range1 GCC_COLORS capability: Diagnostic Message Formatting Options. (line 107) * range2 GCC_COLORS capability: Diagnostic Message Formatting Options. *************** Keyword Index *** 69818,69824 **** * section variable attribute: Common Variable Attributes. (line 307) * secure_call function attribute, ARC: ARC Function Attributes. ! (line 53) * selectany variable attribute: Microsoft Windows Variable Attributes. (line 16) * sentinel function attribute: Common Function Attributes. --- 69838,69844 ---- * section variable attribute: Common Variable Attributes. (line 307) * secure_call function attribute, ARC: ARC Function Attributes. ! (line 54) * selectany variable attribute: Microsoft Windows Variable Attributes. (line 16) * sentinel function attribute: Common Function Attributes. *************** Keyword Index *** 69836,69842 **** * shortcall function attribute, PowerPC: PowerPC Function Attributes. (line 10) * short_call function attribute, ARC: ARC Function Attributes. ! (line 26) * short_call function attribute, ARM: ARM Function Attributes. (line 38) * short_call function attribute, Epiphany: Epiphany Function Attributes. --- 69856,69862 ---- * shortcall function attribute, PowerPC: PowerPC Function Attributes. (line 10) * short_call function attribute, ARC: ARC Function Attributes. ! (line 27) * short_call function attribute, ARM: ARM Function Attributes. (line 38) * short_call function attribute, Epiphany: Epiphany Function Attributes. *************** Keyword Index *** 69861,69867 **** * significand: Other Builtins. (line 6) * significandf: Other Builtins. (line 6) * significandl: Other Builtins. (line 6) ! * SIMD: C Dialect Options. (line 410) * simd function attribute: Common Function Attributes. (line 1180) * simple constraints: Simple Constraints. (line 6) --- 69881,69887 ---- * significand: Other Builtins. (line 6) * significandf: Other Builtins. (line 6) * significandl: Other Builtins. (line 6) ! * SIMD: C Dialect Options. (line 412) * simd function attribute: Common Function Attributes. (line 1180) * simple constraints: Simple Constraints. (line 6) *************** Keyword Index *** 69882,69888 **** * snprintf: Other Builtins. (line 6) * Solaris 2 options: Solaris 2 Options. (line 6) * SOURCE_DATE_EPOCH: Environment Variables. ! (line 193) * SPARC options: SPARC Options. (line 6) * Spec Files: Spec Files. (line 6) * specified registers: Explicit Register Variables. --- 69902,69908 ---- * snprintf: Other Builtins. (line 6) * Solaris 2 options: Solaris 2 Options. (line 6) * SOURCE_DATE_EPOCH: Environment Variables. ! (line 194) * SPARC options: SPARC Options. (line 6) * Spec Files: Spec Files. (line 6) * specified registers: Explicit Register Variables. *************** Keyword Index *** 69950,69956 **** * subscripting and function values: Subscripting. (line 6) * suffixes for C++ source: Invoking G++. (line 6) * SUNPRO_DEPENDENCIES: Environment Variables. ! (line 187) * suppressing warnings: Warning Options. (line 6) * surprises in C++: C++ Misunderstandings. (line 6) --- 69970,69976 ---- * subscripting and function values: Subscripting. (line 6) * suffixes for C++ source: Invoking G++. (line 6) * SUNPRO_DEPENDENCIES: Environment Variables. ! (line 188) * suppressing warnings: Warning Options. (line 6) * surprises in C++: C++ Misunderstandings. (line 6) *************** Keyword Index *** 70527,70533 **** * X in constraint: Simple Constraints. (line 122) * X3.159-1989: Standards. (line 13) * x86 named address spaces: Named Address Spaces. ! (line 184) * x86 Options: x86 Options. (line 6) * x86 Windows Options: x86 Windows Options. (line 6) --- 70547,70553 ---- * X in constraint: Simple Constraints. (line 122) * X3.159-1989: Standards. (line 13) * x86 named address spaces: Named Address Spaces. ! (line 185) * x86 Options: x86 Options. (line 6) * x86 Windows Options: x86 Windows Options. (line 6) *************** Keyword Index *** 70554,70999 ****  Tag Table: Node: Top2135 ! Node: G++ and GCC4105 ! Node: Standards6151 ! Node: Invoking GCC19778 ! Node: Option Summary25005 ! Node: Overall Options83977 ! Node: Invoking G++111503 ! Node: C Dialect Options113026 ! Node: C++ Dialect Options134065 ! Node: Objective-C and Objective-C++ Dialect Options196624 ! Node: Diagnostic Message Formatting Options208529 ! Node: Warning Options239102 ! Ref: Wtrigraphs344000 ! Node: Static Analyzer Options389363 ! Node: Debugging Options409915 ! Node: Optimize Options431152 ! Ref: Type-punning503612 ! Node: Instrumentation Options623903 ! Node: Preprocessor Options672015 ! Ref: dashMF676862 ! Ref: fdollars-in-identifiers681524 ! Node: Assembler Options694849 ! Node: Link Options695540 ! Ref: Link Options-Footnote-1712500 ! Node: Directory Options712836 ! Node: Code Gen Options721239 ! Node: Developer Options750112 ! Node: Submodel Options791497 ! Node: AArch64 Options793329 ! Ref: aarch64-feature-modifiers808919 ! Node: Adapteva Epiphany Options814480 ! Node: AMD GCN Options820432 ! Node: ARC Options821995 ! Node: ARM Options842764 ! Node: AVR Options884789 ! Node: Blackfin Options912498 ! Node: C6X Options920390 ! Node: CRIS Options921933 ! Node: CR16 Options925119 ! Node: C-SKY Options926031 ! Node: Darwin Options931758 ! Node: DEC Alpha Options939538 ! Node: eBPF Options951154 ! Node: FR30 Options953530 ! Node: FT32 Options954090 ! Node: FRV Options955036 ! Node: GNU/Linux Options961800 ! Node: H8/300 Options963181 ! Node: HPPA Options964633 ! Node: IA-64 Options974165 ! Node: LM32 Options982293 ! Node: LoongArch Options982821 ! Node: M32C Options990178 ! Node: M32R/D Options991456 ! Node: M680x0 Options995001 ! Node: MCore Options1009156 ! Node: MeP Options1010658 ! Node: MicroBlaze Options1014618 ! Node: MIPS Options1017683 ! Node: MMIX Options1054480 ! Node: MN10300 Options1056957 ! Node: Moxie Options1059500 ! Node: MSP430 Options1059987 ! Node: NDS32 Options1067748 ! Node: Nios II Options1069918 ! Node: Nvidia PTX Options1083134 ! Node: OpenRISC Options1086630 ! Node: PDP-11 Options1089384 ! Node: picoChip Options1090633 ! Node: PowerPC Options1092771 ! Node: PRU Options1092991 ! Node: RISC-V Options1095200 ! Node: RL78 Options1103601 ! Node: RS/6000 and PowerPC Options1107376 ! Node: RX Options1148892 ! Node: S/390 and zSeries Options1157494 ! Node: Score Options1168294 ! Node: SH Options1169143 ! Node: Solaris 2 Options1184283 ! Node: SPARC Options1185521 ! Node: System V Options1201173 ! Node: TILE-Gx Options1202001 ! Node: TILEPro Options1203019 ! Node: V850 Options1203523 ! Node: VAX Options1210210 ! Node: Visium Options1210902 ! Node: VMS Options1213210 ! Node: VxWorks Options1214026 ! Node: x86 Options1215178 ! Node: x86 Windows Options1284656 ! Node: Xstormy16 Options1287462 ! Node: Xtensa Options1287756 ! Node: zSeries Options1293892 ! Node: Spec Files1294088 ! Node: Environment Variables1320167 ! Node: Precompiled Headers1329600 ! Node: C++ Modules1335809 ! Ref: C++ Modules-Footnote-11341804 ! Node: C++ Module Mapper1342057 ! Node: C++ Module Preprocessing1347210 ! Node: C++ Compiled Module Interface1349039 ! Ref: C++ Compiled Module Interface-Footnote-11352423 ! Ref: C++ Compiled Module Interface-Footnote-21352512 ! Node: C Implementation1352568 ! Node: Translation implementation1354259 ! Node: Environment implementation1354850 ! Node: Identifiers implementation1355404 ! Node: Characters implementation1356490 ! Node: Integers implementation1360140 ! Node: Floating point implementation1362189 ! Node: Arrays and pointers implementation1365252 ! Ref: Arrays and pointers implementation-Footnote-11366712 ! Node: Hints implementation1366838 ! Node: Structures unions enumerations and bit-fields implementation1368333 ! Node: Qualifiers implementation1370557 ! Node: Declarators implementation1372618 ! Node: Statements implementation1372959 ! Node: Preprocessing directives implementation1373285 ! Node: Library functions implementation1375606 ! Node: Architecture implementation1376255 ! Node: Locale-specific behavior implementation1377900 ! Node: C++ Implementation1378205 ! Node: Conditionally-supported behavior1379489 ! Node: Exception handling1380106 ! Node: C Extensions1380573 ! Node: Statement Exprs1385796 ! Node: Local Labels1391168 ! Node: Labels as Values1394141 ! Ref: Labels as Values-Footnote-11396668 ! Node: Nested Functions1396853 ! Node: Nonlocal Gotos1400807 ! Node: Constructing Calls1403073 ! Node: Typeof1407785 ! Node: Conditionals1411714 ! Node: __int1281412603 ! Node: Long Long1413128 ! Node: Complex1414619 ! Node: Floating Types1419364 ! Node: Half-Precision1422885 ! Node: Decimal Float1426353 ! Node: Hex Floats1428207 ! Node: Fixed-Point1429281 ! Node: Named Address Spaces1432539 ! Ref: AVR Named Address Spaces1433225 ! Node: Zero Length1440519 ! Node: Empty Structures1444700 ! Node: Variable Length1445106 ! Node: Variadic Macros1447824 ! Node: Escaped Newlines1450202 ! Node: Subscripting1451063 ! Node: Pointer Arith1451788 ! Node: Variadic Pointer Args1452365 ! Node: Pointers to Arrays1453090 ! Node: Initializers1453843 ! Node: Compound Literals1454344 ! Node: Designated Inits1457911 ! Node: Case Ranges1461835 ! Node: Cast to Union1462516 ! Node: Mixed Labels and Declarations1464250 ! Node: Function Attributes1464887 ! Node: Common Function Attributes1469398 ! Ref: Common Function Attributes-Footnote-11546339 ! Node: AArch64 Function Attributes1546656 ! Node: AMD GCN Function Attributes1552850 ! Node: ARC Function Attributes1555903 ! Node: ARM Function Attributes1558840 ! Node: AVR Function Attributes1563979 ! Node: Blackfin Function Attributes1568514 ! Node: BPF Function Attributes1571011 ! Node: CR16 Function Attributes1571599 ! Node: C-SKY Function Attributes1572118 ! Node: Epiphany Function Attributes1573417 ! Node: H8/300 Function Attributes1576172 ! Node: IA-64 Function Attributes1577370 ! Node: M32C Function Attributes1578412 ! Node: M32R/D Function Attributes1580750 ! Node: m68k Function Attributes1582224 ! Node: MCORE Function Attributes1583168 ! Node: MeP Function Attributes1583979 ! Node: MicroBlaze Function Attributes1585280 ! Node: Microsoft Windows Function Attributes1586787 ! Node: MIPS Function Attributes1591356 ! Node: MSP430 Function Attributes1596974 ! Node: NDS32 Function Attributes1601053 ! Node: Nios II Function Attributes1603477 ! Node: Nvidia PTX Function Attributes1604774 ! Node: PowerPC Function Attributes1605389 ! Node: RISC-V Function Attributes1612163 ! Node: RL78 Function Attributes1613579 ! Node: RX Function Attributes1614818 ! Node: S/390 Function Attributes1617365 ! Node: SH Function Attributes1619193 ! Node: Symbian OS Function Attributes1622621 ! Node: V850 Function Attributes1622957 ! Node: Visium Function Attributes1623502 ! Node: x86 Function Attributes1624030 ! Node: Xstormy16 Function Attributes1647985 ! Node: Variable Attributes1648492 ! Node: Common Variable Attributes1650025 ! Node: ARC Variable Attributes1671932 ! Node: AVR Variable Attributes1672314 ! Node: Blackfin Variable Attributes1677477 ! Node: H8/300 Variable Attributes1678335 ! Node: IA-64 Variable Attributes1679408 ! Node: M32R/D Variable Attributes1680159 ! Node: MeP Variable Attributes1680942 ! Node: Microsoft Windows Variable Attributes1683035 ! Node: MSP430 Variable Attributes1685488 ! Node: Nvidia PTX Variable Attributes1686702 ! Node: PowerPC Variable Attributes1687319 ! Node: RL78 Variable Attributes1687876 ! Node: V850 Variable Attributes1688295 ! Node: x86 Variable Attributes1688928 ! Node: Xstormy16 Variable Attributes1689984 ! Node: Type Attributes1690554 ! Node: Common Type Attributes1692242 ! Node: ARC Type Attributes1714603 ! Node: ARM Type Attributes1715075 ! Node: BPF Type Attributes1715857 ! Node: MeP Type Attributes1716374 ! Node: PowerPC Type Attributes1716776 ! Node: x86 Type Attributes1717765 ! Node: Label Attributes1718757 ! Node: Enumerator Attributes1720784 ! Node: Statement Attributes1722316 ! Node: Attribute Syntax1723799 ! Node: Function Prototypes1735057 ! Node: C++ Comments1736837 ! Node: Dollar Signs1737356 ! Node: Character Escapes1737821 ! Node: Alignment1738105 ! Node: Inline1739758 ! Node: Volatiles1744575 ! Node: Using Assembly Language with C1747474 ! Node: Basic Asm1748711 ! Node: Extended Asm1754334 ! Ref: Volatile1758448 ! Ref: AssemblerTemplate1762561 ! Ref: OutputOperands1766801 ! Ref: FlagOutputOperands1773764 ! Ref: InputOperands1776711 ! Ref: Clobbers and Scratch Registers1780979 ! Ref: GotoLabels1789620 ! Ref: x86Operandmodifiers1793243 ! Ref: x86floatingpointasmoperands1798059 ! Ref: msp430Operandmodifiers1801388 ! Node: Constraints1803046 ! Node: Simple Constraints1804152 ! Node: Multi-Alternative1811466 ! Node: Modifiers1813141 ! Node: Machine Constraints1815940 ! Node: Asm Labels1873711 ! Node: Explicit Register Variables1875331 ! Ref: Explicit Reg Vars1875545 ! Node: Global Register Variables1876154 ! Ref: Global Reg Vars1876362 ! Node: Local Register Variables1881144 ! Ref: Local Reg Vars1881364 ! Node: Size of an asm1884992 ! Node: Alternate Keywords1886470 ! Node: Incomplete Enums1887975 ! Node: Function Names1888732 ! Node: Return Address1890636 ! Node: Vector Extensions1895223 ! Node: Offsetof1906206 ! Node: __sync Builtins1907039 ! Node: __atomic Builtins1913482 ! Node: Integer Overflow Builtins1926995 ! Node: x86 specific memory model extensions for transactional memory1933478 ! Node: Object Size Checking1934744 ! Node: Other Builtins1941760 ! Node: Target Builtins1994364 ! Node: AArch64 Built-in Functions1996177 ! Node: Alpha Built-in Functions1996873 ! Node: Altera Nios II Built-in Functions1999967 ! Node: ARC Built-in Functions2004406 ! Node: ARC SIMD Built-in Functions2009618 ! Node: ARM iWMMXt Built-in Functions2018616 ! Node: ARM C Language Extensions (ACLE)2025752 ! Node: ARM Floating Point Status and Control Intrinsics2027029 ! Node: ARM ARMv8-M Security Extensions2027516 ! Node: AVR Built-in Functions2028808 ! Node: Blackfin Built-in Functions2032574 ! Node: BPF Built-in Functions2033194 ! Node: FR-V Built-in Functions2034653 ! Node: Argument Types2035522 ! Node: Directly-mapped Integer Functions2037353 ! Node: Directly-mapped Media Functions2038513 ! Node: Raw read/write Functions2046795 ! Node: Other Built-in Functions2047703 ! Node: LoongArch Base Built-in Functions2048889 ! Node: MIPS DSP Built-in Functions2054635 ! Node: MIPS Paired-Single Support2067400 ! Node: MIPS Loongson Built-in Functions2068899 ! Node: Paired-Single Arithmetic2075421 ! Node: Paired-Single Built-in Functions2076444 ! Node: MIPS-3D Built-in Functions2079111 ! Node: MIPS SIMD Architecture (MSA) Support2084505 ! Node: MIPS SIMD Architecture Built-in Functions2087345 ! Node: Other MIPS Built-in Functions2114199 ! Node: MSP430 Built-in Functions2115208 ! Node: NDS32 Built-in Functions2116609 ! Node: picoChip Built-in Functions2117902 ! Node: Basic PowerPC Built-in Functions2119251 ! Node: Basic PowerPC Built-in Functions Available on all Configurations2120109 ! Node: Basic PowerPC Built-in Functions Available on ISA 2.052128619 ! Node: Basic PowerPC Built-in Functions Available on ISA 2.062133454 ! Node: Basic PowerPC Built-in Functions Available on ISA 2.072135534 ! Node: Basic PowerPC Built-in Functions Available on ISA 3.02136388 ! Node: Basic PowerPC Built-in Functions Available on ISA 3.12143366 ! Node: PowerPC AltiVec/VSX Built-in Functions2146531 ! Node: PowerPC AltiVec Built-in Functions on ISA 2.052154600 ! Node: PowerPC AltiVec Built-in Functions Available on ISA 2.062180000 ! Node: PowerPC AltiVec Built-in Functions Available on ISA 2.072187066 ! Node: PowerPC AltiVec Built-in Functions Available on ISA 3.02196876 ! Node: PowerPC AltiVec Built-in Functions Available on ISA 3.12212599 ! Node: PowerPC Hardware Transactional Memory Built-in Functions2245883 ! Node: PowerPC Atomic Memory Operation Functions2254433 ! Node: PowerPC Matrix-Multiply Assist Built-in Functions2256996 ! Node: PRU Built-in Functions2263121 ! Node: RISC-V Built-in Functions2264309 ! Node: RX Built-in Functions2264720 ! Node: S/390 System z Built-in Functions2268722 ! Node: SH Built-in Functions2273952 ! Node: SPARC VIS Built-in Functions2275680 ! Node: TI C6X Built-in Functions2284211 ! Node: TILE-Gx Built-in Functions2285262 ! Node: TILEPro Built-in Functions2286387 ! Node: x86 Built-in Functions2287495 ! Node: x86 transactional memory intrinsics2352845 ! Node: x86 control-flow protection intrinsics2356112 ! Node: Target Format Checks2357883 ! Node: Solaris Format Checks2358315 ! Node: Darwin Format Checks2358741 ! Node: Pragmas2359704 ! Node: AArch64 Pragmas2360645 ! Node: ARM Pragmas2361102 ! Node: M32C Pragmas2361729 ! Node: MeP Pragmas2362801 ! Node: PRU Pragmas2364853 ! Node: RS/6000 and PowerPC Pragmas2365431 ! Node: S/390 Pragmas2366171 ! Node: Darwin Pragmas2366737 ! Node: Solaris Pragmas2367790 ! Node: Symbol-Renaming Pragmas2368954 ! Node: Structure-Layout Pragmas2370591 ! Node: Weak Pragmas2372871 ! Node: Diagnostic Pragmas2373606 ! Node: Visibility Pragmas2378357 ! Node: Push/Pop Macro Pragmas2379042 ! Node: Function Specific Option Pragmas2380015 ! Node: Loop-Specific Pragmas2381981 ! Node: Unnamed Fields2383581 ! Node: Thread-Local2385778 ! Node: C99 Thread-Local Edits2387884 ! Node: C++98 Thread-Local Edits2389882 ! Node: Binary constants2393327 ! Node: C++ Extensions2393998 ! Node: C++ Volatiles2395628 ! Node: Restricted Pointers2397976 ! Node: Vague Linkage2399567 ! Node: C++ Interface2403190 ! Ref: C++ Interface-Footnote-12406987 ! Node: Template Instantiation2407125 ! Node: Bound member functions2413216 ! Node: C++ Attributes2414748 ! Node: Function Multiversioning2418820 ! Node: Type Traits2420628 ! Node: C++ Concepts2427599 ! Node: Deprecated Features2429105 ! Node: Backwards Compatibility2430930 ! Node: Objective-C2432002 ! Node: GNU Objective-C runtime API2432609 ! Node: Modern GNU Objective-C runtime API2433616 ! Node: Traditional GNU Objective-C runtime API2436052 ! Node: Executing code before main2436779 ! Node: What you can and what you cannot do in +load2439523 ! Node: Type encoding2441893 ! Node: Legacy type encoding2447259 ! Node: @encode2448349 ! Node: Method signatures2448894 ! Node: Garbage Collection2450886 ! Node: Constant string objects2453576 ! Node: compatibility_alias2456085 ! Node: Exceptions2456810 ! Node: Synchronization2459520 ! Node: Fast enumeration2460704 ! Node: Using fast enumeration2461016 ! Node: c99-like fast enumeration syntax2462227 ! Node: Fast enumeration details2462930 ! Node: Fast enumeration protocol2465270 ! Node: Messaging with the GNU Objective-C runtime2468422 ! Node: Dynamically registering methods2469794 ! Node: Forwarding hook2471485 ! Node: Compatibility2474525 ! Node: Gcov2481081 ! Node: Gcov Intro2481616 ! Node: Invoking Gcov2484334 ! Node: Gcov and Optimization2507067 ! Node: Gcov Data Files2510820 ! Node: Cross-profiling2512229 ! Node: Gcov-tool2514083 ! Node: Gcov-tool Intro2514508 ! Node: Invoking Gcov-tool2516478 ! Node: Gcov-dump2519056 ! Node: Gcov-dump Intro2519379 ! Node: Invoking Gcov-dump2519646 ! Node: lto-dump2520303 ! Node: lto-dump Intro2520602 ! Node: Invoking lto-dump2520852 ! Node: Trouble2521948 ! Node: Actual Bugs2523365 ! Node: Interoperation2523812 ! Node: Incompatibilities2530703 ! Node: Fixed Headers2538855 ! Node: Standard Libraries2540513 ! Node: Disappointments2541885 ! Node: C++ Misunderstandings2546244 ! Node: Static Definitions2547055 ! Node: Name lookup2548108 ! Ref: Name lookup-Footnote-12552889 ! Node: Temporaries2553078 ! Node: Copy Assignment2555054 ! Node: Non-bugs2556889 ! Node: Warnings and Errors2567395 ! Node: Bugs2569157 ! Node: Bug Criteria2569624 ! Node: Bug Reporting2571834 ! Node: Service2572052 ! Node: Contributing2572873 ! Node: Funding2573619 ! Node: GNU Project2576109 ! Node: Copying2576757 ! Node: GNU Free Documentation License2614268 ! Node: Contributors2639388 ! Node: Option Index2680362 ! Node: Keyword Index2979753  End Tag Table - -  - Local Variables: - coding: utf-8 - End: --- 70574,71014 ----  Tag Table: Node: Top2135 ! Node: G++ and GCC4093 ! Node: Standards6139 ! Node: Invoking GCC19766 ! Node: Option Summary24993 ! Node: Overall Options83965 ! Node: Invoking G++111491 ! Node: C Dialect Options113014 ! Node: C++ Dialect Options134053 ! Node: Objective-C and Objective-C++ Dialect Options196612 ! Node: Diagnostic Message Formatting Options208517 ! Node: Warning Options239090 ! Ref: Wtrigraphs343988 ! Node: Static Analyzer Options389351 ! Node: Debugging Options409903 ! Node: Optimize Options431140 ! Ref: Type-punning503600 ! Node: Instrumentation Options623891 ! Node: Preprocessor Options672003 ! Ref: dashMF676850 ! Ref: fdollars-in-identifiers681512 ! Node: Assembler Options694837 ! Node: Link Options695528 ! Ref: Link Options-Footnote-1712488 ! Node: Directory Options712824 ! Node: Code Gen Options721227 ! Node: Developer Options750100 ! Node: Submodel Options791485 ! Node: AArch64 Options793317 ! Ref: aarch64-feature-modifiers808916 ! Node: Adapteva Epiphany Options814477 ! Node: AMD GCN Options820429 ! Node: ARC Options821992 ! Node: ARM Options842761 ! Node: AVR Options884786 ! Node: Blackfin Options912494 ! Node: C6X Options920386 ! Node: CRIS Options921929 ! Node: CR16 Options925115 ! Node: C-SKY Options926027 ! Node: Darwin Options931754 ! Node: DEC Alpha Options939534 ! Node: eBPF Options951150 ! Node: FR30 Options953526 ! Node: FT32 Options954086 ! Node: FRV Options955032 ! Node: GNU/Linux Options961796 ! Node: H8/300 Options963177 ! Node: HPPA Options964629 ! Node: IA-64 Options974161 ! Node: LM32 Options982289 ! Node: LoongArch Options982817 ! Node: M32C Options990174 ! Node: M32R/D Options991452 ! Node: M680x0 Options994997 ! Node: MCore Options1009152 ! Node: MeP Options1010654 ! Node: MicroBlaze Options1014614 ! Node: MIPS Options1017679 ! Node: MMIX Options1054476 ! Node: MN10300 Options1056953 ! Node: Moxie Options1059496 ! Node: MSP430 Options1059983 ! Node: NDS32 Options1067744 ! Node: Nios II Options1069914 ! Node: Nvidia PTX Options1083130 ! Node: OpenRISC Options1086626 ! Node: PDP-11 Options1089380 ! Node: picoChip Options1090629 ! Node: PowerPC Options1092767 ! Node: PRU Options1092987 ! Node: RISC-V Options1095196 ! Node: RL78 Options1103597 ! Node: RS/6000 and PowerPC Options1107372 ! Node: RX Options1148888 ! Node: S/390 and zSeries Options1157490 ! Node: Score Options1168290 ! Node: SH Options1169139 ! Node: Solaris 2 Options1184279 ! Node: SPARC Options1185517 ! Node: System V Options1201169 ! Node: TILE-Gx Options1201997 ! Node: TILEPro Options1203015 ! Node: V850 Options1203519 ! Node: VAX Options1210206 ! Node: Visium Options1210898 ! Node: VMS Options1213206 ! Node: VxWorks Options1214022 ! Node: x86 Options1215174 ! Node: x86 Windows Options1285367 ! Node: Xstormy16 Options1288173 ! Node: Xtensa Options1288467 ! Node: zSeries Options1294603 ! Node: Spec Files1294799 ! Node: Environment Variables1320878 ! Node: Precompiled Headers1330311 ! Node: C++ Modules1336520 ! Ref: C++ Modules-Footnote-11342515 ! Node: C++ Module Mapper1342768 ! Node: C++ Module Preprocessing1347921 ! Node: C++ Compiled Module Interface1349750 ! Ref: C++ Compiled Module Interface-Footnote-11353134 ! Ref: C++ Compiled Module Interface-Footnote-21353223 ! Node: C Implementation1353279 ! Node: Translation implementation1354970 ! Node: Environment implementation1355561 ! Node: Identifiers implementation1356115 ! Node: Characters implementation1357201 ! Node: Integers implementation1360851 ! Node: Floating point implementation1362900 ! Node: Arrays and pointers implementation1365963 ! Ref: Arrays and pointers implementation-Footnote-11367423 ! Node: Hints implementation1367549 ! Node: Structures unions enumerations and bit-fields implementation1369044 ! Node: Qualifiers implementation1371268 ! Node: Declarators implementation1373329 ! Node: Statements implementation1373670 ! Node: Preprocessing directives implementation1373996 ! Node: Library functions implementation1376317 ! Node: Architecture implementation1376966 ! Node: Locale-specific behavior implementation1378611 ! Node: C++ Implementation1378916 ! Node: Conditionally-supported behavior1380200 ! Node: Exception handling1380817 ! Node: C Extensions1381284 ! Node: Statement Exprs1386507 ! Node: Local Labels1391879 ! Node: Labels as Values1394852 ! Ref: Labels as Values-Footnote-11397379 ! Node: Nested Functions1397564 ! Node: Nonlocal Gotos1401518 ! Node: Constructing Calls1403784 ! Node: Typeof1408496 ! Node: Conditionals1412425 ! Node: __int1281413314 ! Node: Long Long1413839 ! Node: Complex1415330 ! Node: Floating Types1420075 ! Node: Half-Precision1423596 ! Node: Decimal Float1427064 ! Node: Hex Floats1428918 ! Node: Fixed-Point1429992 ! Node: Named Address Spaces1433250 ! Ref: AVR Named Address Spaces1433936 ! Node: Zero Length1441230 ! Node: Empty Structures1445411 ! Node: Variable Length1445817 ! Node: Variadic Macros1448535 ! Node: Escaped Newlines1450913 ! Node: Subscripting1451774 ! Node: Pointer Arith1452499 ! Node: Variadic Pointer Args1453076 ! Node: Pointers to Arrays1453801 ! Node: Initializers1454554 ! Node: Compound Literals1455055 ! Node: Designated Inits1458622 ! Node: Case Ranges1462546 ! Node: Cast to Union1463227 ! Node: Mixed Labels and Declarations1464961 ! Node: Function Attributes1465598 ! Node: Common Function Attributes1470109 ! Ref: Common Function Attributes-Footnote-11547050 ! Node: AArch64 Function Attributes1547367 ! Node: AMD GCN Function Attributes1553561 ! Node: ARC Function Attributes1556614 ! Node: ARM Function Attributes1559551 ! Node: AVR Function Attributes1564690 ! Node: Blackfin Function Attributes1569225 ! Node: BPF Function Attributes1571722 ! Node: CR16 Function Attributes1572310 ! Node: C-SKY Function Attributes1572829 ! Node: Epiphany Function Attributes1574128 ! Node: H8/300 Function Attributes1576883 ! Node: IA-64 Function Attributes1578081 ! Node: M32C Function Attributes1579123 ! Node: M32R/D Function Attributes1581461 ! Node: m68k Function Attributes1582935 ! Node: MCORE Function Attributes1583879 ! Node: MeP Function Attributes1584690 ! Node: MicroBlaze Function Attributes1585991 ! Node: Microsoft Windows Function Attributes1587498 ! Node: MIPS Function Attributes1592067 ! Node: MSP430 Function Attributes1597685 ! Node: NDS32 Function Attributes1601764 ! Node: Nios II Function Attributes1604188 ! Node: Nvidia PTX Function Attributes1605485 ! Node: PowerPC Function Attributes1606100 ! Node: RISC-V Function Attributes1612874 ! Node: RL78 Function Attributes1614290 ! Node: RX Function Attributes1615529 ! Node: S/390 Function Attributes1618076 ! Node: SH Function Attributes1619904 ! Node: Symbian OS Function Attributes1623332 ! Node: V850 Function Attributes1623668 ! Node: Visium Function Attributes1624213 ! Node: x86 Function Attributes1624741 ! Node: Xstormy16 Function Attributes1648696 ! Node: Variable Attributes1649203 ! Node: Common Variable Attributes1650736 ! Node: ARC Variable Attributes1672643 ! Node: AVR Variable Attributes1673025 ! Node: Blackfin Variable Attributes1678188 ! Node: H8/300 Variable Attributes1679046 ! Node: IA-64 Variable Attributes1680119 ! Node: M32R/D Variable Attributes1680870 ! Node: MeP Variable Attributes1681653 ! Node: Microsoft Windows Variable Attributes1683746 ! Node: MSP430 Variable Attributes1686199 ! Node: Nvidia PTX Variable Attributes1687413 ! Node: PowerPC Variable Attributes1688030 ! Node: RL78 Variable Attributes1688587 ! Node: V850 Variable Attributes1689006 ! Node: x86 Variable Attributes1689639 ! Node: Xstormy16 Variable Attributes1690695 ! Node: Type Attributes1691265 ! Node: Common Type Attributes1692953 ! Node: ARC Type Attributes1715314 ! Node: ARM Type Attributes1715786 ! Node: BPF Type Attributes1716568 ! Node: MeP Type Attributes1717085 ! Node: PowerPC Type Attributes1717487 ! Node: x86 Type Attributes1718476 ! Node: Label Attributes1719468 ! Node: Enumerator Attributes1721495 ! Node: Statement Attributes1723027 ! Node: Attribute Syntax1724510 ! Node: Function Prototypes1735768 ! Node: C++ Comments1737548 ! Node: Dollar Signs1738067 ! Node: Character Escapes1738532 ! Node: Alignment1738816 ! Node: Inline1740469 ! Node: Volatiles1745286 ! Node: Using Assembly Language with C1748185 ! Node: Basic Asm1749422 ! Node: Extended Asm1755045 ! Ref: Volatile1759159 ! Ref: AssemblerTemplate1763272 ! Ref: OutputOperands1767512 ! Ref: FlagOutputOperands1774475 ! Ref: InputOperands1777422 ! Ref: Clobbers and Scratch Registers1781690 ! Ref: GotoLabels1790331 ! Ref: x86Operandmodifiers1793954 ! Ref: x86floatingpointasmoperands1798770 ! Ref: msp430Operandmodifiers1802099 ! Node: Constraints1803757 ! Node: Simple Constraints1804863 ! Node: Multi-Alternative1812177 ! Node: Modifiers1813852 ! Node: Machine Constraints1816651 ! Node: Asm Labels1874422 ! Node: Explicit Register Variables1876042 ! Ref: Explicit Reg Vars1876256 ! Node: Global Register Variables1876865 ! Ref: Global Reg Vars1877073 ! Node: Local Register Variables1881855 ! Ref: Local Reg Vars1882075 ! Node: Size of an asm1885703 ! Node: Alternate Keywords1887181 ! Node: Incomplete Enums1888686 ! Node: Function Names1889443 ! Node: Return Address1891347 ! Node: Vector Extensions1895934 ! Node: Offsetof1906917 ! Node: __sync Builtins1907750 ! Node: __atomic Builtins1914167 ! Node: Integer Overflow Builtins1927680 ! Node: x86 specific memory model extensions for transactional memory1934163 ! Node: Object Size Checking1935429 ! Node: Other Builtins1942445 ! Node: Target Builtins1995049 ! Node: AArch64 Built-in Functions1996862 ! Node: Alpha Built-in Functions1997558 ! Node: Altera Nios II Built-in Functions2000652 ! Node: ARC Built-in Functions2005091 ! Node: ARC SIMD Built-in Functions2010303 ! Node: ARM iWMMXt Built-in Functions2019301 ! Node: ARM C Language Extensions (ACLE)2026437 ! Node: ARM Floating Point Status and Control Intrinsics2027714 ! Node: ARM ARMv8-M Security Extensions2028201 ! Node: AVR Built-in Functions2029493 ! Node: Blackfin Built-in Functions2033259 ! Node: BPF Built-in Functions2033879 ! Node: FR-V Built-in Functions2035338 ! Node: Argument Types2036207 ! Node: Directly-mapped Integer Functions2038038 ! Node: Directly-mapped Media Functions2039198 ! Node: Raw read/write Functions2047480 ! Node: Other Built-in Functions2048388 ! Node: LoongArch Base Built-in Functions2049574 ! Node: MIPS DSP Built-in Functions2055320 ! Node: MIPS Paired-Single Support2068085 ! Node: MIPS Loongson Built-in Functions2069584 ! Node: Paired-Single Arithmetic2076106 ! Node: Paired-Single Built-in Functions2077129 ! Node: MIPS-3D Built-in Functions2079796 ! Node: MIPS SIMD Architecture (MSA) Support2085190 ! Node: MIPS SIMD Architecture Built-in Functions2088030 ! Node: Other MIPS Built-in Functions2114884 ! Node: MSP430 Built-in Functions2115893 ! Node: NDS32 Built-in Functions2117294 ! Node: picoChip Built-in Functions2118587 ! Node: Basic PowerPC Built-in Functions2119936 ! Node: Basic PowerPC Built-in Functions Available on all Configurations2120794 ! Node: Basic PowerPC Built-in Functions Available on ISA 2.052129304 ! Node: Basic PowerPC Built-in Functions Available on ISA 2.062134139 ! Node: Basic PowerPC Built-in Functions Available on ISA 2.072136219 ! Node: Basic PowerPC Built-in Functions Available on ISA 3.02137073 ! Node: Basic PowerPC Built-in Functions Available on ISA 3.12144051 ! Node: PowerPC AltiVec/VSX Built-in Functions2147216 ! Node: PowerPC AltiVec Built-in Functions on ISA 2.052155285 ! Node: PowerPC AltiVec Built-in Functions Available on ISA 2.062180685 ! Node: PowerPC AltiVec Built-in Functions Available on ISA 2.072187751 ! Node: PowerPC AltiVec Built-in Functions Available on ISA 3.02197561 ! Node: PowerPC AltiVec Built-in Functions Available on ISA 3.12213284 ! Node: PowerPC Hardware Transactional Memory Built-in Functions2246568 ! Node: PowerPC Atomic Memory Operation Functions2255118 ! Node: PowerPC Matrix-Multiply Assist Built-in Functions2257681 ! Node: PRU Built-in Functions2263806 ! Node: RISC-V Built-in Functions2264994 ! Node: RX Built-in Functions2265405 ! Node: S/390 System z Built-in Functions2269407 ! Node: SH Built-in Functions2274637 ! Node: SPARC VIS Built-in Functions2276365 ! Node: TI C6X Built-in Functions2284896 ! Node: TILE-Gx Built-in Functions2285947 ! Node: TILEPro Built-in Functions2287072 ! Node: x86 Built-in Functions2288180 ! Node: x86 transactional memory intrinsics2353585 ! Node: x86 control-flow protection intrinsics2356852 ! Node: Target Format Checks2358623 ! Node: Solaris Format Checks2359055 ! Node: Darwin Format Checks2359481 ! Node: Pragmas2360444 ! Node: AArch64 Pragmas2361385 ! Node: ARM Pragmas2361842 ! Node: M32C Pragmas2362469 ! Node: MeP Pragmas2363541 ! Node: PRU Pragmas2365593 ! Node: RS/6000 and PowerPC Pragmas2366171 ! Node: S/390 Pragmas2366911 ! Node: Darwin Pragmas2367477 ! Node: Solaris Pragmas2368530 ! Node: Symbol-Renaming Pragmas2369694 ! Node: Structure-Layout Pragmas2371331 ! Node: Weak Pragmas2373611 ! Node: Diagnostic Pragmas2374346 ! Node: Visibility Pragmas2379097 ! Node: Push/Pop Macro Pragmas2379782 ! Node: Function Specific Option Pragmas2380755 ! Node: Loop-Specific Pragmas2382721 ! Node: Unnamed Fields2384321 ! Node: Thread-Local2386518 ! Node: C99 Thread-Local Edits2388624 ! Node: C++98 Thread-Local Edits2390622 ! Node: Binary constants2394067 ! Node: C++ Extensions2394738 ! Node: C++ Volatiles2396368 ! Node: Restricted Pointers2398716 ! Node: Vague Linkage2400307 ! Node: C++ Interface2403930 ! Ref: C++ Interface-Footnote-12407727 ! Node: Template Instantiation2407865 ! Node: Bound member functions2413956 ! Node: C++ Attributes2415488 ! Node: Function Multiversioning2419560 ! Node: Type Traits2421368 ! Node: C++ Concepts2428339 ! Node: Deprecated Features2429845 ! Node: Backwards Compatibility2431670 ! Node: Objective-C2432742 ! Node: GNU Objective-C runtime API2433349 ! Node: Modern GNU Objective-C runtime API2434356 ! Node: Traditional GNU Objective-C runtime API2436792 ! Node: Executing code before main2437519 ! Node: What you can and what you cannot do in +load2440263 ! Node: Type encoding2442633 ! Node: Legacy type encoding2447999 ! Node: @encode2449089 ! Node: Method signatures2449634 ! Node: Garbage Collection2451626 ! Node: Constant string objects2454316 ! Node: compatibility_alias2456825 ! Node: Exceptions2457550 ! Node: Synchronization2460260 ! Node: Fast enumeration2461444 ! Node: Using fast enumeration2461756 ! Node: c99-like fast enumeration syntax2462967 ! Node: Fast enumeration details2463670 ! Node: Fast enumeration protocol2466010 ! Node: Messaging with the GNU Objective-C runtime2469162 ! Node: Dynamically registering methods2470534 ! Node: Forwarding hook2472225 ! Node: Compatibility2475265 ! Node: Gcov2481821 ! Node: Gcov Intro2482356 ! Node: Invoking Gcov2485074 ! Node: Gcov and Optimization2507807 ! Node: Gcov Data Files2511560 ! Node: Cross-profiling2512969 ! Node: Gcov-tool2514823 ! Node: Gcov-tool Intro2515248 ! Node: Invoking Gcov-tool2517218 ! Node: Gcov-dump2519796 ! Node: Gcov-dump Intro2520119 ! Node: Invoking Gcov-dump2520386 ! Node: lto-dump2521043 ! Node: lto-dump Intro2521342 ! Node: Invoking lto-dump2521592 ! Node: Trouble2522688 ! Node: Actual Bugs2524105 ! Node: Interoperation2524552 ! Node: Incompatibilities2531443 ! Node: Fixed Headers2539595 ! Node: Standard Libraries2541253 ! Node: Disappointments2542625 ! Node: C++ Misunderstandings2546984 ! Node: Static Definitions2547795 ! Node: Name lookup2548848 ! Ref: Name lookup-Footnote-12553629 ! Node: Temporaries2553818 ! Node: Copy Assignment2555794 ! Node: Non-bugs2557629 ! Node: Warnings and Errors2568135 ! Node: Bugs2569897 ! Node: Bug Criteria2570364 ! Node: Bug Reporting2572574 ! Node: Service2572792 ! Node: Contributing2573613 ! Node: Funding2574359 ! Node: GNU Project2576849 ! Node: Copying2577497 ! Node: GNU Free Documentation License2615008 ! Node: Contributors2640128 ! Node: Option Index2681102 ! Node: Keyword Index2980493  End Tag Table diff -Nrcpad gcc-12.4.0/gcc/doc/gccgo.1 gcc-12.5.0-RC-20250704/gcc/doc/gccgo.1 *** gcc-12.4.0/gcc/doc/gccgo.1 Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/doc/gccgo.1 Fri Jul 4 07:45:02 2025 *************** *** 0 **** --- 1,316 ---- + .\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35) + .\" + .\" Standard preamble: + .\" ======================================================================== + .de Sp \" Vertical space (when we can't use .PP) + .if t .sp .5v + .if n .sp + .. + .de Vb \" Begin verbatim text + .ft CW + .nf + .ne \\$1 + .. + .de Ve \" End verbatim text + .ft R + .fi + .. + .\" Set up some character translations and predefined strings. \*(-- will + .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left + .\" double quote, and \*(R" will give a right double quote. \*(C+ will + .\" give a nicer C++. Capital omega is used to do unbreakable dashes and + .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, + .\" nothing in troff, for use with C<>. + .tr \(*W- + .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' + .ie n \{\ + . ds -- \(*W- + . ds PI pi + . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch + . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch + . ds L" "" + . ds R" "" + . ds C` "" + . ds C' "" + 'br\} + .el\{\ + . ds -- \|\(em\| + . ds PI \(*p + . ds L" `` + . ds R" '' + . ds C` + . ds C' + 'br\} + .\" + .\" Escape single quotes in literal strings from groff's Unicode transform. + .ie \n(.g .ds Aq \(aq + .el .ds Aq ' + .\" + .\" If the F register is >0, we'll generate index entries on stderr for + .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index + .\" entries marked with X<> in POD. Of course, you'll have to process the + .\" output yourself in some meaningful fashion. + .\" + .\" Avoid warning from groff about undefined register 'F'. + .de IX + .. + .if !\nF .nr F 0 + .if \nF>0 \{\ + . de IX + . tm Index:\\$1\t\\n%\t"\\$2" + .. + . if !\nF==2 \{\ + . nr % 0 + . nr F 2 + . \} + .\} + .\" + .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). + .\" Fear. Run. Save yourself. No user-serviceable parts. + . \" fudge factors for nroff and troff + .if n \{\ + . ds #H 0 + . ds #V .8m + . ds #F .3m + . ds #[ \f1 + . ds #] \fP + .\} + .if t \{\ + . ds #H ((1u-(\\\\n(.fu%2u))*.13m) + . ds #V .6m + . ds #F 0 + . ds #[ \& + . ds #] \& + .\} + . \" simple accents for nroff and troff + .if n \{\ + . ds ' \& + . ds ` \& + . ds ^ \& + . ds , \& + . ds ~ ~ + . ds / + .\} + .if t \{\ + . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" + . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' + . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' + . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' + . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' + . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' + .\} + . \" troff and (daisy-wheel) nroff accents + .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' + .ds 8 \h'\*(#H'\(*b\h'-\*(#H' + .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] + .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' + .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' + .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] + .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] + .ds ae a\h'-(\w'a'u*4/10)'e + .ds Ae A\h'-(\w'A'u*4/10)'E + . \" corrections for vroff + .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' + .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' + . \" for low resolution devices (crt and lpr) + .if \n(.H>23 .if \n(.V>19 \ + \{\ + . ds : e + . ds 8 ss + . ds o a + . ds d- d\h'-1'\(ga + . ds D- D\h'-1'\(hy + . ds th \o'bp' + . ds Th \o'LP' + . ds ae ae + . ds Ae AE + .\} + .rm #[ #] #H #V #F C + .\" ======================================================================== + .\" + .IX Title "GCCGO 1" + .TH GCCGO 1 "2025-07-04" "gcc-12.4.1" "GNU" + .\" For nroff, turn off justification. Always turn off hyphenation; it makes + .\" way too many mistakes in technical documents. + .if n .ad l + .nh + .SH "NAME" + gccgo \- A GCC\-based compiler for the Go language + .SH "SYNOPSIS" + .IX Header "SYNOPSIS" + gccgo [\fB\-c\fR|\fB\-S\fR] + [\fB\-g\fR] [\fB\-pg\fR] [\fB\-O\fR\fIlevel\fR] + [\fB\-I\fR\fIdir\fR...] [\fB\-L\fR\fIdir\fR...] + [\fB\-o\fR \fIoutfile\fR] \fIinfile\fR... + .PP + Only the most useful options are listed here; see below for the + remainder. + .SH "DESCRIPTION" + .IX Header "DESCRIPTION" + The \fBgccgo\fR command is a frontend to \fBgcc\fR and + supports many of the same options. This manual + only documents the options specific to \fBgccgo\fR. + .PP + The \fBgccgo\fR command may be used to compile Go source code into + an object file, link a collection of object files together, or do both + in sequence. + .PP + Go source code is compiled as packages. A package consists of one or + more Go source files. All the files in a single package must be + compiled together, by passing all the files as arguments to + \&\fBgccgo\fR. A single invocation of \fBgccgo\fR may only + compile a single package. + .PP + One Go package may \f(CW\*(C`import\*(C'\fR a different Go package. The imported + package must have already been compiled; \fBgccgo\fR will read + the import data directly from the compiled package. When this package + is later linked, the compiled form of the package must be included in + the link command. + .PP + Go programs must generally be compiled with debugging information, and + \&\fB\-g1\fR is the default as described below. Stripping a Go + program will generally cause it to misbehave or fail. + .SH "OPTIONS" + .IX Header "OPTIONS" + .IP "\fB\-I\fR\fIdir\fR" 4 + .IX Item "-Idir" + Specify a directory to use when searching for an import package at + compile time. + .IP "\fB\-L\fR\fIdir\fR" 4 + .IX Item "-Ldir" + When linking, specify a library search directory, as with + \&\fBgcc\fR. + .IP "\fB\-fgo\-pkgpath=\fR\fIstring\fR" 4 + .IX Item "-fgo-pkgpath=string" + Set the package path to use. This sets the value returned by the + PkgPath method of reflect.Type objects. It is also used for the names + of globally visible symbols. The argument to this option should + normally be the string that will be used to import this package after + it has been installed; in other words, a pathname within the + directories specified by the \fB\-I\fR option. + .IP "\fB\-fgo\-prefix=\fR\fIstring\fR" 4 + .IX Item "-fgo-prefix=string" + An alternative to \fB\-fgo\-pkgpath\fR. The argument will be + combined with the package name from the source file to produce the + package path. If \fB\-fgo\-pkgpath\fR is used, \fB\-fgo\-prefix\fR + will be ignored. + .Sp + Go permits a single program to include more than one package with the + same name in the \f(CW\*(C`package\*(C'\fR clause in the source file, though + obviously the two packages must be imported using different pathnames. + In order for this to work with \fBgccgo\fR, either + \&\fB\-fgo\-pkgpath\fR or \fB\-fgo\-prefix\fR must be specified when + compiling a package. + .Sp + Using either \fB\-fgo\-pkgpath\fR or \fB\-fgo\-prefix\fR disables + the special treatment of the \f(CW\*(C`main\*(C'\fR package and permits that + package to be imported like any other. + .IP "\fB\-fgo\-relative\-import\-path=\fR\fIdir\fR" 4 + .IX Item "-fgo-relative-import-path=dir" + A relative import is an import that starts with \fI./\fR or + \&\fI../\fR. If this option is used, \fBgccgo\fR will use + \&\fIdir\fR as a prefix for the relative import when searching for it. + .IP "\fB\-frequire\-return\-statement\fR" 4 + .IX Item "-frequire-return-statement" + .PD 0 + .IP "\fB\-fno\-require\-return\-statement\fR" 4 + .IX Item "-fno-require-return-statement" + .PD + By default \fBgccgo\fR will warn about functions which have one or + more return parameters but lack an explicit \f(CW\*(C`return\*(C'\fR statement. + This warning may be disabled using + \&\fB\-fno\-require\-return\-statement\fR. + .IP "\fB\-fgo\-check\-divide\-zero\fR" 4 + .IX Item "-fgo-check-divide-zero" + Add explicit checks for division by zero. In Go a division (or + modulos) by zero causes a panic. On Unix systems this is detected in + the runtime by catching the \f(CW\*(C`SIGFPE\*(C'\fR signal. Some processors, + such as PowerPC, do not generate a \s-1SIGFPE\s0 on division by zero. Some + runtimes do not generate a signal that can be caught. On those + systems, this option may be used. Or the checks may be removed via + \&\fB\-fno\-go\-check\-divide\-zero\fR. This option is currently on by + default, but in the future may be off by default on systems that do + not require it. + .IP "\fB\-fgo\-check\-divide\-overflow\fR" 4 + .IX Item "-fgo-check-divide-overflow" + Add explicit checks for division overflow. For example, division + overflow occurs when computing \f(CW\*(C`INT_MIN / \-1\*(C'\fR. In Go this should + be wrapped, to produce \f(CW\*(C`INT_MIN\*(C'\fR. Some processors, such as x86, + generate a trap on division overflow. On those systems, this option + may be used. Or the checks may be removed via + \&\fB\-fno\-go\-check\-divide\-overflow\fR. This option is currently on + by default, but in the future may be off by default on systems that do + not require it. + .IP "\fB\-fno\-go\-optimize\-allocs\fR" 4 + .IX Item "-fno-go-optimize-allocs" + Disable escape analysis, which tries to allocate objects on the stack + rather than the heap. + .IP "\fB\-fgo\-debug\-escape\fR\fIn\fR" 4 + .IX Item "-fgo-debug-escapen" + Output escape analysis debugging information. Larger values of + \&\fIn\fR generate more information. + .IP "\fB\-fgo\-debug\-escape\-hash=\fR\fIn\fR" 4 + .IX Item "-fgo-debug-escape-hash=n" + A hash value to debug escape analysis. \fIn\fR is a binary string. + This runs escape analysis only on functions whose names hash to values + that match the given suffix \fIn\fR. This can be used to binary + search across functions to uncover escape analysis bugs. + .IP "\fB\-fgo\-debug\-optimization\fR" 4 + .IX Item "-fgo-debug-optimization" + Output optimization diagnostics. + .IP "\fB\-fgo\-c\-header=\fR\fIfile\fR" 4 + .IX Item "-fgo-c-header=file" + Write top-level named Go struct definitions to \fIfile\fR as C code. + This is used when compiling the runtime package. + .IP "\fB\-fgo\-compiling\-runtime\fR" 4 + .IX Item "-fgo-compiling-runtime" + Apply special rules for compiling the runtime package. Implicit + memory allocation is forbidden. Some additional compiler directives + are supported. + .IP "\fB\-fgo\-embedcfg=\fR\fIfile\fR" 4 + .IX Item "-fgo-embedcfg=file" + Identify a \s-1JSON\s0 file used to map patterns used with special + \&\f(CW\*(C`//go:embed\*(C'\fR comments to the files named by the patterns. The + \&\s-1JSON\s0 file should have two components: \f(CW\*(C`Patterns\*(C'\fR maps each + pattern to a list of file names, and \f(CW\*(C`Files\*(C'\fR maps each file name + to a full path to the file. This option is intended for use by the + \&\fBgo\fR command to implement \f(CW\*(C`//go:embed\*(C'\fR. + .IP "\fB\-g\fR" 4 + .IX Item "-g" + This is the standard \fBgcc\fR option. It + is mentioned here because by default \fBgccgo\fR turns on + debugging information generation with the equivalent of the standard + option \fB\-g1\fR. This is because Go programs require debugging + information to be available in order to get backtrace information. An + explicit \fB\-g0\fR may be used to disable the generation of + debugging information, in which case certain standard library + functions, such as \f(CW\*(C`runtime.Callers\*(C'\fR, will not operate correctly. + .SH "SEE ALSO" + .IX Header "SEE ALSO" + \&\fIgpl\fR\|(7), \fIgfdl\fR\|(7), \fIfsf\-funding\fR\|(7), \fIgcc\fR\|(1) + and the Info entries for \fIgccgo\fR and \fIgcc\fR. + .SH "COPYRIGHT" + .IX Header "COPYRIGHT" + Copyright (c) 2010\-2022 Free Software Foundation, Inc. + .PP + Permission is granted to copy, distribute and/or modify this document + under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3 or + any later version published by the Free Software Foundation; with no + Invariant Sections, the Front-Cover Texts being (a) (see below), and + with the Back-Cover Texts being (b) (see below). + A copy of the license is included in the + man page \fIgfdl\fR\|(7). + .PP + (a) The \s-1FSF\s0's Front-Cover Text is: + .PP + .Vb 1 + \& A GNU Manual + .Ve + .PP + (b) The \s-1FSF\s0's Back-Cover Text is: + .PP + .Vb 3 + \& You have freedom to copy and modify this GNU Manual, like GNU + \& software. Copies published by the Free Software Foundation raise + \& funds for GNU development. + .Ve diff -Nrcpad gcc-12.4.0/gcc/doc/gccgo.info gcc-12.5.0-RC-20250704/gcc/doc/gccgo.info *** gcc-12.4.0/gcc/doc/gccgo.info Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/doc/gccgo.info Fri Jul 4 07:45:02 2025 *************** *** 0 **** --- 1,1668 ---- + This is gccgo.info, produced by makeinfo version 6.5 from gccgo.texi. + + Copyright (C) 2010-2022 Free Software Foundation, Inc. + + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.3 or + any later version published by the Free Software Foundation; with no + Invariant Sections, the Front-Cover Texts being (a) (see below), and + with the Back-Cover Texts being (b) (see below). A copy of the license + is included in the section entitled "GNU Free Documentation License". + + (a) The FSF's Front-Cover Text is: + + A GNU Manual + + (b) The FSF's Back-Cover Text is: + + You have freedom to copy and modify this GNU Manual, like GNU + software. Copies published by the Free Software Foundation raise funds + for GNU development. + INFO-DIR-SECTION Software development + START-INFO-DIR-ENTRY + * Gccgo: (gccgo). A GCC-based compiler for the Go language + END-INFO-DIR-ENTRY + + + Copyright (C) 2010-2022 Free Software Foundation, Inc. + + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.3 or + any later version published by the Free Software Foundation; with no + Invariant Sections, the Front-Cover Texts being (a) (see below), and + with the Back-Cover Texts being (b) (see below). A copy of the license + is included in the section entitled "GNU Free Documentation License". + + (a) The FSF's Front-Cover Text is: + + A GNU Manual + + (b) The FSF's Back-Cover Text is: + + You have freedom to copy and modify this GNU Manual, like GNU + software. Copies published by the Free Software Foundation raise funds + for GNU development. + +  + File: gccgo.info, Node: Top, Next: Copying, Up: (dir) + + Introduction + ************ + + This manual describes how to use 'gccgo', the GNU compiler for the Go + programming language. This manual is specifically about 'gccgo'. For + more information about the Go programming language in general, including + language specifications and standard package documentation, see + . + + * Menu: + + * Copying:: The GNU General Public License. + * GNU Free Documentation License:: + How you can share and copy this manual. + * Invoking gccgo:: How to run gccgo. + * Import and Export:: Importing and exporting package data. + * Compiler Directives:: Comments to control compilation. + * C Interoperability:: Calling C from Go and vice-versa. + * Index:: Index. + +  + File: gccgo.info, Node: Copying, Next: GNU Free Documentation License, Prev: Top, Up: Top + + GNU General Public License + ************************** + + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + + Everyone is permitted to copy and distribute verbatim copies of this + license document, but changing it is not allowed. + + Preamble + ======== + + The GNU General Public License is a free, copyleft license for software + and other kinds of works. + + The licenses for most software and other practical works are designed + to take away your freedom to share and change the works. By contrast, + the GNU General Public License is intended to guarantee your freedom to + share and change all versions of a program-to make sure it remains free + software for all its users. We, the Free Software Foundation, use the + GNU General Public License for most of our software; it applies also to + any other work released this way by its authors. You can apply it to + your programs, too. + + When we speak of free software, we are referring to freedom, not + price. Our General Public Licenses are designed to make sure that you + have the freedom to distribute copies of free software (and charge for + them if you wish), that you receive source code or can get it if you + want it, that you can change the software or use pieces of it in new + free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you + these rights or asking you to surrender the rights. Therefore, you have + certain responsibilities if you distribute copies of the software, or if + you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether + gratis or for a fee, you must pass on to the recipients the same + freedoms that you received. You must make sure that they, too, receive + or can get the source code. And you must show them these terms so they + know their rights. + + Developers that use the GNU GPL protect your rights with two steps: + (1) assert copyright on the software, and (2) offer you this License + giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains + that there is no warranty for this free software. For both users' and + authors' sake, the GPL requires that modified versions be marked as + changed, so that their problems will not be attributed erroneously to + authors of previous versions. + + Some devices are designed to deny users access to install or run + modified versions of the software inside them, although the manufacturer + can do so. This is fundamentally incompatible with the aim of + protecting users' freedom to change the software. The systematic + pattern of such abuse occurs in the area of products for individuals to + use, which is precisely where it is most unacceptable. Therefore, we + have designed this version of the GPL to prohibit the practice for those + products. If such problems arise substantially in other domains, we + stand ready to extend this provision to those domains in future versions + of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. + States should not allow patents to restrict development and use of + software on general-purpose computers, but in those that do, we wish to + avoid the special danger that patents applied to a free program could + make it effectively proprietary. To prevent this, the GPL assures that + patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and + modification follow. + + TERMS AND CONDITIONS + ==================== + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public + License. + + "Copyright" also means copyright-like laws that apply to other + kinds of works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this + License. Each licensee is addressed as "you". "Licensees" and + "recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the + work in a fashion requiring copyright permission, other than the + making of an exact copy. The resulting work is called a "modified + version" of the earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work + based on the Program. + + To "propagate" a work means to do anything with it that, without + permission, would make you directly or secondarily liable for + infringement under applicable copyright law, except executing it on + a computer or modifying a private copy. Propagation includes + copying, distribution (with or without modification), making + available to the public, and in some countries other activities as + well. + + To "convey" a work means any kind of propagation that enables other + parties to make or receive copies. Mere interaction with a user + through a computer network, with no transfer of a copy, is not + conveying. + + An interactive user interface displays "Appropriate Legal Notices" + to the extent that it includes a convenient and prominently visible + feature that (1) displays an appropriate copyright notice, and (2) + tells the user that there is no warranty for the work (except to + the extent that warranties are provided), that licensees may convey + the work under this License, and how to view a copy of this + License. If the interface presents a list of user commands or + options, such as a menu, a prominent item in the list meets this + criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work + for making modifications to it. "Object code" means any non-source + form of a work. + + A "Standard Interface" means an interface that either is an + official standard defined by a recognized standards body, or, in + the case of interfaces specified for a particular programming + language, one that is widely used among developers working in that + language. + + The "System Libraries" of an executable work include anything, + other than the work as a whole, that (a) is included in the normal + form of packaging a Major Component, but which is not part of that + Major Component, and (b) serves only to enable use of the work with + that Major Component, or to implement a Standard Interface for + which an implementation is available to the public in source code + form. A "Major Component", in this context, means a major + essential component (kernel, window system, and so on) of the + specific operating system (if any) on which the executable work + runs, or a compiler used to produce the work, or an object code + interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all + the source code needed to generate, install, and (for an executable + work) run the object code and to modify the work, including scripts + to control those activities. However, it does not include the + work's System Libraries, or general-purpose tools or generally + available free programs which are used unmodified in performing + those activities but which are not part of the work. For example, + Corresponding Source includes interface definition files associated + with source files for the work, and the source code for shared + libraries and dynamically linked subprograms that the work is + specifically designed to require, such as by intimate data + communication or control flow between those subprograms and other + parts of the work. + + The Corresponding Source need not include anything that users can + regenerate automatically from other parts of the Corresponding + Source. + + The Corresponding Source for a work in source code form is that + same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of + copyright on the Program, and are irrevocable provided the stated + conditions are met. This License explicitly affirms your unlimited + permission to run the unmodified Program. The output from running + a covered work is covered by this License only if the output, given + its content, constitutes a covered work. This License acknowledges + your rights of fair use or other equivalent, as provided by + copyright law. + + You may make, run and propagate covered works that you do not + convey, without conditions so long as your license otherwise + remains in force. You may convey covered works to others for the + sole purpose of having them make modifications exclusively for you, + or provide you with facilities for running those works, provided + that you comply with the terms of this License in conveying all + material for which you do not control copyright. Those thus making + or running the covered works for you must do so exclusively on your + behalf, under your direction and control, on terms that prohibit + them from making any copies of your copyrighted material outside + their relationship with you. + + Conveying under any other circumstances is permitted solely under + the conditions stated below. Sublicensing is not allowed; section + 10 makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological + measure under any applicable law fulfilling obligations under + article 11 of the WIPO copyright treaty adopted on 20 December + 1996, or similar laws prohibiting or restricting circumvention of + such measures. + + When you convey a covered work, you waive any legal power to forbid + circumvention of technological measures to the extent such + circumvention is effected by exercising rights under this License + with respect to the covered work, and you disclaim any intention to + limit operation or modification of the work as a means of + enforcing, against the work's users, your or third parties' legal + rights to forbid circumvention of technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you + receive it, in any medium, provided that you conspicuously and + appropriately publish on each copy an appropriate copyright notice; + keep intact all notices stating that this License and any + non-permissive terms added in accord with section 7 apply to the + code; keep intact all notices of the absence of any warranty; and + give all recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, + and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to + produce it from the Program, in the form of source code under the + terms of section 4, provided that you also meet all of these + conditions: + + a. The work must carry prominent notices stating that you + modified it, and giving a relevant date. + + b. The work must carry prominent notices stating that it is + released under this License and any conditions added under + section 7. This requirement modifies the requirement in + section 4 to "keep intact all notices". + + c. You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable + section 7 additional terms, to the whole of the work, and all + its parts, regardless of how they are packaged. This License + gives no permission to license the work in any other way, but + it does not invalidate such permission if you have separately + received it. + + d. If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has + interactive interfaces that do not display Appropriate Legal + Notices, your work need not make them do so. + + A compilation of a covered work with other separate and independent + works, which are not by their nature extensions of the covered + work, and which are not combined with it such as to form a larger + program, in or on a volume of a storage or distribution medium, is + called an "aggregate" if the compilation and its resulting + copyright are not used to limit the access or legal rights of the + compilation's users beyond what the individual works permit. + Inclusion of a covered work in an aggregate does not cause this + License to apply to the other parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms + of sections 4 and 5, provided that you also convey the + machine-readable Corresponding Source under the terms of this + License, in one of these ways: + + a. Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b. Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that + product model, to give anyone who possesses the object code + either (1) a copy of the Corresponding Source for all the + software in the product that is covered by this License, on a + durable physical medium customarily used for software + interchange, for a price no more than your reasonable cost of + physically performing this conveying of source, or (2) access + to copy the Corresponding Source from a network server at no + charge. + + c. Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, + and only if you received the object code with such an offer, + in accord with subsection 6b. + + d. Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to + the Corresponding Source in the same way through the same + place at no further charge. You need not require recipients + to copy the Corresponding Source along with the object code. + If the place to copy the object code is a network server, the + Corresponding Source may be on a different server (operated by + you or a third party) that supports equivalent copying + facilities, provided you maintain clear directions next to the + object code saying where to find the Corresponding Source. + Regardless of what server hosts the Corresponding Source, you + remain obligated to ensure that it is available for as long as + needed to satisfy these requirements. + + e. Convey the object code using peer-to-peer transmission, + provided you inform other peers where the object code and + Corresponding Source of the work are being offered to the + general public at no charge under subsection 6d. + + A separable portion of the object code, whose source code is + excluded from the Corresponding Source as a System Library, need + not be included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means + any tangible personal property which is normally used for personal, + family, or household purposes, or (2) anything designed or sold for + incorporation into a dwelling. In determining whether a product is + a consumer product, doubtful cases shall be resolved in favor of + coverage. For a particular product received by a particular user, + "normally used" refers to a typical or common use of that class of + product, regardless of the status of the particular user or of the + way in which the particular user actually uses, or expects or is + expected to use, the product. A product is a consumer product + regardless of whether the product has substantial commercial, + industrial or non-consumer uses, unless such uses represent the + only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, + procedures, authorization keys, or other information required to + install and execute modified versions of a covered work in that + User Product from a modified version of its Corresponding Source. + The information must suffice to ensure that the continued + functioning of the modified object code is in no case prevented or + interfered with solely because modification has been made. + + If you convey an object code work under this section in, or with, + or specifically for use in, a User Product, and the conveying + occurs as part of a transaction in which the right of possession + and use of the User Product is transferred to the recipient in + perpetuity or for a fixed term (regardless of how the transaction + is characterized), the Corresponding Source conveyed under this + section must be accompanied by the Installation Information. But + this requirement does not apply if neither you nor any third party + retains the ability to install modified object code on the User + Product (for example, the work has been installed in ROM). + + The requirement to provide Installation Information does not + include a requirement to continue to provide support service, + warranty, or updates for a work that has been modified or installed + by the recipient, or for the User Product in which it has been + modified or installed. Access to a network may be denied when the + modification itself materially and adversely affects the operation + of the network or violates the rules and protocols for + communication across the network. + + Corresponding Source conveyed, and Installation Information + provided, in accord with this section must be in a format that is + publicly documented (and with an implementation available to the + public in source code form), and must require no special password + or key for unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of + this License by making exceptions from one or more of its + conditions. Additional permissions that are applicable to the + entire Program shall be treated as though they were included in + this License, to the extent that they are valid under applicable + law. If additional permissions apply only to part of the Program, + that part may be used separately under those permissions, but the + entire Program remains governed by this License without regard to + the additional permissions. + + When you convey a copy of a covered work, you may at your option + remove any additional permissions from that copy, or from any part + of it. (Additional permissions may be written to require their own + removal in certain cases when you modify the work.) You may place + additional permissions on material, added by you to a covered work, + for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material + you add to a covered work, you may (if authorized by the copyright + holders of that material) supplement the terms of this License with + terms: + + a. Disclaiming warranty or limiting liability differently from + the terms of sections 15 and 16 of this License; or + + b. Requiring preservation of specified reasonable legal notices + or author attributions in that material or in the Appropriate + Legal Notices displayed by works containing it; or + + c. Prohibiting misrepresentation of the origin of that material, + or requiring that modified versions of such material be marked + in reasonable ways as different from the original version; or + + d. Limiting the use for publicity purposes of names of licensors + or authors of the material; or + + e. Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f. Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified + versions of it) with contractual assumptions of liability to + the recipient, for any liability that these contractual + assumptions directly impose on those licensors and authors. + + All other non-permissive additional terms are considered "further + restrictions" within the meaning of section 10. If the Program as + you received it, or any part of it, contains a notice stating that + it is governed by this License along with a term that is a further + restriction, you may remove that term. If a license document + contains a further restriction but permits relicensing or conveying + under this License, you may add to a covered work material governed + by the terms of that license document, provided that the further + restriction does not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you + must place, in the relevant source files, a statement of the + additional terms that apply to those files, or a notice indicating + where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in + the form of a separately written license, or stated as exceptions; + the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly + provided under this License. Any attempt otherwise to propagate or + modify it is void, and will automatically terminate your rights + under this License (including any patent licenses granted under the + third paragraph of section 11). + + However, if you cease all violation of this License, then your + license from a particular copyright holder is reinstated (a) + provisionally, unless and until the copyright holder explicitly and + finally terminates your license, and (b) permanently, if the + copyright holder fails to notify you of the violation by some + reasonable means prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is + reinstated permanently if the copyright holder notifies you of the + violation by some reasonable means, this is the first time you have + received notice of violation of this License (for any work) from + that copyright holder, and you cure the violation prior to 30 days + after your receipt of the notice. + + Termination of your rights under this section does not terminate + the licenses of parties who have received copies or rights from you + under this License. If your rights have been terminated and not + permanently reinstated, you do not qualify to receive new licenses + for the same material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or + run a copy of the Program. Ancillary propagation of a covered work + occurring solely as a consequence of using peer-to-peer + transmission to receive a copy likewise does not require + acceptance. However, nothing other than this License grants you + permission to propagate or modify any covered work. These actions + infringe copyright if you do not accept this License. Therefore, + by modifying or propagating a covered work, you indicate your + acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically + receives a license from the original licensors, to run, modify and + propagate that work, subject to this License. You are not + responsible for enforcing compliance by third parties with this + License. + + An "entity transaction" is a transaction transferring control of an + organization, or substantially all assets of one, or subdividing an + organization, or merging organizations. If propagation of a + covered work results from an entity transaction, each party to that + transaction who receives a copy of the work also receives whatever + licenses to the work the party's predecessor in interest had or + could give under the previous paragraph, plus a right to possession + of the Corresponding Source of the work from the predecessor in + interest, if the predecessor has it or can get it with reasonable + efforts. + + You may not impose any further restrictions on the exercise of the + rights granted or affirmed under this License. For example, you + may not impose a license fee, royalty, or other charge for exercise + of rights granted under this License, and you may not initiate + litigation (including a cross-claim or counterclaim in a lawsuit) + alleging that any patent claim is infringed by making, using, + selling, offering for sale, or importing the Program or any portion + of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this + License of the Program or a work on which the Program is based. + The work thus licensed is called the contributor's "contributor + version". + + A contributor's "essential patent claims" are all patent claims + owned or controlled by the contributor, whether already acquired or + hereafter acquired, that would be infringed by some manner, + permitted by this License, of making, using, or selling its + contributor version, but do not include claims that would be + infringed only as a consequence of further modification of the + contributor version. For purposes of this definition, "control" + includes the right to grant patent sublicenses in a manner + consistent with the requirements of this License. + + Each contributor grants you a non-exclusive, worldwide, + royalty-free patent license under the contributor's essential + patent claims, to make, use, sell, offer for sale, import and + otherwise run, modify and propagate the contents of its contributor + version. + + In the following three paragraphs, a "patent license" is any + express agreement or commitment, however denominated, not to + enforce a patent (such as an express permission to practice a + patent or covenant not to sue for patent infringement). To "grant" + such a patent license to a party means to make such an agreement or + commitment not to enforce a patent against the party. + + If you convey a covered work, knowingly relying on a patent + license, and the Corresponding Source of the work is not available + for anyone to copy, free of charge and under the terms of this + License, through a publicly available network server or other + readily accessible means, then you must either (1) cause the + Corresponding Source to be so available, or (2) arrange to deprive + yourself of the benefit of the patent license for this particular + work, or (3) arrange, in a manner consistent with the requirements + of this License, to extend the patent license to downstream + recipients. "Knowingly relying" means you have actual knowledge + that, but for the patent license, your conveying the covered work + in a country, or your recipient's use of the covered work in a + country, would infringe one or more identifiable patents in that + country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or + arrangement, you convey, or propagate by procuring conveyance of, a + covered work, and grant a patent license to some of the parties + receiving the covered work authorizing them to use, propagate, + modify or convey a specific copy of the covered work, then the + patent license you grant is automatically extended to all + recipients of the covered work and works based on it. + + A patent license is "discriminatory" if it does not include within + the scope of its coverage, prohibits the exercise of, or is + conditioned on the non-exercise of one or more of the rights that + are specifically granted under this License. You may not convey a + covered work if you are a party to an arrangement with a third + party that is in the business of distributing software, under which + you make payment to the third party based on the extent of your + activity of conveying the work, and under which the third party + grants, to any of the parties who would receive the covered work + from you, a discriminatory patent license (a) in connection with + copies of the covered work conveyed by you (or copies made from + those copies), or (b) primarily for and in connection with specific + products or compilations that contain the covered work, unless you + entered into that arrangement, or that patent license was granted, + prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting + any implied license or other defenses to infringement that may + otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement + or otherwise) that contradict the conditions of this License, they + do not excuse you from the conditions of this License. If you + cannot convey a covered work so as to satisfy simultaneously your + obligations under this License and any other pertinent obligations, + then as a consequence you may not convey it at all. For example, + if you agree to terms that obligate you to collect a royalty for + further conveying from those to whom you convey the Program, the + only way you could satisfy both those terms and this License would + be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have + permission to link or combine any covered work with a work licensed + under version 3 of the GNU Affero General Public License into a + single combined work, and to convey the resulting work. The terms + of this License will continue to apply to the part which is the + covered work, but the special requirements of the GNU Affero + General Public License, section 13, concerning interaction through + a network will apply to the combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new + versions of the GNU General Public License from time to time. Such + new versions will be similar in spirit to the present version, but + may differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the + Program specifies that a certain numbered version of the GNU + General Public License "or any later version" applies to it, you + have the option of following the terms and conditions either of + that numbered version or of any later version published by the Free + Software Foundation. If the Program does not specify a version + number of the GNU General Public License, you may choose any + version ever published by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future + versions of the GNU General Public License can be used, that + proxy's public statement of acceptance of a version permanently + authorizes you to choose that version for the Program. + + Later license versions may give you additional or different + permissions. However, no additional obligations are imposed on any + author or copyright holder as a result of your choosing to follow a + later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY + APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE + COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" + WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE + RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. + SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL + NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN + WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES + AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR + DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR + CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE + THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA + BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD + PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER + PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF + THE POSSIBILITY OF SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided + above cannot be given local legal effect according to their terms, + reviewing courts shall apply local law that most closely + approximates an absolute waiver of all civil liability in + connection with the Program, unless a warranty or assumption of + liability accompanies a copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + =========================== + + How to Apply These Terms to Your New Programs + ============================================= + + If you develop a new program, and you want it to be of the greatest + possible use to the public, the best way to achieve this is to make it + free software which everyone can redistribute and change under these + terms. + + To do so, attach the following notices to the program. It is safest + to attach them to the start of each source file to most effectively + state the exclusion of warranty; and each file should have at least the + "copyright" line and a pointer to where the full notice is found. + + ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES. + Copyright (C) YEAR NAME OF AUTHOR + + This program 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 of the License, or (at + your option) any later version. + + This program 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 this program. If not, see . + + Also add information on how to contact you by electronic and paper + mail. + + If the program does terminal interaction, make it output a short + notice like this when it starts in an interactive mode: + + PROGRAM Copyright (C) YEAR NAME OF AUTHOR + This program comes with ABSOLUTELY NO WARRANTY; for details type 'show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type 'show c' for details. + + The hypothetical commands 'show w' and 'show c' should show the + appropriate parts of the General Public License. Of course, your + program's commands might be different; for a GUI interface, you would + use an "about box". + + You should also get your employer (if you work as a programmer) or + school, if any, to sign a "copyright disclaimer" for the program, if + necessary. For more information on this, and how to apply and follow + the GNU GPL, see . + + The GNU General Public License does not permit incorporating your + program into proprietary programs. If your program is a subroutine + library, you may consider it more useful to permit linking proprietary + applications with the library. If this is what you want to do, use the + GNU Lesser General Public License instead of this License. But first, + please read . + +  + File: gccgo.info, Node: GNU Free Documentation License, Next: Invoking gccgo, Prev: Copying, Up: Top + + GNU Free Documentation License + ****************************** + + Version 1.3, 3 November 2008 + + Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. + + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + 0. PREAMBLE + + The purpose of this License is to make a manual, textbook, or other + functional and useful document "free" in the sense of freedom: to + assure everyone the effective freedom to copy and redistribute it, + with or without modifying it, either commercially or + noncommercially. Secondarily, this License preserves for the + author and publisher a way to get credit for their work, while not + being considered responsible for modifications made by others. + + This License is a kind of "copyleft", which means that derivative + works of the document must themselves be free in the same sense. + It complements the GNU General Public License, which is a copyleft + license designed for free software. + + We have designed this License in order to use it for manuals for + free software, because free software needs free documentation: a + free program should come with manuals providing the same freedoms + that the software does. But this License is not limited to + software manuals; it can be used for any textual work, regardless + of subject matter or whether it is published as a printed book. We + recommend this License principally for works whose purpose is + instruction or reference. + + 1. APPLICABILITY AND DEFINITIONS + + This License applies to any manual or other work, in any medium, + that contains a notice placed by the copyright holder saying it can + be distributed under the terms of this License. Such a notice + grants a world-wide, royalty-free license, unlimited in duration, + to use that work under the conditions stated herein. The + "Document", below, refers to any such manual or work. Any member + of the public is a licensee, and is addressed as "you". You accept + the license if you copy, modify or distribute the work in a way + requiring permission under copyright law. + + A "Modified Version" of the Document means any work containing the + Document or a portion of it, either copied verbatim, or with + modifications and/or translated into another language. + + A "Secondary Section" is a named appendix or a front-matter section + of the Document that deals exclusively with the relationship of the + publishers or authors of the Document to the Document's overall + subject (or to related matters) and contains nothing that could + fall directly within that overall subject. (Thus, if the Document + is in part a textbook of mathematics, a Secondary Section may not + explain any mathematics.) The relationship could be a matter of + historical connection with the subject or with related matters, or + of legal, commercial, philosophical, ethical or political position + regarding them. + + The "Invariant Sections" are certain Secondary Sections whose + titles are designated, as being those of Invariant Sections, in the + notice that says that the Document is released under this License. + If a section does not fit the above definition of Secondary then it + is not allowed to be designated as Invariant. The Document may + contain zero Invariant Sections. If the Document does not identify + any Invariant Sections then there are none. + + The "Cover Texts" are certain short passages of text that are + listed, as Front-Cover Texts or Back-Cover Texts, in the notice + that says that the Document is released under this License. A + Front-Cover Text may be at most 5 words, and a Back-Cover Text may + be at most 25 words. + + A "Transparent" copy of the Document means a machine-readable copy, + represented in a format whose specification is available to the + general public, that is suitable for revising the document + straightforwardly with generic text editors or (for images composed + of pixels) generic paint programs or (for drawings) some widely + available drawing editor, and that is suitable for input to text + formatters or for automatic translation to a variety of formats + suitable for input to text formatters. A copy made in an otherwise + Transparent file format whose markup, or absence of markup, has + been arranged to thwart or discourage subsequent modification by + readers is not Transparent. An image format is not Transparent if + used for any substantial amount of text. A copy that is not + "Transparent" is called "Opaque". + + Examples of suitable formats for Transparent copies include plain + ASCII without markup, Texinfo input format, LaTeX input format, + SGML or XML using a publicly available DTD, and standard-conforming + simple HTML, PostScript or PDF designed for human modification. + Examples of transparent image formats include PNG, XCF and JPG. + Opaque formats include proprietary formats that can be read and + edited only by proprietary word processors, SGML or XML for which + the DTD and/or processing tools are not generally available, and + the machine-generated HTML, PostScript or PDF produced by some word + processors for output purposes only. + + The "Title Page" means, for a printed book, the title page itself, + plus such following pages as are needed to hold, legibly, the + material this License requires to appear in the title page. For + works in formats which do not have any title page as such, "Title + Page" means the text near the most prominent appearance of the + work's title, preceding the beginning of the body of the text. + + The "publisher" means any person or entity that distributes copies + of the Document to the public. + + A section "Entitled XYZ" means a named subunit of the Document + whose title either is precisely XYZ or contains XYZ in parentheses + following text that translates XYZ in another language. (Here XYZ + stands for a specific section name mentioned below, such as + "Acknowledgements", "Dedications", "Endorsements", or "History".) + To "Preserve the Title" of such a section when you modify the + Document means that it remains a section "Entitled XYZ" according + to this definition. + + The Document may include Warranty Disclaimers next to the notice + which states that this License applies to the Document. These + Warranty Disclaimers are considered to be included by reference in + this License, but only as regards disclaiming warranties: any other + implication that these Warranty Disclaimers may have is void and + has no effect on the meaning of this License. + + 2. VERBATIM COPYING + + You may copy and distribute the Document in any medium, either + commercially or noncommercially, provided that this License, the + copyright notices, and the license notice saying this License + applies to the Document are reproduced in all copies, and that you + add no other conditions whatsoever to those of this License. You + may not use technical measures to obstruct or control the reading + or further copying of the copies you make or distribute. However, + you may accept compensation in exchange for copies. If you + distribute a large enough number of copies you must also follow the + conditions in section 3. + + You may also lend copies, under the same conditions stated above, + and you may publicly display copies. + + 3. COPYING IN QUANTITY + + If you publish printed copies (or copies in media that commonly + have printed covers) of the Document, numbering more than 100, and + the Document's license notice requires Cover Texts, you must + enclose the copies in covers that carry, clearly and legibly, all + these Cover Texts: Front-Cover Texts on the front cover, and + Back-Cover Texts on the back cover. Both covers must also clearly + and legibly identify you as the publisher of these copies. The + front cover must present the full title with all words of the title + equally prominent and visible. You may add other material on the + covers in addition. Copying with changes limited to the covers, as + long as they preserve the title of the Document and satisfy these + conditions, can be treated as verbatim copying in other respects. + + If the required texts for either cover are too voluminous to fit + legibly, you should put the first ones listed (as many as fit + reasonably) on the actual cover, and continue the rest onto + adjacent pages. + + If you publish or distribute Opaque copies of the Document + numbering more than 100, you must either include a machine-readable + Transparent copy along with each Opaque copy, or state in or with + each Opaque copy a computer-network location from which the general + network-using public has access to download using public-standard + network protocols a complete Transparent copy of the Document, free + of added material. If you use the latter option, you must take + reasonably prudent steps, when you begin distribution of Opaque + copies in quantity, to ensure that this Transparent copy will + remain thus accessible at the stated location until at least one + year after the last time you distribute an Opaque copy (directly or + through your agents or retailers) of that edition to the public. + + It is requested, but not required, that you contact the authors of + the Document well before redistributing any large number of copies, + to give them a chance to provide you with an updated version of the + Document. + + 4. MODIFICATIONS + + You may copy and distribute a Modified Version of the Document + under the conditions of sections 2 and 3 above, provided that you + release the Modified Version under precisely this License, with the + Modified Version filling the role of the Document, thus licensing + distribution and modification of the Modified Version to whoever + possesses a copy of it. In addition, you must do these things in + the Modified Version: + + A. Use in the Title Page (and on the covers, if any) a title + distinct from that of the Document, and from those of previous + versions (which should, if there were any, be listed in the + History section of the Document). You may use the same title + as a previous version if the original publisher of that + version gives permission. + + B. List on the Title Page, as authors, one or more persons or + entities responsible for authorship of the modifications in + the Modified Version, together with at least five of the + principal authors of the Document (all of its principal + authors, if it has fewer than five), unless they release you + from this requirement. + + C. State on the Title page the name of the publisher of the + Modified Version, as the publisher. + + D. Preserve all the copyright notices of the Document. + + E. Add an appropriate copyright notice for your modifications + adjacent to the other copyright notices. + + F. Include, immediately after the copyright notices, a license + notice giving the public permission to use the Modified + Version under the terms of this License, in the form shown in + the Addendum below. + + G. Preserve in that license notice the full lists of Invariant + Sections and required Cover Texts given in the Document's + license notice. + + H. Include an unaltered copy of this License. + + I. Preserve the section Entitled "History", Preserve its Title, + and add to it an item stating at least the title, year, new + authors, and publisher of the Modified Version as given on the + Title Page. If there is no section Entitled "History" in the + Document, create one stating the title, year, authors, and + publisher of the Document as given on its Title Page, then add + an item describing the Modified Version as stated in the + previous sentence. + + J. Preserve the network location, if any, given in the Document + for public access to a Transparent copy of the Document, and + likewise the network locations given in the Document for + previous versions it was based on. These may be placed in the + "History" section. You may omit a network location for a work + that was published at least four years before the Document + itself, or if the original publisher of the version it refers + to gives permission. + + K. For any section Entitled "Acknowledgements" or "Dedications", + Preserve the Title of the section, and preserve in the section + all the substance and tone of each of the contributor + acknowledgements and/or dedications given therein. + + L. Preserve all the Invariant Sections of the Document, unaltered + in their text and in their titles. Section numbers or the + equivalent are not considered part of the section titles. + + M. Delete any section Entitled "Endorsements". Such a section + may not be included in the Modified Version. + + N. Do not retitle any existing section to be Entitled + "Endorsements" or to conflict in title with any Invariant + Section. + + O. Preserve any Warranty Disclaimers. + + If the Modified Version includes new front-matter sections or + appendices that qualify as Secondary Sections and contain no + material copied from the Document, you may at your option designate + some or all of these sections as invariant. To do this, add their + titles to the list of Invariant Sections in the Modified Version's + license notice. These titles must be distinct from any other + section titles. + + You may add a section Entitled "Endorsements", provided it contains + nothing but endorsements of your Modified Version by various + parties--for example, statements of peer review or that the text + has been approved by an organization as the authoritative + definition of a standard. + + You may add a passage of up to five words as a Front-Cover Text, + and a passage of up to 25 words as a Back-Cover Text, to the end of + the list of Cover Texts in the Modified Version. Only one passage + of Front-Cover Text and one of Back-Cover Text may be added by (or + through arrangements made by) any one entity. If the Document + already includes a cover text for the same cover, previously added + by you or by arrangement made by the same entity you are acting on + behalf of, you may not add another; but you may replace the old + one, on explicit permission from the previous publisher that added + the old one. + + The author(s) and publisher(s) of the Document do not by this + License give permission to use their names for publicity for or to + assert or imply endorsement of any Modified Version. + + 5. COMBINING DOCUMENTS + + You may combine the Document with other documents released under + this License, under the terms defined in section 4 above for + modified versions, provided that you include in the combination all + of the Invariant Sections of all of the original documents, + unmodified, and list them all as Invariant Sections of your + combined work in its license notice, and that you preserve all + their Warranty Disclaimers. + + The combined work need only contain one copy of this License, and + multiple identical Invariant Sections may be replaced with a single + copy. If there are multiple Invariant Sections with the same name + but different contents, make the title of each such section unique + by adding at the end of it, in parentheses, the name of the + original author or publisher of that section if known, or else a + unique number. Make the same adjustment to the section titles in + the list of Invariant Sections in the license notice of the + combined work. + + In the combination, you must combine any sections Entitled + "History" in the various original documents, forming one section + Entitled "History"; likewise combine any sections Entitled + "Acknowledgements", and any sections Entitled "Dedications". You + must delete all sections Entitled "Endorsements." + + 6. COLLECTIONS OF DOCUMENTS + + You may make a collection consisting of the Document and other + documents released under this License, and replace the individual + copies of this License in the various documents with a single copy + that is included in the collection, provided that you follow the + rules of this License for verbatim copying of each of the documents + in all other respects. + + You may extract a single document from such a collection, and + distribute it individually under this License, provided you insert + a copy of this License into the extracted document, and follow this + License in all other respects regarding verbatim copying of that + document. + + 7. AGGREGATION WITH INDEPENDENT WORKS + + A compilation of the Document or its derivatives with other + separate and independent documents or works, in or on a volume of a + storage or distribution medium, is called an "aggregate" if the + copyright resulting from the compilation is not used to limit the + legal rights of the compilation's users beyond what the individual + works permit. When the Document is included in an aggregate, this + License does not apply to the other works in the aggregate which + are not themselves derivative works of the Document. + + If the Cover Text requirement of section 3 is applicable to these + copies of the Document, then if the Document is less than one half + of the entire aggregate, the Document's Cover Texts may be placed + on covers that bracket the Document within the aggregate, or the + electronic equivalent of covers if the Document is in electronic + form. Otherwise they must appear on printed covers that bracket + the whole aggregate. + + 8. TRANSLATION + + Translation is considered a kind of modification, so you may + distribute translations of the Document under the terms of section + 4. Replacing Invariant Sections with translations requires special + permission from their copyright holders, but you may include + translations of some or all Invariant Sections in addition to the + original versions of these Invariant Sections. You may include a + translation of this License, and all the license notices in the + Document, and any Warranty Disclaimers, provided that you also + include the original English version of this License and the + original versions of those notices and disclaimers. In case of a + disagreement between the translation and the original version of + this License or a notice or disclaimer, the original version will + prevail. + + If a section in the Document is Entitled "Acknowledgements", + "Dedications", or "History", the requirement (section 4) to + Preserve its Title (section 1) will typically require changing the + actual title. + + 9. TERMINATION + + You may not copy, modify, sublicense, or distribute the Document + except as expressly provided under this License. Any attempt + otherwise to copy, modify, sublicense, or distribute it is void, + and will automatically terminate your rights under this License. + + However, if you cease all violation of this License, then your + license from a particular copyright holder is reinstated (a) + provisionally, unless and until the copyright holder explicitly and + finally terminates your license, and (b) permanently, if the + copyright holder fails to notify you of the violation by some + reasonable means prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is + reinstated permanently if the copyright holder notifies you of the + violation by some reasonable means, this is the first time you have + received notice of violation of this License (for any work) from + that copyright holder, and you cure the violation prior to 30 days + after your receipt of the notice. + + Termination of your rights under this section does not terminate + the licenses of parties who have received copies or rights from you + under this License. If your rights have been terminated and not + permanently reinstated, receipt of a copy of some or all of the + same material does not give you any rights to use it. + + 10. FUTURE REVISIONS OF THIS LICENSE + + The Free Software Foundation may publish new, revised versions of + the GNU Free Documentation License from time to time. Such new + versions will be similar in spirit to the present version, but may + differ in detail to address new problems or concerns. See + . + + Each version of the License is given a distinguishing version + number. If the Document specifies that a particular numbered + version of this License "or any later version" applies to it, you + have the option of following the terms and conditions either of + that specified version or of any later version that has been + published (not as a draft) by the Free Software Foundation. If the + Document does not specify a version number of this License, you may + choose any version ever published (not as a draft) by the Free + Software Foundation. If the Document specifies that a proxy can + decide which future versions of this License can be used, that + proxy's public statement of acceptance of a version permanently + authorizes you to choose that version for the Document. + + 11. RELICENSING + + "Massive Multiauthor Collaboration Site" (or "MMC Site") means any + World Wide Web server that publishes copyrightable works and also + provides prominent facilities for anybody to edit those works. A + public wiki that anybody can edit is an example of such a server. + A "Massive Multiauthor Collaboration" (or "MMC") contained in the + site means any set of copyrightable works thus published on the MMC + site. + + "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 + license published by Creative Commons Corporation, a not-for-profit + corporation with a principal place of business in San Francisco, + California, as well as future copyleft versions of that license + published by that same organization. + + "Incorporate" means to publish or republish a Document, in whole or + in part, as part of another Document. + + An MMC is "eligible for relicensing" if it is licensed under this + License, and if all works that were first published under this + License somewhere other than this MMC, and subsequently + incorporated in whole or in part into the MMC, (1) had no cover + texts or invariant sections, and (2) were thus incorporated prior + to November 1, 2008. + + The operator of an MMC Site may republish an MMC contained in the + site under CC-BY-SA on the same site at any time before August 1, + 2009, provided the MMC is eligible for relicensing. + + ADDENDUM: How to use this License for your documents + ==================================================== + + To use this License in a document you have written, include a copy of + the License in the document and put the following copyright and license + notices just after the title page: + + Copyright (C) YEAR YOUR NAME. + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.3 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover + Texts. A copy of the license is included in the section entitled ``GNU + Free Documentation License''. + + If you have Invariant Sections, Front-Cover Texts and Back-Cover + Texts, replace the "with...Texts." line with this: + + with the Invariant Sections being LIST THEIR TITLES, with + the Front-Cover Texts being LIST, and with the Back-Cover Texts + being LIST. + + If you have Invariant Sections without Cover Texts, or some other + combination of the three, merge those two alternatives to suit the + situation. + + If your document contains nontrivial examples of program code, we + recommend releasing these examples in parallel under your choice of free + software license, such as the GNU General Public License, to permit + their use in free software. + +  + File: gccgo.info, Node: Invoking gccgo, Next: Import and Export, Prev: GNU Free Documentation License, Up: Top + + 1 Invoking gccgo + **************** + + The 'gccgo' command is a frontend to 'gcc' and supports many of the same + options. *Note Option Summary: (gcc)Option Summary. This manual only + documents the options specific to 'gccgo'. + + The 'gccgo' command may be used to compile Go source code into an + object file, link a collection of object files together, or do both in + sequence. + + Go source code is compiled as packages. A package consists of one or + more Go source files. All the files in a single package must be + compiled together, by passing all the files as arguments to 'gccgo'. A + single invocation of 'gccgo' may only compile a single package. + + One Go package may 'import' a different Go package. The imported + package must have already been compiled; 'gccgo' will read the import + data directly from the compiled package. When this package is later + linked, the compiled form of the package must be included in the link + command. + + Go programs must generally be compiled with debugging information, + and '-g1' is the default as described below. Stripping a Go program + will generally cause it to misbehave or fail. + + '-IDIR' + Specify a directory to use when searching for an import package at + compile time. + + '-LDIR' + When linking, specify a library search directory, as with 'gcc'. + + '-fgo-pkgpath=STRING' + Set the package path to use. This sets the value returned by the + PkgPath method of reflect.Type objects. It is also used for the + names of globally visible symbols. The argument to this option + should normally be the string that will be used to import this + package after it has been installed; in other words, a pathname + within the directories specified by the '-I' option. + + '-fgo-prefix=STRING' + An alternative to '-fgo-pkgpath'. The argument will be combined + with the package name from the source file to produce the package + path. If '-fgo-pkgpath' is used, '-fgo-prefix' will be ignored. + + Go permits a single program to include more than one package with + the same name in the 'package' clause in the source file, though + obviously the two packages must be imported using different + pathnames. In order for this to work with 'gccgo', either + '-fgo-pkgpath' or '-fgo-prefix' must be specified when compiling a + package. + + Using either '-fgo-pkgpath' or '-fgo-prefix' disables the special + treatment of the 'main' package and permits that package to be + imported like any other. + + '-fgo-relative-import-path=DIR' + A relative import is an import that starts with './' or '../'. If + this option is used, 'gccgo' will use DIR as a prefix for the + relative import when searching for it. + + '-frequire-return-statement' + '-fno-require-return-statement' + By default 'gccgo' will warn about functions which have one or more + return parameters but lack an explicit 'return' statement. This + warning may be disabled using '-fno-require-return-statement'. + + '-fgo-check-divide-zero' + Add explicit checks for division by zero. In Go a division (or + modulos) by zero causes a panic. On Unix systems this is detected + in the runtime by catching the 'SIGFPE' signal. Some processors, + such as PowerPC, do not generate a SIGFPE on division by zero. + Some runtimes do not generate a signal that can be caught. On + those systems, this option may be used. Or the checks may be + removed via '-fno-go-check-divide-zero'. This option is currently + on by default, but in the future may be off by default on systems + that do not require it. + + '-fgo-check-divide-overflow' + Add explicit checks for division overflow. For example, division + overflow occurs when computing 'INT_MIN / -1'. In Go this should + be wrapped, to produce 'INT_MIN'. Some processors, such as x86, + generate a trap on division overflow. On those systems, this + option may be used. Or the checks may be removed via + '-fno-go-check-divide-overflow'. This option is currently on by + default, but in the future may be off by default on systems that do + not require it. + + '-fno-go-optimize-allocs' + Disable escape analysis, which tries to allocate objects on the + stack rather than the heap. + + '-fgo-debug-escapeN' + Output escape analysis debugging information. Larger values of N + generate more information. + + '-fgo-debug-escape-hash=N' + A hash value to debug escape analysis. N is a binary string. This + runs escape analysis only on functions whose names hash to values + that match the given suffix N. This can be used to binary search + across functions to uncover escape analysis bugs. + + '-fgo-debug-optimization' + Output optimization diagnostics. + + '-fgo-c-header=FILE' + Write top-level named Go struct definitions to FILE as C code. + This is used when compiling the runtime package. + + '-fgo-compiling-runtime' + Apply special rules for compiling the runtime package. Implicit + memory allocation is forbidden. Some additional compiler + directives are supported. + + '-fgo-embedcfg=FILE' + Identify a JSON file used to map patterns used with special + '//go:embed' comments to the files named by the patterns. The JSON + file should have two components: 'Patterns' maps each pattern to a + list of file names, and 'Files' maps each file name to a full path + to the file. This option is intended for use by the 'go' command + to implement '//go:embed'. + + '-g' + This is the standard 'gcc' option (*note Debugging Options: + (gcc)Debugging Options.). It is mentioned here because by default + 'gccgo' turns on debugging information generation with the + equivalent of the standard option '-g1'. This is because Go + programs require debugging information to be available in order to + get backtrace information. An explicit '-g0' may be used to + disable the generation of debugging information, in which case + certain standard library functions, such as 'runtime.Callers', will + not operate correctly. + +  + File: gccgo.info, Node: Import and Export, Next: Compiler Directives, Prev: Invoking gccgo, Up: Top + + 2 Import and Export + ******************* + + When 'gccgo' compiles a package which exports anything, the export + information will be stored directly in the object file. When a package + is imported, 'gccgo' must be able to find the file. + + When Go code imports the package 'GOPACKAGE', 'gccgo' will look for + the import data using the following filenames, using the first one that + it finds. + + 'GOPACKAGE.gox' + 'libGOPACKAGE.so' + 'libGOPACKAGE.a' + 'GOPACKAGE.o' + + The compiler will search for these files in the directories named by + any '-I' options, in order in which the directories appear on the + command line. The compiler will then search several standard system + directories. Finally the compiler will search the current directory (to + search the current directory earlier, use '-I.'). + + The compiler will extract the export information directly from the + compiled object file. The file 'GOPACKAGE.gox' will typically contain + nothing but export data. This can be generated from 'GOPACKAGE.o' via + + objcopy -j .go_export GOPACKAGE.o GOPACKAGE.gox + + For example, it may be desirable to extract the export information + from several different packages into their independent 'GOPACKAGE.gox' + files, and then to combine the different package object files together + into a single shared library or archive. + + At link time you must explicitly tell 'gccgo' which files to link + together into the executable, as is usual with 'gcc'. This is different + from the behavior of other Go compilers. + +  + File: gccgo.info, Node: Compiler Directives, Next: C Interoperability, Prev: Import and Export, Up: Top + + 3 Compiler Directives + ********************* + + The Go compiler supports a few compiler directives. A compiler + directive uses a '//' comment at the start of a line. There must be no + space between the '//' and the name of the directive. + + '//line FILE:LINE' + The '//line' directive specifies that the source line that follows + should be recorded as having come from the given file path and line + number. Successive lines are recorded using increasing line + numbers, until the next directive. This directive typically + appears in machine-generated code, so that compilers and debuggers + will show lines in the original input to the generator. + + '//extern EXTERN_NAME' + The 'extern' directive sets the externally visible name of the next + function declaration. See *note Function Names::. + + '//go:compile GO_NAME EXTERN_NAME' + The 'go:compile' directives sets the externally visible name of a + function definition or declaration. See *note Function Names::. + + '//go:noescape' + The '//go:noescape' directive specifies that the next declaration + in the file, which must be a func without a body (meaning that it + has an implementation not written in Go) does not allow any of the + pointers passed as arguments to escape into the heap or into the + values returned from the function. This information can be used + during the compiler's escape analysis of Go code calling the + function. + + '//go:nosplit' + The '//go:nosplit' directive specifies that the next function + declared in the file must not include a stack overflow check. This + is most commonly used by low-level runtime sources invoked at times + when it is unsafe for the calling goroutine to be preempted. + + '//go:noinline' + The '//go:noinline' directive specifies that the next function + defined in the file may not be inlined. + +  + File: gccgo.info, Node: C Interoperability, Next: Index, Prev: Compiler Directives, Up: Top + + 4 C Interoperability + ******************** + + When using 'gccgo' there is limited interoperability with C, or with C++ + code compiled using 'extern "C"'. + + This information is provided largely for documentation purposes. For + ordinary use it is best to build programs with the go tool and then use + 'import "C"', as described at . + + * Menu: + + * C Type Interoperability:: How C and Go types match up. + * Function Names:: How Go functions are named. + +  + File: gccgo.info, Node: C Type Interoperability, Next: Function Names, Up: C Interoperability + + 4.1 C Type Interoperability + =========================== + + Basic types map directly: an 'int' in Go is an 'int' in C, etc. Go + 'byte' is equivalent to C 'unsigned char'. Pointers in Go are pointers + in C. A Go 'struct' is the same as C 'struct' with the same field names + and types. + + The Go 'string' type is currently defined as a two-element structure: + + struct __go_string { + const unsigned char *__data; + int __length; + }; + + You can't pass arrays between C and Go. However, a pointer to an + array in Go is equivalent to a C pointer to the equivalent of the + element type. For example, Go '*[10]int' is equivalent to C 'int*', + assuming that the C pointer does point to 10 elements. + + A slice in Go is a structure. The current definition is: + + struct __go_slice { + void *__values; + int __count; + int __capacity; + }; + + The type of a Go function with no receiver is equivalent to a C + function whose parameter types are equivalent. When a Go function + returns more than one value, the C function returns a struct. For + example, these functions have equivalent types: + + func GoFunction(int) (int, float) + struct { int i; float f; } CFunction(int) + + A pointer to a Go function is equivalent to a pointer to a C function + when the functions have equivalent types. + + Go 'interface', 'channel', and 'map' types have no corresponding C + type ('interface' is a two-element struct and 'channel' and 'map' are + pointers to structs in C, but the structs are deliberately + undocumented). C 'enum' types correspond to some integer type, but + precisely which one is difficult to predict in general; use a cast. C + 'union' types have no corresponding Go type. C 'struct' types + containing bitfields have no corresponding Go type. C++ 'class' types + have no corresponding Go type. + + Memory allocation is completely different between C and Go, as Go + uses garbage collection. The exact guidelines in this area are + undetermined, but it is likely that it will be permitted to pass a + pointer to allocated memory from C to Go. The responsibility of + eventually freeing the pointer will remain with C side, and of course if + the C side frees the pointer while the Go side still has a copy the + program will fail. When passing a pointer from Go to C, the Go function + must retain a visible copy of it in some Go variable. Otherwise the Go + garbage collector may delete the pointer while the C function is still + using it. + +  + File: gccgo.info, Node: Function Names, Prev: C Type Interoperability, Up: C Interoperability + + 4.2 Function Names + ================== + + Go code can call C functions directly using the '//extern' or + '//go:linkname' compiler directives. An '//extern' directive must be at + the beginning of the line and must start with '//extern'. This must be + followed by a space and then the external name of the function. The + function declaration must be on the line immediately after the comment. + For example, here is how the C function 'open' can be declared in Go: + + //extern open + func c_open(name *byte, mode int, perm int) int + + You can do the same thing using the '//go:linkname' compiler + directive. The '//go:linkname' directive must be at the start of the + line. It is followed by whitespace, the name of the Go function, more + whitespace, and the external name of the function. Unlike '//extern', + '//go:linkname' does not need to appear immediately adjacent to the + function definition or declaration. + + //go:linkname c_open open + func c_open(name *byte, mode int, perm int) int + + The C function naturally expects a nul terminated string, which in Go + is equivalent to a pointer to an array (not a slice!) of 'byte' with a + terminating zero byte. So a sample call from Go would look like (after + importing the 'os' package): + + var name = [4]byte{'f', 'o', 'o', 0}; + i := c_open(&name[0], os.O_RDONLY, 0); + + Note that this serves as an example only. To open a file in Go + please use Go's 'os.Open' function instead. + + The name of Go functions accessed from C is subject to change. At + present the name of a Go function that does not have a receiver is + 'pkgpath.Functionname'. The PKGPATH is set by the '-fgo-pkgpath' option + used when the package is compiled; if the option is not used, the + default is 'go.PACKAGENAME'. To call the function from C you must set + the name using the 'gcc' '__asm__' extension. + + extern int go_function(int) __asm__ ("mypkgpath.Function"); + +  + File: gccgo.info, Node: Index, Prev: C Interoperability, Up: Top + + Index + ***** + + [index] + * Menu: + + * -fgo-c-header: Invoking gccgo. (line 110) + * -fgo-check-divide-overflow: Invoking gccgo. (line 83) + * -fgo-check-divide-zero: Invoking gccgo. (line 72) + * -fgo-compiling-runtime: Invoking gccgo. (line 114) + * -fgo-debug-escape: Invoking gccgo. (line 97) + * -fgo-debug-escape-hash: Invoking gccgo. (line 101) + * -fgo-debug-optimization: Invoking gccgo. (line 107) + * -fgo-embedcfg: Invoking gccgo. (line 119) + * -fgo-pkgpath: Invoking gccgo. (line 37) + * -fgo-prefix: Invoking gccgo. (line 45) + * -fgo-relative-import-path: Invoking gccgo. (line 61) + * -fno-go-check-divide-overflow: Invoking gccgo. (line 83) + * -fno-go-check-divide-zero: Invoking gccgo. (line 72) + * -fno-go-debug-optimization: Invoking gccgo. (line 107) + * -fno-go-optimize-allocs: Invoking gccgo. (line 93) + * -fno-require-return-statement: Invoking gccgo. (line 67) + * -frequire-return-statement: Invoking gccgo. (line 67) + * -g for gccgo: Invoking gccgo. (line 127) + * -I: Invoking gccgo. (line 30) + * -L: Invoking gccgo. (line 34) + * .gox: Import and Export. (line 10) + * extern: Function Names. (line 6) + * external names: Function Names. (line 6) + * FDL, GNU Free Documentation License: GNU Free Documentation License. + (line 6) + * slice in C: C Type Interoperability. + (line 23) + * string in C: C Type Interoperability. + (line 11) + + +  + Tag Table: + Node: Top1688 + Node: Copying2548 + Node: GNU Free Documentation License40084 + Node: Invoking gccgo65214 + Node: Import and Export71394 + Node: Compiler Directives72990 + Node: C Interoperability74974 + Node: C Type Interoperability75561 + Node: Function Names78120 + Node: Index80124 +  + End Tag Table diff -Nrcpad gcc-12.4.0/gcc/doc/gccinstall.info gcc-12.5.0-RC-20250704/gcc/doc/gccinstall.info *** gcc-12.4.0/gcc/doc/gccinstall.info Thu Jun 20 08:26:15 2024 --- gcc-12.5.0-RC-20250704/gcc/doc/gccinstall.info Fri Jul 4 07:38:21 2025 *************** *** 1,4 **** ! This is gccinstall.info, produced by makeinfo version 6.8 from install.texi. Copyright (C) 1988-2022 Free Software Foundation, Inc. --- 1,4 ---- ! This is gccinstall.info, produced by makeinfo version 6.5 from install.texi. Copyright (C) 1988-2022 Free Software Foundation, Inc. *************** Concept Index *** 4852,4858 **** * Menu: * Binaries: Binaries. (line 6) ! * build_configargs: Configuration. (line 1832) * Configuration: Configuration. (line 6) * Downloading GCC: Downloading the source. (line 6) --- 4852,4858 ---- * Menu: * Binaries: Binaries. (line 6) ! * build_configargs: Configuration. (line 1833) * Configuration: Configuration. (line 6) * Downloading GCC: Downloading the source. (line 6) *************** Concept Index *** 4861,4867 **** * FDL, GNU Free Documentation License: GNU Free Documentation License. (line 6) * Host specific installation: Specific. (line 6) ! * host_configargs: Configuration. (line 1836) * Installing GCC: Binaries: Binaries. (line 6) * Installing GCC: Building: Building. (line 6) * Installing GCC: Configuration: Configuration. (line 6) --- 4861,4867 ---- * FDL, GNU Free Documentation License: GNU Free Documentation License. (line 6) * Host specific installation: Specific. (line 6) ! * host_configargs: Configuration. (line 1837) * Installing GCC: Binaries: Binaries. (line 6) * Installing GCC: Building: Building. (line 6) * Installing GCC: Configuration: Configuration. (line 6) *************** Concept Index *** 4871,4877 **** * Specific installation notes: Specific. (line 6) * Target specific installation: Specific. (line 6) * Target specific installation notes: Specific. (line 6) ! * target_configargs: Configuration. (line 1840) * Testing: Testing. (line 6) * Testsuite: Testing. (line 6) --- 4871,4877 ---- * Specific installation notes: Specific. (line 6) * Target specific installation: Specific. (line 6) * Target specific installation notes: Specific. (line 6) ! * target_configargs: Configuration. (line 1841) * Testing: Testing. (line 6) * Testsuite: Testing. (line 6) *************** Node: GNU Free Documentation License188 *** 4982,4989 **** Node: Concept Index213460  End Tag Table - -  - Local Variables: - coding: utf-8 - End: --- 4982,4984 ---- diff -Nrcpad gcc-12.4.0/gcc/doc/gccint.info gcc-12.5.0-RC-20250704/gcc/doc/gccint.info *** gcc-12.4.0/gcc/doc/gccint.info Thu Jun 20 08:26:24 2024 --- gcc-12.5.0-RC-20250704/gcc/doc/gccint.info Fri Jul 4 07:38:26 2025 *************** *** 1,4 **** ! This is gccint.info, produced by makeinfo version 6.8 from gccint.texi. Copyright (C) 1988-2022 Free Software Foundation, Inc. --- 1,4 ---- ! This is gccint.info, produced by makeinfo version 6.5 from gccint.texi. Copyright (C) 1988-2022 Free Software Foundation, Inc. *************** Copies published by the Free Software Fo *** 47,53 **** development.  ! File: gccint.info, Node: Top, Next: Contributing, Up: (dir) Introduction ************ --- 47,53 ---- development.  ! File: gccint.info, Node: Top, Next: Contributing Introduction ************ *************** Introduction *** 55,61 **** This manual documents the internals of the GNU compilers, including how to port them to new targets and some information about how to write front ends for new languages. It corresponds to the compilers (GCC) ! version 12.4.0. The use of the GNU compilers is documented in a separate manual. *Note Introduction: (gcc)Top. This manual is mainly a reference manual rather than a tutorial. It --- 55,61 ---- This manual documents the internals of the GNU compilers, including how to port them to new targets and some information about how to write front ends for new languages. It corresponds to the compilers (GCC) ! version 12.4.1. The use of the GNU compilers is documented in a separate manual. *Note Introduction: (gcc)Top. This manual is mainly a reference manual rather than a tutorial. It *************** File: gccint.info, Node: GIMPLE_CALL, *** 14304,14310 **** call needs no further simplification. All the call flags in 'call_expr' are copied over to the new 'GIMPLE_CALL'. ! -- GIMPLE function: gcall *gimple_build_call_vec (tree fn, vec args) Identical to 'gimple_build_call' but the arguments are stored in a 'vec'. --- 14304,14310 ---- call needs no further simplification. All the call flags in 'call_expr' are copied over to the new 'GIMPLE_CALL'. ! -- GIMPLE function: gcall *gimple_build_call_vec (tree fn, 'vec' args) Identical to 'gimple_build_call' but the arguments are stored in a 'vec'. *************** File: gccint.info, Node: GIMPLE_SWITCH, *** 15111,15117 **** ----------------------- -- GIMPLE function: gswitch *gimple_build_switch (tree index, tree ! default_label, vec *args) Build a 'GIMPLE_SWITCH' statement. 'INDEX' is the index variable to switch on, and 'DEFAULT_LABEL' represents the default label. 'ARGS' is a vector of 'CASE_LABEL_EXPR' trees that contain the --- 15111,15117 ---- ----------------------- -- GIMPLE function: gswitch *gimple_build_switch (tree index, tree ! default_label, 'vec' *args) Build a 'GIMPLE_SWITCH' statement. 'INDEX' is the index variable to switch on, and 'DEFAULT_LABEL' represents the default label. 'ARGS' is a vector of 'CASE_LABEL_EXPR' trees that contain the *************** alphabetical order. *** 49364,49370 **** * Ralf Corsepius for SH testing and minor bug fixing. ! * François-Xavier Coudert for contributions to GNU Fortran. * Stan Cox for care and feeding of the x86 port and lots of behind the scenes hacking. --- 49364,49370 ---- * Ralf Corsepius for SH testing and minor bug fixing. ! * Franc,ois-Xavier Coudert for contributions to GNU Fortran. * Stan Cox for care and feeding of the x86 port and lots of behind the scenes hacking. *************** alphabetical order. *** 49407,49413 **** disbursement, configuration architecture, libio maintenance, and early math work. ! * François Dumont for his work on libstdc++-v3, especially maintaining and improving 'debug-mode' and associative and unordered containers. --- 49407,49413 ---- disbursement, configuration architecture, libio maintenance, and early math work. ! * Franc,ois Dumont for his work on libstdc++-v3, especially maintaining and improving 'debug-mode' and associative and unordered containers. *************** alphabetical order. *** 49666,49678 **** * Weiwen Liu for testing and various bug fixes. ! * Manuel López-Ibáñez for improving '-Wconversion' and many other diagnostics fixes and improvements. * Dave Love for his ongoing work with the Fortran front end and runtime libraries. ! * Martin von Löwis for internal consistency checking infrastructure, various C++ improvements including namespace support, and tons of assistance with libstdc++/compiler merges. --- 49666,49678 ---- * Weiwen Liu for testing and various bug fixes. ! * Manuel Lo'pez-Iba'n~ez for improving '-Wconversion' and many other diagnostics fixes and improvements. * Dave Love for his ongoing work with the Fortran front end and runtime libraries. ! * Martin von Lo"wis for internal consistency checking infrastructure, various C++ improvements including namespace support, and tons of assistance with libstdc++/compiler merges. *************** alphabetical order. *** 49864,49870 **** * Craig Rodrigues for processing tons of bug reports. ! * Ola Rönnerup for work on mt_alloc. * Gavin Romig-Koch for lots of behind the scenes MIPS work. --- 49864,49870 ---- * Craig Rodrigues for processing tons of bug reports. ! * Ola Ro"nnerup for work on mt_alloc. * Gavin Romig-Koch for lots of behind the scenes MIPS work. *************** alphabetical order. *** 49878,49884 **** * Paul Rubin wrote most of the preprocessor. ! * Pétur Runólfsson for major performance improvements in C++ formatted I/O and large file support in C++ filebuf. * Chip Salzenberg for libstdc++ patches and improvements to locales, --- 49878,49884 ---- * Paul Rubin wrote most of the preprocessor. ! * Pe'tur Runo'lfsson for major performance improvements in C++ formatted I/O and large file support in C++ filebuf. * Chip Salzenberg for libstdc++ patches and improvements to locales, *************** alphabetical order. *** 49899,49905 **** * William Schelter did most of the work on the Intel 80386 support. ! * Tobias Schlüter for work on GNU Fortran. * Bernd Schmidt for various code generation improvements and major work in the reload pass, serving as release manager for GCC 2.95.3, --- 49899,49905 ---- * William Schelter did most of the work on the Intel 80386 support. ! * Tobias Schlu"ter for work on GNU Fortran. * Bernd Schmidt for various code generation improvements and major work in the reload pass, serving as release manager for GCC 2.95.3, *************** contributions to testing: *** 50396,50402 **** * Robert A. French ! * Jörgen Freyh * Mark K. Gardner --- 50396,50402 ---- * Robert A. French ! * Jo"rgen Freyh * Mark K. Gardner *************** Concept Index *** 50618,50660 **** * __absvsi2: Integer library routines. (line 105) * __addda3: Fixed-point fractional library routines. ! (line 44) * __adddf3: Soft float library routines. (line 22) * __adddq3: Fixed-point fractional library routines. ! (line 31) * __addha3: Fixed-point fractional library routines. ! (line 41) * __addhq3: Fixed-point fractional library routines. ! (line 29) * __addqq3: Fixed-point fractional library routines. ! (line 27) * __addsa3: Fixed-point fractional library routines. ! (line 43) * __addsf3: Soft float library routines. (line 21) * __addsq3: Fixed-point fractional library routines. ! (line 30) * __addta3: Fixed-point fractional library routines. ! (line 45) * __addtf3: Soft float library routines. (line 23) * __adduda3: Fixed-point fractional library routines. ! (line 51) * __addudq3: Fixed-point fractional library routines. - (line 39) - * __adduha3: Fixed-point fractional library routines. (line 47) * __adduhq3: Fixed-point fractional library routines. ! (line 35) * __adduqq3: Fixed-point fractional library routines. ! (line 33) * __addusa3: Fixed-point fractional library routines. ! (line 49) * __addusq3: Fixed-point fractional library routines. ! (line 37) * __adduta3: Fixed-point fractional library routines. ! (line 53) * __addvdi3: Integer library routines. (line 110) * __addvsi3: Integer library routines. --- 50618,50660 ---- * __absvsi2: Integer library routines. (line 105) * __addda3: Fixed-point fractional library routines. ! (line 52) * __adddf3: Soft float library routines. (line 22) * __adddq3: Fixed-point fractional library routines. ! (line 39) * __addha3: Fixed-point fractional library routines. ! (line 49) * __addhq3: Fixed-point fractional library routines. ! (line 37) * __addqq3: Fixed-point fractional library routines. ! (line 35) * __addsa3: Fixed-point fractional library routines. ! (line 51) * __addsf3: Soft float library routines. (line 21) * __addsq3: Fixed-point fractional library routines. ! (line 38) * __addta3: Fixed-point fractional library routines. ! (line 53) * __addtf3: Soft float library routines. (line 23) * __adduda3: Fixed-point fractional library routines. ! (line 59) * __addudq3: Fixed-point fractional library routines. (line 47) + * __adduha3: Fixed-point fractional library routines. + (line 55) * __adduhq3: Fixed-point fractional library routines. ! (line 43) * __adduqq3: Fixed-point fractional library routines. ! (line 41) * __addusa3: Fixed-point fractional library routines. ! (line 57) * __addusq3: Fixed-point fractional library routines. ! (line 45) * __adduta3: Fixed-point fractional library routines. ! (line 61) * __addvdi3: Integer library routines. (line 110) * __addvsi3: Integer library routines. *************** Concept Index *** 50662,50724 **** * __addxf3: Soft float library routines. (line 25) * __ashlda3: Fixed-point fractional library routines. ! (line 350) * __ashldi3: Integer library routines. (line 13) * __ashldq3: Fixed-point fractional library routines. ! (line 338) * __ashlha3: Fixed-point fractional library routines. ! (line 348) * __ashlhq3: Fixed-point fractional library routines. ! (line 336) * __ashlqq3: Fixed-point fractional library routines. ! (line 335) * __ashlsa3: Fixed-point fractional library routines. ! (line 349) * __ashlsi3: Integer library routines. (line 12) * __ashlsq3: Fixed-point fractional library routines. ! (line 337) * __ashlta3: Fixed-point fractional library routines. ! (line 351) * __ashlti3: Integer library routines. (line 14) * __ashluda3: Fixed-point fractional library routines. ! (line 357) * __ashludq3: Fixed-point fractional library routines. ! (line 346) * __ashluha3: Fixed-point fractional library routines. ! (line 353) * __ashluhq3: Fixed-point fractional library routines. ! (line 342) * __ashluqq3: Fixed-point fractional library routines. ! (line 340) * __ashlusa3: Fixed-point fractional library routines. ! (line 355) * __ashlusq3: Fixed-point fractional library routines. ! (line 344) * __ashluta3: Fixed-point fractional library routines. ! (line 359) * __ashrda3: Fixed-point fractional library routines. ! (line 370) * __ashrdi3: Integer library routines. (line 18) * __ashrdq3: Fixed-point fractional library routines. ! (line 366) * __ashrha3: Fixed-point fractional library routines. ! (line 368) * __ashrhq3: Fixed-point fractional library routines. ! (line 364) * __ashrqq3: Fixed-point fractional library routines. ! (line 363) * __ashrsa3: Fixed-point fractional library routines. ! (line 369) * __ashrsi3: Integer library routines. (line 17) * __ashrsq3: Fixed-point fractional library routines. ! (line 365) * __ashrta3: Fixed-point fractional library routines. ! (line 371) * __ashrti3: Integer library routines. (line 19) * __bid_adddd3: Decimal float library routines. --- 50662,50724 ---- * __addxf3: Soft float library routines. (line 25) * __ashlda3: Fixed-point fractional library routines. ! (line 358) * __ashldi3: Integer library routines. (line 13) * __ashldq3: Fixed-point fractional library routines. ! (line 346) * __ashlha3: Fixed-point fractional library routines. ! (line 356) * __ashlhq3: Fixed-point fractional library routines. ! (line 344) * __ashlqq3: Fixed-point fractional library routines. ! (line 343) * __ashlsa3: Fixed-point fractional library routines. ! (line 357) * __ashlsi3: Integer library routines. (line 12) * __ashlsq3: Fixed-point fractional library routines. ! (line 345) * __ashlta3: Fixed-point fractional library routines. ! (line 359) * __ashlti3: Integer library routines. (line 14) * __ashluda3: Fixed-point fractional library routines. ! (line 365) * __ashludq3: Fixed-point fractional library routines. ! (line 354) * __ashluha3: Fixed-point fractional library routines. ! (line 361) * __ashluhq3: Fixed-point fractional library routines. ! (line 350) * __ashluqq3: Fixed-point fractional library routines. ! (line 348) * __ashlusa3: Fixed-point fractional library routines. ! (line 363) * __ashlusq3: Fixed-point fractional library routines. ! (line 352) * __ashluta3: Fixed-point fractional library routines. ! (line 367) * __ashrda3: Fixed-point fractional library routines. ! (line 378) * __ashrdi3: Integer library routines. (line 18) * __ashrdq3: Fixed-point fractional library routines. ! (line 374) * __ashrha3: Fixed-point fractional library routines. ! (line 376) * __ashrhq3: Fixed-point fractional library routines. ! (line 372) * __ashrqq3: Fixed-point fractional library routines. ! (line 371) * __ashrsa3: Fixed-point fractional library routines. ! (line 377) * __ashrsi3: Integer library routines. (line 17) * __ashrsq3: Fixed-point fractional library routines. ! (line 373) * __ashrta3: Fixed-point fractional library routines. ! (line 379) * __ashrti3: Integer library routines. (line 19) * __bid_adddd3: Decimal float library routines. *************** Concept Index *** 50917,50963 **** * __clzti2: Integer library routines. (line 131) * __cmpda2: Fixed-point fractional library routines. ! (line 450) * __cmpdf2: Soft float library routines. (line 163) * __cmpdi2: Integer library routines. (line 86) * __cmpdq2: Fixed-point fractional library routines. ! (line 439) * __cmpha2: Fixed-point fractional library routines. ! (line 448) * __cmphq2: Fixed-point fractional library routines. ! (line 437) * __cmpqq2: Fixed-point fractional library routines. ! (line 436) * __cmpsa2: Fixed-point fractional library routines. ! (line 449) * __cmpsf2: Soft float library routines. (line 162) * __cmpsq2: Fixed-point fractional library routines. ! (line 438) * __cmpta2: Fixed-point fractional library routines. ! (line 451) * __cmptf2: Soft float library routines. (line 164) * __cmpti2: Integer library routines. (line 87) * __cmpuda2: Fixed-point fractional library routines. ! (line 456) * __cmpudq2: Fixed-point fractional library routines. ! (line 446) * __cmpuha2: Fixed-point fractional library routines. ! (line 453) * __cmpuhq2: Fixed-point fractional library routines. ! (line 443) * __cmpuqq2: Fixed-point fractional library routines. ! (line 441) * __cmpusa2: Fixed-point fractional library routines. ! (line 455) * __cmpusq2: Fixed-point fractional library routines. ! (line 444) * __cmputa2: Fixed-point fractional library routines. ! (line 458) * __CTOR_LIST__: Initialization. (line 25) * __ctzdi2: Integer library routines. (line 137) --- 50917,50963 ---- * __clzti2: Integer library routines. (line 131) * __cmpda2: Fixed-point fractional library routines. ! (line 458) * __cmpdf2: Soft float library routines. (line 163) * __cmpdi2: Integer library routines. (line 86) * __cmpdq2: Fixed-point fractional library routines. ! (line 447) * __cmpha2: Fixed-point fractional library routines. ! (line 456) * __cmphq2: Fixed-point fractional library routines. ! (line 445) * __cmpqq2: Fixed-point fractional library routines. ! (line 444) * __cmpsa2: Fixed-point fractional library routines. ! (line 457) * __cmpsf2: Soft float library routines. (line 162) * __cmpsq2: Fixed-point fractional library routines. ! (line 446) * __cmpta2: Fixed-point fractional library routines. ! (line 459) * __cmptf2: Soft float library routines. (line 164) * __cmpti2: Integer library routines. (line 87) * __cmpuda2: Fixed-point fractional library routines. ! (line 464) * __cmpudq2: Fixed-point fractional library routines. ! (line 454) * __cmpuha2: Fixed-point fractional library routines. ! (line 461) * __cmpuhq2: Fixed-point fractional library routines. ! (line 451) * __cmpuqq2: Fixed-point fractional library routines. ! (line 449) * __cmpusa2: Fixed-point fractional library routines. ! (line 463) * __cmpusq2: Fixed-point fractional library routines. ! (line 452) * __cmputa2: Fixed-point fractional library routines. ! (line 466) * __CTOR_LIST__: Initialization. (line 25) * __ctzdi2: Integer library routines. (line 137) *************** Concept Index *** 50966,50972 **** * __ctzti2: Integer library routines. (line 138) * __divda3: Fixed-point fractional library routines. ! (line 226) * __divdc3: Soft float library routines. (line 250) * __divdf3: Soft float library routines. --- 50966,50972 ---- * __ctzti2: Integer library routines. (line 138) * __divda3: Fixed-point fractional library routines. ! (line 234) * __divdc3: Soft float library routines. (line 250) * __divdf3: Soft float library routines. *************** Concept Index *** 50974,50988 **** * __divdi3: Integer library routines. (line 24) * __divdq3: Fixed-point fractional library routines. ! (line 221) * __divha3: Fixed-point fractional library routines. ! (line 223) * __divhq3: Fixed-point fractional library routines. ! (line 219) * __divqq3: Fixed-point fractional library routines. - (line 217) - * __divsa3: Fixed-point fractional library routines. (line 225) * __divsc3: Soft float library routines. (line 248) * __divsf3: Soft float library routines. --- 50974,50988 ---- * __divdi3: Integer library routines. (line 24) * __divdq3: Fixed-point fractional library routines. ! (line 229) * __divha3: Fixed-point fractional library routines. ! (line 231) * __divhq3: Fixed-point fractional library routines. ! (line 227) * __divqq3: Fixed-point fractional library routines. (line 225) + * __divsa3: Fixed-point fractional library routines. + (line 233) * __divsc3: Soft float library routines. (line 248) * __divsf3: Soft float library routines. *************** Concept Index *** 50990,50998 **** * __divsi3: Integer library routines. (line 23) * __divsq3: Fixed-point fractional library routines. ! (line 220) * __divta3: Fixed-point fractional library routines. ! (line 227) * __divtc3: Soft float library routines. (line 252) * __divtf3: Soft float library routines. --- 50990,50998 ---- * __divsi3: Integer library routines. (line 23) * __divsq3: Fixed-point fractional library routines. ! (line 228) * __divta3: Fixed-point fractional library routines. ! (line 235) * __divtc3: Soft float library routines. (line 252) * __divtf3: Soft float library routines. *************** Concept Index *** 51301,52553 **** * __floatuntixf: Soft float library routines. (line 153) * __fractdadf: Fixed-point fractional library routines. ! (line 635) * __fractdadi: Fixed-point fractional library routines. ! (line 632) * __fractdadq: Fixed-point fractional library routines. ! (line 615) * __fractdaha2: Fixed-point fractional library routines. ! (line 616) * __fractdahi: Fixed-point fractional library routines. ! (line 630) * __fractdahq: Fixed-point fractional library routines. ! (line 613) * __fractdaqi: Fixed-point fractional library routines. ! (line 629) * __fractdaqq: Fixed-point fractional library routines. ! (line 612) * __fractdasa2: Fixed-point fractional library routines. ! (line 617) * __fractdasf: Fixed-point fractional library routines. ! (line 634) * __fractdasi: Fixed-point fractional library routines. ! (line 631) * __fractdasq: Fixed-point fractional library routines. ! (line 614) * __fractdata2: Fixed-point fractional library routines. ! (line 618) * __fractdati: Fixed-point fractional library routines. ! (line 633) * __fractdauda: Fixed-point fractional library routines. ! (line 626) * __fractdaudq: Fixed-point fractional library routines. ! (line 622) * __fractdauha: Fixed-point fractional library routines. ! (line 624) * __fractdauhq: Fixed-point fractional library routines. ! (line 620) * __fractdauqq: Fixed-point fractional library routines. ! (line 619) * __fractdausa: Fixed-point fractional library routines. ! (line 625) * __fractdausq: Fixed-point fractional library routines. ! (line 621) * __fractdauta: Fixed-point fractional library routines. ! (line 627) * __fractdfda: Fixed-point fractional library routines. ! (line 1024) * __fractdfdq: Fixed-point fractional library routines. ! (line 1021) * __fractdfha: Fixed-point fractional library routines. ! (line 1022) * __fractdfhq: Fixed-point fractional library routines. ! (line 1019) * __fractdfqq: Fixed-point fractional library routines. ! (line 1018) * __fractdfsa: Fixed-point fractional library routines. ! (line 1023) * __fractdfsq: Fixed-point fractional library routines. ! (line 1020) * __fractdfta: Fixed-point fractional library routines. ! (line 1025) * __fractdfuda: Fixed-point fractional library routines. ! (line 1032) * __fractdfudq: Fixed-point fractional library routines. ! (line 1029) * __fractdfuha: Fixed-point fractional library routines. ! (line 1030) * __fractdfuhq: Fixed-point fractional library routines. ! (line 1027) * __fractdfuqq: Fixed-point fractional library routines. ! (line 1026) * __fractdfusa: Fixed-point fractional library routines. ! (line 1031) * __fractdfusq: Fixed-point fractional library routines. ! (line 1028) * __fractdfuta: Fixed-point fractional library routines. ! (line 1033) * __fractdida: Fixed-point fractional library routines. ! (line 974) * __fractdidq: Fixed-point fractional library routines. ! (line 971) * __fractdiha: Fixed-point fractional library routines. ! (line 972) * __fractdihq: Fixed-point fractional library routines. ! (line 969) * __fractdiqq: Fixed-point fractional library routines. ! (line 968) * __fractdisa: Fixed-point fractional library routines. ! (line 973) * __fractdisq: Fixed-point fractional library routines. ! (line 970) * __fractdita: Fixed-point fractional library routines. ! (line 975) * __fractdiuda: Fixed-point fractional library routines. ! (line 982) * __fractdiudq: Fixed-point fractional library routines. ! (line 979) * __fractdiuha: Fixed-point fractional library routines. ! (line 980) * __fractdiuhq: Fixed-point fractional library routines. ! (line 977) * __fractdiuqq: Fixed-point fractional library routines. ! (line 976) * __fractdiusa: Fixed-point fractional library routines. ! (line 981) * __fractdiusq: Fixed-point fractional library routines. ! (line 978) * __fractdiuta: Fixed-point fractional library routines. ! (line 983) * __fractdqda: Fixed-point fractional library routines. ! (line 543) * __fractdqdf: Fixed-point fractional library routines. ! (line 565) * __fractdqdi: Fixed-point fractional library routines. ! (line 562) * __fractdqha: Fixed-point fractional library routines. ! (line 541) * __fractdqhi: Fixed-point fractional library routines. ! (line 560) * __fractdqhq2: Fixed-point fractional library routines. ! (line 539) * __fractdqqi: Fixed-point fractional library routines. ! (line 559) * __fractdqqq2: Fixed-point fractional library routines. ! (line 538) * __fractdqsa: Fixed-point fractional library routines. ! (line 542) * __fractdqsf: Fixed-point fractional library routines. ! (line 564) * __fractdqsi: Fixed-point fractional library routines. ! (line 561) * __fractdqsq2: Fixed-point fractional library routines. ! (line 540) * __fractdqta: Fixed-point fractional library routines. ! (line 544) * __fractdqti: Fixed-point fractional library routines. ! (line 563) * __fractdquda: Fixed-point fractional library routines. ! (line 555) * __fractdqudq: Fixed-point fractional library routines. ! (line 550) * __fractdquha: Fixed-point fractional library routines. ! (line 552) * __fractdquhq: Fixed-point fractional library routines. ! (line 547) * __fractdquqq: Fixed-point fractional library routines. ! (line 545) * __fractdqusa: Fixed-point fractional library routines. ! (line 554) * __fractdqusq: Fixed-point fractional library routines. ! (line 548) * __fractdquta: Fixed-point fractional library routines. ! (line 557) * __fracthada2: Fixed-point fractional library routines. ! (line 571) * __fracthadf: Fixed-point fractional library routines. ! (line 589) * __fracthadi: Fixed-point fractional library routines. ! (line 586) * __fracthadq: Fixed-point fractional library routines. ! (line 569) * __fracthahi: Fixed-point fractional library routines. ! (line 584) * __fracthahq: Fixed-point fractional library routines. ! (line 567) * __fracthaqi: Fixed-point fractional library routines. ! (line 583) * __fracthaqq: Fixed-point fractional library routines. ! (line 566) * __fracthasa2: Fixed-point fractional library routines. ! (line 570) * __fracthasf: Fixed-point fractional library routines. ! (line 588) * __fracthasi: Fixed-point fractional library routines. ! (line 585) * __fracthasq: Fixed-point fractional library routines. ! (line 568) * __fracthata2: Fixed-point fractional library routines. ! (line 572) * __fracthati: Fixed-point fractional library routines. ! (line 587) * __fracthauda: Fixed-point fractional library routines. ! (line 580) * __fracthaudq: Fixed-point fractional library routines. ! (line 576) * __fracthauha: Fixed-point fractional library routines. ! (line 578) * __fracthauhq: Fixed-point fractional library routines. ! (line 574) * __fracthauqq: Fixed-point fractional library routines. ! (line 573) * __fracthausa: Fixed-point fractional library routines. ! (line 579) * __fracthausq: Fixed-point fractional library routines. ! (line 575) * __fracthauta: Fixed-point fractional library routines. ! (line 581) * __fracthida: Fixed-point fractional library routines. ! (line 942) * __fracthidq: Fixed-point fractional library routines. ! (line 939) * __fracthiha: Fixed-point fractional library routines. ! (line 940) * __fracthihq: Fixed-point fractional library routines. ! (line 937) * __fracthiqq: Fixed-point fractional library routines. ! (line 936) * __fracthisa: Fixed-point fractional library routines. ! (line 941) * __fracthisq: Fixed-point fractional library routines. ! (line 938) * __fracthita: Fixed-point fractional library routines. ! (line 943) * __fracthiuda: Fixed-point fractional library routines. ! (line 950) * __fracthiudq: Fixed-point fractional library routines. ! (line 947) * __fracthiuha: Fixed-point fractional library routines. ! (line 948) * __fracthiuhq: Fixed-point fractional library routines. ! (line 945) * __fracthiuqq: Fixed-point fractional library routines. ! (line 944) * __fracthiusa: Fixed-point fractional library routines. ! (line 949) * __fracthiusq: Fixed-point fractional library routines. ! (line 946) * __fracthiuta: Fixed-point fractional library routines. ! (line 951) * __fracthqda: Fixed-point fractional library routines. ! (line 497) * __fracthqdf: Fixed-point fractional library routines. ! (line 513) * __fracthqdi: Fixed-point fractional library routines. ! (line 510) * __fracthqdq2: Fixed-point fractional library routines. ! (line 494) * __fracthqha: Fixed-point fractional library routines. ! (line 495) * __fracthqhi: Fixed-point fractional library routines. ! (line 508) * __fracthqqi: Fixed-point fractional library routines. ! (line 507) * __fracthqqq2: Fixed-point fractional library routines. ! (line 492) * __fracthqsa: Fixed-point fractional library routines. ! (line 496) * __fracthqsf: Fixed-point fractional library routines. ! (line 512) * __fracthqsi: Fixed-point fractional library routines. ! (line 509) * __fracthqsq2: Fixed-point fractional library routines. ! (line 493) * __fracthqta: Fixed-point fractional library routines. ! (line 498) * __fracthqti: Fixed-point fractional library routines. ! (line 511) * __fracthquda: Fixed-point fractional library routines. ! (line 505) * __fracthqudq: Fixed-point fractional library routines. ! (line 502) * __fracthquha: Fixed-point fractional library routines. ! (line 503) * __fracthquhq: Fixed-point fractional library routines. ! (line 500) * __fracthquqq: Fixed-point fractional library routines. ! (line 499) * __fracthqusa: Fixed-point fractional library routines. ! (line 504) * __fracthqusq: Fixed-point fractional library routines. ! (line 501) * __fracthquta: Fixed-point fractional library routines. ! (line 506) * __fractqida: Fixed-point fractional library routines. ! (line 924) * __fractqidq: Fixed-point fractional library routines. ! (line 921) * __fractqiha: Fixed-point fractional library routines. ! (line 922) * __fractqihq: Fixed-point fractional library routines. ! (line 919) * __fractqiqq: Fixed-point fractional library routines. ! (line 918) * __fractqisa: Fixed-point fractional library routines. ! (line 923) * __fractqisq: Fixed-point fractional library routines. ! (line 920) * __fractqita: Fixed-point fractional library routines. - (line 925) - * __fractqiuda: Fixed-point fractional library routines. (line 933) * __fractqiudq: Fixed-point fractional library routines. ! (line 929) * __fractqiuha: Fixed-point fractional library routines. ! (line 931) * __fractqiuhq: Fixed-point fractional library routines. ! (line 927) * __fractqiuqq: Fixed-point fractional library routines. ! (line 926) * __fractqiusa: Fixed-point fractional library routines. ! (line 932) * __fractqiusq: Fixed-point fractional library routines. ! (line 928) * __fractqiuta: Fixed-point fractional library routines. ! (line 934) * __fractqqda: Fixed-point fractional library routines. ! (line 473) * __fractqqdf: Fixed-point fractional library routines. ! (line 491) * __fractqqdi: Fixed-point fractional library routines. ! (line 488) * __fractqqdq2: Fixed-point fractional library routines. ! (line 470) * __fractqqha: Fixed-point fractional library routines. ! (line 471) * __fractqqhi: Fixed-point fractional library routines. ! (line 486) * __fractqqhq2: Fixed-point fractional library routines. ! (line 468) * __fractqqqi: Fixed-point fractional library routines. ! (line 485) * __fractqqsa: Fixed-point fractional library routines. ! (line 472) * __fractqqsf: Fixed-point fractional library routines. ! (line 490) * __fractqqsi: Fixed-point fractional library routines. ! (line 487) * __fractqqsq2: Fixed-point fractional library routines. ! (line 469) * __fractqqta: Fixed-point fractional library routines. ! (line 474) * __fractqqti: Fixed-point fractional library routines. ! (line 489) * __fractqquda: Fixed-point fractional library routines. ! (line 482) * __fractqqudq: Fixed-point fractional library routines. ! (line 478) * __fractqquha: Fixed-point fractional library routines. ! (line 480) * __fractqquhq: Fixed-point fractional library routines. ! (line 476) * __fractqquqq: Fixed-point fractional library routines. ! (line 475) * __fractqqusa: Fixed-point fractional library routines. ! (line 481) * __fractqqusq: Fixed-point fractional library routines. ! (line 477) * __fractqquta: Fixed-point fractional library routines. ! (line 483) * __fractsada2: Fixed-point fractional library routines. ! (line 595) * __fractsadf: Fixed-point fractional library routines. ! (line 611) * __fractsadi: Fixed-point fractional library routines. ! (line 608) * __fractsadq: Fixed-point fractional library routines. ! (line 593) * __fractsaha2: Fixed-point fractional library routines. ! (line 594) * __fractsahi: Fixed-point fractional library routines. ! (line 606) * __fractsahq: Fixed-point fractional library routines. ! (line 591) * __fractsaqi: Fixed-point fractional library routines. ! (line 605) * __fractsaqq: Fixed-point fractional library routines. ! (line 590) * __fractsasf: Fixed-point fractional library routines. ! (line 610) * __fractsasi: Fixed-point fractional library routines. ! (line 607) * __fractsasq: Fixed-point fractional library routines. ! (line 592) * __fractsata2: Fixed-point fractional library routines. ! (line 596) * __fractsati: Fixed-point fractional library routines. ! (line 609) * __fractsauda: Fixed-point fractional library routines. ! (line 603) * __fractsaudq: Fixed-point fractional library routines. ! (line 600) * __fractsauha: Fixed-point fractional library routines. ! (line 601) * __fractsauhq: Fixed-point fractional library routines. ! (line 598) * __fractsauqq: Fixed-point fractional library routines. ! (line 597) * __fractsausa: Fixed-point fractional library routines. ! (line 602) * __fractsausq: Fixed-point fractional library routines. ! (line 599) * __fractsauta: Fixed-point fractional library routines. ! (line 604) * __fractsfda: Fixed-point fractional library routines. ! (line 1008) * __fractsfdq: Fixed-point fractional library routines. ! (line 1005) * __fractsfha: Fixed-point fractional library routines. ! (line 1006) * __fractsfhq: Fixed-point fractional library routines. ! (line 1003) * __fractsfqq: Fixed-point fractional library routines. ! (line 1002) * __fractsfsa: Fixed-point fractional library routines. ! (line 1007) * __fractsfsq: Fixed-point fractional library routines. ! (line 1004) * __fractsfta: Fixed-point fractional library routines. ! (line 1009) * __fractsfuda: Fixed-point fractional library routines. ! (line 1016) * __fractsfudq: Fixed-point fractional library routines. ! (line 1013) * __fractsfuha: Fixed-point fractional library routines. ! (line 1014) * __fractsfuhq: Fixed-point fractional library routines. ! (line 1011) * __fractsfuqq: Fixed-point fractional library routines. ! (line 1010) * __fractsfusa: Fixed-point fractional library routines. ! (line 1015) * __fractsfusq: Fixed-point fractional library routines. ! (line 1012) * __fractsfuta: Fixed-point fractional library routines. ! (line 1017) * __fractsida: Fixed-point fractional library routines. ! (line 958) * __fractsidq: Fixed-point fractional library routines. ! (line 955) * __fractsiha: Fixed-point fractional library routines. ! (line 956) * __fractsihq: Fixed-point fractional library routines. ! (line 953) * __fractsiqq: Fixed-point fractional library routines. ! (line 952) * __fractsisa: Fixed-point fractional library routines. ! (line 957) * __fractsisq: Fixed-point fractional library routines. ! (line 954) * __fractsita: Fixed-point fractional library routines. ! (line 959) * __fractsiuda: Fixed-point fractional library routines. ! (line 966) * __fractsiudq: Fixed-point fractional library routines. ! (line 963) * __fractsiuha: Fixed-point fractional library routines. ! (line 964) * __fractsiuhq: Fixed-point fractional library routines. ! (line 961) * __fractsiuqq: Fixed-point fractional library routines. ! (line 960) * __fractsiusa: Fixed-point fractional library routines. ! (line 965) * __fractsiusq: Fixed-point fractional library routines. ! (line 962) * __fractsiuta: Fixed-point fractional library routines. ! (line 967) * __fractsqda: Fixed-point fractional library routines. ! (line 519) * __fractsqdf: Fixed-point fractional library routines. ! (line 537) * __fractsqdi: Fixed-point fractional library routines. ! (line 534) * __fractsqdq2: Fixed-point fractional library routines. ! (line 516) * __fractsqha: Fixed-point fractional library routines. ! (line 517) * __fractsqhi: Fixed-point fractional library routines. ! (line 532) * __fractsqhq2: Fixed-point fractional library routines. ! (line 515) * __fractsqqi: Fixed-point fractional library routines. ! (line 531) * __fractsqqq2: Fixed-point fractional library routines. ! (line 514) * __fractsqsa: Fixed-point fractional library routines. ! (line 518) * __fractsqsf: Fixed-point fractional library routines. ! (line 536) * __fractsqsi: Fixed-point fractional library routines. ! (line 533) * __fractsqta: Fixed-point fractional library routines. ! (line 520) * __fractsqti: Fixed-point fractional library routines. ! (line 535) * __fractsquda: Fixed-point fractional library routines. ! (line 528) * __fractsqudq: Fixed-point fractional library routines. ! (line 524) * __fractsquha: Fixed-point fractional library routines. ! (line 526) * __fractsquhq: Fixed-point fractional library routines. ! (line 522) * __fractsquqq: Fixed-point fractional library routines. ! (line 521) * __fractsqusa: Fixed-point fractional library routines. ! (line 527) * __fractsqusq: Fixed-point fractional library routines. ! (line 523) * __fractsquta: Fixed-point fractional library routines. ! (line 529) * __fracttada2: Fixed-point fractional library routines. ! (line 642) * __fracttadf: Fixed-point fractional library routines. ! (line 663) * __fracttadi: Fixed-point fractional library routines. ! (line 660) * __fracttadq: Fixed-point fractional library routines. ! (line 639) * __fracttaha2: Fixed-point fractional library routines. ! (line 640) * __fracttahi: Fixed-point fractional library routines. ! (line 658) * __fracttahq: Fixed-point fractional library routines. ! (line 637) * __fracttaqi: Fixed-point fractional library routines. ! (line 657) * __fracttaqq: Fixed-point fractional library routines. ! (line 636) * __fracttasa2: Fixed-point fractional library routines. ! (line 641) * __fracttasf: Fixed-point fractional library routines. ! (line 662) * __fracttasi: Fixed-point fractional library routines. ! (line 659) * __fracttasq: Fixed-point fractional library routines. ! (line 638) * __fracttati: Fixed-point fractional library routines. ! (line 661) * __fracttauda: Fixed-point fractional library routines. ! (line 653) * __fracttaudq: Fixed-point fractional library routines. ! (line 648) * __fracttauha: Fixed-point fractional library routines. ! (line 650) * __fracttauhq: Fixed-point fractional library routines. ! (line 645) * __fracttauqq: Fixed-point fractional library routines. ! (line 643) * __fracttausa: Fixed-point fractional library routines. ! (line 652) * __fracttausq: Fixed-point fractional library routines. ! (line 646) * __fracttauta: Fixed-point fractional library routines. ! (line 655) * __fracttida: Fixed-point fractional library routines. ! (line 990) * __fracttidq: Fixed-point fractional library routines. ! (line 987) * __fracttiha: Fixed-point fractional library routines. ! (line 988) * __fracttihq: Fixed-point fractional library routines. ! (line 985) * __fracttiqq: Fixed-point fractional library routines. ! (line 984) * __fracttisa: Fixed-point fractional library routines. ! (line 989) * __fracttisq: Fixed-point fractional library routines. ! (line 986) * __fracttita: Fixed-point fractional library routines. - (line 991) - * __fracttiuda: Fixed-point fractional library routines. (line 999) * __fracttiudq: Fixed-point fractional library routines. ! (line 995) * __fracttiuha: Fixed-point fractional library routines. ! (line 997) * __fracttiuhq: Fixed-point fractional library routines. ! (line 993) * __fracttiuqq: Fixed-point fractional library routines. ! (line 992) * __fracttiusa: Fixed-point fractional library routines. ! (line 998) * __fracttiusq: Fixed-point fractional library routines. ! (line 994) * __fracttiuta: Fixed-point fractional library routines. ! (line 1000) * __fractudada: Fixed-point fractional library routines. ! (line 857) * __fractudadf: Fixed-point fractional library routines. ! (line 880) * __fractudadi: Fixed-point fractional library routines. ! (line 877) * __fractudadq: Fixed-point fractional library routines. ! (line 853) * __fractudaha: Fixed-point fractional library routines. ! (line 855) * __fractudahi: Fixed-point fractional library routines. ! (line 875) * __fractudahq: Fixed-point fractional library routines. ! (line 851) * __fractudaqi: Fixed-point fractional library routines. ! (line 874) * __fractudaqq: Fixed-point fractional library routines. ! (line 850) * __fractudasa: Fixed-point fractional library routines. ! (line 856) * __fractudasf: Fixed-point fractional library routines. ! (line 879) * __fractudasi: Fixed-point fractional library routines. ! (line 876) * __fractudasq: Fixed-point fractional library routines. ! (line 852) * __fractudata: Fixed-point fractional library routines. ! (line 858) * __fractudati: Fixed-point fractional library routines. ! (line 878) * __fractudaudq: Fixed-point fractional library routines. ! (line 866) * __fractudauha2: Fixed-point fractional library routines. ! (line 868) * __fractudauhq: Fixed-point fractional library routines. ! (line 862) * __fractudauqq: Fixed-point fractional library routines. ! (line 860) * __fractudausa2: Fixed-point fractional library routines. ! (line 870) * __fractudausq: Fixed-point fractional library routines. - (line 864) - * __fractudauta2: Fixed-point fractional library routines. (line 872) * __fractudqda: Fixed-point fractional library routines. ! (line 764) * __fractudqdf: Fixed-point fractional library routines. ! (line 790) * __fractudqdi: Fixed-point fractional library routines. ! (line 786) * __fractudqdq: Fixed-point fractional library routines. ! (line 759) * __fractudqha: Fixed-point fractional library routines. ! (line 761) * __fractudqhi: Fixed-point fractional library routines. ! (line 784) * __fractudqhq: Fixed-point fractional library routines. ! (line 756) * __fractudqqi: Fixed-point fractional library routines. ! (line 782) * __fractudqqq: Fixed-point fractional library routines. ! (line 754) * __fractudqsa: Fixed-point fractional library routines. ! (line 763) * __fractudqsf: Fixed-point fractional library routines. ! (line 789) * __fractudqsi: Fixed-point fractional library routines. ! (line 785) * __fractudqsq: Fixed-point fractional library routines. ! (line 757) * __fractudqta: Fixed-point fractional library routines. ! (line 766) * __fractudqti: Fixed-point fractional library routines. ! (line 787) * __fractudquda: Fixed-point fractional library routines. ! (line 778) * __fractudquha: Fixed-point fractional library routines. ! (line 774) * __fractudquhq2: Fixed-point fractional library routines. ! (line 770) * __fractudquqq2: Fixed-point fractional library routines. - (line 768) - * __fractudqusa: Fixed-point fractional library routines. (line 776) * __fractudqusq2: Fixed-point fractional library routines. - (line 772) - * __fractudquta: Fixed-point fractional library routines. (line 780) * __fractuhada: Fixed-point fractional library routines. ! (line 798) * __fractuhadf: Fixed-point fractional library routines. ! (line 821) * __fractuhadi: Fixed-point fractional library routines. ! (line 818) * __fractuhadq: Fixed-point fractional library routines. ! (line 794) * __fractuhaha: Fixed-point fractional library routines. ! (line 796) * __fractuhahi: Fixed-point fractional library routines. ! (line 816) * __fractuhahq: Fixed-point fractional library routines. ! (line 792) * __fractuhaqi: Fixed-point fractional library routines. ! (line 815) * __fractuhaqq: Fixed-point fractional library routines. ! (line 791) * __fractuhasa: Fixed-point fractional library routines. ! (line 797) * __fractuhasf: Fixed-point fractional library routines. ! (line 820) * __fractuhasi: Fixed-point fractional library routines. ! (line 817) * __fractuhasq: Fixed-point fractional library routines. ! (line 793) * __fractuhata: Fixed-point fractional library routines. ! (line 799) * __fractuhati: Fixed-point fractional library routines. ! (line 819) * __fractuhauda2: Fixed-point fractional library routines. ! (line 811) * __fractuhaudq: Fixed-point fractional library routines. ! (line 807) * __fractuhauhq: Fixed-point fractional library routines. ! (line 803) * __fractuhauqq: Fixed-point fractional library routines. - (line 801) - * __fractuhausa2: Fixed-point fractional library routines. (line 809) * __fractuhausq: Fixed-point fractional library routines. - (line 805) - * __fractuhauta2: Fixed-point fractional library routines. (line 813) * __fractuhqda: Fixed-point fractional library routines. ! (line 701) * __fractuhqdf: Fixed-point fractional library routines. ! (line 722) * __fractuhqdi: Fixed-point fractional library routines. ! (line 719) * __fractuhqdq: Fixed-point fractional library routines. ! (line 698) * __fractuhqha: Fixed-point fractional library routines. ! (line 699) * __fractuhqhi: Fixed-point fractional library routines. ! (line 717) * __fractuhqhq: Fixed-point fractional library routines. ! (line 696) * __fractuhqqi: Fixed-point fractional library routines. ! (line 716) * __fractuhqqq: Fixed-point fractional library routines. ! (line 695) * __fractuhqsa: Fixed-point fractional library routines. ! (line 700) * __fractuhqsf: Fixed-point fractional library routines. ! (line 721) * __fractuhqsi: Fixed-point fractional library routines. ! (line 718) * __fractuhqsq: Fixed-point fractional library routines. ! (line 697) * __fractuhqta: Fixed-point fractional library routines. ! (line 702) * __fractuhqti: Fixed-point fractional library routines. ! (line 720) * __fractuhquda: Fixed-point fractional library routines. ! (line 712) * __fractuhqudq2: Fixed-point fractional library routines. ! (line 707) * __fractuhquha: Fixed-point fractional library routines. ! (line 709) * __fractuhquqq2: Fixed-point fractional library routines. - (line 703) - * __fractuhqusa: Fixed-point fractional library routines. (line 711) * __fractuhqusq2: Fixed-point fractional library routines. ! (line 705) * __fractuhquta: Fixed-point fractional library routines. ! (line 714) * __fractunsdadi: Fixed-point fractional library routines. ! (line 1554) * __fractunsdahi: Fixed-point fractional library routines. ! (line 1552) * __fractunsdaqi: Fixed-point fractional library routines. ! (line 1551) * __fractunsdasi: Fixed-point fractional library routines. ! (line 1553) * __fractunsdati: Fixed-point fractional library routines. ! (line 1555) * __fractunsdida: Fixed-point fractional library routines. ! (line 1706) * __fractunsdidq: Fixed-point fractional library routines. ! (line 1703) * __fractunsdiha: Fixed-point fractional library routines. ! (line 1704) * __fractunsdihq: Fixed-point fractional library routines. ! (line 1701) * __fractunsdiqq: Fixed-point fractional library routines. ! (line 1700) * __fractunsdisa: Fixed-point fractional library routines. ! (line 1705) * __fractunsdisq: Fixed-point fractional library routines. ! (line 1702) * __fractunsdita: Fixed-point fractional library routines. ! (line 1707) * __fractunsdiuda: Fixed-point fractional library routines. ! (line 1718) * __fractunsdiudq: Fixed-point fractional library routines. ! (line 1713) * __fractunsdiuha: Fixed-point fractional library routines. ! (line 1715) * __fractunsdiuhq: Fixed-point fractional library routines. ! (line 1710) * __fractunsdiuqq: Fixed-point fractional library routines. ! (line 1708) * __fractunsdiusa: Fixed-point fractional library routines. ! (line 1717) * __fractunsdiusq: Fixed-point fractional library routines. ! (line 1711) * __fractunsdiuta: Fixed-point fractional library routines. ! (line 1720) * __fractunsdqdi: Fixed-point fractional library routines. ! (line 1538) * __fractunsdqhi: Fixed-point fractional library routines. ! (line 1536) * __fractunsdqqi: Fixed-point fractional library routines. ! (line 1535) * __fractunsdqsi: Fixed-point fractional library routines. ! (line 1537) * __fractunsdqti: Fixed-point fractional library routines. ! (line 1539) * __fractunshadi: Fixed-point fractional library routines. ! (line 1544) * __fractunshahi: Fixed-point fractional library routines. ! (line 1542) * __fractunshaqi: Fixed-point fractional library routines. ! (line 1541) * __fractunshasi: Fixed-point fractional library routines. ! (line 1543) * __fractunshati: Fixed-point fractional library routines. ! (line 1545) * __fractunshida: Fixed-point fractional library routines. ! (line 1662) * __fractunshidq: Fixed-point fractional library routines. ! (line 1659) * __fractunshiha: Fixed-point fractional library routines. ! (line 1660) * __fractunshihq: Fixed-point fractional library routines. ! (line 1657) * __fractunshiqq: Fixed-point fractional library routines. ! (line 1656) * __fractunshisa: Fixed-point fractional library routines. ! (line 1661) * __fractunshisq: Fixed-point fractional library routines. ! (line 1658) * __fractunshita: Fixed-point fractional library routines. ! (line 1663) * __fractunshiuda: Fixed-point fractional library routines. ! (line 1674) * __fractunshiudq: Fixed-point fractional library routines. ! (line 1669) * __fractunshiuha: Fixed-point fractional library routines. ! (line 1671) * __fractunshiuhq: Fixed-point fractional library routines. ! (line 1666) * __fractunshiuqq: Fixed-point fractional library routines. ! (line 1664) * __fractunshiusa: Fixed-point fractional library routines. ! (line 1673) * __fractunshiusq: Fixed-point fractional library routines. ! (line 1667) * __fractunshiuta: Fixed-point fractional library routines. ! (line 1676) * __fractunshqdi: Fixed-point fractional library routines. ! (line 1528) * __fractunshqhi: Fixed-point fractional library routines. ! (line 1526) * __fractunshqqi: Fixed-point fractional library routines. ! (line 1525) * __fractunshqsi: Fixed-point fractional library routines. ! (line 1527) * __fractunshqti: Fixed-point fractional library routines. ! (line 1529) * __fractunsqida: Fixed-point fractional library routines. ! (line 1640) * __fractunsqidq: Fixed-point fractional library routines. ! (line 1637) * __fractunsqiha: Fixed-point fractional library routines. ! (line 1638) * __fractunsqihq: Fixed-point fractional library routines. ! (line 1635) * __fractunsqiqq: Fixed-point fractional library routines. ! (line 1634) * __fractunsqisa: Fixed-point fractional library routines. ! (line 1639) * __fractunsqisq: Fixed-point fractional library routines. ! (line 1636) * __fractunsqita: Fixed-point fractional library routines. ! (line 1641) * __fractunsqiuda: Fixed-point fractional library routines. ! (line 1652) * __fractunsqiudq: Fixed-point fractional library routines. ! (line 1647) * __fractunsqiuha: Fixed-point fractional library routines. ! (line 1649) * __fractunsqiuhq: Fixed-point fractional library routines. ! (line 1644) * __fractunsqiuqq: Fixed-point fractional library routines. ! (line 1642) * __fractunsqiusa: Fixed-point fractional library routines. ! (line 1651) * __fractunsqiusq: Fixed-point fractional library routines. ! (line 1645) * __fractunsqiuta: Fixed-point fractional library routines. ! (line 1654) * __fractunsqqdi: Fixed-point fractional library routines. ! (line 1523) * __fractunsqqhi: Fixed-point fractional library routines. ! (line 1521) * __fractunsqqqi: Fixed-point fractional library routines. ! (line 1520) * __fractunsqqsi: Fixed-point fractional library routines. ! (line 1522) * __fractunsqqti: Fixed-point fractional library routines. ! (line 1524) * __fractunssadi: Fixed-point fractional library routines. ! (line 1549) * __fractunssahi: Fixed-point fractional library routines. ! (line 1547) * __fractunssaqi: Fixed-point fractional library routines. ! (line 1546) * __fractunssasi: Fixed-point fractional library routines. ! (line 1548) * __fractunssati: Fixed-point fractional library routines. ! (line 1550) * __fractunssida: Fixed-point fractional library routines. ! (line 1684) * __fractunssidq: Fixed-point fractional library routines. ! (line 1681) * __fractunssiha: Fixed-point fractional library routines. ! (line 1682) * __fractunssihq: Fixed-point fractional library routines. ! (line 1679) * __fractunssiqq: Fixed-point fractional library routines. ! (line 1678) * __fractunssisa: Fixed-point fractional library routines. ! (line 1683) * __fractunssisq: Fixed-point fractional library routines. ! (line 1680) * __fractunssita: Fixed-point fractional library routines. ! (line 1685) * __fractunssiuda: Fixed-point fractional library routines. ! (line 1696) * __fractunssiudq: Fixed-point fractional library routines. ! (line 1691) * __fractunssiuha: Fixed-point fractional library routines. ! (line 1693) * __fractunssiuhq: Fixed-point fractional library routines. ! (line 1688) * __fractunssiuqq: Fixed-point fractional library routines. ! (line 1686) * __fractunssiusa: Fixed-point fractional library routines. ! (line 1695) * __fractunssiusq: Fixed-point fractional library routines. ! (line 1689) * __fractunssiuta: Fixed-point fractional library routines. ! (line 1698) * __fractunssqdi: Fixed-point fractional library routines. ! (line 1533) * __fractunssqhi: Fixed-point fractional library routines. ! (line 1531) * __fractunssqqi: Fixed-point fractional library routines. ! (line 1530) * __fractunssqsi: Fixed-point fractional library routines. ! (line 1532) * __fractunssqti: Fixed-point fractional library routines. ! (line 1534) * __fractunstadi: Fixed-point fractional library routines. ! (line 1559) * __fractunstahi: Fixed-point fractional library routines. ! (line 1557) * __fractunstaqi: Fixed-point fractional library routines. ! (line 1556) * __fractunstasi: Fixed-point fractional library routines. ! (line 1558) * __fractunstati: Fixed-point fractional library routines. ! (line 1560) * __fractunstida: Fixed-point fractional library routines. ! (line 1729) * __fractunstidq: Fixed-point fractional library routines. ! (line 1725) * __fractunstiha: Fixed-point fractional library routines. ! (line 1727) * __fractunstihq: Fixed-point fractional library routines. ! (line 1723) * __fractunstiqq: Fixed-point fractional library routines. ! (line 1722) * __fractunstisa: Fixed-point fractional library routines. ! (line 1728) * __fractunstisq: Fixed-point fractional library routines. ! (line 1724) * __fractunstita: Fixed-point fractional library routines. ! (line 1730) * __fractunstiuda: Fixed-point fractional library routines. ! (line 1744) * __fractunstiudq: Fixed-point fractional library routines. ! (line 1738) * __fractunstiuha: Fixed-point fractional library routines. ! (line 1740) * __fractunstiuhq: Fixed-point fractional library routines. ! (line 1734) * __fractunstiuqq: Fixed-point fractional library routines. ! (line 1732) * __fractunstiusa: Fixed-point fractional library routines. ! (line 1742) * __fractunstiusq: Fixed-point fractional library routines. ! (line 1736) * __fractunstiuta: Fixed-point fractional library routines. ! (line 1746) * __fractunsudadi: Fixed-point fractional library routines. ! (line 1620) * __fractunsudahi: Fixed-point fractional library routines. ! (line 1616) * __fractunsudaqi: Fixed-point fractional library routines. ! (line 1614) * __fractunsudasi: Fixed-point fractional library routines. ! (line 1618) * __fractunsudati: Fixed-point fractional library routines. ! (line 1622) * __fractunsudqdi: Fixed-point fractional library routines. ! (line 1594) * __fractunsudqhi: Fixed-point fractional library routines. ! (line 1590) * __fractunsudqqi: Fixed-point fractional library routines. ! (line 1588) * __fractunsudqsi: Fixed-point fractional library routines. ! (line 1592) * __fractunsudqti: Fixed-point fractional library routines. - (line 1596) - * __fractunsuhadi: Fixed-point fractional library routines. (line 1604) * __fractunsuhahi: Fixed-point fractional library routines. ! (line 1600) * __fractunsuhaqi: Fixed-point fractional library routines. ! (line 1598) * __fractunsuhasi: Fixed-point fractional library routines. ! (line 1602) * __fractunsuhati: Fixed-point fractional library routines. ! (line 1606) * __fractunsuhqdi: Fixed-point fractional library routines. ! (line 1575) * __fractunsuhqhi: Fixed-point fractional library routines. ! (line 1573) * __fractunsuhqqi: Fixed-point fractional library routines. ! (line 1572) * __fractunsuhqsi: Fixed-point fractional library routines. ! (line 1574) * __fractunsuhqti: Fixed-point fractional library routines. ! (line 1576) * __fractunsuqqdi: Fixed-point fractional library routines. ! (line 1568) * __fractunsuqqhi: Fixed-point fractional library routines. ! (line 1564) * __fractunsuqqqi: Fixed-point fractional library routines. ! (line 1562) * __fractunsuqqsi: Fixed-point fractional library routines. ! (line 1566) * __fractunsuqqti: Fixed-point fractional library routines. ! (line 1570) * __fractunsusadi: Fixed-point fractional library routines. ! (line 1611) * __fractunsusahi: Fixed-point fractional library routines. ! (line 1609) * __fractunsusaqi: Fixed-point fractional library routines. ! (line 1608) * __fractunsusasi: Fixed-point fractional library routines. ! (line 1610) * __fractunsusati: Fixed-point fractional library routines. ! (line 1612) * __fractunsusqdi: Fixed-point fractional library routines. ! (line 1584) * __fractunsusqhi: Fixed-point fractional library routines. ! (line 1580) * __fractunsusqqi: Fixed-point fractional library routines. ! (line 1578) * __fractunsusqsi: Fixed-point fractional library routines. ! (line 1582) * __fractunsusqti: Fixed-point fractional library routines. ! (line 1586) * __fractunsutadi: Fixed-point fractional library routines. ! (line 1630) * __fractunsutahi: Fixed-point fractional library routines. ! (line 1626) * __fractunsutaqi: Fixed-point fractional library routines. ! (line 1624) * __fractunsutasi: Fixed-point fractional library routines. ! (line 1628) * __fractunsutati: Fixed-point fractional library routines. ! (line 1632) * __fractuqqda: Fixed-point fractional library routines. ! (line 671) * __fractuqqdf: Fixed-point fractional library routines. ! (line 694) * __fractuqqdi: Fixed-point fractional library routines. ! (line 691) * __fractuqqdq: Fixed-point fractional library routines. ! (line 667) * __fractuqqha: Fixed-point fractional library routines. ! (line 669) * __fractuqqhi: Fixed-point fractional library routines. ! (line 689) * __fractuqqhq: Fixed-point fractional library routines. ! (line 665) * __fractuqqqi: Fixed-point fractional library routines. ! (line 688) * __fractuqqqq: Fixed-point fractional library routines. ! (line 664) * __fractuqqsa: Fixed-point fractional library routines. ! (line 670) * __fractuqqsf: Fixed-point fractional library routines. ! (line 693) * __fractuqqsi: Fixed-point fractional library routines. ! (line 690) * __fractuqqsq: Fixed-point fractional library routines. ! (line 666) * __fractuqqta: Fixed-point fractional library routines. ! (line 672) * __fractuqqti: Fixed-point fractional library routines. ! (line 692) * __fractuqquda: Fixed-point fractional library routines. ! (line 684) * __fractuqqudq2: Fixed-point fractional library routines. ! (line 678) * __fractuqquha: Fixed-point fractional library routines. ! (line 680) * __fractuqquhq2: Fixed-point fractional library routines. - (line 674) - * __fractuqqusa: Fixed-point fractional library routines. (line 682) * __fractuqqusq2: Fixed-point fractional library routines. ! (line 676) * __fractuqquta: Fixed-point fractional library routines. ! (line 686) * __fractusada: Fixed-point fractional library routines. ! (line 828) * __fractusadf: Fixed-point fractional library routines. ! (line 849) * __fractusadi: Fixed-point fractional library routines. ! (line 846) * __fractusadq: Fixed-point fractional library routines. ! (line 825) * __fractusaha: Fixed-point fractional library routines. ! (line 826) * __fractusahi: Fixed-point fractional library routines. ! (line 844) * __fractusahq: Fixed-point fractional library routines. ! (line 823) * __fractusaqi: Fixed-point fractional library routines. ! (line 843) * __fractusaqq: Fixed-point fractional library routines. ! (line 822) * __fractusasa: Fixed-point fractional library routines. ! (line 827) * __fractusasf: Fixed-point fractional library routines. ! (line 848) * __fractusasi: Fixed-point fractional library routines. ! (line 845) * __fractusasq: Fixed-point fractional library routines. ! (line 824) * __fractusata: Fixed-point fractional library routines. ! (line 829) * __fractusati: Fixed-point fractional library routines. ! (line 847) * __fractusauda2: Fixed-point fractional library routines. ! (line 839) * __fractusaudq: Fixed-point fractional library routines. ! (line 835) * __fractusauha2: Fixed-point fractional library routines. ! (line 837) * __fractusauhq: Fixed-point fractional library routines. ! (line 832) * __fractusauqq: Fixed-point fractional library routines. ! (line 830) * __fractusausq: Fixed-point fractional library routines. - (line 833) - * __fractusauta2: Fixed-point fractional library routines. (line 841) * __fractusqda: Fixed-point fractional library routines. ! (line 730) * __fractusqdf: Fixed-point fractional library routines. ! (line 753) * __fractusqdi: Fixed-point fractional library routines. ! (line 750) * __fractusqdq: Fixed-point fractional library routines. ! (line 726) * __fractusqha: Fixed-point fractional library routines. ! (line 728) * __fractusqhi: Fixed-point fractional library routines. ! (line 748) * __fractusqhq: Fixed-point fractional library routines. ! (line 724) * __fractusqqi: Fixed-point fractional library routines. ! (line 747) * __fractusqqq: Fixed-point fractional library routines. ! (line 723) * __fractusqsa: Fixed-point fractional library routines. ! (line 729) * __fractusqsf: Fixed-point fractional library routines. ! (line 752) * __fractusqsi: Fixed-point fractional library routines. ! (line 749) * __fractusqsq: Fixed-point fractional library routines. ! (line 725) * __fractusqta: Fixed-point fractional library routines. ! (line 731) * __fractusqti: Fixed-point fractional library routines. ! (line 751) * __fractusquda: Fixed-point fractional library routines. ! (line 743) * __fractusqudq2: Fixed-point fractional library routines. ! (line 737) * __fractusquha: Fixed-point fractional library routines. ! (line 739) * __fractusquhq2: Fixed-point fractional library routines. ! (line 735) * __fractusquqq2: Fixed-point fractional library routines. - (line 733) - * __fractusqusa: Fixed-point fractional library routines. (line 741) * __fractusquta: Fixed-point fractional library routines. ! (line 745) * __fractutada: Fixed-point fractional library routines. ! (line 891) * __fractutadf: Fixed-point fractional library routines. ! (line 917) * __fractutadi: Fixed-point fractional library routines. ! (line 913) * __fractutadq: Fixed-point fractional library routines. ! (line 886) * __fractutaha: Fixed-point fractional library routines. ! (line 888) * __fractutahi: Fixed-point fractional library routines. ! (line 911) * __fractutahq: Fixed-point fractional library routines. ! (line 883) * __fractutaqi: Fixed-point fractional library routines. ! (line 909) * __fractutaqq: Fixed-point fractional library routines. ! (line 881) * __fractutasa: Fixed-point fractional library routines. ! (line 890) * __fractutasf: Fixed-point fractional library routines. ! (line 916) * __fractutasi: Fixed-point fractional library routines. ! (line 912) * __fractutasq: Fixed-point fractional library routines. ! (line 884) * __fractutata: Fixed-point fractional library routines. ! (line 893) * __fractutati: Fixed-point fractional library routines. ! (line 914) * __fractutauda2: Fixed-point fractional library routines. ! (line 907) * __fractutaudq: Fixed-point fractional library routines. ! (line 901) * __fractutauha2: Fixed-point fractional library routines. ! (line 903) * __fractutauhq: Fixed-point fractional library routines. ! (line 897) * __fractutauqq: Fixed-point fractional library routines. ! (line 895) * __fractutausa2: Fixed-point fractional library routines. ! (line 905) * __fractutausq: Fixed-point fractional library routines. ! (line 899) * __gedf2: Soft float library routines. (line 205) * __gesf2: Soft float library routines. --- 51301,52553 ---- * __floatuntixf: Soft float library routines. (line 153) * __fractdadf: Fixed-point fractional library routines. ! (line 643) * __fractdadi: Fixed-point fractional library routines. ! (line 640) * __fractdadq: Fixed-point fractional library routines. ! (line 623) * __fractdaha2: Fixed-point fractional library routines. ! (line 624) * __fractdahi: Fixed-point fractional library routines. ! (line 638) * __fractdahq: Fixed-point fractional library routines. ! (line 621) * __fractdaqi: Fixed-point fractional library routines. ! (line 637) * __fractdaqq: Fixed-point fractional library routines. ! (line 620) * __fractdasa2: Fixed-point fractional library routines. ! (line 625) * __fractdasf: Fixed-point fractional library routines. ! (line 642) * __fractdasi: Fixed-point fractional library routines. ! (line 639) * __fractdasq: Fixed-point fractional library routines. ! (line 622) * __fractdata2: Fixed-point fractional library routines. ! (line 626) * __fractdati: Fixed-point fractional library routines. ! (line 641) * __fractdauda: Fixed-point fractional library routines. ! (line 634) * __fractdaudq: Fixed-point fractional library routines. ! (line 630) * __fractdauha: Fixed-point fractional library routines. ! (line 632) * __fractdauhq: Fixed-point fractional library routines. ! (line 628) * __fractdauqq: Fixed-point fractional library routines. ! (line 627) * __fractdausa: Fixed-point fractional library routines. ! (line 633) * __fractdausq: Fixed-point fractional library routines. ! (line 629) * __fractdauta: Fixed-point fractional library routines. ! (line 635) * __fractdfda: Fixed-point fractional library routines. ! (line 1032) * __fractdfdq: Fixed-point fractional library routines. ! (line 1029) * __fractdfha: Fixed-point fractional library routines. ! (line 1030) * __fractdfhq: Fixed-point fractional library routines. ! (line 1027) * __fractdfqq: Fixed-point fractional library routines. ! (line 1026) * __fractdfsa: Fixed-point fractional library routines. ! (line 1031) * __fractdfsq: Fixed-point fractional library routines. ! (line 1028) * __fractdfta: Fixed-point fractional library routines. ! (line 1033) * __fractdfuda: Fixed-point fractional library routines. ! (line 1040) * __fractdfudq: Fixed-point fractional library routines. ! (line 1037) * __fractdfuha: Fixed-point fractional library routines. ! (line 1038) * __fractdfuhq: Fixed-point fractional library routines. ! (line 1035) * __fractdfuqq: Fixed-point fractional library routines. ! (line 1034) * __fractdfusa: Fixed-point fractional library routines. ! (line 1039) * __fractdfusq: Fixed-point fractional library routines. ! (line 1036) * __fractdfuta: Fixed-point fractional library routines. ! (line 1041) * __fractdida: Fixed-point fractional library routines. ! (line 982) * __fractdidq: Fixed-point fractional library routines. ! (line 979) * __fractdiha: Fixed-point fractional library routines. ! (line 980) * __fractdihq: Fixed-point fractional library routines. ! (line 977) * __fractdiqq: Fixed-point fractional library routines. ! (line 976) * __fractdisa: Fixed-point fractional library routines. ! (line 981) * __fractdisq: Fixed-point fractional library routines. ! (line 978) * __fractdita: Fixed-point fractional library routines. ! (line 983) * __fractdiuda: Fixed-point fractional library routines. ! (line 990) * __fractdiudq: Fixed-point fractional library routines. ! (line 987) * __fractdiuha: Fixed-point fractional library routines. ! (line 988) * __fractdiuhq: Fixed-point fractional library routines. ! (line 985) * __fractdiuqq: Fixed-point fractional library routines. ! (line 984) * __fractdiusa: Fixed-point fractional library routines. ! (line 989) * __fractdiusq: Fixed-point fractional library routines. ! (line 986) * __fractdiuta: Fixed-point fractional library routines. ! (line 991) * __fractdqda: Fixed-point fractional library routines. ! (line 551) * __fractdqdf: Fixed-point fractional library routines. ! (line 573) * __fractdqdi: Fixed-point fractional library routines. ! (line 570) * __fractdqha: Fixed-point fractional library routines. ! (line 549) * __fractdqhi: Fixed-point fractional library routines. ! (line 568) * __fractdqhq2: Fixed-point fractional library routines. ! (line 547) * __fractdqqi: Fixed-point fractional library routines. ! (line 567) * __fractdqqq2: Fixed-point fractional library routines. ! (line 546) * __fractdqsa: Fixed-point fractional library routines. ! (line 550) * __fractdqsf: Fixed-point fractional library routines. ! (line 572) * __fractdqsi: Fixed-point fractional library routines. ! (line 569) * __fractdqsq2: Fixed-point fractional library routines. ! (line 548) * __fractdqta: Fixed-point fractional library routines. ! (line 552) * __fractdqti: Fixed-point fractional library routines. ! (line 571) * __fractdquda: Fixed-point fractional library routines. ! (line 563) * __fractdqudq: Fixed-point fractional library routines. ! (line 558) * __fractdquha: Fixed-point fractional library routines. ! (line 560) * __fractdquhq: Fixed-point fractional library routines. ! (line 555) * __fractdquqq: Fixed-point fractional library routines. ! (line 553) * __fractdqusa: Fixed-point fractional library routines. ! (line 562) * __fractdqusq: Fixed-point fractional library routines. ! (line 556) * __fractdquta: Fixed-point fractional library routines. ! (line 565) * __fracthada2: Fixed-point fractional library routines. ! (line 579) * __fracthadf: Fixed-point fractional library routines. ! (line 597) * __fracthadi: Fixed-point fractional library routines. ! (line 594) * __fracthadq: Fixed-point fractional library routines. ! (line 577) * __fracthahi: Fixed-point fractional library routines. ! (line 592) * __fracthahq: Fixed-point fractional library routines. ! (line 575) * __fracthaqi: Fixed-point fractional library routines. ! (line 591) * __fracthaqq: Fixed-point fractional library routines. ! (line 574) * __fracthasa2: Fixed-point fractional library routines. ! (line 578) * __fracthasf: Fixed-point fractional library routines. ! (line 596) * __fracthasi: Fixed-point fractional library routines. ! (line 593) * __fracthasq: Fixed-point fractional library routines. ! (line 576) * __fracthata2: Fixed-point fractional library routines. ! (line 580) * __fracthati: Fixed-point fractional library routines. ! (line 595) * __fracthauda: Fixed-point fractional library routines. ! (line 588) * __fracthaudq: Fixed-point fractional library routines. ! (line 584) * __fracthauha: Fixed-point fractional library routines. ! (line 586) * __fracthauhq: Fixed-point fractional library routines. ! (line 582) * __fracthauqq: Fixed-point fractional library routines. ! (line 581) * __fracthausa: Fixed-point fractional library routines. ! (line 587) * __fracthausq: Fixed-point fractional library routines. ! (line 583) * __fracthauta: Fixed-point fractional library routines. ! (line 589) * __fracthida: Fixed-point fractional library routines. ! (line 950) * __fracthidq: Fixed-point fractional library routines. ! (line 947) * __fracthiha: Fixed-point fractional library routines. ! (line 948) * __fracthihq: Fixed-point fractional library routines. ! (line 945) * __fracthiqq: Fixed-point fractional library routines. ! (line 944) * __fracthisa: Fixed-point fractional library routines. ! (line 949) * __fracthisq: Fixed-point fractional library routines. ! (line 946) * __fracthita: Fixed-point fractional library routines. ! (line 951) * __fracthiuda: Fixed-point fractional library routines. ! (line 958) * __fracthiudq: Fixed-point fractional library routines. ! (line 955) * __fracthiuha: Fixed-point fractional library routines. ! (line 956) * __fracthiuhq: Fixed-point fractional library routines. ! (line 953) * __fracthiuqq: Fixed-point fractional library routines. ! (line 952) * __fracthiusa: Fixed-point fractional library routines. ! (line 957) * __fracthiusq: Fixed-point fractional library routines. ! (line 954) * __fracthiuta: Fixed-point fractional library routines. ! (line 959) * __fracthqda: Fixed-point fractional library routines. ! (line 505) * __fracthqdf: Fixed-point fractional library routines. ! (line 521) * __fracthqdi: Fixed-point fractional library routines. ! (line 518) * __fracthqdq2: Fixed-point fractional library routines. ! (line 502) * __fracthqha: Fixed-point fractional library routines. ! (line 503) * __fracthqhi: Fixed-point fractional library routines. ! (line 516) * __fracthqqi: Fixed-point fractional library routines. ! (line 515) * __fracthqqq2: Fixed-point fractional library routines. ! (line 500) * __fracthqsa: Fixed-point fractional library routines. ! (line 504) * __fracthqsf: Fixed-point fractional library routines. ! (line 520) * __fracthqsi: Fixed-point fractional library routines. ! (line 517) * __fracthqsq2: Fixed-point fractional library routines. ! (line 501) * __fracthqta: Fixed-point fractional library routines. ! (line 506) * __fracthqti: Fixed-point fractional library routines. ! (line 519) * __fracthquda: Fixed-point fractional library routines. ! (line 513) * __fracthqudq: Fixed-point fractional library routines. ! (line 510) * __fracthquha: Fixed-point fractional library routines. ! (line 511) * __fracthquhq: Fixed-point fractional library routines. ! (line 508) * __fracthquqq: Fixed-point fractional library routines. ! (line 507) * __fracthqusa: Fixed-point fractional library routines. ! (line 512) * __fracthqusq: Fixed-point fractional library routines. ! (line 509) * __fracthquta: Fixed-point fractional library routines. ! (line 514) * __fractqida: Fixed-point fractional library routines. ! (line 932) * __fractqidq: Fixed-point fractional library routines. ! (line 929) * __fractqiha: Fixed-point fractional library routines. ! (line 930) * __fractqihq: Fixed-point fractional library routines. ! (line 927) * __fractqiqq: Fixed-point fractional library routines. ! (line 926) * __fractqisa: Fixed-point fractional library routines. ! (line 931) * __fractqisq: Fixed-point fractional library routines. ! (line 928) * __fractqita: Fixed-point fractional library routines. (line 933) + * __fractqiuda: Fixed-point fractional library routines. + (line 941) * __fractqiudq: Fixed-point fractional library routines. ! (line 937) * __fractqiuha: Fixed-point fractional library routines. ! (line 939) * __fractqiuhq: Fixed-point fractional library routines. ! (line 935) * __fractqiuqq: Fixed-point fractional library routines. ! (line 934) * __fractqiusa: Fixed-point fractional library routines. ! (line 940) * __fractqiusq: Fixed-point fractional library routines. ! (line 936) * __fractqiuta: Fixed-point fractional library routines. ! (line 942) * __fractqqda: Fixed-point fractional library routines. ! (line 481) * __fractqqdf: Fixed-point fractional library routines. ! (line 499) * __fractqqdi: Fixed-point fractional library routines. ! (line 496) * __fractqqdq2: Fixed-point fractional library routines. ! (line 478) * __fractqqha: Fixed-point fractional library routines. ! (line 479) * __fractqqhi: Fixed-point fractional library routines. ! (line 494) * __fractqqhq2: Fixed-point fractional library routines. ! (line 476) * __fractqqqi: Fixed-point fractional library routines. ! (line 493) * __fractqqsa: Fixed-point fractional library routines. ! (line 480) * __fractqqsf: Fixed-point fractional library routines. ! (line 498) * __fractqqsi: Fixed-point fractional library routines. ! (line 495) * __fractqqsq2: Fixed-point fractional library routines. ! (line 477) * __fractqqta: Fixed-point fractional library routines. ! (line 482) * __fractqqti: Fixed-point fractional library routines. ! (line 497) * __fractqquda: Fixed-point fractional library routines. ! (line 490) * __fractqqudq: Fixed-point fractional library routines. ! (line 486) * __fractqquha: Fixed-point fractional library routines. ! (line 488) * __fractqquhq: Fixed-point fractional library routines. ! (line 484) * __fractqquqq: Fixed-point fractional library routines. ! (line 483) * __fractqqusa: Fixed-point fractional library routines. ! (line 489) * __fractqqusq: Fixed-point fractional library routines. ! (line 485) * __fractqquta: Fixed-point fractional library routines. ! (line 491) * __fractsada2: Fixed-point fractional library routines. ! (line 603) * __fractsadf: Fixed-point fractional library routines. ! (line 619) * __fractsadi: Fixed-point fractional library routines. ! (line 616) * __fractsadq: Fixed-point fractional library routines. ! (line 601) * __fractsaha2: Fixed-point fractional library routines. ! (line 602) * __fractsahi: Fixed-point fractional library routines. ! (line 614) * __fractsahq: Fixed-point fractional library routines. ! (line 599) * __fractsaqi: Fixed-point fractional library routines. ! (line 613) * __fractsaqq: Fixed-point fractional library routines. ! (line 598) * __fractsasf: Fixed-point fractional library routines. ! (line 618) * __fractsasi: Fixed-point fractional library routines. ! (line 615) * __fractsasq: Fixed-point fractional library routines. ! (line 600) * __fractsata2: Fixed-point fractional library routines. ! (line 604) * __fractsati: Fixed-point fractional library routines. ! (line 617) * __fractsauda: Fixed-point fractional library routines. ! (line 611) * __fractsaudq: Fixed-point fractional library routines. ! (line 608) * __fractsauha: Fixed-point fractional library routines. ! (line 609) * __fractsauhq: Fixed-point fractional library routines. ! (line 606) * __fractsauqq: Fixed-point fractional library routines. ! (line 605) * __fractsausa: Fixed-point fractional library routines. ! (line 610) * __fractsausq: Fixed-point fractional library routines. ! (line 607) * __fractsauta: Fixed-point fractional library routines. ! (line 612) * __fractsfda: Fixed-point fractional library routines. ! (line 1016) * __fractsfdq: Fixed-point fractional library routines. ! (line 1013) * __fractsfha: Fixed-point fractional library routines. ! (line 1014) * __fractsfhq: Fixed-point fractional library routines. ! (line 1011) * __fractsfqq: Fixed-point fractional library routines. ! (line 1010) * __fractsfsa: Fixed-point fractional library routines. ! (line 1015) * __fractsfsq: Fixed-point fractional library routines. ! (line 1012) * __fractsfta: Fixed-point fractional library routines. ! (line 1017) * __fractsfuda: Fixed-point fractional library routines. ! (line 1024) * __fractsfudq: Fixed-point fractional library routines. ! (line 1021) * __fractsfuha: Fixed-point fractional library routines. ! (line 1022) * __fractsfuhq: Fixed-point fractional library routines. ! (line 1019) * __fractsfuqq: Fixed-point fractional library routines. ! (line 1018) * __fractsfusa: Fixed-point fractional library routines. ! (line 1023) * __fractsfusq: Fixed-point fractional library routines. ! (line 1020) * __fractsfuta: Fixed-point fractional library routines. ! (line 1025) * __fractsida: Fixed-point fractional library routines. ! (line 966) * __fractsidq: Fixed-point fractional library routines. ! (line 963) * __fractsiha: Fixed-point fractional library routines. ! (line 964) * __fractsihq: Fixed-point fractional library routines. ! (line 961) * __fractsiqq: Fixed-point fractional library routines. ! (line 960) * __fractsisa: Fixed-point fractional library routines. ! (line 965) * __fractsisq: Fixed-point fractional library routines. ! (line 962) * __fractsita: Fixed-point fractional library routines. ! (line 967) * __fractsiuda: Fixed-point fractional library routines. ! (line 974) * __fractsiudq: Fixed-point fractional library routines. ! (line 971) * __fractsiuha: Fixed-point fractional library routines. ! (line 972) * __fractsiuhq: Fixed-point fractional library routines. ! (line 969) * __fractsiuqq: Fixed-point fractional library routines. ! (line 968) * __fractsiusa: Fixed-point fractional library routines. ! (line 973) * __fractsiusq: Fixed-point fractional library routines. ! (line 970) * __fractsiuta: Fixed-point fractional library routines. ! (line 975) * __fractsqda: Fixed-point fractional library routines. ! (line 527) * __fractsqdf: Fixed-point fractional library routines. ! (line 545) * __fractsqdi: Fixed-point fractional library routines. ! (line 542) * __fractsqdq2: Fixed-point fractional library routines. ! (line 524) * __fractsqha: Fixed-point fractional library routines. ! (line 525) * __fractsqhi: Fixed-point fractional library routines. ! (line 540) * __fractsqhq2: Fixed-point fractional library routines. ! (line 523) * __fractsqqi: Fixed-point fractional library routines. ! (line 539) * __fractsqqq2: Fixed-point fractional library routines. ! (line 522) * __fractsqsa: Fixed-point fractional library routines. ! (line 526) * __fractsqsf: Fixed-point fractional library routines. ! (line 544) * __fractsqsi: Fixed-point fractional library routines. ! (line 541) * __fractsqta: Fixed-point fractional library routines. ! (line 528) * __fractsqti: Fixed-point fractional library routines. ! (line 543) * __fractsquda: Fixed-point fractional library routines. ! (line 536) * __fractsqudq: Fixed-point fractional library routines. ! (line 532) * __fractsquha: Fixed-point fractional library routines. ! (line 534) * __fractsquhq: Fixed-point fractional library routines. ! (line 530) * __fractsquqq: Fixed-point fractional library routines. ! (line 529) * __fractsqusa: Fixed-point fractional library routines. ! (line 535) * __fractsqusq: Fixed-point fractional library routines. ! (line 531) * __fractsquta: Fixed-point fractional library routines. ! (line 537) * __fracttada2: Fixed-point fractional library routines. ! (line 650) * __fracttadf: Fixed-point fractional library routines. ! (line 671) * __fracttadi: Fixed-point fractional library routines. ! (line 668) * __fracttadq: Fixed-point fractional library routines. ! (line 647) * __fracttaha2: Fixed-point fractional library routines. ! (line 648) * __fracttahi: Fixed-point fractional library routines. ! (line 666) * __fracttahq: Fixed-point fractional library routines. ! (line 645) * __fracttaqi: Fixed-point fractional library routines. ! (line 665) * __fracttaqq: Fixed-point fractional library routines. ! (line 644) * __fracttasa2: Fixed-point fractional library routines. ! (line 649) * __fracttasf: Fixed-point fractional library routines. ! (line 670) * __fracttasi: Fixed-point fractional library routines. ! (line 667) * __fracttasq: Fixed-point fractional library routines. ! (line 646) * __fracttati: Fixed-point fractional library routines. ! (line 669) * __fracttauda: Fixed-point fractional library routines. ! (line 661) * __fracttaudq: Fixed-point fractional library routines. ! (line 656) * __fracttauha: Fixed-point fractional library routines. ! (line 658) * __fracttauhq: Fixed-point fractional library routines. ! (line 653) * __fracttauqq: Fixed-point fractional library routines. ! (line 651) * __fracttausa: Fixed-point fractional library routines. ! (line 660) * __fracttausq: Fixed-point fractional library routines. ! (line 654) * __fracttauta: Fixed-point fractional library routines. ! (line 663) * __fracttida: Fixed-point fractional library routines. ! (line 998) * __fracttidq: Fixed-point fractional library routines. ! (line 995) * __fracttiha: Fixed-point fractional library routines. ! (line 996) * __fracttihq: Fixed-point fractional library routines. ! (line 993) * __fracttiqq: Fixed-point fractional library routines. ! (line 992) * __fracttisa: Fixed-point fractional library routines. ! (line 997) * __fracttisq: Fixed-point fractional library routines. ! (line 994) * __fracttita: Fixed-point fractional library routines. (line 999) + * __fracttiuda: Fixed-point fractional library routines. + (line 1007) * __fracttiudq: Fixed-point fractional library routines. ! (line 1003) * __fracttiuha: Fixed-point fractional library routines. ! (line 1005) * __fracttiuhq: Fixed-point fractional library routines. ! (line 1001) * __fracttiuqq: Fixed-point fractional library routines. ! (line 1000) * __fracttiusa: Fixed-point fractional library routines. ! (line 1006) * __fracttiusq: Fixed-point fractional library routines. ! (line 1002) * __fracttiuta: Fixed-point fractional library routines. ! (line 1008) * __fractudada: Fixed-point fractional library routines. ! (line 865) * __fractudadf: Fixed-point fractional library routines. ! (line 888) * __fractudadi: Fixed-point fractional library routines. ! (line 885) * __fractudadq: Fixed-point fractional library routines. ! (line 861) * __fractudaha: Fixed-point fractional library routines. ! (line 863) * __fractudahi: Fixed-point fractional library routines. ! (line 883) * __fractudahq: Fixed-point fractional library routines. ! (line 859) * __fractudaqi: Fixed-point fractional library routines. ! (line 882) * __fractudaqq: Fixed-point fractional library routines. ! (line 858) * __fractudasa: Fixed-point fractional library routines. ! (line 864) * __fractudasf: Fixed-point fractional library routines. ! (line 887) * __fractudasi: Fixed-point fractional library routines. ! (line 884) * __fractudasq: Fixed-point fractional library routines. ! (line 860) * __fractudata: Fixed-point fractional library routines. ! (line 866) * __fractudati: Fixed-point fractional library routines. ! (line 886) * __fractudaudq: Fixed-point fractional library routines. ! (line 874) * __fractudauha2: Fixed-point fractional library routines. ! (line 876) * __fractudauhq: Fixed-point fractional library routines. ! (line 870) * __fractudauqq: Fixed-point fractional library routines. ! (line 868) * __fractudausa2: Fixed-point fractional library routines. ! (line 878) * __fractudausq: Fixed-point fractional library routines. (line 872) + * __fractudauta2: Fixed-point fractional library routines. + (line 880) * __fractudqda: Fixed-point fractional library routines. ! (line 772) * __fractudqdf: Fixed-point fractional library routines. ! (line 798) * __fractudqdi: Fixed-point fractional library routines. ! (line 794) * __fractudqdq: Fixed-point fractional library routines. ! (line 767) * __fractudqha: Fixed-point fractional library routines. ! (line 769) * __fractudqhi: Fixed-point fractional library routines. ! (line 792) * __fractudqhq: Fixed-point fractional library routines. ! (line 764) * __fractudqqi: Fixed-point fractional library routines. ! (line 790) * __fractudqqq: Fixed-point fractional library routines. ! (line 762) * __fractudqsa: Fixed-point fractional library routines. ! (line 771) * __fractudqsf: Fixed-point fractional library routines. ! (line 797) * __fractudqsi: Fixed-point fractional library routines. ! (line 793) * __fractudqsq: Fixed-point fractional library routines. ! (line 765) * __fractudqta: Fixed-point fractional library routines. ! (line 774) * __fractudqti: Fixed-point fractional library routines. ! (line 795) * __fractudquda: Fixed-point fractional library routines. ! (line 786) * __fractudquha: Fixed-point fractional library routines. ! (line 782) * __fractudquhq2: Fixed-point fractional library routines. ! (line 778) * __fractudquqq2: Fixed-point fractional library routines. (line 776) + * __fractudqusa: Fixed-point fractional library routines. + (line 784) * __fractudqusq2: Fixed-point fractional library routines. (line 780) + * __fractudquta: Fixed-point fractional library routines. + (line 788) * __fractuhada: Fixed-point fractional library routines. ! (line 806) * __fractuhadf: Fixed-point fractional library routines. ! (line 829) * __fractuhadi: Fixed-point fractional library routines. ! (line 826) * __fractuhadq: Fixed-point fractional library routines. ! (line 802) * __fractuhaha: Fixed-point fractional library routines. ! (line 804) * __fractuhahi: Fixed-point fractional library routines. ! (line 824) * __fractuhahq: Fixed-point fractional library routines. ! (line 800) * __fractuhaqi: Fixed-point fractional library routines. ! (line 823) * __fractuhaqq: Fixed-point fractional library routines. ! (line 799) * __fractuhasa: Fixed-point fractional library routines. ! (line 805) * __fractuhasf: Fixed-point fractional library routines. ! (line 828) * __fractuhasi: Fixed-point fractional library routines. ! (line 825) * __fractuhasq: Fixed-point fractional library routines. ! (line 801) * __fractuhata: Fixed-point fractional library routines. ! (line 807) * __fractuhati: Fixed-point fractional library routines. ! (line 827) * __fractuhauda2: Fixed-point fractional library routines. ! (line 819) * __fractuhaudq: Fixed-point fractional library routines. ! (line 815) * __fractuhauhq: Fixed-point fractional library routines. ! (line 811) * __fractuhauqq: Fixed-point fractional library routines. (line 809) + * __fractuhausa2: Fixed-point fractional library routines. + (line 817) * __fractuhausq: Fixed-point fractional library routines. (line 813) + * __fractuhauta2: Fixed-point fractional library routines. + (line 821) * __fractuhqda: Fixed-point fractional library routines. ! (line 709) * __fractuhqdf: Fixed-point fractional library routines. ! (line 730) * __fractuhqdi: Fixed-point fractional library routines. ! (line 727) * __fractuhqdq: Fixed-point fractional library routines. ! (line 706) * __fractuhqha: Fixed-point fractional library routines. ! (line 707) * __fractuhqhi: Fixed-point fractional library routines. ! (line 725) * __fractuhqhq: Fixed-point fractional library routines. ! (line 704) * __fractuhqqi: Fixed-point fractional library routines. ! (line 724) * __fractuhqqq: Fixed-point fractional library routines. ! (line 703) * __fractuhqsa: Fixed-point fractional library routines. ! (line 708) * __fractuhqsf: Fixed-point fractional library routines. ! (line 729) * __fractuhqsi: Fixed-point fractional library routines. ! (line 726) * __fractuhqsq: Fixed-point fractional library routines. ! (line 705) * __fractuhqta: Fixed-point fractional library routines. ! (line 710) * __fractuhqti: Fixed-point fractional library routines. ! (line 728) * __fractuhquda: Fixed-point fractional library routines. ! (line 720) * __fractuhqudq2: Fixed-point fractional library routines. ! (line 715) * __fractuhquha: Fixed-point fractional library routines. ! (line 717) * __fractuhquqq2: Fixed-point fractional library routines. (line 711) + * __fractuhqusa: Fixed-point fractional library routines. + (line 719) * __fractuhqusq2: Fixed-point fractional library routines. ! (line 713) * __fractuhquta: Fixed-point fractional library routines. ! (line 722) * __fractunsdadi: Fixed-point fractional library routines. ! (line 1562) * __fractunsdahi: Fixed-point fractional library routines. ! (line 1560) * __fractunsdaqi: Fixed-point fractional library routines. ! (line 1559) * __fractunsdasi: Fixed-point fractional library routines. ! (line 1561) * __fractunsdati: Fixed-point fractional library routines. ! (line 1563) * __fractunsdida: Fixed-point fractional library routines. ! (line 1714) * __fractunsdidq: Fixed-point fractional library routines. ! (line 1711) * __fractunsdiha: Fixed-point fractional library routines. ! (line 1712) * __fractunsdihq: Fixed-point fractional library routines. ! (line 1709) * __fractunsdiqq: Fixed-point fractional library routines. ! (line 1708) * __fractunsdisa: Fixed-point fractional library routines. ! (line 1713) * __fractunsdisq: Fixed-point fractional library routines. ! (line 1710) * __fractunsdita: Fixed-point fractional library routines. ! (line 1715) * __fractunsdiuda: Fixed-point fractional library routines. ! (line 1726) * __fractunsdiudq: Fixed-point fractional library routines. ! (line 1721) * __fractunsdiuha: Fixed-point fractional library routines. ! (line 1723) * __fractunsdiuhq: Fixed-point fractional library routines. ! (line 1718) * __fractunsdiuqq: Fixed-point fractional library routines. ! (line 1716) * __fractunsdiusa: Fixed-point fractional library routines. ! (line 1725) * __fractunsdiusq: Fixed-point fractional library routines. ! (line 1719) * __fractunsdiuta: Fixed-point fractional library routines. ! (line 1728) * __fractunsdqdi: Fixed-point fractional library routines. ! (line 1546) * __fractunsdqhi: Fixed-point fractional library routines. ! (line 1544) * __fractunsdqqi: Fixed-point fractional library routines. ! (line 1543) * __fractunsdqsi: Fixed-point fractional library routines. ! (line 1545) * __fractunsdqti: Fixed-point fractional library routines. ! (line 1547) * __fractunshadi: Fixed-point fractional library routines. ! (line 1552) * __fractunshahi: Fixed-point fractional library routines. ! (line 1550) * __fractunshaqi: Fixed-point fractional library routines. ! (line 1549) * __fractunshasi: Fixed-point fractional library routines. ! (line 1551) * __fractunshati: Fixed-point fractional library routines. ! (line 1553) * __fractunshida: Fixed-point fractional library routines. ! (line 1670) * __fractunshidq: Fixed-point fractional library routines. ! (line 1667) * __fractunshiha: Fixed-point fractional library routines. ! (line 1668) * __fractunshihq: Fixed-point fractional library routines. ! (line 1665) * __fractunshiqq: Fixed-point fractional library routines. ! (line 1664) * __fractunshisa: Fixed-point fractional library routines. ! (line 1669) * __fractunshisq: Fixed-point fractional library routines. ! (line 1666) * __fractunshita: Fixed-point fractional library routines. ! (line 1671) * __fractunshiuda: Fixed-point fractional library routines. ! (line 1682) * __fractunshiudq: Fixed-point fractional library routines. ! (line 1677) * __fractunshiuha: Fixed-point fractional library routines. ! (line 1679) * __fractunshiuhq: Fixed-point fractional library routines. ! (line 1674) * __fractunshiuqq: Fixed-point fractional library routines. ! (line 1672) * __fractunshiusa: Fixed-point fractional library routines. ! (line 1681) * __fractunshiusq: Fixed-point fractional library routines. ! (line 1675) * __fractunshiuta: Fixed-point fractional library routines. ! (line 1684) * __fractunshqdi: Fixed-point fractional library routines. ! (line 1536) * __fractunshqhi: Fixed-point fractional library routines. ! (line 1534) * __fractunshqqi: Fixed-point fractional library routines. ! (line 1533) * __fractunshqsi: Fixed-point fractional library routines. ! (line 1535) * __fractunshqti: Fixed-point fractional library routines. ! (line 1537) * __fractunsqida: Fixed-point fractional library routines. ! (line 1648) * __fractunsqidq: Fixed-point fractional library routines. ! (line 1645) * __fractunsqiha: Fixed-point fractional library routines. ! (line 1646) * __fractunsqihq: Fixed-point fractional library routines. ! (line 1643) * __fractunsqiqq: Fixed-point fractional library routines. ! (line 1642) * __fractunsqisa: Fixed-point fractional library routines. ! (line 1647) * __fractunsqisq: Fixed-point fractional library routines. ! (line 1644) * __fractunsqita: Fixed-point fractional library routines. ! (line 1649) * __fractunsqiuda: Fixed-point fractional library routines. ! (line 1660) * __fractunsqiudq: Fixed-point fractional library routines. ! (line 1655) * __fractunsqiuha: Fixed-point fractional library routines. ! (line 1657) * __fractunsqiuhq: Fixed-point fractional library routines. ! (line 1652) * __fractunsqiuqq: Fixed-point fractional library routines. ! (line 1650) * __fractunsqiusa: Fixed-point fractional library routines. ! (line 1659) * __fractunsqiusq: Fixed-point fractional library routines. ! (line 1653) * __fractunsqiuta: Fixed-point fractional library routines. ! (line 1662) * __fractunsqqdi: Fixed-point fractional library routines. ! (line 1531) * __fractunsqqhi: Fixed-point fractional library routines. ! (line 1529) * __fractunsqqqi: Fixed-point fractional library routines. ! (line 1528) * __fractunsqqsi: Fixed-point fractional library routines. ! (line 1530) * __fractunsqqti: Fixed-point fractional library routines. ! (line 1532) * __fractunssadi: Fixed-point fractional library routines. ! (line 1557) * __fractunssahi: Fixed-point fractional library routines. ! (line 1555) * __fractunssaqi: Fixed-point fractional library routines. ! (line 1554) * __fractunssasi: Fixed-point fractional library routines. ! (line 1556) * __fractunssati: Fixed-point fractional library routines. ! (line 1558) * __fractunssida: Fixed-point fractional library routines. ! (line 1692) * __fractunssidq: Fixed-point fractional library routines. ! (line 1689) * __fractunssiha: Fixed-point fractional library routines. ! (line 1690) * __fractunssihq: Fixed-point fractional library routines. ! (line 1687) * __fractunssiqq: Fixed-point fractional library routines. ! (line 1686) * __fractunssisa: Fixed-point fractional library routines. ! (line 1691) * __fractunssisq: Fixed-point fractional library routines. ! (line 1688) * __fractunssita: Fixed-point fractional library routines. ! (line 1693) * __fractunssiuda: Fixed-point fractional library routines. ! (line 1704) * __fractunssiudq: Fixed-point fractional library routines. ! (line 1699) * __fractunssiuha: Fixed-point fractional library routines. ! (line 1701) * __fractunssiuhq: Fixed-point fractional library routines. ! (line 1696) * __fractunssiuqq: Fixed-point fractional library routines. ! (line 1694) * __fractunssiusa: Fixed-point fractional library routines. ! (line 1703) * __fractunssiusq: Fixed-point fractional library routines. ! (line 1697) * __fractunssiuta: Fixed-point fractional library routines. ! (line 1706) * __fractunssqdi: Fixed-point fractional library routines. ! (line 1541) * __fractunssqhi: Fixed-point fractional library routines. ! (line 1539) * __fractunssqqi: Fixed-point fractional library routines. ! (line 1538) * __fractunssqsi: Fixed-point fractional library routines. ! (line 1540) * __fractunssqti: Fixed-point fractional library routines. ! (line 1542) * __fractunstadi: Fixed-point fractional library routines. ! (line 1567) * __fractunstahi: Fixed-point fractional library routines. ! (line 1565) * __fractunstaqi: Fixed-point fractional library routines. ! (line 1564) * __fractunstasi: Fixed-point fractional library routines. ! (line 1566) * __fractunstati: Fixed-point fractional library routines. ! (line 1568) * __fractunstida: Fixed-point fractional library routines. ! (line 1737) * __fractunstidq: Fixed-point fractional library routines. ! (line 1733) * __fractunstiha: Fixed-point fractional library routines. ! (line 1735) * __fractunstihq: Fixed-point fractional library routines. ! (line 1731) * __fractunstiqq: Fixed-point fractional library routines. ! (line 1730) * __fractunstisa: Fixed-point fractional library routines. ! (line 1736) * __fractunstisq: Fixed-point fractional library routines. ! (line 1732) * __fractunstita: Fixed-point fractional library routines. ! (line 1738) * __fractunstiuda: Fixed-point fractional library routines. ! (line 1752) * __fractunstiudq: Fixed-point fractional library routines. ! (line 1746) * __fractunstiuha: Fixed-point fractional library routines. ! (line 1748) * __fractunstiuhq: Fixed-point fractional library routines. ! (line 1742) * __fractunstiuqq: Fixed-point fractional library routines. ! (line 1740) * __fractunstiusa: Fixed-point fractional library routines. ! (line 1750) * __fractunstiusq: Fixed-point fractional library routines. ! (line 1744) * __fractunstiuta: Fixed-point fractional library routines. ! (line 1754) * __fractunsudadi: Fixed-point fractional library routines. ! (line 1628) * __fractunsudahi: Fixed-point fractional library routines. ! (line 1624) * __fractunsudaqi: Fixed-point fractional library routines. ! (line 1622) * __fractunsudasi: Fixed-point fractional library routines. ! (line 1626) * __fractunsudati: Fixed-point fractional library routines. ! (line 1630) * __fractunsudqdi: Fixed-point fractional library routines. ! (line 1602) * __fractunsudqhi: Fixed-point fractional library routines. ! (line 1598) * __fractunsudqqi: Fixed-point fractional library routines. ! (line 1596) * __fractunsudqsi: Fixed-point fractional library routines. ! (line 1600) * __fractunsudqti: Fixed-point fractional library routines. (line 1604) + * __fractunsuhadi: Fixed-point fractional library routines. + (line 1612) * __fractunsuhahi: Fixed-point fractional library routines. ! (line 1608) * __fractunsuhaqi: Fixed-point fractional library routines. ! (line 1606) * __fractunsuhasi: Fixed-point fractional library routines. ! (line 1610) * __fractunsuhati: Fixed-point fractional library routines. ! (line 1614) * __fractunsuhqdi: Fixed-point fractional library routines. ! (line 1583) * __fractunsuhqhi: Fixed-point fractional library routines. ! (line 1581) * __fractunsuhqqi: Fixed-point fractional library routines. ! (line 1580) * __fractunsuhqsi: Fixed-point fractional library routines. ! (line 1582) * __fractunsuhqti: Fixed-point fractional library routines. ! (line 1584) * __fractunsuqqdi: Fixed-point fractional library routines. ! (line 1576) * __fractunsuqqhi: Fixed-point fractional library routines. ! (line 1572) * __fractunsuqqqi: Fixed-point fractional library routines. ! (line 1570) * __fractunsuqqsi: Fixed-point fractional library routines. ! (line 1574) * __fractunsuqqti: Fixed-point fractional library routines. ! (line 1578) * __fractunsusadi: Fixed-point fractional library routines. ! (line 1619) * __fractunsusahi: Fixed-point fractional library routines. ! (line 1617) * __fractunsusaqi: Fixed-point fractional library routines. ! (line 1616) * __fractunsusasi: Fixed-point fractional library routines. ! (line 1618) * __fractunsusati: Fixed-point fractional library routines. ! (line 1620) * __fractunsusqdi: Fixed-point fractional library routines. ! (line 1592) * __fractunsusqhi: Fixed-point fractional library routines. ! (line 1588) * __fractunsusqqi: Fixed-point fractional library routines. ! (line 1586) * __fractunsusqsi: Fixed-point fractional library routines. ! (line 1590) * __fractunsusqti: Fixed-point fractional library routines. ! (line 1594) * __fractunsutadi: Fixed-point fractional library routines. ! (line 1638) * __fractunsutahi: Fixed-point fractional library routines. ! (line 1634) * __fractunsutaqi: Fixed-point fractional library routines. ! (line 1632) * __fractunsutasi: Fixed-point fractional library routines. ! (line 1636) * __fractunsutati: Fixed-point fractional library routines. ! (line 1640) * __fractuqqda: Fixed-point fractional library routines. ! (line 679) * __fractuqqdf: Fixed-point fractional library routines. ! (line 702) * __fractuqqdi: Fixed-point fractional library routines. ! (line 699) * __fractuqqdq: Fixed-point fractional library routines. ! (line 675) * __fractuqqha: Fixed-point fractional library routines. ! (line 677) * __fractuqqhi: Fixed-point fractional library routines. ! (line 697) * __fractuqqhq: Fixed-point fractional library routines. ! (line 673) * __fractuqqqi: Fixed-point fractional library routines. ! (line 696) * __fractuqqqq: Fixed-point fractional library routines. ! (line 672) * __fractuqqsa: Fixed-point fractional library routines. ! (line 678) * __fractuqqsf: Fixed-point fractional library routines. ! (line 701) * __fractuqqsi: Fixed-point fractional library routines. ! (line 698) * __fractuqqsq: Fixed-point fractional library routines. ! (line 674) * __fractuqqta: Fixed-point fractional library routines. ! (line 680) * __fractuqqti: Fixed-point fractional library routines. ! (line 700) * __fractuqquda: Fixed-point fractional library routines. ! (line 692) * __fractuqqudq2: Fixed-point fractional library routines. ! (line 686) * __fractuqquha: Fixed-point fractional library routines. ! (line 688) * __fractuqquhq2: Fixed-point fractional library routines. (line 682) + * __fractuqqusa: Fixed-point fractional library routines. + (line 690) * __fractuqqusq2: Fixed-point fractional library routines. ! (line 684) * __fractuqquta: Fixed-point fractional library routines. ! (line 694) * __fractusada: Fixed-point fractional library routines. ! (line 836) * __fractusadf: Fixed-point fractional library routines. ! (line 857) * __fractusadi: Fixed-point fractional library routines. ! (line 854) * __fractusadq: Fixed-point fractional library routines. ! (line 833) * __fractusaha: Fixed-point fractional library routines. ! (line 834) * __fractusahi: Fixed-point fractional library routines. ! (line 852) * __fractusahq: Fixed-point fractional library routines. ! (line 831) * __fractusaqi: Fixed-point fractional library routines. ! (line 851) * __fractusaqq: Fixed-point fractional library routines. ! (line 830) * __fractusasa: Fixed-point fractional library routines. ! (line 835) * __fractusasf: Fixed-point fractional library routines. ! (line 856) * __fractusasi: Fixed-point fractional library routines. ! (line 853) * __fractusasq: Fixed-point fractional library routines. ! (line 832) * __fractusata: Fixed-point fractional library routines. ! (line 837) * __fractusati: Fixed-point fractional library routines. ! (line 855) * __fractusauda2: Fixed-point fractional library routines. ! (line 847) * __fractusaudq: Fixed-point fractional library routines. ! (line 843) * __fractusauha2: Fixed-point fractional library routines. ! (line 845) * __fractusauhq: Fixed-point fractional library routines. ! (line 840) * __fractusauqq: Fixed-point fractional library routines. ! (line 838) * __fractusausq: Fixed-point fractional library routines. (line 841) + * __fractusauta2: Fixed-point fractional library routines. + (line 849) * __fractusqda: Fixed-point fractional library routines. ! (line 738) * __fractusqdf: Fixed-point fractional library routines. ! (line 761) * __fractusqdi: Fixed-point fractional library routines. ! (line 758) * __fractusqdq: Fixed-point fractional library routines. ! (line 734) * __fractusqha: Fixed-point fractional library routines. ! (line 736) * __fractusqhi: Fixed-point fractional library routines. ! (line 756) * __fractusqhq: Fixed-point fractional library routines. ! (line 732) * __fractusqqi: Fixed-point fractional library routines. ! (line 755) * __fractusqqq: Fixed-point fractional library routines. ! (line 731) * __fractusqsa: Fixed-point fractional library routines. ! (line 737) * __fractusqsf: Fixed-point fractional library routines. ! (line 760) * __fractusqsi: Fixed-point fractional library routines. ! (line 757) * __fractusqsq: Fixed-point fractional library routines. ! (line 733) * __fractusqta: Fixed-point fractional library routines. ! (line 739) * __fractusqti: Fixed-point fractional library routines. ! (line 759) * __fractusquda: Fixed-point fractional library routines. ! (line 751) * __fractusqudq2: Fixed-point fractional library routines. ! (line 745) * __fractusquha: Fixed-point fractional library routines. ! (line 747) * __fractusquhq2: Fixed-point fractional library routines. ! (line 743) * __fractusquqq2: Fixed-point fractional library routines. (line 741) + * __fractusqusa: Fixed-point fractional library routines. + (line 749) * __fractusquta: Fixed-point fractional library routines. ! (line 753) * __fractutada: Fixed-point fractional library routines. ! (line 899) * __fractutadf: Fixed-point fractional library routines. ! (line 925) * __fractutadi: Fixed-point fractional library routines. ! (line 921) * __fractutadq: Fixed-point fractional library routines. ! (line 894) * __fractutaha: Fixed-point fractional library routines. ! (line 896) * __fractutahi: Fixed-point fractional library routines. ! (line 919) * __fractutahq: Fixed-point fractional library routines. ! (line 891) * __fractutaqi: Fixed-point fractional library routines. ! (line 917) * __fractutaqq: Fixed-point fractional library routines. ! (line 889) * __fractutasa: Fixed-point fractional library routines. ! (line 898) * __fractutasf: Fixed-point fractional library routines. ! (line 924) * __fractutasi: Fixed-point fractional library routines. ! (line 920) * __fractutasq: Fixed-point fractional library routines. ! (line 892) * __fractutata: Fixed-point fractional library routines. ! (line 901) * __fractutati: Fixed-point fractional library routines. ! (line 922) * __fractutauda2: Fixed-point fractional library routines. ! (line 915) * __fractutaudq: Fixed-point fractional library routines. ! (line 909) * __fractutauha2: Fixed-point fractional library routines. ! (line 911) * __fractutauhq: Fixed-point fractional library routines. ! (line 905) * __fractutauqq: Fixed-point fractional library routines. ! (line 903) * __fractutausa2: Fixed-point fractional library routines. ! (line 913) * __fractutausq: Fixed-point fractional library routines. ! (line 907) * __gedf2: Soft float library routines. (line 205) * __gesf2: Soft float library routines. *************** Concept Index *** 52573,52593 **** * __lshrti3: Integer library routines. (line 31) * __lshruda3: Fixed-point fractional library routines. ! (line 388) * __lshrudq3: Fixed-point fractional library routines. ! (line 382) * __lshruha3: Fixed-point fractional library routines. ! (line 384) * __lshruhq3: Fixed-point fractional library routines. ! (line 378) * __lshruqq3: Fixed-point fractional library routines. ! (line 376) * __lshrusa3: Fixed-point fractional library routines. ! (line 386) * __lshrusq3: Fixed-point fractional library routines. ! (line 380) * __lshruta3: Fixed-point fractional library routines. ! (line 390) * __ltdf2: Soft float library routines. (line 211) * __ltsf2: Soft float library routines. --- 52573,52593 ---- * __lshrti3: Integer library routines. (line 31) * __lshruda3: Fixed-point fractional library routines. ! (line 396) * __lshrudq3: Fixed-point fractional library routines. ! (line 390) * __lshruha3: Fixed-point fractional library routines. ! (line 392) * __lshruhq3: Fixed-point fractional library routines. ! (line 386) * __lshruqq3: Fixed-point fractional library routines. ! (line 384) * __lshrusa3: Fixed-point fractional library routines. ! (line 394) * __lshrusq3: Fixed-point fractional library routines. ! (line 388) * __lshruta3: Fixed-point fractional library routines. ! (line 398) * __ltdf2: Soft float library routines. (line 211) * __ltsf2: Soft float library routines. *************** Concept Index *** 52608,52614 **** * __morestack_segments: Miscellaneous routines. (line 44) * __mulda3: Fixed-point fractional library routines. ! (line 170) * __muldc3: Soft float library routines. (line 239) * __muldf3: Soft float library routines. --- 52608,52614 ---- * __morestack_segments: Miscellaneous routines. (line 44) * __mulda3: Fixed-point fractional library routines. ! (line 178) * __muldc3: Soft float library routines. (line 239) * __muldf3: Soft float library routines. *************** Concept Index *** 52616,52630 **** * __muldi3: Integer library routines. (line 42) * __muldq3: Fixed-point fractional library routines. ! (line 157) * __mulha3: Fixed-point fractional library routines. ! (line 167) * __mulhq3: Fixed-point fractional library routines. ! (line 155) * __mulqq3: Fixed-point fractional library routines. ! (line 153) * __mulsa3: Fixed-point fractional library routines. ! (line 169) * __mulsc3: Soft float library routines. (line 237) * __mulsf3: Soft float library routines. --- 52616,52630 ---- * __muldi3: Integer library routines. (line 42) * __muldq3: Fixed-point fractional library routines. ! (line 165) * __mulha3: Fixed-point fractional library routines. ! (line 175) * __mulhq3: Fixed-point fractional library routines. ! (line 163) * __mulqq3: Fixed-point fractional library routines. ! (line 161) * __mulsa3: Fixed-point fractional library routines. ! (line 177) * __mulsc3: Soft float library routines. (line 237) * __mulsf3: Soft float library routines. *************** Concept Index *** 52632,52640 **** * __mulsi3: Integer library routines. (line 41) * __mulsq3: Fixed-point fractional library routines. ! (line 156) * __multa3: Fixed-point fractional library routines. ! (line 171) * __multc3: Soft float library routines. (line 241) * __multf3: Soft float library routines. --- 52632,52640 ---- * __mulsi3: Integer library routines. (line 41) * __mulsq3: Fixed-point fractional library routines. ! (line 164) * __multa3: Fixed-point fractional library routines. ! (line 179) * __multc3: Soft float library routines. (line 241) * __multf3: Soft float library routines. *************** Concept Index *** 52642,52662 **** * __multi3: Integer library routines. (line 43) * __muluda3: Fixed-point fractional library routines. ! (line 177) * __muludq3: Fixed-point fractional library routines. - (line 165) - * __muluha3: Fixed-point fractional library routines. (line 173) * __muluhq3: Fixed-point fractional library routines. ! (line 161) * __muluqq3: Fixed-point fractional library routines. ! (line 159) * __mulusa3: Fixed-point fractional library routines. ! (line 175) * __mulusq3: Fixed-point fractional library routines. ! (line 163) * __muluta3: Fixed-point fractional library routines. ! (line 179) * __mulvdi3: Integer library routines. (line 114) * __mulvsi3: Integer library routines. --- 52642,52662 ---- * __multi3: Integer library routines. (line 43) * __muluda3: Fixed-point fractional library routines. ! (line 185) * __muludq3: Fixed-point fractional library routines. (line 173) + * __muluha3: Fixed-point fractional library routines. + (line 181) * __muluhq3: Fixed-point fractional library routines. ! (line 169) * __muluqq3: Fixed-point fractional library routines. ! (line 167) * __mulusa3: Fixed-point fractional library routines. ! (line 183) * __mulusq3: Fixed-point fractional library routines. ! (line 171) * __muluta3: Fixed-point fractional library routines. ! (line 187) * __mulvdi3: Integer library routines. (line 114) * __mulvsi3: Integer library routines. *************** Concept Index *** 52668,52714 **** * __nedf2: Soft float library routines. (line 199) * __negda2: Fixed-point fractional library routines. ! (line 298) * __negdf2: Soft float library routines. (line 55) * __negdi2: Integer library routines. (line 46) * __negdq2: Fixed-point fractional library routines. - (line 288) - * __negha2: Fixed-point fractional library routines. (line 296) * __neghq2: Fixed-point fractional library routines. ! (line 286) * __negqq2: Fixed-point fractional library routines. ! (line 285) * __negsa2: Fixed-point fractional library routines. ! (line 297) * __negsf2: Soft float library routines. (line 54) * __negsq2: Fixed-point fractional library routines. ! (line 287) * __negta2: Fixed-point fractional library routines. ! (line 299) * __negtf2: Soft float library routines. (line 56) * __negti2: Integer library routines. (line 47) * __neguda2: Fixed-point fractional library routines. ! (line 303) * __negudq2: Fixed-point fractional library routines. ! (line 294) * __neguha2: Fixed-point fractional library routines. ! (line 300) * __neguhq2: Fixed-point fractional library routines. ! (line 291) * __neguqq2: Fixed-point fractional library routines. ! (line 289) * __negusa2: Fixed-point fractional library routines. ! (line 302) * __negusq2: Fixed-point fractional library routines. ! (line 292) * __neguta2: Fixed-point fractional library routines. ! (line 305) * __negvdi2: Integer library routines. (line 118) * __negvsi2: Integer library routines. --- 52668,52714 ---- * __nedf2: Soft float library routines. (line 199) * __negda2: Fixed-point fractional library routines. ! (line 306) * __negdf2: Soft float library routines. (line 55) * __negdi2: Integer library routines. (line 46) * __negdq2: Fixed-point fractional library routines. (line 296) + * __negha2: Fixed-point fractional library routines. + (line 304) * __neghq2: Fixed-point fractional library routines. ! (line 294) * __negqq2: Fixed-point fractional library routines. ! (line 293) * __negsa2: Fixed-point fractional library routines. ! (line 305) * __negsf2: Soft float library routines. (line 54) * __negsq2: Fixed-point fractional library routines. ! (line 295) * __negta2: Fixed-point fractional library routines. ! (line 307) * __negtf2: Soft float library routines. (line 56) * __negti2: Integer library routines. (line 47) * __neguda2: Fixed-point fractional library routines. ! (line 311) * __negudq2: Fixed-point fractional library routines. ! (line 302) * __neguha2: Fixed-point fractional library routines. ! (line 308) * __neguhq2: Fixed-point fractional library routines. ! (line 299) * __neguqq2: Fixed-point fractional library routines. ! (line 297) * __negusa2: Fixed-point fractional library routines. ! (line 310) * __negusq2: Fixed-point fractional library routines. ! (line 300) * __neguta2: Fixed-point fractional library routines. ! (line 313) * __negvdi2: Integer library routines. (line 118) * __negvsi2: Integer library routines. *************** Concept Index *** 52740,53742 **** * __powixf2: Soft float library routines. (line 234) * __satfractdadq: Fixed-point fractional library routines. ! (line 1152) * __satfractdaha2: Fixed-point fractional library routines. ! (line 1153) * __satfractdahq: Fixed-point fractional library routines. ! (line 1150) * __satfractdaqq: Fixed-point fractional library routines. ! (line 1149) * __satfractdasa2: Fixed-point fractional library routines. ! (line 1154) * __satfractdasq: Fixed-point fractional library routines. ! (line 1151) * __satfractdata2: Fixed-point fractional library routines. ! (line 1155) * __satfractdauda: Fixed-point fractional library routines. ! (line 1165) * __satfractdaudq: Fixed-point fractional library routines. ! (line 1160) * __satfractdauha: Fixed-point fractional library routines. ! (line 1162) * __satfractdauhq: Fixed-point fractional library routines. ! (line 1158) * __satfractdauqq: Fixed-point fractional library routines. - (line 1156) - * __satfractdausa: Fixed-point fractional library routines. (line 1164) * __satfractdausq: Fixed-point fractional library routines. ! (line 1159) * __satfractdauta: Fixed-point fractional library routines. ! (line 1166) * __satfractdfda: Fixed-point fractional library routines. ! (line 1505) * __satfractdfdq: Fixed-point fractional library routines. ! (line 1502) * __satfractdfha: Fixed-point fractional library routines. ! (line 1503) * __satfractdfhq: Fixed-point fractional library routines. ! (line 1500) * __satfractdfqq: Fixed-point fractional library routines. ! (line 1499) * __satfractdfsa: Fixed-point fractional library routines. ! (line 1504) * __satfractdfsq: Fixed-point fractional library routines. ! (line 1501) * __satfractdfta: Fixed-point fractional library routines. - (line 1506) - * __satfractdfuda: Fixed-point fractional library routines. (line 1514) * __satfractdfudq: Fixed-point fractional library routines. ! (line 1510) * __satfractdfuha: Fixed-point fractional library routines. ! (line 1512) * __satfractdfuhq: Fixed-point fractional library routines. ! (line 1508) * __satfractdfuqq: Fixed-point fractional library routines. ! (line 1507) * __satfractdfusa: Fixed-point fractional library routines. ! (line 1513) * __satfractdfusq: Fixed-point fractional library routines. ! (line 1509) * __satfractdfuta: Fixed-point fractional library routines. ! (line 1515) * __satfractdida: Fixed-point fractional library routines. ! (line 1455) * __satfractdidq: Fixed-point fractional library routines. ! (line 1452) * __satfractdiha: Fixed-point fractional library routines. ! (line 1453) * __satfractdihq: Fixed-point fractional library routines. ! (line 1450) * __satfractdiqq: Fixed-point fractional library routines. ! (line 1449) * __satfractdisa: Fixed-point fractional library routines. ! (line 1454) * __satfractdisq: Fixed-point fractional library routines. ! (line 1451) * __satfractdita: Fixed-point fractional library routines. ! (line 1456) * __satfractdiuda: Fixed-point fractional library routines. ! (line 1463) * __satfractdiudq: Fixed-point fractional library routines. ! (line 1460) * __satfractdiuha: Fixed-point fractional library routines. ! (line 1461) * __satfractdiuhq: Fixed-point fractional library routines. ! (line 1458) * __satfractdiuqq: Fixed-point fractional library routines. ! (line 1457) * __satfractdiusa: Fixed-point fractional library routines. ! (line 1462) * __satfractdiusq: Fixed-point fractional library routines. ! (line 1459) * __satfractdiuta: Fixed-point fractional library routines. ! (line 1464) * __satfractdqda: Fixed-point fractional library routines. ! (line 1097) * __satfractdqha: Fixed-point fractional library routines. ! (line 1095) * __satfractdqhq2: Fixed-point fractional library routines. ! (line 1093) * __satfractdqqq2: Fixed-point fractional library routines. ! (line 1092) * __satfractdqsa: Fixed-point fractional library routines. ! (line 1096) * __satfractdqsq2: Fixed-point fractional library routines. ! (line 1094) * __satfractdqta: Fixed-point fractional library routines. ! (line 1098) * __satfractdquda: Fixed-point fractional library routines. ! (line 1109) * __satfractdqudq: Fixed-point fractional library routines. ! (line 1104) * __satfractdquha: Fixed-point fractional library routines. ! (line 1106) * __satfractdquhq: Fixed-point fractional library routines. ! (line 1101) * __satfractdquqq: Fixed-point fractional library routines. ! (line 1099) * __satfractdqusa: Fixed-point fractional library routines. ! (line 1108) * __satfractdqusq: Fixed-point fractional library routines. ! (line 1102) * __satfractdquta: Fixed-point fractional library routines. ! (line 1111) * __satfracthada2: Fixed-point fractional library routines. ! (line 1118) * __satfracthadq: Fixed-point fractional library routines. ! (line 1116) * __satfracthahq: Fixed-point fractional library routines. ! (line 1114) * __satfracthaqq: Fixed-point fractional library routines. ! (line 1113) * __satfracthasa2: Fixed-point fractional library routines. ! (line 1117) * __satfracthasq: Fixed-point fractional library routines. ! (line 1115) * __satfracthata2: Fixed-point fractional library routines. ! (line 1119) * __satfracthauda: Fixed-point fractional library routines. ! (line 1130) * __satfracthaudq: Fixed-point fractional library routines. ! (line 1125) * __satfracthauha: Fixed-point fractional library routines. ! (line 1127) * __satfracthauhq: Fixed-point fractional library routines. ! (line 1122) * __satfracthauqq: Fixed-point fractional library routines. ! (line 1120) * __satfracthausa: Fixed-point fractional library routines. ! (line 1129) * __satfracthausq: Fixed-point fractional library routines. ! (line 1123) * __satfracthauta: Fixed-point fractional library routines. ! (line 1132) * __satfracthida: Fixed-point fractional library routines. ! (line 1423) * __satfracthidq: Fixed-point fractional library routines. ! (line 1420) * __satfracthiha: Fixed-point fractional library routines. ! (line 1421) * __satfracthihq: Fixed-point fractional library routines. ! (line 1418) * __satfracthiqq: Fixed-point fractional library routines. ! (line 1417) * __satfracthisa: Fixed-point fractional library routines. ! (line 1422) * __satfracthisq: Fixed-point fractional library routines. ! (line 1419) * __satfracthita: Fixed-point fractional library routines. ! (line 1424) * __satfracthiuda: Fixed-point fractional library routines. ! (line 1431) * __satfracthiudq: Fixed-point fractional library routines. ! (line 1428) * __satfracthiuha: Fixed-point fractional library routines. ! (line 1429) * __satfracthiuhq: Fixed-point fractional library routines. ! (line 1426) * __satfracthiuqq: Fixed-point fractional library routines. ! (line 1425) * __satfracthiusa: Fixed-point fractional library routines. ! (line 1430) * __satfracthiusq: Fixed-point fractional library routines. ! (line 1427) * __satfracthiuta: Fixed-point fractional library routines. ! (line 1432) * __satfracthqda: Fixed-point fractional library routines. ! (line 1063) * __satfracthqdq2: Fixed-point fractional library routines. ! (line 1060) * __satfracthqha: Fixed-point fractional library routines. ! (line 1061) * __satfracthqqq2: Fixed-point fractional library routines. ! (line 1058) * __satfracthqsa: Fixed-point fractional library routines. ! (line 1062) * __satfracthqsq2: Fixed-point fractional library routines. ! (line 1059) * __satfracthqta: Fixed-point fractional library routines. ! (line 1064) * __satfracthquda: Fixed-point fractional library routines. ! (line 1071) * __satfracthqudq: Fixed-point fractional library routines. ! (line 1068) * __satfracthquha: Fixed-point fractional library routines. ! (line 1069) * __satfracthquhq: Fixed-point fractional library routines. ! (line 1066) * __satfracthquqq: Fixed-point fractional library routines. ! (line 1065) * __satfracthqusa: Fixed-point fractional library routines. ! (line 1070) * __satfracthqusq: Fixed-point fractional library routines. ! (line 1067) * __satfracthquta: Fixed-point fractional library routines. ! (line 1072) * __satfractqida: Fixed-point fractional library routines. ! (line 1401) * __satfractqidq: Fixed-point fractional library routines. ! (line 1398) * __satfractqiha: Fixed-point fractional library routines. ! (line 1399) * __satfractqihq: Fixed-point fractional library routines. ! (line 1396) * __satfractqiqq: Fixed-point fractional library routines. ! (line 1395) * __satfractqisa: Fixed-point fractional library routines. ! (line 1400) * __satfractqisq: Fixed-point fractional library routines. ! (line 1397) * __satfractqita: Fixed-point fractional library routines. ! (line 1402) * __satfractqiuda: Fixed-point fractional library routines. ! (line 1413) * __satfractqiudq: Fixed-point fractional library routines. ! (line 1408) * __satfractqiuha: Fixed-point fractional library routines. ! (line 1410) * __satfractqiuhq: Fixed-point fractional library routines. ! (line 1405) * __satfractqiuqq: Fixed-point fractional library routines. ! (line 1403) * __satfractqiusa: Fixed-point fractional library routines. ! (line 1412) * __satfractqiusq: Fixed-point fractional library routines. ! (line 1406) * __satfractqiuta: Fixed-point fractional library routines. ! (line 1415) * __satfractqqda: Fixed-point fractional library routines. ! (line 1042) * __satfractqqdq2: Fixed-point fractional library routines. ! (line 1039) * __satfractqqha: Fixed-point fractional library routines. ! (line 1040) * __satfractqqhq2: Fixed-point fractional library routines. ! (line 1037) * __satfractqqsa: Fixed-point fractional library routines. ! (line 1041) * __satfractqqsq2: Fixed-point fractional library routines. ! (line 1038) * __satfractqqta: Fixed-point fractional library routines. ! (line 1043) * __satfractqquda: Fixed-point fractional library routines. ! (line 1054) * __satfractqqudq: Fixed-point fractional library routines. ! (line 1049) * __satfractqquha: Fixed-point fractional library routines. ! (line 1051) * __satfractqquhq: Fixed-point fractional library routines. ! (line 1046) * __satfractqquqq: Fixed-point fractional library routines. ! (line 1044) * __satfractqqusa: Fixed-point fractional library routines. ! (line 1053) * __satfractqqusq: Fixed-point fractional library routines. ! (line 1047) * __satfractqquta: Fixed-point fractional library routines. ! (line 1056) * __satfractsada2: Fixed-point fractional library routines. ! (line 1139) * __satfractsadq: Fixed-point fractional library routines. ! (line 1137) * __satfractsaha2: Fixed-point fractional library routines. ! (line 1138) * __satfractsahq: Fixed-point fractional library routines. ! (line 1135) * __satfractsaqq: Fixed-point fractional library routines. ! (line 1134) * __satfractsasq: Fixed-point fractional library routines. ! (line 1136) * __satfractsata2: Fixed-point fractional library routines. ! (line 1140) * __satfractsauda: Fixed-point fractional library routines. ! (line 1147) * __satfractsaudq: Fixed-point fractional library routines. ! (line 1144) * __satfractsauha: Fixed-point fractional library routines. ! (line 1145) * __satfractsauhq: Fixed-point fractional library routines. ! (line 1142) * __satfractsauqq: Fixed-point fractional library routines. ! (line 1141) * __satfractsausa: Fixed-point fractional library routines. ! (line 1146) * __satfractsausq: Fixed-point fractional library routines. ! (line 1143) * __satfractsauta: Fixed-point fractional library routines. ! (line 1148) * __satfractsfda: Fixed-point fractional library routines. ! (line 1489) * __satfractsfdq: Fixed-point fractional library routines. ! (line 1486) * __satfractsfha: Fixed-point fractional library routines. ! (line 1487) * __satfractsfhq: Fixed-point fractional library routines. ! (line 1484) * __satfractsfqq: Fixed-point fractional library routines. ! (line 1483) * __satfractsfsa: Fixed-point fractional library routines. ! (line 1488) * __satfractsfsq: Fixed-point fractional library routines. ! (line 1485) * __satfractsfta: Fixed-point fractional library routines. ! (line 1490) * __satfractsfuda: Fixed-point fractional library routines. ! (line 1497) * __satfractsfudq: Fixed-point fractional library routines. ! (line 1494) * __satfractsfuha: Fixed-point fractional library routines. ! (line 1495) * __satfractsfuhq: Fixed-point fractional library routines. ! (line 1492) * __satfractsfuqq: Fixed-point fractional library routines. ! (line 1491) * __satfractsfusa: Fixed-point fractional library routines. ! (line 1496) * __satfractsfusq: Fixed-point fractional library routines. ! (line 1493) * __satfractsfuta: Fixed-point fractional library routines. ! (line 1498) * __satfractsida: Fixed-point fractional library routines. ! (line 1439) * __satfractsidq: Fixed-point fractional library routines. ! (line 1436) * __satfractsiha: Fixed-point fractional library routines. ! (line 1437) * __satfractsihq: Fixed-point fractional library routines. ! (line 1434) * __satfractsiqq: Fixed-point fractional library routines. ! (line 1433) * __satfractsisa: Fixed-point fractional library routines. ! (line 1438) * __satfractsisq: Fixed-point fractional library routines. ! (line 1435) * __satfractsita: Fixed-point fractional library routines. ! (line 1440) * __satfractsiuda: Fixed-point fractional library routines. ! (line 1447) * __satfractsiudq: Fixed-point fractional library routines. ! (line 1444) * __satfractsiuha: Fixed-point fractional library routines. ! (line 1445) * __satfractsiuhq: Fixed-point fractional library routines. ! (line 1442) * __satfractsiuqq: Fixed-point fractional library routines. ! (line 1441) * __satfractsiusa: Fixed-point fractional library routines. ! (line 1446) * __satfractsiusq: Fixed-point fractional library routines. ! (line 1443) * __satfractsiuta: Fixed-point fractional library routines. ! (line 1448) * __satfractsqda: Fixed-point fractional library routines. ! (line 1078) * __satfractsqdq2: Fixed-point fractional library routines. ! (line 1075) * __satfractsqha: Fixed-point fractional library routines. ! (line 1076) * __satfractsqhq2: Fixed-point fractional library routines. ! (line 1074) * __satfractsqqq2: Fixed-point fractional library routines. ! (line 1073) * __satfractsqsa: Fixed-point fractional library routines. ! (line 1077) * __satfractsqta: Fixed-point fractional library routines. ! (line 1079) * __satfractsquda: Fixed-point fractional library routines. ! (line 1089) * __satfractsqudq: Fixed-point fractional library routines. ! (line 1084) * __satfractsquha: Fixed-point fractional library routines. ! (line 1086) * __satfractsquhq: Fixed-point fractional library routines. ! (line 1082) * __satfractsquqq: Fixed-point fractional library routines. - (line 1080) - * __satfractsqusa: Fixed-point fractional library routines. (line 1088) * __satfractsqusq: Fixed-point fractional library routines. ! (line 1083) * __satfractsquta: Fixed-point fractional library routines. ! (line 1090) * __satfracttada2: Fixed-point fractional library routines. ! (line 1174) * __satfracttadq: Fixed-point fractional library routines. ! (line 1171) * __satfracttaha2: Fixed-point fractional library routines. ! (line 1172) * __satfracttahq: Fixed-point fractional library routines. ! (line 1169) * __satfracttaqq: Fixed-point fractional library routines. ! (line 1168) * __satfracttasa2: Fixed-point fractional library routines. ! (line 1173) * __satfracttasq: Fixed-point fractional library routines. ! (line 1170) * __satfracttauda: Fixed-point fractional library routines. ! (line 1185) * __satfracttaudq: Fixed-point fractional library routines. ! (line 1180) * __satfracttauha: Fixed-point fractional library routines. ! (line 1182) * __satfracttauhq: Fixed-point fractional library routines. ! (line 1177) * __satfracttauqq: Fixed-point fractional library routines. ! (line 1175) * __satfracttausa: Fixed-point fractional library routines. ! (line 1184) * __satfracttausq: Fixed-point fractional library routines. ! (line 1178) * __satfracttauta: Fixed-point fractional library routines. ! (line 1187) * __satfracttida: Fixed-point fractional library routines. ! (line 1471) * __satfracttidq: Fixed-point fractional library routines. ! (line 1468) * __satfracttiha: Fixed-point fractional library routines. ! (line 1469) * __satfracttihq: Fixed-point fractional library routines. ! (line 1466) * __satfracttiqq: Fixed-point fractional library routines. ! (line 1465) * __satfracttisa: Fixed-point fractional library routines. ! (line 1470) * __satfracttisq: Fixed-point fractional library routines. ! (line 1467) * __satfracttita: Fixed-point fractional library routines. - (line 1472) - * __satfracttiuda: Fixed-point fractional library routines. (line 1480) * __satfracttiudq: Fixed-point fractional library routines. ! (line 1476) * __satfracttiuha: Fixed-point fractional library routines. ! (line 1478) * __satfracttiuhq: Fixed-point fractional library routines. ! (line 1474) * __satfracttiuqq: Fixed-point fractional library routines. ! (line 1473) * __satfracttiusa: Fixed-point fractional library routines. ! (line 1479) * __satfracttiusq: Fixed-point fractional library routines. ! (line 1475) * __satfracttiuta: Fixed-point fractional library routines. ! (line 1481) * __satfractudada: Fixed-point fractional library routines. ! (line 1350) * __satfractudadq: Fixed-point fractional library routines. ! (line 1345) * __satfractudaha: Fixed-point fractional library routines. ! (line 1347) * __satfractudahq: Fixed-point fractional library routines. ! (line 1343) * __satfractudaqq: Fixed-point fractional library routines. - (line 1341) - * __satfractudasa: Fixed-point fractional library routines. (line 1349) * __satfractudasq: Fixed-point fractional library routines. ! (line 1344) * __satfractudata: Fixed-point fractional library routines. - (line 1351) - * __satfractudaudq: Fixed-point fractional library routines. (line 1359) * __satfractudauha2: Fixed-point fractional library routines. ! (line 1361) * __satfractudauhq: Fixed-point fractional library routines. ! (line 1355) * __satfractudauqq: Fixed-point fractional library routines. ! (line 1353) * __satfractudausa2: Fixed-point fractional library routines. ! (line 1363) * __satfractudausq: Fixed-point fractional library routines. - (line 1357) - * __satfractudauta2: Fixed-point fractional library routines. (line 1365) * __satfractudqda: Fixed-point fractional library routines. ! (line 1274) * __satfractudqdq: Fixed-point fractional library routines. ! (line 1269) * __satfractudqha: Fixed-point fractional library routines. ! (line 1271) * __satfractudqhq: Fixed-point fractional library routines. ! (line 1266) * __satfractudqqq: Fixed-point fractional library routines. ! (line 1264) * __satfractudqsa: Fixed-point fractional library routines. ! (line 1273) * __satfractudqsq: Fixed-point fractional library routines. ! (line 1267) * __satfractudqta: Fixed-point fractional library routines. ! (line 1276) * __satfractudquda: Fixed-point fractional library routines. ! (line 1288) * __satfractudquha: Fixed-point fractional library routines. ! (line 1284) * __satfractudquhq2: Fixed-point fractional library routines. ! (line 1280) * __satfractudquqq2: Fixed-point fractional library routines. - (line 1278) - * __satfractudqusa: Fixed-point fractional library routines. (line 1286) * __satfractudqusq2: Fixed-point fractional library routines. - (line 1282) - * __satfractudquta: Fixed-point fractional library routines. (line 1290) * __satfractuhada: Fixed-point fractional library routines. ! (line 1302) * __satfractuhadq: Fixed-point fractional library routines. ! (line 1297) * __satfractuhaha: Fixed-point fractional library routines. ! (line 1299) * __satfractuhahq: Fixed-point fractional library routines. ! (line 1294) * __satfractuhaqq: Fixed-point fractional library routines. ! (line 1292) * __satfractuhasa: Fixed-point fractional library routines. ! (line 1301) * __satfractuhasq: Fixed-point fractional library routines. ! (line 1295) * __satfractuhata: Fixed-point fractional library routines. ! (line 1304) * __satfractuhauda2: Fixed-point fractional library routines. ! (line 1316) * __satfractuhaudq: Fixed-point fractional library routines. ! (line 1312) * __satfractuhauhq: Fixed-point fractional library routines. ! (line 1308) * __satfractuhauqq: Fixed-point fractional library routines. - (line 1306) - * __satfractuhausa2: Fixed-point fractional library routines. (line 1314) * __satfractuhausq: Fixed-point fractional library routines. - (line 1310) - * __satfractuhauta2: Fixed-point fractional library routines. (line 1318) * __satfractuhqda: Fixed-point fractional library routines. ! (line 1223) * __satfractuhqdq: Fixed-point fractional library routines. ! (line 1220) * __satfractuhqha: Fixed-point fractional library routines. ! (line 1221) * __satfractuhqhq: Fixed-point fractional library routines. ! (line 1218) * __satfractuhqqq: Fixed-point fractional library routines. ! (line 1217) * __satfractuhqsa: Fixed-point fractional library routines. ! (line 1222) * __satfractuhqsq: Fixed-point fractional library routines. ! (line 1219) * __satfractuhqta: Fixed-point fractional library routines. ! (line 1224) * __satfractuhquda: Fixed-point fractional library routines. ! (line 1234) * __satfractuhqudq2: Fixed-point fractional library routines. ! (line 1229) * __satfractuhquha: Fixed-point fractional library routines. ! (line 1231) * __satfractuhquqq2: Fixed-point fractional library routines. - (line 1225) - * __satfractuhqusa: Fixed-point fractional library routines. (line 1233) * __satfractuhqusq2: Fixed-point fractional library routines. ! (line 1227) * __satfractuhquta: Fixed-point fractional library routines. ! (line 1236) * __satfractunsdida: Fixed-point fractional library routines. ! (line 1833) * __satfractunsdidq: Fixed-point fractional library routines. ! (line 1829) * __satfractunsdiha: Fixed-point fractional library routines. ! (line 1831) * __satfractunsdihq: Fixed-point fractional library routines. ! (line 1827) * __satfractunsdiqq: Fixed-point fractional library routines. ! (line 1826) * __satfractunsdisa: Fixed-point fractional library routines. ! (line 1832) * __satfractunsdisq: Fixed-point fractional library routines. ! (line 1828) * __satfractunsdita: Fixed-point fractional library routines. ! (line 1834) * __satfractunsdiuda: Fixed-point fractional library routines. ! (line 1848) * __satfractunsdiudq: Fixed-point fractional library routines. ! (line 1842) * __satfractunsdiuha: Fixed-point fractional library routines. ! (line 1844) * __satfractunsdiuhq: Fixed-point fractional library routines. ! (line 1838) * __satfractunsdiuqq: Fixed-point fractional library routines. ! (line 1836) * __satfractunsdiusa: Fixed-point fractional library routines. ! (line 1846) * __satfractunsdiusq: Fixed-point fractional library routines. ! (line 1840) * __satfractunsdiuta: Fixed-point fractional library routines. ! (line 1850) * __satfractunshida: Fixed-point fractional library routines. ! (line 1785) * __satfractunshidq: Fixed-point fractional library routines. ! (line 1781) * __satfractunshiha: Fixed-point fractional library routines. ! (line 1783) * __satfractunshihq: Fixed-point fractional library routines. ! (line 1779) * __satfractunshiqq: Fixed-point fractional library routines. ! (line 1778) * __satfractunshisa: Fixed-point fractional library routines. ! (line 1784) * __satfractunshisq: Fixed-point fractional library routines. ! (line 1780) * __satfractunshita: Fixed-point fractional library routines. ! (line 1786) * __satfractunshiuda: Fixed-point fractional library routines. ! (line 1800) * __satfractunshiudq: Fixed-point fractional library routines. ! (line 1794) * __satfractunshiuha: Fixed-point fractional library routines. ! (line 1796) * __satfractunshiuhq: Fixed-point fractional library routines. ! (line 1790) * __satfractunshiuqq: Fixed-point fractional library routines. ! (line 1788) * __satfractunshiusa: Fixed-point fractional library routines. ! (line 1798) * __satfractunshiusq: Fixed-point fractional library routines. ! (line 1792) * __satfractunshiuta: Fixed-point fractional library routines. ! (line 1802) * __satfractunsqida: Fixed-point fractional library routines. ! (line 1759) * __satfractunsqidq: Fixed-point fractional library routines. ! (line 1755) * __satfractunsqiha: Fixed-point fractional library routines. ! (line 1757) * __satfractunsqihq: Fixed-point fractional library routines. ! (line 1753) * __satfractunsqiqq: Fixed-point fractional library routines. ! (line 1752) * __satfractunsqisa: Fixed-point fractional library routines. ! (line 1758) * __satfractunsqisq: Fixed-point fractional library routines. ! (line 1754) * __satfractunsqita: Fixed-point fractional library routines. ! (line 1760) * __satfractunsqiuda: Fixed-point fractional library routines. ! (line 1774) * __satfractunsqiudq: Fixed-point fractional library routines. ! (line 1768) * __satfractunsqiuha: Fixed-point fractional library routines. ! (line 1770) * __satfractunsqiuhq: Fixed-point fractional library routines. ! (line 1764) * __satfractunsqiuqq: Fixed-point fractional library routines. ! (line 1762) * __satfractunsqiusa: Fixed-point fractional library routines. ! (line 1772) * __satfractunsqiusq: Fixed-point fractional library routines. ! (line 1766) * __satfractunsqiuta: Fixed-point fractional library routines. ! (line 1776) * __satfractunssida: Fixed-point fractional library routines. ! (line 1810) * __satfractunssidq: Fixed-point fractional library routines. ! (line 1807) * __satfractunssiha: Fixed-point fractional library routines. ! (line 1808) * __satfractunssihq: Fixed-point fractional library routines. ! (line 1805) * __satfractunssiqq: Fixed-point fractional library routines. ! (line 1804) * __satfractunssisa: Fixed-point fractional library routines. ! (line 1809) * __satfractunssisq: Fixed-point fractional library routines. ! (line 1806) * __satfractunssita: Fixed-point fractional library routines. ! (line 1811) * __satfractunssiuda: Fixed-point fractional library routines. ! (line 1822) * __satfractunssiudq: Fixed-point fractional library routines. ! (line 1817) * __satfractunssiuha: Fixed-point fractional library routines. ! (line 1819) * __satfractunssiuhq: Fixed-point fractional library routines. ! (line 1814) * __satfractunssiuqq: Fixed-point fractional library routines. ! (line 1812) * __satfractunssiusa: Fixed-point fractional library routines. ! (line 1821) * __satfractunssiusq: Fixed-point fractional library routines. ! (line 1815) * __satfractunssiuta: Fixed-point fractional library routines. ! (line 1824) * __satfractunstida: Fixed-point fractional library routines. ! (line 1862) * __satfractunstidq: Fixed-point fractional library routines. ! (line 1857) * __satfractunstiha: Fixed-point fractional library routines. ! (line 1859) * __satfractunstihq: Fixed-point fractional library routines. ! (line 1854) * __satfractunstiqq: Fixed-point fractional library routines. ! (line 1852) * __satfractunstisa: Fixed-point fractional library routines. ! (line 1861) * __satfractunstisq: Fixed-point fractional library routines. ! (line 1855) * __satfractunstita: Fixed-point fractional library routines. ! (line 1864) * __satfractunstiuda: Fixed-point fractional library routines. ! (line 1878) * __satfractunstiudq: Fixed-point fractional library routines. ! (line 1872) * __satfractunstiuha: Fixed-point fractional library routines. ! (line 1874) * __satfractunstiuhq: Fixed-point fractional library routines. ! (line 1868) * __satfractunstiuqq: Fixed-point fractional library routines. ! (line 1866) * __satfractunstiusa: Fixed-point fractional library routines. ! (line 1876) * __satfractunstiusq: Fixed-point fractional library routines. ! (line 1870) * __satfractunstiuta: Fixed-point fractional library routines. ! (line 1880) * __satfractuqqda: Fixed-point fractional library routines. ! (line 1199) * __satfractuqqdq: Fixed-point fractional library routines. ! (line 1194) * __satfractuqqha: Fixed-point fractional library routines. ! (line 1196) * __satfractuqqhq: Fixed-point fractional library routines. ! (line 1191) * __satfractuqqqq: Fixed-point fractional library routines. ! (line 1189) * __satfractuqqsa: Fixed-point fractional library routines. ! (line 1198) * __satfractuqqsq: Fixed-point fractional library routines. ! (line 1192) * __satfractuqqta: Fixed-point fractional library routines. ! (line 1201) * __satfractuqquda: Fixed-point fractional library routines. ! (line 1213) * __satfractuqqudq2: Fixed-point fractional library routines. ! (line 1207) * __satfractuqquha: Fixed-point fractional library routines. ! (line 1209) * __satfractuqquhq2: Fixed-point fractional library routines. - (line 1203) - * __satfractuqqusa: Fixed-point fractional library routines. (line 1211) * __satfractuqqusq2: Fixed-point fractional library routines. ! (line 1205) * __satfractuqquta: Fixed-point fractional library routines. ! (line 1215) * __satfractusada: Fixed-point fractional library routines. ! (line 1326) * __satfractusadq: Fixed-point fractional library routines. ! (line 1323) * __satfractusaha: Fixed-point fractional library routines. ! (line 1324) * __satfractusahq: Fixed-point fractional library routines. ! (line 1321) * __satfractusaqq: Fixed-point fractional library routines. ! (line 1320) * __satfractusasa: Fixed-point fractional library routines. ! (line 1325) * __satfractusasq: Fixed-point fractional library routines. ! (line 1322) * __satfractusata: Fixed-point fractional library routines. ! (line 1327) * __satfractusauda2: Fixed-point fractional library routines. ! (line 1337) * __satfractusaudq: Fixed-point fractional library routines. ! (line 1333) * __satfractusauha2: Fixed-point fractional library routines. ! (line 1335) * __satfractusauhq: Fixed-point fractional library routines. ! (line 1330) * __satfractusauqq: Fixed-point fractional library routines. ! (line 1328) * __satfractusausq: Fixed-point fractional library routines. - (line 1331) - * __satfractusauta2: Fixed-point fractional library routines. (line 1339) * __satfractusqda: Fixed-point fractional library routines. ! (line 1247) * __satfractusqdq: Fixed-point fractional library routines. ! (line 1242) * __satfractusqha: Fixed-point fractional library routines. ! (line 1244) * __satfractusqhq: Fixed-point fractional library routines. ! (line 1240) * __satfractusqqq: Fixed-point fractional library routines. - (line 1238) - * __satfractusqsa: Fixed-point fractional library routines. (line 1246) * __satfractusqsq: Fixed-point fractional library routines. ! (line 1241) * __satfractusqta: Fixed-point fractional library routines. ! (line 1248) * __satfractusquda: Fixed-point fractional library routines. ! (line 1260) * __satfractusqudq2: Fixed-point fractional library routines. ! (line 1254) * __satfractusquha: Fixed-point fractional library routines. ! (line 1256) * __satfractusquhq2: Fixed-point fractional library routines. ! (line 1252) * __satfractusquqq2: Fixed-point fractional library routines. - (line 1250) - * __satfractusqusa: Fixed-point fractional library routines. (line 1258) * __satfractusquta: Fixed-point fractional library routines. ! (line 1262) * __satfractutada: Fixed-point fractional library routines. ! (line 1377) * __satfractutadq: Fixed-point fractional library routines. ! (line 1372) * __satfractutaha: Fixed-point fractional library routines. ! (line 1374) * __satfractutahq: Fixed-point fractional library routines. ! (line 1369) * __satfractutaqq: Fixed-point fractional library routines. ! (line 1367) * __satfractutasa: Fixed-point fractional library routines. ! (line 1376) * __satfractutasq: Fixed-point fractional library routines. ! (line 1370) * __satfractutata: Fixed-point fractional library routines. ! (line 1379) * __satfractutauda2: Fixed-point fractional library routines. ! (line 1393) * __satfractutaudq: Fixed-point fractional library routines. ! (line 1387) * __satfractutauha2: Fixed-point fractional library routines. ! (line 1389) * __satfractutauhq: Fixed-point fractional library routines. ! (line 1383) * __satfractutauqq: Fixed-point fractional library routines. ! (line 1381) * __satfractutausa2: Fixed-point fractional library routines. ! (line 1391) * __satfractutausq: Fixed-point fractional library routines. ! (line 1385) * __splitstack_find: Miscellaneous routines. (line 15) * __ssaddda3: Fixed-point fractional library routines. ! (line 66) * __ssadddq3: Fixed-point fractional library routines. ! (line 61) * __ssaddha3: Fixed-point fractional library routines. ! (line 63) * __ssaddhq3: Fixed-point fractional library routines. ! (line 59) * __ssaddqq3: Fixed-point fractional library routines. - (line 57) - * __ssaddsa3: Fixed-point fractional library routines. (line 65) * __ssaddsq3: Fixed-point fractional library routines. ! (line 60) * __ssaddta3: Fixed-point fractional library routines. ! (line 67) * __ssashlda3: Fixed-point fractional library routines. ! (line 401) * __ssashldq3: Fixed-point fractional library routines. ! (line 397) * __ssashlha3: Fixed-point fractional library routines. ! (line 399) * __ssashlhq3: Fixed-point fractional library routines. ! (line 395) * __ssashlsa3: Fixed-point fractional library routines. ! (line 400) * __ssashlsq3: Fixed-point fractional library routines. ! (line 396) * __ssashlta3: Fixed-point fractional library routines. ! (line 402) * __ssdivda3: Fixed-point fractional library routines. ! (line 260) * __ssdivdq3: Fixed-point fractional library routines. ! (line 255) * __ssdivha3: Fixed-point fractional library routines. ! (line 257) * __ssdivhq3: Fixed-point fractional library routines. ! (line 253) * __ssdivqq3: Fixed-point fractional library routines. - (line 251) - * __ssdivsa3: Fixed-point fractional library routines. (line 259) * __ssdivsq3: Fixed-point fractional library routines. ! (line 254) * __ssdivta3: Fixed-point fractional library routines. ! (line 261) * __ssmulda3: Fixed-point fractional library routines. ! (line 192) * __ssmuldq3: Fixed-point fractional library routines. ! (line 187) * __ssmulha3: Fixed-point fractional library routines. ! (line 189) * __ssmulhq3: Fixed-point fractional library routines. ! (line 185) * __ssmulqq3: Fixed-point fractional library routines. - (line 183) - * __ssmulsa3: Fixed-point fractional library routines. (line 191) * __ssmulsq3: Fixed-point fractional library routines. ! (line 186) * __ssmulta3: Fixed-point fractional library routines. ! (line 193) * __ssnegda2: Fixed-point fractional library routines. ! (line 315) * __ssnegdq2: Fixed-point fractional library routines. ! (line 312) * __ssnegha2: Fixed-point fractional library routines. ! (line 313) * __ssneghq2: Fixed-point fractional library routines. ! (line 310) * __ssnegqq2: Fixed-point fractional library routines. ! (line 309) * __ssnegsa2: Fixed-point fractional library routines. ! (line 314) * __ssnegsq2: Fixed-point fractional library routines. ! (line 311) * __ssnegta2: Fixed-point fractional library routines. ! (line 316) * __sssubda3: Fixed-point fractional library routines. ! (line 128) * __sssubdq3: Fixed-point fractional library routines. ! (line 123) * __sssubha3: Fixed-point fractional library routines. ! (line 125) * __sssubhq3: Fixed-point fractional library routines. ! (line 121) * __sssubqq3: Fixed-point fractional library routines. - (line 119) - * __sssubsa3: Fixed-point fractional library routines. (line 127) * __sssubsq3: Fixed-point fractional library routines. ! (line 122) * __sssubta3: Fixed-point fractional library routines. ! (line 129) * __subda3: Fixed-point fractional library routines. ! (line 106) * __subdf3: Soft float library routines. (line 30) * __subdq3: Fixed-point fractional library routines. ! (line 93) * __subha3: Fixed-point fractional library routines. ! (line 103) * __subhq3: Fixed-point fractional library routines. ! (line 91) * __subqq3: Fixed-point fractional library routines. ! (line 89) * __subsa3: Fixed-point fractional library routines. ! (line 105) * __subsf3: Soft float library routines. (line 29) * __subsq3: Fixed-point fractional library routines. ! (line 92) * __subta3: Fixed-point fractional library routines. ! (line 107) * __subtf3: Soft float library routines. (line 31) * __subuda3: Fixed-point fractional library routines. ! (line 113) * __subudq3: Fixed-point fractional library routines. - (line 101) - * __subuha3: Fixed-point fractional library routines. (line 109) * __subuhq3: Fixed-point fractional library routines. ! (line 97) * __subuqq3: Fixed-point fractional library routines. ! (line 95) * __subusa3: Fixed-point fractional library routines. ! (line 111) * __subusq3: Fixed-point fractional library routines. ! (line 99) * __subuta3: Fixed-point fractional library routines. ! (line 115) * __subvdi3: Integer library routines. (line 122) * __subvsi3: Integer library routines. --- 52740,53742 ---- * __powixf2: Soft float library routines. (line 234) * __satfractdadq: Fixed-point fractional library routines. ! (line 1160) * __satfractdaha2: Fixed-point fractional library routines. ! (line 1161) * __satfractdahq: Fixed-point fractional library routines. ! (line 1158) * __satfractdaqq: Fixed-point fractional library routines. ! (line 1157) * __satfractdasa2: Fixed-point fractional library routines. ! (line 1162) * __satfractdasq: Fixed-point fractional library routines. ! (line 1159) * __satfractdata2: Fixed-point fractional library routines. ! (line 1163) * __satfractdauda: Fixed-point fractional library routines. ! (line 1173) * __satfractdaudq: Fixed-point fractional library routines. ! (line 1168) * __satfractdauha: Fixed-point fractional library routines. ! (line 1170) * __satfractdauhq: Fixed-point fractional library routines. ! (line 1166) * __satfractdauqq: Fixed-point fractional library routines. (line 1164) + * __satfractdausa: Fixed-point fractional library routines. + (line 1172) * __satfractdausq: Fixed-point fractional library routines. ! (line 1167) * __satfractdauta: Fixed-point fractional library routines. ! (line 1174) * __satfractdfda: Fixed-point fractional library routines. ! (line 1513) * __satfractdfdq: Fixed-point fractional library routines. ! (line 1510) * __satfractdfha: Fixed-point fractional library routines. ! (line 1511) * __satfractdfhq: Fixed-point fractional library routines. ! (line 1508) * __satfractdfqq: Fixed-point fractional library routines. ! (line 1507) * __satfractdfsa: Fixed-point fractional library routines. ! (line 1512) * __satfractdfsq: Fixed-point fractional library routines. ! (line 1509) * __satfractdfta: Fixed-point fractional library routines. (line 1514) + * __satfractdfuda: Fixed-point fractional library routines. + (line 1522) * __satfractdfudq: Fixed-point fractional library routines. ! (line 1518) * __satfractdfuha: Fixed-point fractional library routines. ! (line 1520) * __satfractdfuhq: Fixed-point fractional library routines. ! (line 1516) * __satfractdfuqq: Fixed-point fractional library routines. ! (line 1515) * __satfractdfusa: Fixed-point fractional library routines. ! (line 1521) * __satfractdfusq: Fixed-point fractional library routines. ! (line 1517) * __satfractdfuta: Fixed-point fractional library routines. ! (line 1523) * __satfractdida: Fixed-point fractional library routines. ! (line 1463) * __satfractdidq: Fixed-point fractional library routines. ! (line 1460) * __satfractdiha: Fixed-point fractional library routines. ! (line 1461) * __satfractdihq: Fixed-point fractional library routines. ! (line 1458) * __satfractdiqq: Fixed-point fractional library routines. ! (line 1457) * __satfractdisa: Fixed-point fractional library routines. ! (line 1462) * __satfractdisq: Fixed-point fractional library routines. ! (line 1459) * __satfractdita: Fixed-point fractional library routines. ! (line 1464) * __satfractdiuda: Fixed-point fractional library routines. ! (line 1471) * __satfractdiudq: Fixed-point fractional library routines. ! (line 1468) * __satfractdiuha: Fixed-point fractional library routines. ! (line 1469) * __satfractdiuhq: Fixed-point fractional library routines. ! (line 1466) * __satfractdiuqq: Fixed-point fractional library routines. ! (line 1465) * __satfractdiusa: Fixed-point fractional library routines. ! (line 1470) * __satfractdiusq: Fixed-point fractional library routines. ! (line 1467) * __satfractdiuta: Fixed-point fractional library routines. ! (line 1472) * __satfractdqda: Fixed-point fractional library routines. ! (line 1105) * __satfractdqha: Fixed-point fractional library routines. ! (line 1103) * __satfractdqhq2: Fixed-point fractional library routines. ! (line 1101) * __satfractdqqq2: Fixed-point fractional library routines. ! (line 1100) * __satfractdqsa: Fixed-point fractional library routines. ! (line 1104) * __satfractdqsq2: Fixed-point fractional library routines. ! (line 1102) * __satfractdqta: Fixed-point fractional library routines. ! (line 1106) * __satfractdquda: Fixed-point fractional library routines. ! (line 1117) * __satfractdqudq: Fixed-point fractional library routines. ! (line 1112) * __satfractdquha: Fixed-point fractional library routines. ! (line 1114) * __satfractdquhq: Fixed-point fractional library routines. ! (line 1109) * __satfractdquqq: Fixed-point fractional library routines. ! (line 1107) * __satfractdqusa: Fixed-point fractional library routines. ! (line 1116) * __satfractdqusq: Fixed-point fractional library routines. ! (line 1110) * __satfractdquta: Fixed-point fractional library routines. ! (line 1119) * __satfracthada2: Fixed-point fractional library routines. ! (line 1126) * __satfracthadq: Fixed-point fractional library routines. ! (line 1124) * __satfracthahq: Fixed-point fractional library routines. ! (line 1122) * __satfracthaqq: Fixed-point fractional library routines. ! (line 1121) * __satfracthasa2: Fixed-point fractional library routines. ! (line 1125) * __satfracthasq: Fixed-point fractional library routines. ! (line 1123) * __satfracthata2: Fixed-point fractional library routines. ! (line 1127) * __satfracthauda: Fixed-point fractional library routines. ! (line 1138) * __satfracthaudq: Fixed-point fractional library routines. ! (line 1133) * __satfracthauha: Fixed-point fractional library routines. ! (line 1135) * __satfracthauhq: Fixed-point fractional library routines. ! (line 1130) * __satfracthauqq: Fixed-point fractional library routines. ! (line 1128) * __satfracthausa: Fixed-point fractional library routines. ! (line 1137) * __satfracthausq: Fixed-point fractional library routines. ! (line 1131) * __satfracthauta: Fixed-point fractional library routines. ! (line 1140) * __satfracthida: Fixed-point fractional library routines. ! (line 1431) * __satfracthidq: Fixed-point fractional library routines. ! (line 1428) * __satfracthiha: Fixed-point fractional library routines. ! (line 1429) * __satfracthihq: Fixed-point fractional library routines. ! (line 1426) * __satfracthiqq: Fixed-point fractional library routines. ! (line 1425) * __satfracthisa: Fixed-point fractional library routines. ! (line 1430) * __satfracthisq: Fixed-point fractional library routines. ! (line 1427) * __satfracthita: Fixed-point fractional library routines. ! (line 1432) * __satfracthiuda: Fixed-point fractional library routines. ! (line 1439) * __satfracthiudq: Fixed-point fractional library routines. ! (line 1436) * __satfracthiuha: Fixed-point fractional library routines. ! (line 1437) * __satfracthiuhq: Fixed-point fractional library routines. ! (line 1434) * __satfracthiuqq: Fixed-point fractional library routines. ! (line 1433) * __satfracthiusa: Fixed-point fractional library routines. ! (line 1438) * __satfracthiusq: Fixed-point fractional library routines. ! (line 1435) * __satfracthiuta: Fixed-point fractional library routines. ! (line 1440) * __satfracthqda: Fixed-point fractional library routines. ! (line 1071) * __satfracthqdq2: Fixed-point fractional library routines. ! (line 1068) * __satfracthqha: Fixed-point fractional library routines. ! (line 1069) * __satfracthqqq2: Fixed-point fractional library routines. ! (line 1066) * __satfracthqsa: Fixed-point fractional library routines. ! (line 1070) * __satfracthqsq2: Fixed-point fractional library routines. ! (line 1067) * __satfracthqta: Fixed-point fractional library routines. ! (line 1072) * __satfracthquda: Fixed-point fractional library routines. ! (line 1079) * __satfracthqudq: Fixed-point fractional library routines. ! (line 1076) * __satfracthquha: Fixed-point fractional library routines. ! (line 1077) * __satfracthquhq: Fixed-point fractional library routines. ! (line 1074) * __satfracthquqq: Fixed-point fractional library routines. ! (line 1073) * __satfracthqusa: Fixed-point fractional library routines. ! (line 1078) * __satfracthqusq: Fixed-point fractional library routines. ! (line 1075) * __satfracthquta: Fixed-point fractional library routines. ! (line 1080) * __satfractqida: Fixed-point fractional library routines. ! (line 1409) * __satfractqidq: Fixed-point fractional library routines. ! (line 1406) * __satfractqiha: Fixed-point fractional library routines. ! (line 1407) * __satfractqihq: Fixed-point fractional library routines. ! (line 1404) * __satfractqiqq: Fixed-point fractional library routines. ! (line 1403) * __satfractqisa: Fixed-point fractional library routines. ! (line 1408) * __satfractqisq: Fixed-point fractional library routines. ! (line 1405) * __satfractqita: Fixed-point fractional library routines. ! (line 1410) * __satfractqiuda: Fixed-point fractional library routines. ! (line 1421) * __satfractqiudq: Fixed-point fractional library routines. ! (line 1416) * __satfractqiuha: Fixed-point fractional library routines. ! (line 1418) * __satfractqiuhq: Fixed-point fractional library routines. ! (line 1413) * __satfractqiuqq: Fixed-point fractional library routines. ! (line 1411) * __satfractqiusa: Fixed-point fractional library routines. ! (line 1420) * __satfractqiusq: Fixed-point fractional library routines. ! (line 1414) * __satfractqiuta: Fixed-point fractional library routines. ! (line 1423) * __satfractqqda: Fixed-point fractional library routines. ! (line 1050) * __satfractqqdq2: Fixed-point fractional library routines. ! (line 1047) * __satfractqqha: Fixed-point fractional library routines. ! (line 1048) * __satfractqqhq2: Fixed-point fractional library routines. ! (line 1045) * __satfractqqsa: Fixed-point fractional library routines. ! (line 1049) * __satfractqqsq2: Fixed-point fractional library routines. ! (line 1046) * __satfractqqta: Fixed-point fractional library routines. ! (line 1051) * __satfractqquda: Fixed-point fractional library routines. ! (line 1062) * __satfractqqudq: Fixed-point fractional library routines. ! (line 1057) * __satfractqquha: Fixed-point fractional library routines. ! (line 1059) * __satfractqquhq: Fixed-point fractional library routines. ! (line 1054) * __satfractqquqq: Fixed-point fractional library routines. ! (line 1052) * __satfractqqusa: Fixed-point fractional library routines. ! (line 1061) * __satfractqqusq: Fixed-point fractional library routines. ! (line 1055) * __satfractqquta: Fixed-point fractional library routines. ! (line 1064) * __satfractsada2: Fixed-point fractional library routines. ! (line 1147) * __satfractsadq: Fixed-point fractional library routines. ! (line 1145) * __satfractsaha2: Fixed-point fractional library routines. ! (line 1146) * __satfractsahq: Fixed-point fractional library routines. ! (line 1143) * __satfractsaqq: Fixed-point fractional library routines. ! (line 1142) * __satfractsasq: Fixed-point fractional library routines. ! (line 1144) * __satfractsata2: Fixed-point fractional library routines. ! (line 1148) * __satfractsauda: Fixed-point fractional library routines. ! (line 1155) * __satfractsaudq: Fixed-point fractional library routines. ! (line 1152) * __satfractsauha: Fixed-point fractional library routines. ! (line 1153) * __satfractsauhq: Fixed-point fractional library routines. ! (line 1150) * __satfractsauqq: Fixed-point fractional library routines. ! (line 1149) * __satfractsausa: Fixed-point fractional library routines. ! (line 1154) * __satfractsausq: Fixed-point fractional library routines. ! (line 1151) * __satfractsauta: Fixed-point fractional library routines. ! (line 1156) * __satfractsfda: Fixed-point fractional library routines. ! (line 1497) * __satfractsfdq: Fixed-point fractional library routines. ! (line 1494) * __satfractsfha: Fixed-point fractional library routines. ! (line 1495) * __satfractsfhq: Fixed-point fractional library routines. ! (line 1492) * __satfractsfqq: Fixed-point fractional library routines. ! (line 1491) * __satfractsfsa: Fixed-point fractional library routines. ! (line 1496) * __satfractsfsq: Fixed-point fractional library routines. ! (line 1493) * __satfractsfta: Fixed-point fractional library routines. ! (line 1498) * __satfractsfuda: Fixed-point fractional library routines. ! (line 1505) * __satfractsfudq: Fixed-point fractional library routines. ! (line 1502) * __satfractsfuha: Fixed-point fractional library routines. ! (line 1503) * __satfractsfuhq: Fixed-point fractional library routines. ! (line 1500) * __satfractsfuqq: Fixed-point fractional library routines. ! (line 1499) * __satfractsfusa: Fixed-point fractional library routines. ! (line 1504) * __satfractsfusq: Fixed-point fractional library routines. ! (line 1501) * __satfractsfuta: Fixed-point fractional library routines. ! (line 1506) * __satfractsida: Fixed-point fractional library routines. ! (line 1447) * __satfractsidq: Fixed-point fractional library routines. ! (line 1444) * __satfractsiha: Fixed-point fractional library routines. ! (line 1445) * __satfractsihq: Fixed-point fractional library routines. ! (line 1442) * __satfractsiqq: Fixed-point fractional library routines. ! (line 1441) * __satfractsisa: Fixed-point fractional library routines. ! (line 1446) * __satfractsisq: Fixed-point fractional library routines. ! (line 1443) * __satfractsita: Fixed-point fractional library routines. ! (line 1448) * __satfractsiuda: Fixed-point fractional library routines. ! (line 1455) * __satfractsiudq: Fixed-point fractional library routines. ! (line 1452) * __satfractsiuha: Fixed-point fractional library routines. ! (line 1453) * __satfractsiuhq: Fixed-point fractional library routines. ! (line 1450) * __satfractsiuqq: Fixed-point fractional library routines. ! (line 1449) * __satfractsiusa: Fixed-point fractional library routines. ! (line 1454) * __satfractsiusq: Fixed-point fractional library routines. ! (line 1451) * __satfractsiuta: Fixed-point fractional library routines. ! (line 1456) * __satfractsqda: Fixed-point fractional library routines. ! (line 1086) * __satfractsqdq2: Fixed-point fractional library routines. ! (line 1083) * __satfractsqha: Fixed-point fractional library routines. ! (line 1084) * __satfractsqhq2: Fixed-point fractional library routines. ! (line 1082) * __satfractsqqq2: Fixed-point fractional library routines. ! (line 1081) * __satfractsqsa: Fixed-point fractional library routines. ! (line 1085) * __satfractsqta: Fixed-point fractional library routines. ! (line 1087) * __satfractsquda: Fixed-point fractional library routines. ! (line 1097) * __satfractsqudq: Fixed-point fractional library routines. ! (line 1092) * __satfractsquha: Fixed-point fractional library routines. ! (line 1094) * __satfractsquhq: Fixed-point fractional library routines. ! (line 1090) * __satfractsquqq: Fixed-point fractional library routines. (line 1088) + * __satfractsqusa: Fixed-point fractional library routines. + (line 1096) * __satfractsqusq: Fixed-point fractional library routines. ! (line 1091) * __satfractsquta: Fixed-point fractional library routines. ! (line 1098) * __satfracttada2: Fixed-point fractional library routines. ! (line 1182) * __satfracttadq: Fixed-point fractional library routines. ! (line 1179) * __satfracttaha2: Fixed-point fractional library routines. ! (line 1180) * __satfracttahq: Fixed-point fractional library routines. ! (line 1177) * __satfracttaqq: Fixed-point fractional library routines. ! (line 1176) * __satfracttasa2: Fixed-point fractional library routines. ! (line 1181) * __satfracttasq: Fixed-point fractional library routines. ! (line 1178) * __satfracttauda: Fixed-point fractional library routines. ! (line 1193) * __satfracttaudq: Fixed-point fractional library routines. ! (line 1188) * __satfracttauha: Fixed-point fractional library routines. ! (line 1190) * __satfracttauhq: Fixed-point fractional library routines. ! (line 1185) * __satfracttauqq: Fixed-point fractional library routines. ! (line 1183) * __satfracttausa: Fixed-point fractional library routines. ! (line 1192) * __satfracttausq: Fixed-point fractional library routines. ! (line 1186) * __satfracttauta: Fixed-point fractional library routines. ! (line 1195) * __satfracttida: Fixed-point fractional library routines. ! (line 1479) * __satfracttidq: Fixed-point fractional library routines. ! (line 1476) * __satfracttiha: Fixed-point fractional library routines. ! (line 1477) * __satfracttihq: Fixed-point fractional library routines. ! (line 1474) * __satfracttiqq: Fixed-point fractional library routines. ! (line 1473) * __satfracttisa: Fixed-point fractional library routines. ! (line 1478) * __satfracttisq: Fixed-point fractional library routines. ! (line 1475) * __satfracttita: Fixed-point fractional library routines. (line 1480) + * __satfracttiuda: Fixed-point fractional library routines. + (line 1488) * __satfracttiudq: Fixed-point fractional library routines. ! (line 1484) * __satfracttiuha: Fixed-point fractional library routines. ! (line 1486) * __satfracttiuhq: Fixed-point fractional library routines. ! (line 1482) * __satfracttiuqq: Fixed-point fractional library routines. ! (line 1481) * __satfracttiusa: Fixed-point fractional library routines. ! (line 1487) * __satfracttiusq: Fixed-point fractional library routines. ! (line 1483) * __satfracttiuta: Fixed-point fractional library routines. ! (line 1489) * __satfractudada: Fixed-point fractional library routines. ! (line 1358) * __satfractudadq: Fixed-point fractional library routines. ! (line 1353) * __satfractudaha: Fixed-point fractional library routines. ! (line 1355) * __satfractudahq: Fixed-point fractional library routines. ! (line 1351) * __satfractudaqq: Fixed-point fractional library routines. (line 1349) + * __satfractudasa: Fixed-point fractional library routines. + (line 1357) * __satfractudasq: Fixed-point fractional library routines. ! (line 1352) * __satfractudata: Fixed-point fractional library routines. (line 1359) + * __satfractudaudq: Fixed-point fractional library routines. + (line 1367) * __satfractudauha2: Fixed-point fractional library routines. ! (line 1369) * __satfractudauhq: Fixed-point fractional library routines. ! (line 1363) * __satfractudauqq: Fixed-point fractional library routines. ! (line 1361) * __satfractudausa2: Fixed-point fractional library routines. ! (line 1371) * __satfractudausq: Fixed-point fractional library routines. (line 1365) + * __satfractudauta2: Fixed-point fractional library routines. + (line 1373) * __satfractudqda: Fixed-point fractional library routines. ! (line 1282) * __satfractudqdq: Fixed-point fractional library routines. ! (line 1277) * __satfractudqha: Fixed-point fractional library routines. ! (line 1279) * __satfractudqhq: Fixed-point fractional library routines. ! (line 1274) * __satfractudqqq: Fixed-point fractional library routines. ! (line 1272) * __satfractudqsa: Fixed-point fractional library routines. ! (line 1281) * __satfractudqsq: Fixed-point fractional library routines. ! (line 1275) * __satfractudqta: Fixed-point fractional library routines. ! (line 1284) * __satfractudquda: Fixed-point fractional library routines. ! (line 1296) * __satfractudquha: Fixed-point fractional library routines. ! (line 1292) * __satfractudquhq2: Fixed-point fractional library routines. ! (line 1288) * __satfractudquqq2: Fixed-point fractional library routines. (line 1286) + * __satfractudqusa: Fixed-point fractional library routines. + (line 1294) * __satfractudqusq2: Fixed-point fractional library routines. (line 1290) + * __satfractudquta: Fixed-point fractional library routines. + (line 1298) * __satfractuhada: Fixed-point fractional library routines. ! (line 1310) * __satfractuhadq: Fixed-point fractional library routines. ! (line 1305) * __satfractuhaha: Fixed-point fractional library routines. ! (line 1307) * __satfractuhahq: Fixed-point fractional library routines. ! (line 1302) * __satfractuhaqq: Fixed-point fractional library routines. ! (line 1300) * __satfractuhasa: Fixed-point fractional library routines. ! (line 1309) * __satfractuhasq: Fixed-point fractional library routines. ! (line 1303) * __satfractuhata: Fixed-point fractional library routines. ! (line 1312) * __satfractuhauda2: Fixed-point fractional library routines. ! (line 1324) * __satfractuhaudq: Fixed-point fractional library routines. ! (line 1320) * __satfractuhauhq: Fixed-point fractional library routines. ! (line 1316) * __satfractuhauqq: Fixed-point fractional library routines. (line 1314) + * __satfractuhausa2: Fixed-point fractional library routines. + (line 1322) * __satfractuhausq: Fixed-point fractional library routines. (line 1318) + * __satfractuhauta2: Fixed-point fractional library routines. + (line 1326) * __satfractuhqda: Fixed-point fractional library routines. ! (line 1231) * __satfractuhqdq: Fixed-point fractional library routines. ! (line 1228) * __satfractuhqha: Fixed-point fractional library routines. ! (line 1229) * __satfractuhqhq: Fixed-point fractional library routines. ! (line 1226) * __satfractuhqqq: Fixed-point fractional library routines. ! (line 1225) * __satfractuhqsa: Fixed-point fractional library routines. ! (line 1230) * __satfractuhqsq: Fixed-point fractional library routines. ! (line 1227) * __satfractuhqta: Fixed-point fractional library routines. ! (line 1232) * __satfractuhquda: Fixed-point fractional library routines. ! (line 1242) * __satfractuhqudq2: Fixed-point fractional library routines. ! (line 1237) * __satfractuhquha: Fixed-point fractional library routines. ! (line 1239) * __satfractuhquqq2: Fixed-point fractional library routines. (line 1233) + * __satfractuhqusa: Fixed-point fractional library routines. + (line 1241) * __satfractuhqusq2: Fixed-point fractional library routines. ! (line 1235) * __satfractuhquta: Fixed-point fractional library routines. ! (line 1244) * __satfractunsdida: Fixed-point fractional library routines. ! (line 1841) * __satfractunsdidq: Fixed-point fractional library routines. ! (line 1837) * __satfractunsdiha: Fixed-point fractional library routines. ! (line 1839) * __satfractunsdihq: Fixed-point fractional library routines. ! (line 1835) * __satfractunsdiqq: Fixed-point fractional library routines. ! (line 1834) * __satfractunsdisa: Fixed-point fractional library routines. ! (line 1840) * __satfractunsdisq: Fixed-point fractional library routines. ! (line 1836) * __satfractunsdita: Fixed-point fractional library routines. ! (line 1842) * __satfractunsdiuda: Fixed-point fractional library routines. ! (line 1856) * __satfractunsdiudq: Fixed-point fractional library routines. ! (line 1850) * __satfractunsdiuha: Fixed-point fractional library routines. ! (line 1852) * __satfractunsdiuhq: Fixed-point fractional library routines. ! (line 1846) * __satfractunsdiuqq: Fixed-point fractional library routines. ! (line 1844) * __satfractunsdiusa: Fixed-point fractional library routines. ! (line 1854) * __satfractunsdiusq: Fixed-point fractional library routines. ! (line 1848) * __satfractunsdiuta: Fixed-point fractional library routines. ! (line 1858) * __satfractunshida: Fixed-point fractional library routines. ! (line 1793) * __satfractunshidq: Fixed-point fractional library routines. ! (line 1789) * __satfractunshiha: Fixed-point fractional library routines. ! (line 1791) * __satfractunshihq: Fixed-point fractional library routines. ! (line 1787) * __satfractunshiqq: Fixed-point fractional library routines. ! (line 1786) * __satfractunshisa: Fixed-point fractional library routines. ! (line 1792) * __satfractunshisq: Fixed-point fractional library routines. ! (line 1788) * __satfractunshita: Fixed-point fractional library routines. ! (line 1794) * __satfractunshiuda: Fixed-point fractional library routines. ! (line 1808) * __satfractunshiudq: Fixed-point fractional library routines. ! (line 1802) * __satfractunshiuha: Fixed-point fractional library routines. ! (line 1804) * __satfractunshiuhq: Fixed-point fractional library routines. ! (line 1798) * __satfractunshiuqq: Fixed-point fractional library routines. ! (line 1796) * __satfractunshiusa: Fixed-point fractional library routines. ! (line 1806) * __satfractunshiusq: Fixed-point fractional library routines. ! (line 1800) * __satfractunshiuta: Fixed-point fractional library routines. ! (line 1810) * __satfractunsqida: Fixed-point fractional library routines. ! (line 1767) * __satfractunsqidq: Fixed-point fractional library routines. ! (line 1763) * __satfractunsqiha: Fixed-point fractional library routines. ! (line 1765) * __satfractunsqihq: Fixed-point fractional library routines. ! (line 1761) * __satfractunsqiqq: Fixed-point fractional library routines. ! (line 1760) * __satfractunsqisa: Fixed-point fractional library routines. ! (line 1766) * __satfractunsqisq: Fixed-point fractional library routines. ! (line 1762) * __satfractunsqita: Fixed-point fractional library routines. ! (line 1768) * __satfractunsqiuda: Fixed-point fractional library routines. ! (line 1782) * __satfractunsqiudq: Fixed-point fractional library routines. ! (line 1776) * __satfractunsqiuha: Fixed-point fractional library routines. ! (line 1778) * __satfractunsqiuhq: Fixed-point fractional library routines. ! (line 1772) * __satfractunsqiuqq: Fixed-point fractional library routines. ! (line 1770) * __satfractunsqiusa: Fixed-point fractional library routines. ! (line 1780) * __satfractunsqiusq: Fixed-point fractional library routines. ! (line 1774) * __satfractunsqiuta: Fixed-point fractional library routines. ! (line 1784) * __satfractunssida: Fixed-point fractional library routines. ! (line 1818) * __satfractunssidq: Fixed-point fractional library routines. ! (line 1815) * __satfractunssiha: Fixed-point fractional library routines. ! (line 1816) * __satfractunssihq: Fixed-point fractional library routines. ! (line 1813) * __satfractunssiqq: Fixed-point fractional library routines. ! (line 1812) * __satfractunssisa: Fixed-point fractional library routines. ! (line 1817) * __satfractunssisq: Fixed-point fractional library routines. ! (line 1814) * __satfractunssita: Fixed-point fractional library routines. ! (line 1819) * __satfractunssiuda: Fixed-point fractional library routines. ! (line 1830) * __satfractunssiudq: Fixed-point fractional library routines. ! (line 1825) * __satfractunssiuha: Fixed-point fractional library routines. ! (line 1827) * __satfractunssiuhq: Fixed-point fractional library routines. ! (line 1822) * __satfractunssiuqq: Fixed-point fractional library routines. ! (line 1820) * __satfractunssiusa: Fixed-point fractional library routines. ! (line 1829) * __satfractunssiusq: Fixed-point fractional library routines. ! (line 1823) * __satfractunssiuta: Fixed-point fractional library routines. ! (line 1832) * __satfractunstida: Fixed-point fractional library routines. ! (line 1870) * __satfractunstidq: Fixed-point fractional library routines. ! (line 1865) * __satfractunstiha: Fixed-point fractional library routines. ! (line 1867) * __satfractunstihq: Fixed-point fractional library routines. ! (line 1862) * __satfractunstiqq: Fixed-point fractional library routines. ! (line 1860) * __satfractunstisa: Fixed-point fractional library routines. ! (line 1869) * __satfractunstisq: Fixed-point fractional library routines. ! (line 1863) * __satfractunstita: Fixed-point fractional library routines. ! (line 1872) * __satfractunstiuda: Fixed-point fractional library routines. ! (line 1886) * __satfractunstiudq: Fixed-point fractional library routines. ! (line 1880) * __satfractunstiuha: Fixed-point fractional library routines. ! (line 1882) * __satfractunstiuhq: Fixed-point fractional library routines. ! (line 1876) * __satfractunstiuqq: Fixed-point fractional library routines. ! (line 1874) * __satfractunstiusa: Fixed-point fractional library routines. ! (line 1884) * __satfractunstiusq: Fixed-point fractional library routines. ! (line 1878) * __satfractunstiuta: Fixed-point fractional library routines. ! (line 1888) * __satfractuqqda: Fixed-point fractional library routines. ! (line 1207) * __satfractuqqdq: Fixed-point fractional library routines. ! (line 1202) * __satfractuqqha: Fixed-point fractional library routines. ! (line 1204) * __satfractuqqhq: Fixed-point fractional library routines. ! (line 1199) * __satfractuqqqq: Fixed-point fractional library routines. ! (line 1197) * __satfractuqqsa: Fixed-point fractional library routines. ! (line 1206) * __satfractuqqsq: Fixed-point fractional library routines. ! (line 1200) * __satfractuqqta: Fixed-point fractional library routines. ! (line 1209) * __satfractuqquda: Fixed-point fractional library routines. ! (line 1221) * __satfractuqqudq2: Fixed-point fractional library routines. ! (line 1215) * __satfractuqquha: Fixed-point fractional library routines. ! (line 1217) * __satfractuqquhq2: Fixed-point fractional library routines. (line 1211) + * __satfractuqqusa: Fixed-point fractional library routines. + (line 1219) * __satfractuqqusq2: Fixed-point fractional library routines. ! (line 1213) * __satfractuqquta: Fixed-point fractional library routines. ! (line 1223) * __satfractusada: Fixed-point fractional library routines. ! (line 1334) * __satfractusadq: Fixed-point fractional library routines. ! (line 1331) * __satfractusaha: Fixed-point fractional library routines. ! (line 1332) * __satfractusahq: Fixed-point fractional library routines. ! (line 1329) * __satfractusaqq: Fixed-point fractional library routines. ! (line 1328) * __satfractusasa: Fixed-point fractional library routines. ! (line 1333) * __satfractusasq: Fixed-point fractional library routines. ! (line 1330) * __satfractusata: Fixed-point fractional library routines. ! (line 1335) * __satfractusauda2: Fixed-point fractional library routines. ! (line 1345) * __satfractusaudq: Fixed-point fractional library routines. ! (line 1341) * __satfractusauha2: Fixed-point fractional library routines. ! (line 1343) * __satfractusauhq: Fixed-point fractional library routines. ! (line 1338) * __satfractusauqq: Fixed-point fractional library routines. ! (line 1336) * __satfractusausq: Fixed-point fractional library routines. (line 1339) + * __satfractusauta2: Fixed-point fractional library routines. + (line 1347) * __satfractusqda: Fixed-point fractional library routines. ! (line 1255) * __satfractusqdq: Fixed-point fractional library routines. ! (line 1250) * __satfractusqha: Fixed-point fractional library routines. ! (line 1252) * __satfractusqhq: Fixed-point fractional library routines. ! (line 1248) * __satfractusqqq: Fixed-point fractional library routines. (line 1246) + * __satfractusqsa: Fixed-point fractional library routines. + (line 1254) * __satfractusqsq: Fixed-point fractional library routines. ! (line 1249) * __satfractusqta: Fixed-point fractional library routines. ! (line 1256) * __satfractusquda: Fixed-point fractional library routines. ! (line 1268) * __satfractusqudq2: Fixed-point fractional library routines. ! (line 1262) * __satfractusquha: Fixed-point fractional library routines. ! (line 1264) * __satfractusquhq2: Fixed-point fractional library routines. ! (line 1260) * __satfractusquqq2: Fixed-point fractional library routines. (line 1258) + * __satfractusqusa: Fixed-point fractional library routines. + (line 1266) * __satfractusquta: Fixed-point fractional library routines. ! (line 1270) * __satfractutada: Fixed-point fractional library routines. ! (line 1385) * __satfractutadq: Fixed-point fractional library routines. ! (line 1380) * __satfractutaha: Fixed-point fractional library routines. ! (line 1382) * __satfractutahq: Fixed-point fractional library routines. ! (line 1377) * __satfractutaqq: Fixed-point fractional library routines. ! (line 1375) * __satfractutasa: Fixed-point fractional library routines. ! (line 1384) * __satfractutasq: Fixed-point fractional library routines. ! (line 1378) * __satfractutata: Fixed-point fractional library routines. ! (line 1387) * __satfractutauda2: Fixed-point fractional library routines. ! (line 1401) * __satfractutaudq: Fixed-point fractional library routines. ! (line 1395) * __satfractutauha2: Fixed-point fractional library routines. ! (line 1397) * __satfractutauhq: Fixed-point fractional library routines. ! (line 1391) * __satfractutauqq: Fixed-point fractional library routines. ! (line 1389) * __satfractutausa2: Fixed-point fractional library routines. ! (line 1399) * __satfractutausq: Fixed-point fractional library routines. ! (line 1393) * __splitstack_find: Miscellaneous routines. (line 15) * __ssaddda3: Fixed-point fractional library routines. ! (line 74) * __ssadddq3: Fixed-point fractional library routines. ! (line 69) * __ssaddha3: Fixed-point fractional library routines. ! (line 71) * __ssaddhq3: Fixed-point fractional library routines. ! (line 67) * __ssaddqq3: Fixed-point fractional library routines. (line 65) + * __ssaddsa3: Fixed-point fractional library routines. + (line 73) * __ssaddsq3: Fixed-point fractional library routines. ! (line 68) * __ssaddta3: Fixed-point fractional library routines. ! (line 75) * __ssashlda3: Fixed-point fractional library routines. ! (line 409) * __ssashldq3: Fixed-point fractional library routines. ! (line 405) * __ssashlha3: Fixed-point fractional library routines. ! (line 407) * __ssashlhq3: Fixed-point fractional library routines. ! (line 403) * __ssashlsa3: Fixed-point fractional library routines. ! (line 408) * __ssashlsq3: Fixed-point fractional library routines. ! (line 404) * __ssashlta3: Fixed-point fractional library routines. ! (line 410) * __ssdivda3: Fixed-point fractional library routines. ! (line 268) * __ssdivdq3: Fixed-point fractional library routines. ! (line 263) * __ssdivha3: Fixed-point fractional library routines. ! (line 265) * __ssdivhq3: Fixed-point fractional library routines. ! (line 261) * __ssdivqq3: Fixed-point fractional library routines. (line 259) + * __ssdivsa3: Fixed-point fractional library routines. + (line 267) * __ssdivsq3: Fixed-point fractional library routines. ! (line 262) * __ssdivta3: Fixed-point fractional library routines. ! (line 269) * __ssmulda3: Fixed-point fractional library routines. ! (line 200) * __ssmuldq3: Fixed-point fractional library routines. ! (line 195) * __ssmulha3: Fixed-point fractional library routines. ! (line 197) * __ssmulhq3: Fixed-point fractional library routines. ! (line 193) * __ssmulqq3: Fixed-point fractional library routines. (line 191) + * __ssmulsa3: Fixed-point fractional library routines. + (line 199) * __ssmulsq3: Fixed-point fractional library routines. ! (line 194) * __ssmulta3: Fixed-point fractional library routines. ! (line 201) * __ssnegda2: Fixed-point fractional library routines. ! (line 323) * __ssnegdq2: Fixed-point fractional library routines. ! (line 320) * __ssnegha2: Fixed-point fractional library routines. ! (line 321) * __ssneghq2: Fixed-point fractional library routines. ! (line 318) * __ssnegqq2: Fixed-point fractional library routines. ! (line 317) * __ssnegsa2: Fixed-point fractional library routines. ! (line 322) * __ssnegsq2: Fixed-point fractional library routines. ! (line 319) * __ssnegta2: Fixed-point fractional library routines. ! (line 324) * __sssubda3: Fixed-point fractional library routines. ! (line 136) * __sssubdq3: Fixed-point fractional library routines. ! (line 131) * __sssubha3: Fixed-point fractional library routines. ! (line 133) * __sssubhq3: Fixed-point fractional library routines. ! (line 129) * __sssubqq3: Fixed-point fractional library routines. (line 127) + * __sssubsa3: Fixed-point fractional library routines. + (line 135) * __sssubsq3: Fixed-point fractional library routines. ! (line 130) * __sssubta3: Fixed-point fractional library routines. ! (line 137) * __subda3: Fixed-point fractional library routines. ! (line 114) * __subdf3: Soft float library routines. (line 30) * __subdq3: Fixed-point fractional library routines. ! (line 101) * __subha3: Fixed-point fractional library routines. ! (line 111) * __subhq3: Fixed-point fractional library routines. ! (line 99) * __subqq3: Fixed-point fractional library routines. ! (line 97) * __subsa3: Fixed-point fractional library routines. ! (line 113) * __subsf3: Soft float library routines. (line 29) * __subsq3: Fixed-point fractional library routines. ! (line 100) * __subta3: Fixed-point fractional library routines. ! (line 115) * __subtf3: Soft float library routines. (line 31) * __subuda3: Fixed-point fractional library routines. ! (line 121) * __subudq3: Fixed-point fractional library routines. (line 109) + * __subuha3: Fixed-point fractional library routines. + (line 117) * __subuhq3: Fixed-point fractional library routines. ! (line 105) * __subuqq3: Fixed-point fractional library routines. ! (line 103) * __subusa3: Fixed-point fractional library routines. ! (line 119) * __subusq3: Fixed-point fractional library routines. ! (line 107) * __subuta3: Fixed-point fractional library routines. ! (line 123) * __subvdi3: Integer library routines. (line 122) * __subvsi3: Integer library routines. *************** Concept Index *** 53768,53788 **** * __udivti3: Integer library routines. (line 54) * __udivuda3: Fixed-point fractional library routines. ! (line 244) * __udivudq3: Fixed-point fractional library routines. ! (line 238) * __udivuha3: Fixed-point fractional library routines. ! (line 240) * __udivuhq3: Fixed-point fractional library routines. ! (line 234) * __udivuqq3: Fixed-point fractional library routines. ! (line 232) * __udivusa3: Fixed-point fractional library routines. ! (line 242) * __udivusq3: Fixed-point fractional library routines. ! (line 236) * __udivuta3: Fixed-point fractional library routines. ! (line 246) * __umoddi3: Integer library routines. (line 69) * __umodsi3: Integer library routines. --- 53768,53788 ---- * __udivti3: Integer library routines. (line 54) * __udivuda3: Fixed-point fractional library routines. ! (line 252) * __udivudq3: Fixed-point fractional library routines. ! (line 246) * __udivuha3: Fixed-point fractional library routines. ! (line 248) * __udivuhq3: Fixed-point fractional library routines. ! (line 242) * __udivuqq3: Fixed-point fractional library routines. ! (line 240) * __udivusa3: Fixed-point fractional library routines. ! (line 250) * __udivusq3: Fixed-point fractional library routines. ! (line 244) * __udivuta3: Fixed-point fractional library routines. ! (line 254) * __umoddi3: Integer library routines. (line 69) * __umodsi3: Integer library routines. *************** Concept Index *** 53796,53896 **** * __unordtf2: Soft float library routines. (line 173) * __usadduda3: Fixed-point fractional library routines. ! (line 83) * __usaddudq3: Fixed-point fractional library routines. ! (line 77) * __usadduha3: Fixed-point fractional library routines. ! (line 79) * __usadduhq3: Fixed-point fractional library routines. ! (line 73) * __usadduqq3: Fixed-point fractional library routines. ! (line 71) * __usaddusa3: Fixed-point fractional library routines. ! (line 81) * __usaddusq3: Fixed-point fractional library routines. ! (line 75) * __usadduta3: Fixed-point fractional library routines. ! (line 85) * __usashluda3: Fixed-point fractional library routines. ! (line 419) * __usashludq3: Fixed-point fractional library routines. ! (line 413) * __usashluha3: Fixed-point fractional library routines. ! (line 415) * __usashluhq3: Fixed-point fractional library routines. ! (line 409) * __usashluqq3: Fixed-point fractional library routines. ! (line 407) * __usashlusa3: Fixed-point fractional library routines. ! (line 417) * __usashlusq3: Fixed-point fractional library routines. ! (line 411) * __usashluta3: Fixed-point fractional library routines. ! (line 421) * __usdivuda3: Fixed-point fractional library routines. ! (line 278) * __usdivudq3: Fixed-point fractional library routines. ! (line 272) * __usdivuha3: Fixed-point fractional library routines. ! (line 274) * __usdivuhq3: Fixed-point fractional library routines. ! (line 268) * __usdivuqq3: Fixed-point fractional library routines. ! (line 266) * __usdivusa3: Fixed-point fractional library routines. ! (line 276) * __usdivusq3: Fixed-point fractional library routines. ! (line 270) * __usdivuta3: Fixed-point fractional library routines. ! (line 280) * __usmuluda3: Fixed-point fractional library routines. ! (line 210) * __usmuludq3: Fixed-point fractional library routines. ! (line 204) * __usmuluha3: Fixed-point fractional library routines. ! (line 206) * __usmuluhq3: Fixed-point fractional library routines. ! (line 200) * __usmuluqq3: Fixed-point fractional library routines. ! (line 198) * __usmulusa3: Fixed-point fractional library routines. ! (line 208) * __usmulusq3: Fixed-point fractional library routines. ! (line 202) * __usmuluta3: Fixed-point fractional library routines. ! (line 212) * __usneguda2: Fixed-point fractional library routines. ! (line 329) * __usnegudq2: Fixed-point fractional library routines. ! (line 324) * __usneguha2: Fixed-point fractional library routines. ! (line 326) * __usneguhq2: Fixed-point fractional library routines. ! (line 321) * __usneguqq2: Fixed-point fractional library routines. ! (line 319) * __usnegusa2: Fixed-point fractional library routines. ! (line 328) * __usnegusq2: Fixed-point fractional library routines. ! (line 322) * __usneguta2: Fixed-point fractional library routines. ! (line 331) * __ussubuda3: Fixed-point fractional library routines. ! (line 146) * __ussubudq3: Fixed-point fractional library routines. ! (line 140) * __ussubuha3: Fixed-point fractional library routines. ! (line 142) * __ussubuhq3: Fixed-point fractional library routines. ! (line 136) * __ussubuqq3: Fixed-point fractional library routines. ! (line 134) * __ussubusa3: Fixed-point fractional library routines. ! (line 144) * __ussubusq3: Fixed-point fractional library routines. ! (line 138) * __ussubuta3: Fixed-point fractional library routines. ! (line 148) * abort: Portability. (line 20) * abs: Arithmetic. (line 206) * abs and attributes: Expressions. (line 83) --- 53796,53896 ---- * __unordtf2: Soft float library routines. (line 173) * __usadduda3: Fixed-point fractional library routines. ! (line 91) * __usaddudq3: Fixed-point fractional library routines. ! (line 85) * __usadduha3: Fixed-point fractional library routines. ! (line 87) * __usadduhq3: Fixed-point fractional library routines. ! (line 81) * __usadduqq3: Fixed-point fractional library routines. ! (line 79) * __usaddusa3: Fixed-point fractional library routines. ! (line 89) * __usaddusq3: Fixed-point fractional library routines. ! (line 83) * __usadduta3: Fixed-point fractional library routines. ! (line 93) * __usashluda3: Fixed-point fractional library routines. ! (line 427) * __usashludq3: Fixed-point fractional library routines. ! (line 421) * __usashluha3: Fixed-point fractional library routines. ! (line 423) * __usashluhq3: Fixed-point fractional library routines. ! (line 417) * __usashluqq3: Fixed-point fractional library routines. ! (line 415) * __usashlusa3: Fixed-point fractional library routines. ! (line 425) * __usashlusq3: Fixed-point fractional library routines. ! (line 419) * __usashluta3: Fixed-point fractional library routines. ! (line 429) * __usdivuda3: Fixed-point fractional library routines. ! (line 286) * __usdivudq3: Fixed-point fractional library routines. ! (line 280) * __usdivuha3: Fixed-point fractional library routines. ! (line 282) * __usdivuhq3: Fixed-point fractional library routines. ! (line 276) * __usdivuqq3: Fixed-point fractional library routines. ! (line 274) * __usdivusa3: Fixed-point fractional library routines. ! (line 284) * __usdivusq3: Fixed-point fractional library routines. ! (line 278) * __usdivuta3: Fixed-point fractional library routines. ! (line 288) * __usmuluda3: Fixed-point fractional library routines. ! (line 218) * __usmuludq3: Fixed-point fractional library routines. ! (line 212) * __usmuluha3: Fixed-point fractional library routines. ! (line 214) * __usmuluhq3: Fixed-point fractional library routines. ! (line 208) * __usmuluqq3: Fixed-point fractional library routines. ! (line 206) * __usmulusa3: Fixed-point fractional library routines. ! (line 216) * __usmulusq3: Fixed-point fractional library routines. ! (line 210) * __usmuluta3: Fixed-point fractional library routines. ! (line 220) * __usneguda2: Fixed-point fractional library routines. ! (line 337) * __usnegudq2: Fixed-point fractional library routines. ! (line 332) * __usneguha2: Fixed-point fractional library routines. ! (line 334) * __usneguhq2: Fixed-point fractional library routines. ! (line 329) * __usneguqq2: Fixed-point fractional library routines. ! (line 327) * __usnegusa2: Fixed-point fractional library routines. ! (line 336) * __usnegusq2: Fixed-point fractional library routines. ! (line 330) * __usneguta2: Fixed-point fractional library routines. ! (line 339) * __ussubuda3: Fixed-point fractional library routines. ! (line 154) * __ussubudq3: Fixed-point fractional library routines. ! (line 148) * __ussubuha3: Fixed-point fractional library routines. ! (line 150) * __ussubuhq3: Fixed-point fractional library routines. ! (line 144) * __ussubuqq3: Fixed-point fractional library routines. ! (line 142) * __ussubusa3: Fixed-point fractional library routines. ! (line 152) * __ussubusq3: Fixed-point fractional library routines. ! (line 146) * __ussubuta3: Fixed-point fractional library routines. ! (line 156) * abort: Portability. (line 20) * abs: Arithmetic. (line 206) * abs and attributes: Expressions. (line 83) *************** Concept Index *** 54061,54067 **** * AS_NEEDS_DASH_FOR_PIPED_INPUT: Driver. (line 88) * atan2M3 instruction pattern: Standard Names. (line 1196) * atanM2 instruction pattern: Standard Names. (line 1094) ! * atomic: GTY Options. (line 204) * atomic_addMODE instruction pattern: Standard Names. (line 2700) * atomic_add_fetchMODE instruction pattern: Standard Names. (line 2729) * atomic_add_fetch_cmp_0MODE instruction pattern: Standard Names. --- 54061,54067 ---- * AS_NEEDS_DASH_FOR_PIPED_INPUT: Driver. (line 88) * atan2M3 instruction pattern: Standard Names. (line 1196) * atanM2 instruction pattern: Standard Names. (line 1094) ! * atomic: GTY Options. (line 205) * atomic_addMODE instruction pattern: Standard Names. (line 2700) * atomic_add_fetchMODE instruction pattern: Standard Names. (line 2729) * atomic_add_fetch_cmp_0MODE instruction pattern: Standard Names. *************** Concept Index *** 56896,56902 **** * source code, location information: Guidelines for Diagnostics. (line 183) * spaceshipM3 instruction pattern: Standard Names. (line 2890) ! * special: GTY Options. (line 245) * special predicates: Predicates. (line 31) * SPECS: Target Fragment. (line 194) * speculation_barrier instruction pattern: Standard Names. (line 2498) --- 56896,56902 ---- * source code, location information: Guidelines for Diagnostics. (line 183) * spaceshipM3 instruction pattern: Standard Names. (line 2890) ! * special: GTY Options. (line 246) * special predicates: Predicates. (line 31) * SPECS: Target Fragment. (line 194) * speculation_barrier instruction pattern: Standard Names. (line 2498) *************** Concept Index *** 58020,58026 **** * use: Side Effects. (line 161) * used: Flags. (line 325) * used, in symbol_ref: Flags. (line 211) ! * user: GTY Options. (line 252) * user experience guidelines: User Experience Guidelines. (line 6) * user gc: User GC. (line 6) --- 58020,58026 ---- * use: Side Effects. (line 161) * used: Flags. (line 325) * used, in symbol_ref: Flags. (line 211) ! * user: GTY Options. (line 253) * user experience guidelines: User Experience Guidelines. (line 6) * user gc: User GC. (line 6) *************** Concept Index *** 58273,58737 ****  Tag Table: Node: Top1789 ! Node: Contributing5176 ! Node: Portability5911 ! Node: Interface7699 ! Node: Libgcc10740 ! Node: Integer library routines12567 ! Node: Soft float library routines19535 ! Node: Decimal float library routines31473 ! Node: Fixed-point fractional library routines47231 ! Node: Exception handling routines147627 ! Node: Miscellaneous routines148734 ! Node: Languages150854 ! Node: Source Tree152401 ! Node: Configure Terms152984 ! Node: Top Level155940 ! Node: gcc Directory159525 ! Node: Subdirectories160477 ! Node: Configuration162645 ! Node: Config Fragments163365 ! Node: System Config164590 ! Node: Configuration Files165526 ! Node: Build168142 ! Node: Makefile168554 ! Ref: Makefile-Footnote-1175329 ! Ref: Makefile-Footnote-2175476 ! Node: Library Files175550 ! Node: Headers176112 ! Node: Documentation178195 ! Node: Texinfo Manuals179054 ! Node: Man Page Generation181383 ! Node: Miscellaneous Docs183296 ! Node: Front End184683 ! Node: Front End Directory188363 ! Node: Front End Config189680 ! Node: Front End Makefile192517 ! Node: Back End196285 ! Node: Testsuites201171 ! Node: Test Idioms202160 ! Node: Test Directives205558 ! Node: Directives206085 ! Node: Selectors218687 ! Node: Effective-Target Keywords222015 ! Ref: arm_fp_ok237213 ! Ref: arm_fp_dp_ok237380 ! Ref: arm_neon_ok238413 ! Ref: arm_neon_ok_no_float_abi238582 ! Ref: arm_neonv2_ok238749 ! Ref: arm_fp16_ok238916 ! Ref: arm_neon_fp16_ok239258 ! Ref: arm_vfp3_ok240190 ! Ref: arm_arch_v8a_hard_ok240333 ! Ref: arm_v8_1a_neon_ok241083 ! Ref: arm_v8_2a_fp16_scalar_ok241511 ! Ref: arm_v8_2a_fp16_neon_ok241962 ! Ref: arm_v8_2a_dotprod_neon_ok242437 ! Ref: arm_fp16fml_neon_ok243082 ! Ref: arm_coproc1_ok245652 ! Ref: arm_coproc2_ok245778 ! Ref: arm_coproc3_ok246006 ! Ref: arm_simd32_ok246373 ! Ref: arm_sat_ok246550 ! Ref: arm_dsp_ok246731 ! Ref: arm_softfp_ok246908 ! Ref: arm_hard_ok246981 ! Ref: arm_mve247048 ! Ref: arm_v8_1_lob_ok247121 ! Ref: stack_size_et261612 ! Node: Add Options264198 ! Ref: arm_fp16_ieee265436 ! Ref: arm_fp16_alternative265691 ! Ref: stack_size_ao268255 ! Node: Require Support268617 ! Node: Final Actions271519 ! Node: Ada Tests281488 ! Node: C Tests282651 ! Node: LTO Testing287023 ! Node: gcov Testing288666 ! Node: profopt Testing291636 ! Node: compat Testing293351 ! Node: Torture Tests297591 ! Node: GIMPLE Tests299225 ! Node: RTL Tests300467 ! Node: Options301773 ! Node: Option file format302214 ! Node: Option properties310697 ! Node: Passes327641 ! Node: Parsing pass328514 ! Node: Gimplification pass332042 ! Node: Pass manager333876 ! Node: IPA passes335718 ! Node: Small IPA passes336611 ! Node: Regular IPA passes340061 ! Node: Late IPA passes344863 ! Node: Tree SSA passes345824 ! Node: RTL passes367514 ! Node: Optimization info379843 ! Node: Dump setup380662 ! Node: Optimization groups381792 ! Node: Dump files and streams382771 ! Node: Dump output verbosity383969 ! Node: Dump types385025 ! Node: Dump examples387368 ! Node: poly_int388849 ! Node: Overview of poly_int390329 ! Node: Consequences of using poly_int392933 ! Node: Comparisons involving poly_int394568 ! Node: Comparison functions for poly_int396206 ! Node: Properties of the poly_int comparisons397413 ! Node: Comparing potentially-unordered poly_ints399855 ! Node: Comparing ordered poly_ints400766 ! Node: Checking for a poly_int marker value402790 ! Node: Range checks on poly_ints403639 ! Node: Sorting poly_ints406293 ! Node: Arithmetic on poly_ints407066 ! Node: Using poly_int with C++ arithmetic operators407867 ! Node: wi arithmetic on poly_ints409398 ! Node: Division of poly_ints410250 ! Node: Other poly_int arithmetic411757 ! Node: Alignment of poly_ints413163 ! Node: Computing bounds on poly_ints416440 ! Node: Converting poly_ints417829 ! Node: Miscellaneous poly_int routines421376 ! Node: Guidelines for using poly_int422016 ! Node: GENERIC426948 ! Node: Deficiencies428770 ! Node: Tree overview429011 ! Node: Macros and Functions433135 ! Node: Identifiers433960 ! Node: Containers435569 ! Node: Types436726 ! Node: Declarations449137 ! Node: Working with declarations449632 ! Node: Internal structure455236 ! Node: Current structure hierarchy455620 ! Node: Adding new DECL node types457713 ! Node: Attributes461999 ! Node: Expression trees463243 ! Node: Constant expressions464997 ! Node: Storage References471089 ! Node: Unary and Binary Expressions474930 ! Node: Vectors496263 ! Node: Statements504753 ! Node: Basic Statements505285 ! Node: Blocks510060 ! Node: Statement Sequences511761 ! Node: Empty Statements512094 ! Node: Jumps512668 ! Node: Cleanups513321 ! Node: OpenMP515362 ! Node: OpenACC521209 ! Node: Functions522326 ! Node: Function Basics522797 ! Node: Function Properties526481 ! Node: Language-dependent trees529262 ! Node: C and C++ Trees530149 ! Node: Types for C++533034 ! Node: Namespaces538004 ! Node: Classes541110 ! Node: Functions for C++546018 ! Node: Statements for C and C++552275 ! Node: C++ Expressions560782 ! Node: GIMPLE562293 ! Node: Tuple representation565958 ! Node: Class hierarchy of GIMPLE statements572918 ! Node: GIMPLE instruction set577906 ! Node: GIMPLE Exception Handling579538 ! Node: Temporaries581450 ! Ref: Temporaries-Footnote-1582768 ! Node: Operands582833 ! Node: Compound Expressions583594 ! Node: Compound Lvalues583828 ! Node: Conditional Expressions584590 ! Node: Logical Operators585249 ! Node: Manipulating GIMPLE statements592611 ! Node: Tuple specific accessors598193 ! Node: GIMPLE_ASM598972 ! Node: GIMPLE_ASSIGN601355 ! Node: GIMPLE_BIND606059 ! Node: GIMPLE_CALL607873 ! Node: GIMPLE_CATCH612014 ! Node: GIMPLE_COND613164 ! Node: GIMPLE_DEBUG615959 ! Node: GIMPLE_EH_FILTER620557 ! Node: GIMPLE_LABEL622120 ! Node: GIMPLE_GOTO622733 ! Node: GIMPLE_NOP623256 ! Node: GIMPLE_OMP_ATOMIC_LOAD623618 ! Node: GIMPLE_OMP_ATOMIC_STORE624614 ! Node: GIMPLE_OMP_CONTINUE625313 ! Node: GIMPLE_OMP_CRITICAL626792 ! Node: GIMPLE_OMP_FOR627786 ! Node: GIMPLE_OMP_MASTER631202 ! Node: GIMPLE_OMP_ORDERED631580 ! Node: GIMPLE_OMP_PARALLEL631974 ! Node: GIMPLE_OMP_RETURN634743 ! Node: GIMPLE_OMP_SECTION635388 ! Node: GIMPLE_OMP_SECTIONS636048 ! Node: GIMPLE_OMP_SINGLE637658 ! Node: GIMPLE_PHI638604 ! Node: GIMPLE_RESX639883 ! Node: GIMPLE_RETURN640602 ! Node: GIMPLE_SWITCH641176 ! Node: GIMPLE_TRY643049 ! Node: GIMPLE_WITH_CLEANUP_EXPR644821 ! Node: GIMPLE sequences645700 ! Node: Sequence iterators648906 ! Node: Adding a new GIMPLE statement code657363 ! Node: Statement and operand traversals658712 ! Node: Tree SSA661304 ! Node: Annotations663092 ! Node: SSA Operands663497 ! Node: SSA677301 ! Node: Alias analysis687008 ! Node: Memory model690783 ! Node: RTL692142 ! Node: RTL Objects694384 ! Node: RTL Classes698268 ! Node: Accessors703566 ! Node: Special Accessors705739 ! Node: Flags711526 ! Node: Machine Modes726789 ! Node: Constants744356 ! Node: Regs and Memory756155 ! Node: Arithmetic773426 ! Node: Comparisons783805 ! Node: Bit-Fields787507 ! Node: Vector Operations789058 ! Node: Conversions791162 ! Node: RTL Declarations795660 ! Node: Side Effects796504 ! Node: Incdec812992 ! Node: Assembler816328 ! Node: Debug Information817873 ! Node: Insns819800 ! Node: Calls845689 ! Node: RTL SSA848282 ! Node: Using RTL SSA849673 ! Node: RTL SSA Instructions851590 ! Ref: RTL SSA Instructions-Footnote-1852976 ! Node: RTL SSA Basic Blocks853110 ! Ref: real RTL SSA insns853578 ! Ref: RTL SSA Basic Blocks-Footnote-1855800 ! Node: RTL SSA Resources855934 ! Node: RTL SSA Accesses857051 ! Ref: RTL SSA Accesses-Footnote-1858752 ! Node: RTL SSA Phi Nodes858895 ! Node: RTL SSA Access Lists860899 ! Node: Changing RTL Instructions865180 ! Node: Changing One RTL SSA Instruction865789 ! Node: Changing Multiple RTL SSA Instructions870725 ! Node: Sharing874968 ! Node: Reading RTL878124 ! Node: Control Flow879116 ! Node: Basic Blocks880884 ! Node: Edges886338 ! Node: Profile information894957 ! Node: Maintaining the CFG899641 ! Node: Liveness information905409 ! Node: Loop Analysis and Representation907536 ! Node: Loop representation908572 ! Node: Loop querying916016 ! Node: Loop manipulation918837 ! Node: LCSSA921183 ! Node: Scalar evolutions923252 ! Node: loop-iv926496 ! Node: Number of iterations928418 ! Node: Dependency analysis932499 ! Node: Machine Desc938851 ! Node: Overview941414 ! Node: Patterns943454 ! Node: Example948421 ! Node: RTL Template949882 ! Node: Output Template960538 ! Node: Output Statement964719 ! Node: Predicates969058 ! Node: Machine-Independent Predicates971976 ! Node: Defining Predicates976921 ! Node: Constraints982884 ! Node: Simple Constraints984353 ! Node: Multi-Alternative997193 ! Node: Class Preferences1000402 ! Node: Modifiers1001294 ! Node: Machine Constraints1006028 ! Node: Disable Insn Alternatives1069678 ! Node: Define Constraints1073170 ! Node: C Constraint Interface1081759 ! Node: Standard Names1084886 ! Ref: shift patterns1126509 ! Ref: prologue instruction pattern1188179 ! Ref: window_save instruction pattern1188672 ! Ref: epilogue instruction pattern1188949 ! Node: Pattern Ordering1212174 ! Node: Dependent Patterns1213410 ! Node: Jump Patterns1215030 ! Node: Looping Patterns1216707 ! Node: Insn Canonicalizations1222346 ! Node: Expander Definitions1227543 ! Node: Insn Splitting1235756 ! Node: Including Patterns1250786 ! Node: Peephole Definitions1252570 ! Node: define_peephole1253823 ! Node: define_peephole21260153 ! Node: Insn Attributes1264242 ! Node: Defining Attributes1265339 ! Ref: define_enum_attr1268831 ! Node: Expressions1269867 ! Node: Tagging Insns1276617 ! Node: Attr Example1280970 ! Node: Insn Lengths1283343 ! Node: Constant Attributes1286755 ! Node: Mnemonic Attribute1287931 ! Node: Delay Slots1289450 ! Node: Processor pipeline description1292673 ! Ref: Processor pipeline description-Footnote-11311485 ! Node: Conditional Execution1311809 ! Node: Define Subst1315292 ! Node: Define Subst Example1317327 ! Node: Define Subst Pattern Matching1320322 ! Node: Define Subst Output Template1321548 ! Node: Constant Definitions1323871 ! Ref: define_enum1327730 ! Node: Iterators1328218 ! Node: Mode Iterators1328863 ! Node: Defining Mode Iterators1329841 ! Node: Substitutions1331335 ! Node: Examples1333577 ! Node: Code Iterators1335025 ! Node: Int Iterators1338155 ! Node: Subst Iterators1340619 ! Node: Parameterized Names1342339 ! Node: Target Macros1346357 ! Node: Target Structure1349420 ! Node: Driver1351912 ! Node: Run-time Target1370885 ! Node: Per-Function Data1380411 ! Node: Storage Layout1383175 ! Node: Type Layout1411072 ! Node: Registers1424414 ! Node: Register Basics1425388 ! Node: Allocation Order1432950 ! Node: Values in Registers1435434 ! Node: Leaf Functions1442910 ! Node: Stack Registers1445769 ! Node: Register Classes1447042 ! Node: Stack and Calling1481819 ! Node: Frame Layout1482425 ! Node: Exception Handling1494261 ! Node: Stack Checking1500471 ! Node: Frame Registers1506097 ! Node: Elimination1514648 ! Node: Stack Arguments1518504 ! Node: Register Arguments1525957 ! Node: Scalar Return1550517 ! Node: Aggregate Return1556973 ! Node: Caller Saves1561527 ! Node: Function Entry1562269 ! Node: Profiling1573821 ! Node: Tail Calls1575931 ! Node: Shrink-wrapping separate components1577841 ! Node: Stack Smashing Protection1580882 ! Node: Miscellaneous Register Hooks1583371 ! Node: Varargs1584236 ! Node: Trampolines1592122 ! Node: Library Calls1601815 ! Node: Addressing Modes1606902 ! Node: Anchored Addresses1637521 ! Node: Condition Code1640164 ! Node: MODE_CC Condition Codes1642009 ! Node: Costs1648772 ! Node: Scheduling1671092 ! Node: Sections1695014 ! Node: PIC1711384 ! Node: Assembler Format1713443 ! Node: File Framework1714581 ! Ref: TARGET_HAVE_SWITCHABLE_BSS_SECTIONS1722180 ! Node: Data Output1723855 ! Node: Uninitialized Data1732143 ! Node: Label Output1737158 ! Node: Initialization1761771 ! Node: Macros for Initialization1767732 ! Node: Instruction Output1774883 ! Node: Dispatch Tables1785513 ! Node: Exception Region Output1791264 ! Node: Alignment Output1798346 ! Node: Debugging Info1802033 ! Node: All Debuggers1802791 ! Node: DBX Options1805563 ! Node: DBX Hooks1811001 ! Node: File Names and DBX1812310 ! Node: DWARF1814414 ! Node: VMS Debug1820229 ! Node: CTF Debug1820826 ! Node: BTF Debug1821187 ! Node: Floating Point1821530 ! Node: Mode Switching1824285 ! Node: Target Attributes1828722 ! Node: Emulated TLS1840125 ! Node: MIPS Coprocessors1843515 ! Node: PCH Target1844674 ! Node: C++ ABI1846516 ! Node: D Language and ABI1851308 ! Node: Named Address Spaces1854251 ! Node: Misc1860178 ! Ref: TARGET_SHIFT_TRUNCATION_MASK1868049 ! Node: Host Config1929325 ! Node: Host Common1930394 ! Node: Filesystem1932768 ! Node: Host Misc1936883 ! Node: Fragments1939332 ! Node: Target Fragment1940527 ! Node: Host Fragment1951339 ! Node: Collect21951579 ! Node: Header Dirs1954215 ! Node: Type Information1955638 ! Node: GTY Options1959169 ! Node: Inheritance and GTY1970782 ! Ref: Inheritance and GTY-Footnote-11972347 ! Node: User GC1972617 ! Node: GGC Roots1976368 ! Node: Files1977081 ! Node: Invoking the garbage collector1979712 ! Node: Troubleshooting1981354 ! Node: Plugins1982429 ! Node: Plugins loading1983558 ! Node: Plugin API1984657 ! Node: Plugins pass1992524 ! Node: Plugins GC1994495 ! Node: Plugins description1996212 ! Node: Plugins attr1996748 ! Node: Plugins recording1999028 ! Node: Plugins gate1999878 ! Node: Plugins tracking2000469 ! Node: Plugins building2001057 ! Node: LTO2004560 ! Node: LTO Overview2005432 ! Node: LTO object file layout2011188 ! Node: IPA2015832 ! Node: WHOPR2024884 ! Node: Internal flags2029444 ! Node: Match and Simplify2030855 ! Node: GIMPLE API2031825 ! Node: The Language2034627 ! Node: Static Analyzer2047254 ! Node: Analyzer Internals2047519 ! Node: Debugging the Analyzer2063289 ! Node: User Experience Guidelines2066857 ! Node: Guidelines for Diagnostics2067793 ! Ref: input_location_example2075968 ! Node: Guidelines for Options2085653 ! Node: Funding2085830 ! Node: GNU Project2088337 ! Node: Copying2088988 ! Node: GNU Free Documentation License2126502 ! Node: Contributors2151625 ! Node: Option Index2192602 ! Node: Concept Index2193479  End Tag Table - -  - Local Variables: - coding: utf-8 - End: --- 58273,58732 ----  Tag Table: Node: Top1789 ! Node: Contributing5164 ! Node: Portability5899 ! Node: Interface7687 ! Node: Libgcc10728 ! Node: Integer library routines12555 ! Node: Soft float library routines19523 ! Node: Decimal float library routines31461 ! Node: Fixed-point fractional library routines47219 ! Node: Exception handling routines147615 ! Node: Miscellaneous routines148722 ! Node: Languages150842 ! Node: Source Tree152389 ! Node: Configure Terms152972 ! Node: Top Level155928 ! Node: gcc Directory159513 ! Node: Subdirectories160465 ! Node: Configuration162633 ! Node: Config Fragments163353 ! Node: System Config164578 ! Node: Configuration Files165514 ! Node: Build168130 ! Node: Makefile168542 ! Ref: Makefile-Footnote-1175317 ! Ref: Makefile-Footnote-2175464 ! Node: Library Files175538 ! Node: Headers176100 ! Node: Documentation178183 ! Node: Texinfo Manuals179042 ! Node: Man Page Generation181371 ! Node: Miscellaneous Docs183284 ! Node: Front End184671 ! Node: Front End Directory188351 ! Node: Front End Config189668 ! Node: Front End Makefile192505 ! Node: Back End196273 ! Node: Testsuites201159 ! Node: Test Idioms202148 ! Node: Test Directives205546 ! Node: Directives206073 ! Node: Selectors218675 ! Node: Effective-Target Keywords222003 ! Ref: arm_fp_ok237201 ! Ref: arm_fp_dp_ok237368 ! Ref: arm_neon_ok238401 ! Ref: arm_neon_ok_no_float_abi238570 ! Ref: arm_neonv2_ok238737 ! Ref: arm_fp16_ok238904 ! Ref: arm_neon_fp16_ok239246 ! Ref: arm_vfp3_ok240178 ! Ref: arm_arch_v8a_hard_ok240321 ! Ref: arm_v8_1a_neon_ok241071 ! Ref: arm_v8_2a_fp16_scalar_ok241499 ! Ref: arm_v8_2a_fp16_neon_ok241950 ! Ref: arm_v8_2a_dotprod_neon_ok242425 ! Ref: arm_fp16fml_neon_ok243070 ! Ref: arm_coproc1_ok245640 ! Ref: arm_coproc2_ok245766 ! Ref: arm_coproc3_ok245994 ! Ref: arm_simd32_ok246361 ! Ref: arm_sat_ok246538 ! Ref: arm_dsp_ok246719 ! Ref: arm_softfp_ok246896 ! Ref: arm_hard_ok246969 ! Ref: arm_mve247036 ! Ref: arm_v8_1_lob_ok247109 ! Ref: stack_size_et261600 ! Node: Add Options264186 ! Ref: arm_fp16_ieee265424 ! Ref: arm_fp16_alternative265679 ! Ref: stack_size_ao268243 ! Node: Require Support268605 ! Node: Final Actions271507 ! Node: Ada Tests281476 ! Node: C Tests282639 ! Node: LTO Testing287011 ! Node: gcov Testing288654 ! Node: profopt Testing291624 ! Node: compat Testing293339 ! Node: Torture Tests297579 ! Node: GIMPLE Tests299213 ! Node: RTL Tests300455 ! Node: Options301761 ! Node: Option file format302202 ! Node: Option properties310685 ! Node: Passes327629 ! Node: Parsing pass328502 ! Node: Gimplification pass332030 ! Node: Pass manager333864 ! Node: IPA passes335706 ! Node: Small IPA passes336599 ! Node: Regular IPA passes340049 ! Node: Late IPA passes344851 ! Node: Tree SSA passes345812 ! Node: RTL passes367502 ! Node: Optimization info379831 ! Node: Dump setup380650 ! Node: Optimization groups381780 ! Node: Dump files and streams382759 ! Node: Dump output verbosity383957 ! Node: Dump types385013 ! Node: Dump examples387356 ! Node: poly_int388837 ! Node: Overview of poly_int390317 ! Node: Consequences of using poly_int392921 ! Node: Comparisons involving poly_int394556 ! Node: Comparison functions for poly_int396194 ! Node: Properties of the poly_int comparisons397401 ! Node: Comparing potentially-unordered poly_ints399843 ! Node: Comparing ordered poly_ints400754 ! Node: Checking for a poly_int marker value402778 ! Node: Range checks on poly_ints403627 ! Node: Sorting poly_ints406281 ! Node: Arithmetic on poly_ints407054 ! Node: Using poly_int with C++ arithmetic operators407855 ! Node: wi arithmetic on poly_ints409386 ! Node: Division of poly_ints410238 ! Node: Other poly_int arithmetic411745 ! Node: Alignment of poly_ints413151 ! Node: Computing bounds on poly_ints416428 ! Node: Converting poly_ints417817 ! Node: Miscellaneous poly_int routines421364 ! Node: Guidelines for using poly_int422004 ! Node: GENERIC426936 ! Node: Deficiencies428758 ! Node: Tree overview428999 ! Node: Macros and Functions433123 ! Node: Identifiers433948 ! Node: Containers435557 ! Node: Types436714 ! Node: Declarations449125 ! Node: Working with declarations449620 ! Node: Internal structure455224 ! Node: Current structure hierarchy455608 ! Node: Adding new DECL node types457701 ! Node: Attributes461987 ! Node: Expression trees463231 ! Node: Constant expressions464985 ! Node: Storage References471077 ! Node: Unary and Binary Expressions474918 ! Node: Vectors496251 ! Node: Statements504741 ! Node: Basic Statements505273 ! Node: Blocks510048 ! Node: Statement Sequences511749 ! Node: Empty Statements512082 ! Node: Jumps512656 ! Node: Cleanups513309 ! Node: OpenMP515350 ! Node: OpenACC521197 ! Node: Functions522314 ! Node: Function Basics522785 ! Node: Function Properties526469 ! Node: Language-dependent trees529250 ! Node: C and C++ Trees530137 ! Node: Types for C++533022 ! Node: Namespaces537992 ! Node: Classes541098 ! Node: Functions for C++546006 ! Node: Statements for C and C++552263 ! Node: C++ Expressions560770 ! Node: GIMPLE562281 ! Node: Tuple representation565946 ! Node: Class hierarchy of GIMPLE statements572906 ! Node: GIMPLE instruction set577894 ! Node: GIMPLE Exception Handling579526 ! Node: Temporaries581438 ! Ref: Temporaries-Footnote-1582756 ! Node: Operands582821 ! Node: Compound Expressions583582 ! Node: Compound Lvalues583816 ! Node: Conditional Expressions584578 ! Node: Logical Operators585237 ! Node: Manipulating GIMPLE statements592599 ! Node: Tuple specific accessors598181 ! Node: GIMPLE_ASM598960 ! Node: GIMPLE_ASSIGN601343 ! Node: GIMPLE_BIND606047 ! Node: GIMPLE_CALL607861 ! Node: GIMPLE_CATCH612004 ! Node: GIMPLE_COND613154 ! Node: GIMPLE_DEBUG615949 ! Node: GIMPLE_EH_FILTER620547 ! Node: GIMPLE_LABEL622110 ! Node: GIMPLE_GOTO622723 ! Node: GIMPLE_NOP623246 ! Node: GIMPLE_OMP_ATOMIC_LOAD623608 ! Node: GIMPLE_OMP_ATOMIC_STORE624604 ! Node: GIMPLE_OMP_CONTINUE625303 ! Node: GIMPLE_OMP_CRITICAL626782 ! Node: GIMPLE_OMP_FOR627776 ! Node: GIMPLE_OMP_MASTER631192 ! Node: GIMPLE_OMP_ORDERED631570 ! Node: GIMPLE_OMP_PARALLEL631964 ! Node: GIMPLE_OMP_RETURN634733 ! Node: GIMPLE_OMP_SECTION635378 ! Node: GIMPLE_OMP_SECTIONS636038 ! Node: GIMPLE_OMP_SINGLE637648 ! Node: GIMPLE_PHI638594 ! Node: GIMPLE_RESX639873 ! Node: GIMPLE_RETURN640592 ! Node: GIMPLE_SWITCH641166 ! Node: GIMPLE_TRY643041 ! Node: GIMPLE_WITH_CLEANUP_EXPR644813 ! Node: GIMPLE sequences645692 ! Node: Sequence iterators648898 ! Node: Adding a new GIMPLE statement code657355 ! Node: Statement and operand traversals658704 ! Node: Tree SSA661296 ! Node: Annotations663084 ! Node: SSA Operands663489 ! Node: SSA677293 ! Node: Alias analysis687000 ! Node: Memory model690775 ! Node: RTL692134 ! Node: RTL Objects694376 ! Node: RTL Classes698260 ! Node: Accessors703558 ! Node: Special Accessors705731 ! Node: Flags711518 ! Node: Machine Modes726781 ! Node: Constants744348 ! Node: Regs and Memory756147 ! Node: Arithmetic773418 ! Node: Comparisons783797 ! Node: Bit-Fields787499 ! Node: Vector Operations789050 ! Node: Conversions791154 ! Node: RTL Declarations795652 ! Node: Side Effects796496 ! Node: Incdec812984 ! Node: Assembler816320 ! Node: Debug Information817865 ! Node: Insns819792 ! Node: Calls845681 ! Node: RTL SSA848274 ! Node: Using RTL SSA849665 ! Node: RTL SSA Instructions851582 ! Ref: RTL SSA Instructions-Footnote-1852968 ! Node: RTL SSA Basic Blocks853102 ! Ref: real RTL SSA insns853570 ! Ref: RTL SSA Basic Blocks-Footnote-1855792 ! Node: RTL SSA Resources855926 ! Node: RTL SSA Accesses857043 ! Ref: RTL SSA Accesses-Footnote-1858744 ! Node: RTL SSA Phi Nodes858887 ! Node: RTL SSA Access Lists860891 ! Node: Changing RTL Instructions865172 ! Node: Changing One RTL SSA Instruction865781 ! Node: Changing Multiple RTL SSA Instructions870717 ! Node: Sharing874960 ! Node: Reading RTL878116 ! Node: Control Flow879108 ! Node: Basic Blocks880876 ! Node: Edges886330 ! Node: Profile information894949 ! Node: Maintaining the CFG899633 ! Node: Liveness information905401 ! Node: Loop Analysis and Representation907528 ! Node: Loop representation908564 ! Node: Loop querying916008 ! Node: Loop manipulation918829 ! Node: LCSSA921175 ! Node: Scalar evolutions923244 ! Node: loop-iv926488 ! Node: Number of iterations928410 ! Node: Dependency analysis932491 ! Node: Machine Desc938843 ! Node: Overview941406 ! Node: Patterns943446 ! Node: Example948413 ! Node: RTL Template949874 ! Node: Output Template960530 ! Node: Output Statement964711 ! Node: Predicates969050 ! Node: Machine-Independent Predicates971968 ! Node: Defining Predicates976913 ! Node: Constraints982876 ! Node: Simple Constraints984345 ! Node: Multi-Alternative997185 ! Node: Class Preferences1000394 ! Node: Modifiers1001286 ! Node: Machine Constraints1006020 ! Node: Disable Insn Alternatives1069670 ! Node: Define Constraints1073162 ! Node: C Constraint Interface1081751 ! Node: Standard Names1084878 ! Ref: shift patterns1126501 ! Ref: prologue instruction pattern1188171 ! Ref: window_save instruction pattern1188664 ! Ref: epilogue instruction pattern1188941 ! Node: Pattern Ordering1212166 ! Node: Dependent Patterns1213402 ! Node: Jump Patterns1215022 ! Node: Looping Patterns1216699 ! Node: Insn Canonicalizations1222338 ! Node: Expander Definitions1227535 ! Node: Insn Splitting1235748 ! Node: Including Patterns1250778 ! Node: Peephole Definitions1252562 ! Node: define_peephole1253815 ! Node: define_peephole21260145 ! Node: Insn Attributes1264234 ! Node: Defining Attributes1265331 ! Ref: define_enum_attr1268823 ! Node: Expressions1269859 ! Node: Tagging Insns1276609 ! Node: Attr Example1280962 ! Node: Insn Lengths1283335 ! Node: Constant Attributes1286747 ! Node: Mnemonic Attribute1287923 ! Node: Delay Slots1289442 ! Node: Processor pipeline description1292665 ! Ref: Processor pipeline description-Footnote-11311477 ! Node: Conditional Execution1311801 ! Node: Define Subst1315284 ! Node: Define Subst Example1317319 ! Node: Define Subst Pattern Matching1320314 ! Node: Define Subst Output Template1321540 ! Node: Constant Definitions1323863 ! Ref: define_enum1327722 ! Node: Iterators1328210 ! Node: Mode Iterators1328855 ! Node: Defining Mode Iterators1329833 ! Node: Substitutions1331327 ! Node: Examples1333569 ! Node: Code Iterators1335017 ! Node: Int Iterators1338147 ! Node: Subst Iterators1340611 ! Node: Parameterized Names1342331 ! Node: Target Macros1346349 ! Node: Target Structure1349412 ! Node: Driver1351904 ! Node: Run-time Target1370877 ! Node: Per-Function Data1380403 ! Node: Storage Layout1383167 ! Node: Type Layout1411064 ! Node: Registers1424406 ! Node: Register Basics1425380 ! Node: Allocation Order1432942 ! Node: Values in Registers1435426 ! Node: Leaf Functions1442902 ! Node: Stack Registers1445761 ! Node: Register Classes1447034 ! Node: Stack and Calling1481811 ! Node: Frame Layout1482417 ! Node: Exception Handling1494253 ! Node: Stack Checking1500463 ! Node: Frame Registers1506089 ! Node: Elimination1514640 ! Node: Stack Arguments1518496 ! Node: Register Arguments1525949 ! Node: Scalar Return1550509 ! Node: Aggregate Return1556965 ! Node: Caller Saves1561519 ! Node: Function Entry1562261 ! Node: Profiling1573813 ! Node: Tail Calls1575923 ! Node: Shrink-wrapping separate components1577833 ! Node: Stack Smashing Protection1580874 ! Node: Miscellaneous Register Hooks1583363 ! Node: Varargs1584228 ! Node: Trampolines1592114 ! Node: Library Calls1601807 ! Node: Addressing Modes1606894 ! Node: Anchored Addresses1637513 ! Node: Condition Code1640156 ! Node: MODE_CC Condition Codes1642001 ! Node: Costs1648764 ! Node: Scheduling1671084 ! Node: Sections1695006 ! Node: PIC1711376 ! Node: Assembler Format1713435 ! Node: File Framework1714573 ! Ref: TARGET_HAVE_SWITCHABLE_BSS_SECTIONS1722172 ! Node: Data Output1723847 ! Node: Uninitialized Data1732135 ! Node: Label Output1737150 ! Node: Initialization1761763 ! Node: Macros for Initialization1767724 ! Node: Instruction Output1774875 ! Node: Dispatch Tables1785505 ! Node: Exception Region Output1791256 ! Node: Alignment Output1798338 ! Node: Debugging Info1802025 ! Node: All Debuggers1802783 ! Node: DBX Options1805555 ! Node: DBX Hooks1810993 ! Node: File Names and DBX1812302 ! Node: DWARF1814406 ! Node: VMS Debug1820221 ! Node: CTF Debug1820818 ! Node: BTF Debug1821179 ! Node: Floating Point1821522 ! Node: Mode Switching1824277 ! Node: Target Attributes1828714 ! Node: Emulated TLS1840117 ! Node: MIPS Coprocessors1843507 ! Node: PCH Target1844666 ! Node: C++ ABI1846508 ! Node: D Language and ABI1851300 ! Node: Named Address Spaces1854243 ! Node: Misc1860170 ! Ref: TARGET_SHIFT_TRUNCATION_MASK1868041 ! Node: Host Config1929317 ! Node: Host Common1930386 ! Node: Filesystem1932760 ! Node: Host Misc1936875 ! Node: Fragments1939324 ! Node: Target Fragment1940519 ! Node: Host Fragment1951331 ! Node: Collect21951571 ! Node: Header Dirs1954207 ! Node: Type Information1955630 ! Node: GTY Options1959161 ! Node: Inheritance and GTY1970774 ! Ref: Inheritance and GTY-Footnote-11972339 ! Node: User GC1972609 ! Node: GGC Roots1976360 ! Node: Files1977073 ! Node: Invoking the garbage collector1979704 ! Node: Troubleshooting1981346 ! Node: Plugins1982421 ! Node: Plugins loading1983550 ! Node: Plugin API1984649 ! Node: Plugins pass1992516 ! Node: Plugins GC1994487 ! Node: Plugins description1996204 ! Node: Plugins attr1996740 ! Node: Plugins recording1999020 ! Node: Plugins gate1999870 ! Node: Plugins tracking2000461 ! Node: Plugins building2001049 ! Node: LTO2004552 ! Node: LTO Overview2005424 ! Node: LTO object file layout2011180 ! Node: IPA2015824 ! Node: WHOPR2024876 ! Node: Internal flags2029436 ! Node: Match and Simplify2030847 ! Node: GIMPLE API2031817 ! Node: The Language2034619 ! Node: Static Analyzer2047246 ! Node: Analyzer Internals2047511 ! Node: Debugging the Analyzer2063281 ! Node: User Experience Guidelines2066849 ! Node: Guidelines for Diagnostics2067785 ! Ref: input_location_example2075960 ! Node: Guidelines for Options2085645 ! Node: Funding2085822 ! Node: GNU Project2088329 ! Node: Copying2088980 ! Node: GNU Free Documentation License2126494 ! Node: Contributors2151617 ! Node: Option Index2192594 ! Node: Concept Index2193471  End Tag Table diff -Nrcpad gcc-12.4.0/gcc/doc/gcov-dump.1 gcc-12.5.0-RC-20250704/gcc/doc/gcov-dump.1 *** gcc-12.4.0/gcc/doc/gcov-dump.1 Thu Jun 20 08:11:52 2024 --- gcc-12.5.0-RC-20250704/gcc/doc/gcov-dump.1 Fri Jul 4 07:26:03 2025 *************** *** 1,4 **** ! .\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.43) .\" .\" Standard preamble: .\" ======================================================================== --- 1,4 ---- ! .\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35) .\" .\" Standard preamble: .\" ======================================================================== *************** *** 54,73 **** .\" Avoid warning from groff about undefined register 'F'. .de IX .. ! .nr rF 0 ! .if \n(.g .if rF .nr rF 1 ! .if (\n(rF:(\n(.g==0)) \{\ ! . if \nF \{\ ! . de IX ! . tm Index:\\$1\t\\n%\t"\\$2" .. ! . if !\nF==2 \{\ ! . nr % 0 ! . nr F 2 ! . \} . \} .\} - .rr rF .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. --- 54,69 ---- .\" Avoid warning from groff about undefined register 'F'. .de IX .. ! .if !\nF .nr F 0 ! .if \nF>0 \{\ ! . de IX ! . tm Index:\\$1\t\\n%\t"\\$2" .. ! . if !\nF==2 \{\ ! . nr % 0 ! . nr F 2 . \} .\} .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. *************** *** 133,139 **** .\" ======================================================================== .\" .IX Title "GCOV-DUMP 1" ! .TH GCOV-DUMP 1 "2024-06-20" "gcc-12.4.0" "GNU" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l --- 129,135 ---- .\" ======================================================================== .\" .IX Title "GCOV-DUMP 1" ! .TH GCOV-DUMP 1 "2025-07-04" "gcc-12.4.1" "GNU" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l *************** any later version published by the Free *** 201,207 **** Invariant Sections being \*(L"\s-1GNU\s0 General Public License\*(R" and \*(L"Funding Free Software\*(R", the Front-Cover texts being (a) (see below), and with the Back-Cover Texts being (b) (see below). A copy of the license is ! included in the \fBgfdl\fR\|(7) man page. .PP (a) The \s-1FSF\s0's Front-Cover Text is: .PP --- 197,203 ---- Invariant Sections being \*(L"\s-1GNU\s0 General Public License\*(R" and \*(L"Funding Free Software\*(R", the Front-Cover texts being (a) (see below), and with the Back-Cover Texts being (b) (see below). A copy of the license is ! included in the \fIgfdl\fR\|(7) man page. .PP (a) The \s-1FSF\s0's Front-Cover Text is: .PP diff -Nrcpad gcc-12.4.0/gcc/doc/gcov-tool.1 gcc-12.5.0-RC-20250704/gcc/doc/gcov-tool.1 *** gcc-12.4.0/gcc/doc/gcov-tool.1 Thu Jun 20 08:11:52 2024 --- gcc-12.5.0-RC-20250704/gcc/doc/gcov-tool.1 Fri Jul 4 07:26:03 2025 *************** *** 1,4 **** ! .\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.43) .\" .\" Standard preamble: .\" ======================================================================== --- 1,4 ---- ! .\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35) .\" .\" Standard preamble: .\" ======================================================================== *************** *** 54,73 **** .\" Avoid warning from groff about undefined register 'F'. .de IX .. ! .nr rF 0 ! .if \n(.g .if rF .nr rF 1 ! .if (\n(rF:(\n(.g==0)) \{\ ! . if \nF \{\ ! . de IX ! . tm Index:\\$1\t\\n%\t"\\$2" .. ! . if !\nF==2 \{\ ! . nr % 0 ! . nr F 2 ! . \} . \} .\} - .rr rF .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. --- 54,69 ---- .\" Avoid warning from groff about undefined register 'F'. .de IX .. ! .if !\nF .nr F 0 ! .if \nF>0 \{\ ! . de IX ! . tm Index:\\$1\t\\n%\t"\\$2" .. ! . if !\nF==2 \{\ ! . nr % 0 ! . nr F 2 . \} .\} .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. *************** *** 133,139 **** .\" ======================================================================== .\" .IX Title "GCOV-TOOL 1" ! .TH GCOV-TOOL 1 "2024-06-20" "gcc-12.4.0" "GNU" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l --- 129,135 ---- .\" ======================================================================== .\" .IX Title "GCOV-TOOL 1" ! .TH GCOV-TOOL 1 "2025-07-04" "gcc-12.4.1" "GNU" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l *************** Set the verbose mode. *** 344,350 **** .RE .SH "SEE ALSO" .IX Header "SEE ALSO" ! \&\fBgpl\fR\|(7), \fBgfdl\fR\|(7), \fBfsf\-funding\fR\|(7), \fBgcc\fR\|(1), \fBgcov\fR\|(1) and the Info entry for \&\fIgcc\fR. .SH "COPYRIGHT" .IX Header "COPYRIGHT" --- 340,346 ---- .RE .SH "SEE ALSO" .IX Header "SEE ALSO" ! \&\fIgpl\fR\|(7), \fIgfdl\fR\|(7), \fIfsf\-funding\fR\|(7), \fIgcc\fR\|(1), \fIgcov\fR\|(1) and the Info entry for \&\fIgcc\fR. .SH "COPYRIGHT" .IX Header "COPYRIGHT" *************** any later version published by the Free *** 356,362 **** Invariant Sections being \*(L"\s-1GNU\s0 General Public License\*(R" and \*(L"Funding Free Software\*(R", the Front-Cover texts being (a) (see below), and with the Back-Cover Texts being (b) (see below). A copy of the license is ! included in the \fBgfdl\fR\|(7) man page. .PP (a) The \s-1FSF\s0's Front-Cover Text is: .PP --- 352,358 ---- Invariant Sections being \*(L"\s-1GNU\s0 General Public License\*(R" and \*(L"Funding Free Software\*(R", the Front-Cover texts being (a) (see below), and with the Back-Cover Texts being (b) (see below). A copy of the license is ! included in the \fIgfdl\fR\|(7) man page. .PP (a) The \s-1FSF\s0's Front-Cover Text is: .PP diff -Nrcpad gcc-12.4.0/gcc/doc/gcov.1 gcc-12.5.0-RC-20250704/gcc/doc/gcov.1 *** gcc-12.4.0/gcc/doc/gcov.1 Thu Jun 20 08:11:52 2024 --- gcc-12.5.0-RC-20250704/gcc/doc/gcov.1 Fri Jul 4 07:26:03 2025 *************** *** 1,4 **** ! .\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.43) .\" .\" Standard preamble: .\" ======================================================================== --- 1,4 ---- ! .\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35) .\" .\" Standard preamble: .\" ======================================================================== *************** *** 54,73 **** .\" Avoid warning from groff about undefined register 'F'. .de IX .. ! .nr rF 0 ! .if \n(.g .if rF .nr rF 1 ! .if (\n(rF:(\n(.g==0)) \{\ ! . if \nF \{\ ! . de IX ! . tm Index:\\$1\t\\n%\t"\\$2" .. ! . if !\nF==2 \{\ ! . nr % 0 ! . nr F 2 ! . \} . \} .\} - .rr rF .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. --- 54,69 ---- .\" Avoid warning from groff about undefined register 'F'. .de IX .. ! .if !\nF .nr F 0 ! .if \nF>0 \{\ ! . de IX ! . tm Index:\\$1\t\\n%\t"\\$2" .. ! . if !\nF==2 \{\ ! . nr % 0 ! . nr F 2 . \} .\} .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. *************** *** 133,139 **** .\" ======================================================================== .\" .IX Title "GCOV 1" ! .TH GCOV 1 "2024-06-20" "gcc-12.4.0" "GNU" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l --- 129,135 ---- .\" ======================================================================== .\" .IX Title "GCOV 1" ! .TH GCOV 1 "2025-07-04" "gcc-12.4.1" "GNU" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l *************** That can help users to find profile clas *** 1017,1023 **** to a misleading profile. .SH "SEE ALSO" .IX Header "SEE ALSO" ! \&\fBgpl\fR\|(7), \fBgfdl\fR\|(7), \fBfsf\-funding\fR\|(7), \fBgcc\fR\|(1) and the Info entry for \fIgcc\fR. .SH "COPYRIGHT" .IX Header "COPYRIGHT" Copyright (c) 1996\-2022 Free Software Foundation, Inc. --- 1013,1019 ---- to a misleading profile. .SH "SEE ALSO" .IX Header "SEE ALSO" ! \&\fIgpl\fR\|(7), \fIgfdl\fR\|(7), \fIfsf\-funding\fR\|(7), \fIgcc\fR\|(1) and the Info entry for \fIgcc\fR. .SH "COPYRIGHT" .IX Header "COPYRIGHT" Copyright (c) 1996\-2022 Free Software Foundation, Inc. *************** any later version published by the Free *** 1028,1034 **** Invariant Sections being \*(L"\s-1GNU\s0 General Public License\*(R" and \*(L"Funding Free Software\*(R", the Front-Cover texts being (a) (see below), and with the Back-Cover Texts being (b) (see below). A copy of the license is ! included in the \fBgfdl\fR\|(7) man page. .PP (a) The \s-1FSF\s0's Front-Cover Text is: .PP --- 1024,1030 ---- Invariant Sections being \*(L"\s-1GNU\s0 General Public License\*(R" and \*(L"Funding Free Software\*(R", the Front-Cover texts being (a) (see below), and with the Back-Cover Texts being (b) (see below). A copy of the license is ! included in the \fIgfdl\fR\|(7) man page. .PP (a) The \s-1FSF\s0's Front-Cover Text is: .PP diff -Nrcpad gcc-12.4.0/gcc/doc/gdc.1 gcc-12.5.0-RC-20250704/gcc/doc/gdc.1 *** gcc-12.4.0/gcc/doc/gdc.1 Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/doc/gdc.1 Fri Jul 4 07:45:00 2025 *************** *** 0 **** --- 1,786 ---- + .\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35) + .\" + .\" Standard preamble: + .\" ======================================================================== + .de Sp \" Vertical space (when we can't use .PP) + .if t .sp .5v + .if n .sp + .. + .de Vb \" Begin verbatim text + .ft CW + .nf + .ne \\$1 + .. + .de Ve \" End verbatim text + .ft R + .fi + .. + .\" Set up some character translations and predefined strings. \*(-- will + .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left + .\" double quote, and \*(R" will give a right double quote. \*(C+ will + .\" give a nicer C++. Capital omega is used to do unbreakable dashes and + .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, + .\" nothing in troff, for use with C<>. + .tr \(*W- + .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' + .ie n \{\ + . ds -- \(*W- + . ds PI pi + . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch + . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch + . ds L" "" + . ds R" "" + . ds C` "" + . ds C' "" + 'br\} + .el\{\ + . ds -- \|\(em\| + . ds PI \(*p + . ds L" `` + . ds R" '' + . ds C` + . ds C' + 'br\} + .\" + .\" Escape single quotes in literal strings from groff's Unicode transform. + .ie \n(.g .ds Aq \(aq + .el .ds Aq ' + .\" + .\" If the F register is >0, we'll generate index entries on stderr for + .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index + .\" entries marked with X<> in POD. Of course, you'll have to process the + .\" output yourself in some meaningful fashion. + .\" + .\" Avoid warning from groff about undefined register 'F'. + .de IX + .. + .if !\nF .nr F 0 + .if \nF>0 \{\ + . de IX + . tm Index:\\$1\t\\n%\t"\\$2" + .. + . if !\nF==2 \{\ + . nr % 0 + . nr F 2 + . \} + .\} + .\" + .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). + .\" Fear. Run. Save yourself. No user-serviceable parts. + . \" fudge factors for nroff and troff + .if n \{\ + . ds #H 0 + . ds #V .8m + . ds #F .3m + . ds #[ \f1 + . ds #] \fP + .\} + .if t \{\ + . ds #H ((1u-(\\\\n(.fu%2u))*.13m) + . ds #V .6m + . ds #F 0 + . ds #[ \& + . ds #] \& + .\} + . \" simple accents for nroff and troff + .if n \{\ + . ds ' \& + . ds ` \& + . ds ^ \& + . ds , \& + . ds ~ ~ + . ds / + .\} + .if t \{\ + . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" + . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' + . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' + . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' + . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' + . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' + .\} + . \" troff and (daisy-wheel) nroff accents + .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' + .ds 8 \h'\*(#H'\(*b\h'-\*(#H' + .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] + .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' + .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' + .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] + .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] + .ds ae a\h'-(\w'a'u*4/10)'e + .ds Ae A\h'-(\w'A'u*4/10)'E + . \" corrections for vroff + .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' + .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' + . \" for low resolution devices (crt and lpr) + .if \n(.H>23 .if \n(.V>19 \ + \{\ + . ds : e + . ds 8 ss + . ds o a + . ds d- d\h'-1'\(ga + . ds D- D\h'-1'\(hy + . ds th \o'bp' + . ds Th \o'LP' + . ds ae ae + . ds Ae AE + .\} + .rm #[ #] #H #V #F C + .\" ======================================================================== + .\" + .IX Title "GDC 1" + .TH GDC 1 "2025-07-04" "gcc-12.4.1" "GNU" + .\" For nroff, turn off justification. Always turn off hyphenation; it makes + .\" way too many mistakes in technical documents. + .if n .ad l + .nh + .SH "NAME" + gdc \- A GCC\-based compiler for the D language + .SH "SYNOPSIS" + .IX Header "SYNOPSIS" + gdc [\fB\-c\fR|\fB\-S\fR] [\fB\-g\fR] [\fB\-pg\fR] + [\fB\-O\fR\fIlevel\fR] [\fB\-W\fR\fIwarn\fR...] + [\fB\-I\fR\fIdir\fR...] [\fB\-L\fR\fIdir\fR...] + [\fB\-f\fR\fIoption\fR...] [\fB\-m\fR\fImachine-option\fR...] + [\fB\-o\fR \fIoutfile\fR] [@\fIfile\fR] \fIinfile\fR... + .PP + Only the most useful options are listed here; see below for the + remainder. + .SH "DESCRIPTION" + .IX Header "DESCRIPTION" + The \fBgdc\fR command is the \s-1GNU\s0 compiler for the D language and + supports many of the same options as \fBgcc\fR. + This manual only documents the options specific to \fBgdc\fR. + .SH "OPTIONS" + .IX Header "OPTIONS" + .SS "Input and Output files" + .IX Subsection "Input and Output files" + For any given input file, the file name suffix determines what kind of + compilation is done. The following kinds of input file names are supported: + .IP "\fIfile\fR\fB.d\fR" 4 + .IX Item "file.d" + D source files. + .IP "\fIfile\fR\fB.dd\fR" 4 + .IX Item "file.dd" + Ddoc source files. + .IP "\fIfile\fR\fB.di\fR" 4 + .IX Item "file.di" + D interface files. + .PP + You can specify more than one input file on the \fBgdc\fR command line, + each being compiled separately in the compilation process. If you specify a + \&\f(CW\*(C`\-o \f(CIfile\f(CW\*(C'\fR option, all the input files are compiled together, + producing a single output file, named \fIfile\fR. This is allowed even + when using \f(CW\*(C`\-S\*(C'\fR or \f(CW\*(C`\-c\*(C'\fR. + .PP + A D interface file contains only what an import of the module needs, + rather than the whole implementation of that module. They can be created + by \fBgdc\fR from a D source file by using the \f(CW\*(C`\-H\*(C'\fR option. + When the compiler resolves an import declaration, it searches for matching + \&\fI.di\fR files first, then for \fI.d\fR. + .PP + A Ddoc source file contains code in the D macro processor language. It is + primarily designed for use in producing user documentation from embedded + comments, with a slight affinity towards \s-1HTML\s0 generation. If a \fI.d\fR + source file starts with the string \f(CW\*(C`Ddoc\*(C'\fR then it is treated as general + purpose documentation, not as a D source file. + .SS "Runtime Options" + .IX Subsection "Runtime Options" + These options affect the runtime behavior of programs compiled with + \&\fBgdc\fR. + .IP "\fB\-fall\-instantiations\fR" 4 + .IX Item "-fall-instantiations" + Generate code for all template instantiations. The default template emission + strategy is to not generate code for declarations that were either + instantiated speculatively, such as from \f(CW\*(C`_\|_traits(compiles, ...)\*(C'\fR, or + that come from an imported module not being compiled. + .IP "\fB\-fno\-assert\fR" 4 + .IX Item "-fno-assert" + Turn off code generation for \f(CW\*(C`assert\*(C'\fR contracts. + .IP "\fB\-fno\-bounds\-check\fR" 4 + .IX Item "-fno-bounds-check" + Turns off array bounds checking for all functions, which can improve + performance for code that uses arrays extensively. Note that this + can result in unpredictable behavior if the code in question actually + does violate array bounds constraints. It is safe to use this option + if you are sure that your code never throws a \f(CW\*(C`RangeError\*(C'\fR. + .IP "\fB\-fbounds\-check=\fR\fIvalue\fR" 4 + .IX Item "-fbounds-check=value" + An alternative to \fB\-fbounds\-check\fR that allows more control + as to where bounds checking is turned on or off. The following values + are supported: + .RS 4 + .IP "\fBon\fR" 4 + .IX Item "on" + Turns on array bounds checking for all functions. + .IP "\fBsafeonly\fR" 4 + .IX Item "safeonly" + Turns on array bounds checking only for \f(CW@safe\fR functions. + .IP "\fBoff\fR" 4 + .IX Item "off" + Turns off array bounds checking completely. + .RE + .RS 4 + .RE + .IP "\fB\-fno\-builtin\fR" 4 + .IX Item "-fno-builtin" + Don't recognize built-in functions unless they begin with the prefix + \&\fB_\|_builtin_\fR. By default, the compiler will recognize when a + function in the \f(CW\*(C`core.stdc\*(C'\fR package is a built-in function. + .IP "\fB\-fcheckaction=\fR\fIvalue\fR" 4 + .IX Item "-fcheckaction=value" + This option controls what code is generated on an assertion, bounds check, or + final switch failure. The following values are supported: + .RS 4 + .IP "\fBcontext\fR" 4 + .IX Item "context" + Throw an \f(CW\*(C`AssertError\*(C'\fR with extra context information. + .IP "\fBhalt\fR" 4 + .IX Item "halt" + Halt the program execution. + .IP "\fBthrow\fR" 4 + .IX Item "throw" + Throw an \f(CW\*(C`AssertError\*(C'\fR (the default). + .RE + .RS 4 + .RE + .IP "\fB\-fdebug\fR" 4 + .IX Item "-fdebug" + .PD 0 + .IP "\fB\-fdebug=\fR\fIvalue\fR" 4 + .IX Item "-fdebug=value" + .PD + Turn on compilation of conditional \f(CW\*(C`debug\*(C'\fR code into the program. + The \fB\-fdebug\fR option itself sets the debug level to \f(CW1\fR, + while \fB\-fdebug=\fR enables \f(CW\*(C`debug\*(C'\fR code that are identified + by any of the following values: + .RS 4 + .IP "\fBlevel\fR" 4 + .IX Item "level" + Sets the debug level to \fIlevel\fR, any \f(CW\*(C`debug\*(C'\fR code <= \fIlevel\fR + is compiled into the program. + .IP "\fBident\fR" 4 + .IX Item "ident" + Turns on compilation of any \f(CW\*(C`debug\*(C'\fR code identified by \fIident\fR. + .RE + .RS 4 + .RE + .IP "\fB\-fno\-druntime\fR" 4 + .IX Item "-fno-druntime" + Implements <\fBhttps://dlang.org/spec/betterc.html\fR>. Assumes that + compilation targets an environment without a D runtime library. + .Sp + This is equivalent to compiling with the following options: + .Sp + .Vb 1 + \& gdc \-nophoboslib \-fno\-exceptions \-fno\-moduleinfo \-fno\-rtti + .Ve + .IP "\fB\-fextern\-std=\fR\fIstandard\fR" 4 + .IX Item "-fextern-std=standard" + Sets the \*(C+ name mangling compatibility to the version identified by + \&\fIstandard\fR. The following values are supported: + .RS 4 + .IP "\fBc++98\fR" 4 + .IX Item "c++98" + .PD 0 + .IP "\fBc++03\fR" 4 + .IX Item "c++03" + .PD + Sets \f(CW\*(C`_\|_traits(getTargetInfo, "cppStd")\*(C'\fR to \f(CW199711\fR. + .IP "\fBc++11\fR" 4 + .IX Item "c++11" + Sets \f(CW\*(C`_\|_traits(getTargetInfo, "cppStd")\*(C'\fR to \f(CW201103\fR. + .IP "\fBc++14\fR" 4 + .IX Item "c++14" + Sets \f(CW\*(C`_\|_traits(getTargetInfo, "cppStd")\*(C'\fR to \f(CW201402\fR. + .IP "\fBc++17\fR" 4 + .IX Item "c++17" + Sets \f(CW\*(C`_\|_traits(getTargetInfo, "cppStd")\*(C'\fR to \f(CW201703\fR. + This is the default. + .IP "\fBc++20\fR" 4 + .IX Item "c++20" + Sets \f(CW\*(C`_\|_traits(getTargetInfo, "cppStd")\*(C'\fR to \f(CW202002\fR. + .RE + .RS 4 + .RE + .IP "\fB\-fno\-invariants\fR" 4 + .IX Item "-fno-invariants" + Turns off code generation for class \f(CW\*(C`invariant\*(C'\fR contracts. + .IP "\fB\-fmain\fR" 4 + .IX Item "-fmain" + Generates a default \f(CW\*(C`main()\*(C'\fR function when compiling. This is useful when + unittesting a library, as it enables running the unittests in a library without + having to manually define an entry-point function. This option does nothing + when \f(CW\*(C`main\*(C'\fR is already defined in user code. + .IP "\fB\-fno\-moduleinfo\fR" 4 + .IX Item "-fno-moduleinfo" + Turns off generation of the \f(CW\*(C`ModuleInfo\*(C'\fR and related functions + that would become unreferenced without it, which may allow linking + to programs not written in D. Functions that are not be generated + include module constructors and destructors (\f(CW\*(C`static this\*(C'\fR and + \&\f(CW\*(C`static ~this\*(C'\fR), \f(CW\*(C`unittest\*(C'\fR code, and \f(CW\*(C`DSO\*(C'\fR registry + functions for dynamically linked code. + .IP "\fB\-fonly=\fR\fIfilename\fR" 4 + .IX Item "-fonly=filename" + Tells the compiler to parse and run semantic analysis on all modules + on the command line, but only generate code for the module specified + by \fIfilename\fR. + .IP "\fB\-fno\-postconditions\fR" 4 + .IX Item "-fno-postconditions" + Turns off code generation for postcondition \f(CW\*(C`out\*(C'\fR contracts. + .IP "\fB\-fno\-preconditions\fR" 4 + .IX Item "-fno-preconditions" + Turns off code generation for precondition \f(CW\*(C`in\*(C'\fR contracts. + .IP "\fB\-fpreview=\fR\fIid\fR" 4 + .IX Item "-fpreview=id" + Turns on an upcoming D language change identified by \fIid\fR. The following + values are supported: + .RS 4 + .IP "\fBall\fR" 4 + .IX Item "all" + Turns on all upcoming D language features. + .IP "\fBdip1000\fR" 4 + .IX Item "dip1000" + Implements <\fBhttps://github.com/dlang/DIPs/blob/master/DIPs/other/DIP1000.md\fR> + (Scoped pointers). + .IP "\fBdip1008\fR" 4 + .IX Item "dip1008" + Implements <\fBhttps://github.com/dlang/DIPs/blob/master/DIPs/other/DIP1008.md\fR> + (Allow exceptions in \f(CW@nogc\fR code). + .IP "\fBdip1021\fR" 4 + .IX Item "dip1021" + Implements <\fBhttps://github.com/dlang/DIPs/blob/master/DIPs/accepted/DIP1021.md\fR> + (Mutable function arguments). + .IP "\fBdip25\fR" 4 + .IX Item "dip25" + Implements <\fBhttps://github.com/dlang/DIPs/blob/master/DIPs/archive/DIP25.md\fR> + (Sealed references). + .IP "\fBdtorfields\fR" 4 + .IX Item "dtorfields" + Turns on generation for destructing fields of partially constructed objects. + .IP "\fBfieldwise\fR" 4 + .IX Item "fieldwise" + Turns on generation of struct equality to use field-wise comparisons. + .IP "\fBfixaliasthis\fR" 4 + .IX Item "fixaliasthis" + Implements new lookup rules that check the current scope for \f(CW\*(C`alias this\*(C'\fR + before searching in upper scopes. + .IP "\fBin\fR" 4 + .IX Item "in" + Implements \f(CW\*(C`in\*(C'\fR parameters to mean \f(CW\*(C`scope const [ref]\*(C'\fR and accepts + rvalues. + .IP "\fBinclusiveincontracts\fR" 4 + .IX Item "inclusiveincontracts" + Implements \f(CW\*(C`in\*(C'\fR contracts of overridden methods to be a superset of parent + contract. + .IP "\fBintpromote\fR" 4 + .IX Item "intpromote" + Implements C\-style integral promotion for unary \f(CW\*(C`+\*(C'\fR, \f(CW\*(C`\-\*(C'\fR and \f(CW\*(C`~\*(C'\fR + expressions. + .IP "\fBnosharedaccess\fR" 4 + .IX Item "nosharedaccess" + Turns off and disallows all access to shared memory objects. + .IP "\fBrvaluerefparam\fR" 4 + .IX Item "rvaluerefparam" + Implements rvalue arguments to \f(CW\*(C`ref\*(C'\fR parameters. + .IP "\fBshortenedmethods\fR" 4 + .IX Item "shortenedmethods" + Implements use of \f(CW\*(C`=>\*(C'\fR for methods and top-level functions in addition to + lambdas. + .RE + .RS 4 + .RE + .IP "\fB\-frelease\fR" 4 + .IX Item "-frelease" + Turns on compiling in release mode, which means not emitting runtime + checks for contracts and asserts. Array bounds checking is not done + for \f(CW@system\fR and \f(CW@trusted\fR functions, and assertion + failures are undefined behavior. + .Sp + This is equivalent to compiling with the following options: + .Sp + .Vb 2 + \& gdc \-fno\-assert \-fbounds\-check=safe \-fno\-invariants \e + \& \-fno\-postconditions \-fno\-preconditions \-fno\-switch\-errors + .Ve + .IP "\fB\-frevert=\fR" 4 + .IX Item "-frevert=" + Turns off a D language feature identified by \fIid\fR. The following values + are supported: + .RS 4 + .IP "\fBall\fR" 4 + .IX Item "all" + Turns off all revertable D language features. + .IP "\fBdip25\fR" 4 + .IX Item "dip25" + Reverts <\fBhttps://github.com/dlang/DIPs/blob/master/DIPs/archive/DIP25.md\fR> + (Sealed references). + .IP "\fBdtorfields\fR" 4 + .IX Item "dtorfields" + Turns off generation for destructing fields of partially constructed objects. + .IP "\fBmarkdown\fR" 4 + .IX Item "markdown" + Turns off Markdown replacements in Ddoc comments. + .RE + .RS 4 + .RE + .IP "\fB\-fno\-rtti\fR" 4 + .IX Item "-fno-rtti" + Turns off generation of run-time type information for all user defined types. + Any code that uses features of the language that require access to this + information will result in an error. + .IP "\fB\-fno\-switch\-errors\fR" 4 + .IX Item "-fno-switch-errors" + This option controls what code is generated when no case is matched + in a \f(CW\*(C`final switch\*(C'\fR statement. The default run time behavior + is to throw a \f(CW\*(C`SwitchError\*(C'\fR. Turning off \fB\-fswitch\-errors\fR + means that instead the execution of the program is immediately halted. + .IP "\fB\-funittest\fR" 4 + .IX Item "-funittest" + Turns on compilation of \f(CW\*(C`unittest\*(C'\fR code, and turns on the + \&\f(CW\*(C`version(unittest)\*(C'\fR identifier. This implies \fB\-fassert\fR. + .IP "\fB\-fversion=\fR\fIvalue\fR" 4 + .IX Item "-fversion=value" + Turns on compilation of conditional \f(CW\*(C`version\*(C'\fR code into the program + identified by any of the following values: + .RS 4 + .IP "\fBlevel\fR" 4 + .IX Item "level" + Sets the version level to \fIlevel\fR, any \f(CW\*(C`version\*(C'\fR code >= \fIlevel\fR + is compiled into the program. + .IP "\fBident\fR" 4 + .IX Item "ident" + Turns on compilation of \f(CW\*(C`version\*(C'\fR code identified by \fIident\fR. + .RE + .RS 4 + .RE + .IP "\fB\-fno\-weak\-templates\fR" 4 + .IX Item "-fno-weak-templates" + Turns off emission of declarations that can be defined in multiple objects as + weak symbols. The default is to emit all public symbols as weak, unless the + target lacks support for weak symbols. Disabling this option means that common + symbols are instead put in \s-1COMDAT\s0 or become private. + .SS "Options for Directory Search" + .IX Subsection "Options for Directory Search" + These options specify directories to search for files, libraries, and + other parts of the compiler: + .IP "\fB\-I\fR\fIdir\fR" 4 + .IX Item "-Idir" + Specify a directory to use when searching for imported modules at + compile time. Multiple \fB\-I\fR options can be used, and the + paths are searched in the same order. + .IP "\fB\-J\fR\fIdir\fR" 4 + .IX Item "-Jdir" + Specify a directory to use when searching for files in string imports + at compile time. This switch is required in order to use + \&\f(CW\*(C`import(file)\*(C'\fR expressions. Multiple \fB\-J\fR options can be + used, and the paths are searched in the same order. + .IP "\fB\-L\fR\fIdir\fR" 4 + .IX Item "-Ldir" + When linking, specify a library search directory, as with \fBgcc\fR. + .IP "\fB\-B\fR\fIdir\fR" 4 + .IX Item "-Bdir" + This option specifies where to find the executables, libraries, + source files, and data files of the compiler itself, as with \fBgcc\fR. + .IP "\fB\-fmodule\-file=\fR\fImodule\fR\fB=\fR\fIspec\fR" 4 + .IX Item "-fmodule-file=module=spec" + This option manipulates file paths of imported modules, such that if an + imported module matches all or the leftmost part of \fImodule\fR, the file + path in \fIspec\fR is used as the location to search for D sources. + This is used when the source file path and names are not the same as the + package and module hierarchy. Consider the following examples: + .Sp + .Vb 1 + \& gdc test.d \-fmodule\-file=A.B=foo.d \-fmodule\-file=C=bar + .Ve + .Sp + This will tell the compiler to search in all import paths for the source + file \fIfoo.d\fR when importing \fIA.B\fR, and the directory \fIbar/\fR + when importing \fIC\fR, as annotated in the following D code: + .Sp + .Vb 4 + \& module test; + \& import A.B; // Matches A.B, searches for foo.d + \& import C.D.E; // Matches C, searches for bar/D/E.d + \& import A.B.C; // No match, searches for A/B/C.d + .Ve + .IP "\fB\-imultilib\fR \fIdir\fR" 4 + .IX Item "-imultilib dir" + Use \fIdir\fR as a subdirectory of the gcc directory containing + target-specific D sources and interfaces. + .IP "\fB\-iprefix\fR \fIprefix\fR" 4 + .IX Item "-iprefix prefix" + Specify \fIprefix\fR as the prefix for the gcc directory containing + target-specific D sources and interfaces. If the \fIprefix\fR represents + a directory, you should include the final \f(CW\*(Aq/\*(Aq\fR. + .IP "\fB\-nostdinc\fR" 4 + .IX Item "-nostdinc" + Do not search the standard system directories for D source and interface + files. Only the directories that have been specified with \fB\-I\fR options + (and the directory of the current file, if appropriate) are searched. + .SS "Code Generation" + .IX Subsection "Code Generation" + In addition to the many \fBgcc\fR options controlling code generation, + \&\fBgdc\fR has several options specific to itself. + .IP "\fB\-H\fR" 4 + .IX Item "-H" + Generates D interface files for all modules being compiled. The compiler + determines the output file based on the name of the input file, removes + any directory components and suffix, and applies the \fI.di\fR suffix. + .IP "\fB\-Hd\fR \fIdir\fR" 4 + .IX Item "-Hd dir" + Same as \fB\-H\fR, but writes interface files to directory \fIdir\fR. + This option can be used with \fB\-Hf\fR \fIfile\fR to independently set the + output file and directory path. + .IP "\fB\-Hf\fR \fIfile\fR" 4 + .IX Item "-Hf file" + Same as \fB\-H\fR but writes interface files to \fIfile\fR. This option can + be used with \fB\-Hd\fR \fIdir\fR to independently set the output file and + directory path. + .IP "\fB\-M\fR" 4 + .IX Item "-M" + Output the module dependencies of all source files being compiled in a + format suitable for \fBmake\fR. The compiler outputs one + \&\fBmake\fR rule containing the object file name for that source file, + a colon, and the names of all imported files. + .IP "\fB\-MM\fR" 4 + .IX Item "-MM" + Like \fB\-M\fR but does not mention imported modules from the D standard + library package directories. + .IP "\fB\-MF\fR \fIfile\fR" 4 + .IX Item "-MF file" + When used with \fB\-M\fR or \fB\-MM\fR, specifies a \fIfile\fR to write + the dependencies to. When used with the driver options \fB\-MD\fR or + \&\fB\-MMD\fR, \fB\-MF\fR overrides the default dependency output file. + .IP "\fB\-MG\fR" 4 + .IX Item "-MG" + This option is for compatibility with \fBgcc\fR, and is ignored by the + compiler. + .IP "\fB\-MP\fR" 4 + .IX Item "-MP" + Outputs a phony target for each dependency other than the modules being + compiled, causing each to depend on nothing. + .IP "\fB\-MT\fR \fItarget\fR" 4 + .IX Item "-MT target" + Change the \fItarget\fR of the rule emitted by dependency generation + to be exactly the string you specify. If you want multiple targets, + you can specify them as a single argument to \fB\-MT\fR, or use + multiple \fB\-MT\fR options. + .IP "\fB\-MQ\fR \fItarget\fR" 4 + .IX Item "-MQ target" + Same as \fB\-MT\fR, but it quotes any characters which are special to + \&\fBmake\fR. + .IP "\fB\-MD\fR" 4 + .IX Item "-MD" + This option is equivalent to \fB\-M \-MF\fR \fIfile\fR. The driver + determines \fIfile\fR by removing any directory components and suffix + from the input file, and then adding a \fI.deps\fR suffix. + .IP "\fB\-MMD\fR" 4 + .IX Item "-MMD" + Like \fB\-MD\fR but does not mention imported modules from the D standard + library package directories. + .IP "\fB\-X\fR" 4 + .IX Item "-X" + Output information describing the contents of all source files being + compiled in \s-1JSON\s0 format to a file. The driver determines \fIfile\fR by + removing any directory components and suffix from the input file, and then + adding a \fI.json\fR suffix. + .IP "\fB\-Xf\fR \fIfile\fR" 4 + .IX Item "-Xf file" + Same as \fB\-X\fR, but writes all \s-1JSON\s0 contents to the specified + \&\fIfile\fR. + .IP "\fB\-fdoc\fR" 4 + .IX Item "-fdoc" + Generates \f(CW\*(C`Ddoc\*(C'\fR documentation and writes it to a file. The compiler + determines \fIfile\fR by removing any directory components and suffix + from the input file, and then adding a \fI.html\fR suffix. + .IP "\fB\-fdoc\-dir=\fR\fIdir\fR" 4 + .IX Item "-fdoc-dir=dir" + Same as \fB\-fdoc\fR, but writes documentation to directory \fIdir\fR. + This option can be used with \fB\-fdoc\-file=\fR\fIfile\fR to + independently set the output file and directory path. + .IP "\fB\-fdoc\-file=\fR\fIfile\fR" 4 + .IX Item "-fdoc-file=file" + Same as \fB\-fdoc\fR, but writes documentation to \fIfile\fR. This + option can be used with \fB\-fdoc\-dir=\fR\fIdir\fR to independently + set the output file and directory path. + .IP "\fB\-fdoc\-inc=\fR\fIfile\fR" 4 + .IX Item "-fdoc-inc=file" + Specify \fIfile\fR as a \fIDdoc\fR macro file to be read. Multiple + \&\fB\-fdoc\-inc\fR options can be used, and files are read and processed + in the same order. + .IP "\fB\-fdump\-c++\-spec=\fR\fIfile\fR" 4 + .IX Item "-fdump-c++-spec=file" + For D source files, generate corresponding \*(C+ declarations in \fIfile\fR. + .IP "\fB\-fdump\-c++\-spec\-verbose\fR" 4 + .IX Item "-fdump-c++-spec-verbose" + In conjunction with \fB\-fdump\-c++\-spec=\fR above, add comments for ignored + declarations in the generated \*(C+ header. + .IP "\fB\-fsave\-mixins=\fR\fIfile\fR" 4 + .IX Item "-fsave-mixins=file" + Generates code expanded from D \f(CW\*(C`mixin\*(C'\fR statements and writes the + processed sources to \fIfile\fR. This is useful to debug errors in compilation + and provides source for debuggers to show when requested. + .SS "Warnings" + .IX Subsection "Warnings" + Warnings are diagnostic messages that report constructions that + are not inherently erroneous but that are risky or suggest there + is likely to be a bug in the program. Unless \fB\-Werror\fR is + specified, they do not prevent compilation of the program. + .IP "\fB\-Wall\fR" 4 + .IX Item "-Wall" + Turns on all warnings messages. Warnings are not a defined part of + the D language, and all constructs for which this may generate a + warning message are valid code. + .IP "\fB\-Walloca\fR" 4 + .IX Item "-Walloca" + This option warns on all uses of \*(L"alloca\*(R" in the source. + .IP "\fB\-Walloca\-larger\-than=\fR\fIn\fR" 4 + .IX Item "-Walloca-larger-than=n" + Warn on unbounded uses of alloca, and on bounded uses of alloca + whose bound can be larger than \fIn\fR bytes. + \&\fB\-Wno\-alloca\-larger\-than\fR disables + \&\fB\-Walloca\-larger\-than\fR warning and is equivalent to + \&\fB\-Walloca\-larger\-than=\fR\fI\s-1SIZE_MAX\s0\fR or larger. + .IP "\fB\-Wcast\-result\fR" 4 + .IX Item "-Wcast-result" + Warn about casts that will produce a null or zero result. Currently + this is only done for casting between an imaginary and non-imaginary + data type, or casting between a D and \*(C+ class. + .IP "\fB\-Wno\-deprecated\fR" 4 + .IX Item "-Wno-deprecated" + Do not warn about usage of deprecated features and symbols with + \&\f(CW\*(C`deprecated\*(C'\fR attributes. + .IP "\fB\-Werror\fR" 4 + .IX Item "-Werror" + Turns all warnings into errors. + .IP "\fB\-Wspeculative\fR" 4 + .IX Item "-Wspeculative" + List all error messages from speculative compiles, such as + \&\f(CW\*(C`_\|_traits(compiles, ...)\*(C'\fR. This option does not report + messages as warnings, and these messages therefore never become + errors when the \fB\-Werror\fR option is also used. + .IP "\fB\-Wtemplates\fR" 4 + .IX Item "-Wtemplates" + Warn when a template instantiation is encountered. Some coding + rules disallow templates, and this may be used to enforce that rule. + .IP "\fB\-Wunknown\-pragmas\fR" 4 + .IX Item "-Wunknown-pragmas" + Warn when a \f(CW\*(C`pragma()\*(C'\fR is encountered that is not understood by + \&\fBgdc\fR. This differs from \fB\-fignore\-unknown\-pragmas\fR + where a pragma that is part of the D language, but not implemented by + the compiler, won't get reported. + .IP "\fB\-Wno\-varargs\fR" 4 + .IX Item "-Wno-varargs" + Do not warn upon questionable usage of the macros used to handle variable + arguments like \f(CW\*(C`va_start\*(C'\fR. + .IP "\fB\-fignore\-unknown\-pragmas\fR" 4 + .IX Item "-fignore-unknown-pragmas" + Turns off errors for unsupported pragmas. + .IP "\fB\-fmax\-errors=\fR\fIn\fR" 4 + .IX Item "-fmax-errors=n" + Limits the maximum number of error messages to \fIn\fR, at which point + \&\fBgdc\fR bails out rather than attempting to continue processing the + source code. If \fIn\fR is 0 (the default), there is no limit on the + number of error messages produced. + .IP "\fB\-fsyntax\-only\fR" 4 + .IX Item "-fsyntax-only" + Check the code for syntax errors, but do not actually compile it. This + can be used in conjunction with \fB\-fdoc\fR or \fB\-H\fR to generate + files for each module present on the command-line, but no other output + file. + .IP "\fB\-ftransition=\fR\fIid\fR" 4 + .IX Item "-ftransition=id" + Report additional information about D language changes identified by + \&\fIid\fR. The following values are supported: + .RS 4 + .IP "\fBall\fR" 4 + .IX Item "all" + List information on all D language transitions. + .IP "\fBcomplex\fR" 4 + .IX Item "complex" + List all usages of complex or imaginary types. + .IP "\fBfield\fR" 4 + .IX Item "field" + List all non-mutable fields which occupy an object instance. + .IP "\fBin\fR" 4 + .IX Item "in" + List all usages of \f(CW\*(C`in\*(C'\fR on parameter. + .IP "\fBnogc\fR" 4 + .IX Item "nogc" + List all hidden \s-1GC\s0 allocations. + .IP "\fBtemplates\fR" 4 + .IX Item "templates" + List statistics on template instantiations. + .IP "\fBtls\fR" 4 + .IX Item "tls" + List all variables going into thread local storage. + .IP "\fBvmarkdown\fR" 4 + .IX Item "vmarkdown" + List instances of Markdown replacements in Ddoc. + .RE + .RS 4 + .RE + .SS "Options for Linking" + .IX Subsection "Options for Linking" + These options come into play when the compiler links object files into an + executable output file. They are meaningless if the compiler is not doing + a link step. + .IP "\fB\-defaultlib=\fR\fIlibname\fR" 4 + .IX Item "-defaultlib=libname" + Specify the library to use instead of libphobos when linking. Options + specifying the linkage of libphobos, such as \fB\-static\-libphobos\fR + or \fB\-shared\-libphobos\fR, are ignored. + .IP "\fB\-debuglib=\fR\fIlibname\fR" 4 + .IX Item "-debuglib=libname" + Specify the debug library to use instead of libphobos when linking. + This option has no effect unless the \fB\-g\fR option was also given + on the command line. Options specifying the linkage of libphobos, such + as \fB\-static\-libphobos\fR or \fB\-shared\-libphobos\fR, are ignored. + .IP "\fB\-nophoboslib\fR" 4 + .IX Item "-nophoboslib" + Do not use the Phobos or D runtime library when linking. Options specifying + the linkage of libphobos, such as \fB\-static\-libphobos\fR or + \&\fB\-shared\-libphobos\fR, are ignored. The standard system libraries are + used normally, unless \fB\-nostdlib\fR or \fB\-nodefaultlibs\fR is used. + .IP "\fB\-shared\-libphobos\fR" 4 + .IX Item "-shared-libphobos" + On systems that provide \fIlibgphobos\fR and \fIlibgdruntime\fR as a + shared and a static library, this option forces the use of the shared + version. If no shared version was built when the compiler was configured, + this option has no effect. + .IP "\fB\-static\-libphobos\fR" 4 + .IX Item "-static-libphobos" + On systems that provide \fIlibgphobos\fR and \fIlibgdruntime\fR as a + shared and a static library, this option forces the use of the static + version. If no static version was built when the compiler was configured, + this option has no effect. + .SS "Developer Options" + .IX Subsection "Developer Options" + This section describes command-line options that are primarily of + interest to developers or language tooling. + .IP "\fB\-fdump\-d\-original\fR" 4 + .IX Item "-fdump-d-original" + Output the internal front-end \s-1AST\s0 after the \f(CW\*(C`semantic3\*(C'\fR stage. + This option is only useful for debugging the \s-1GNU D\s0 compiler itself. + .IP "\fB\-v\fR" 4 + .IX Item "-v" + Dump information about the compiler language processing stages as the source + program is being compiled. This includes listing all modules that are + processed through the \f(CW\*(C`parse\*(C'\fR, \f(CW\*(C`semantic\*(C'\fR, \f(CW\*(C`semantic2\*(C'\fR, and + \&\f(CW\*(C`semantic3\*(C'\fR stages; all \f(CW\*(C`import\*(C'\fR modules and their file paths; + and all \f(CW\*(C`function\*(C'\fR bodies that are being compiled. + .SH "SEE ALSO" + .IX Header "SEE ALSO" + \&\fIgpl\fR\|(7), \fIgfdl\fR\|(7), \fIfsf\-funding\fR\|(7), \fIgcc\fR\|(1) + and the Info entries for \fIgdc\fR and \fIgcc\fR. + .SH "COPYRIGHT" + .IX Header "COPYRIGHT" + Copyright (c) 2006\-2022 Free Software Foundation, Inc. + .PP + Permission is granted to copy, distribute and/or modify this document + under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3 or + any later version published by the Free Software Foundation; with no + Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. + A copy of the license is included in the + man page \fIgfdl\fR\|(7). diff -Nrcpad gcc-12.4.0/gcc/doc/gdc.info gcc-12.5.0-RC-20250704/gcc/doc/gdc.info *** gcc-12.4.0/gcc/doc/gdc.info Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/doc/gdc.info Fri Jul 4 07:44:59 2025 *************** *** 0 **** --- 1,2001 ---- + This is gdc.info, produced by makeinfo version 6.5 from gdc.texi. + + Copyright (C) 2006-2022 Free Software Foundation, Inc. + + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.3 or + any later version published by the Free Software Foundation; with no + Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A + copy of the license is included in the section entitled "GNU Free + Documentation License". + INFO-DIR-SECTION Software development + START-INFO-DIR-ENTRY + * gdc: (gdc). A GCC-based compiler for the D language + END-INFO-DIR-ENTRY + + + Copyright (C) 2006-2022 Free Software Foundation, Inc. + + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.3 or + any later version published by the Free Software Foundation; with no + Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A + copy of the license is included in the section entitled "GNU Free + Documentation License". + +  + File: gdc.info, Node: Top, Next: Copying, Up: (dir) + + Introduction + ************ + + This manual describes how to use 'gdc', the GNU compiler for the D + programming language. This manual is specifically about 'gdc'. For + more information about the D programming language in general, including + language specifications and standard package documentation, see + . + + * Menu: + + * Copying:: The GNU General Public License. + * GNU Free Documentation License:: + How you can share and copy this manual. + * Invoking gdc:: How to run gdc. + * Index:: Index. + +  + File: gdc.info, Node: Copying, Next: GNU Free Documentation License, Prev: Top, Up: Top + + GNU General Public License + ************************** + + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + + Everyone is permitted to copy and distribute verbatim copies of this + license document, but changing it is not allowed. + + Preamble + ======== + + The GNU General Public License is a free, copyleft license for software + and other kinds of works. + + The licenses for most software and other practical works are designed + to take away your freedom to share and change the works. By contrast, + the GNU General Public License is intended to guarantee your freedom to + share and change all versions of a program-to make sure it remains free + software for all its users. We, the Free Software Foundation, use the + GNU General Public License for most of our software; it applies also to + any other work released this way by its authors. You can apply it to + your programs, too. + + When we speak of free software, we are referring to freedom, not + price. Our General Public Licenses are designed to make sure that you + have the freedom to distribute copies of free software (and charge for + them if you wish), that you receive source code or can get it if you + want it, that you can change the software or use pieces of it in new + free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you + these rights or asking you to surrender the rights. Therefore, you have + certain responsibilities if you distribute copies of the software, or if + you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether + gratis or for a fee, you must pass on to the recipients the same + freedoms that you received. You must make sure that they, too, receive + or can get the source code. And you must show them these terms so they + know their rights. + + Developers that use the GNU GPL protect your rights with two steps: + (1) assert copyright on the software, and (2) offer you this License + giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains + that there is no warranty for this free software. For both users' and + authors' sake, the GPL requires that modified versions be marked as + changed, so that their problems will not be attributed erroneously to + authors of previous versions. + + Some devices are designed to deny users access to install or run + modified versions of the software inside them, although the manufacturer + can do so. This is fundamentally incompatible with the aim of + protecting users' freedom to change the software. The systematic + pattern of such abuse occurs in the area of products for individuals to + use, which is precisely where it is most unacceptable. Therefore, we + have designed this version of the GPL to prohibit the practice for those + products. If such problems arise substantially in other domains, we + stand ready to extend this provision to those domains in future versions + of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. + States should not allow patents to restrict development and use of + software on general-purpose computers, but in those that do, we wish to + avoid the special danger that patents applied to a free program could + make it effectively proprietary. To prevent this, the GPL assures that + patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and + modification follow. + + TERMS AND CONDITIONS + ==================== + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public + License. + + "Copyright" also means copyright-like laws that apply to other + kinds of works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this + License. Each licensee is addressed as "you". "Licensees" and + "recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the + work in a fashion requiring copyright permission, other than the + making of an exact copy. The resulting work is called a "modified + version" of the earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work + based on the Program. + + To "propagate" a work means to do anything with it that, without + permission, would make you directly or secondarily liable for + infringement under applicable copyright law, except executing it on + a computer or modifying a private copy. Propagation includes + copying, distribution (with or without modification), making + available to the public, and in some countries other activities as + well. + + To "convey" a work means any kind of propagation that enables other + parties to make or receive copies. Mere interaction with a user + through a computer network, with no transfer of a copy, is not + conveying. + + An interactive user interface displays "Appropriate Legal Notices" + to the extent that it includes a convenient and prominently visible + feature that (1) displays an appropriate copyright notice, and (2) + tells the user that there is no warranty for the work (except to + the extent that warranties are provided), that licensees may convey + the work under this License, and how to view a copy of this + License. If the interface presents a list of user commands or + options, such as a menu, a prominent item in the list meets this + criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work + for making modifications to it. "Object code" means any non-source + form of a work. + + A "Standard Interface" means an interface that either is an + official standard defined by a recognized standards body, or, in + the case of interfaces specified for a particular programming + language, one that is widely used among developers working in that + language. + + The "System Libraries" of an executable work include anything, + other than the work as a whole, that (a) is included in the normal + form of packaging a Major Component, but which is not part of that + Major Component, and (b) serves only to enable use of the work with + that Major Component, or to implement a Standard Interface for + which an implementation is available to the public in source code + form. A "Major Component", in this context, means a major + essential component (kernel, window system, and so on) of the + specific operating system (if any) on which the executable work + runs, or a compiler used to produce the work, or an object code + interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all + the source code needed to generate, install, and (for an executable + work) run the object code and to modify the work, including scripts + to control those activities. However, it does not include the + work's System Libraries, or general-purpose tools or generally + available free programs which are used unmodified in performing + those activities but which are not part of the work. For example, + Corresponding Source includes interface definition files associated + with source files for the work, and the source code for shared + libraries and dynamically linked subprograms that the work is + specifically designed to require, such as by intimate data + communication or control flow between those subprograms and other + parts of the work. + + The Corresponding Source need not include anything that users can + regenerate automatically from other parts of the Corresponding + Source. + + The Corresponding Source for a work in source code form is that + same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of + copyright on the Program, and are irrevocable provided the stated + conditions are met. This License explicitly affirms your unlimited + permission to run the unmodified Program. The output from running + a covered work is covered by this License only if the output, given + its content, constitutes a covered work. This License acknowledges + your rights of fair use or other equivalent, as provided by + copyright law. + + You may make, run and propagate covered works that you do not + convey, without conditions so long as your license otherwise + remains in force. You may convey covered works to others for the + sole purpose of having them make modifications exclusively for you, + or provide you with facilities for running those works, provided + that you comply with the terms of this License in conveying all + material for which you do not control copyright. Those thus making + or running the covered works for you must do so exclusively on your + behalf, under your direction and control, on terms that prohibit + them from making any copies of your copyrighted material outside + their relationship with you. + + Conveying under any other circumstances is permitted solely under + the conditions stated below. Sublicensing is not allowed; section + 10 makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological + measure under any applicable law fulfilling obligations under + article 11 of the WIPO copyright treaty adopted on 20 December + 1996, or similar laws prohibiting or restricting circumvention of + such measures. + + When you convey a covered work, you waive any legal power to forbid + circumvention of technological measures to the extent such + circumvention is effected by exercising rights under this License + with respect to the covered work, and you disclaim any intention to + limit operation or modification of the work as a means of + enforcing, against the work's users, your or third parties' legal + rights to forbid circumvention of technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you + receive it, in any medium, provided that you conspicuously and + appropriately publish on each copy an appropriate copyright notice; + keep intact all notices stating that this License and any + non-permissive terms added in accord with section 7 apply to the + code; keep intact all notices of the absence of any warranty; and + give all recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, + and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to + produce it from the Program, in the form of source code under the + terms of section 4, provided that you also meet all of these + conditions: + + a. The work must carry prominent notices stating that you + modified it, and giving a relevant date. + + b. The work must carry prominent notices stating that it is + released under this License and any conditions added under + section 7. This requirement modifies the requirement in + section 4 to "keep intact all notices". + + c. You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable + section 7 additional terms, to the whole of the work, and all + its parts, regardless of how they are packaged. This License + gives no permission to license the work in any other way, but + it does not invalidate such permission if you have separately + received it. + + d. If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has + interactive interfaces that do not display Appropriate Legal + Notices, your work need not make them do so. + + A compilation of a covered work with other separate and independent + works, which are not by their nature extensions of the covered + work, and which are not combined with it such as to form a larger + program, in or on a volume of a storage or distribution medium, is + called an "aggregate" if the compilation and its resulting + copyright are not used to limit the access or legal rights of the + compilation's users beyond what the individual works permit. + Inclusion of a covered work in an aggregate does not cause this + License to apply to the other parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms + of sections 4 and 5, provided that you also convey the + machine-readable Corresponding Source under the terms of this + License, in one of these ways: + + a. Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b. Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that + product model, to give anyone who possesses the object code + either (1) a copy of the Corresponding Source for all the + software in the product that is covered by this License, on a + durable physical medium customarily used for software + interchange, for a price no more than your reasonable cost of + physically performing this conveying of source, or (2) access + to copy the Corresponding Source from a network server at no + charge. + + c. Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, + and only if you received the object code with such an offer, + in accord with subsection 6b. + + d. Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to + the Corresponding Source in the same way through the same + place at no further charge. You need not require recipients + to copy the Corresponding Source along with the object code. + If the place to copy the object code is a network server, the + Corresponding Source may be on a different server (operated by + you or a third party) that supports equivalent copying + facilities, provided you maintain clear directions next to the + object code saying where to find the Corresponding Source. + Regardless of what server hosts the Corresponding Source, you + remain obligated to ensure that it is available for as long as + needed to satisfy these requirements. + + e. Convey the object code using peer-to-peer transmission, + provided you inform other peers where the object code and + Corresponding Source of the work are being offered to the + general public at no charge under subsection 6d. + + A separable portion of the object code, whose source code is + excluded from the Corresponding Source as a System Library, need + not be included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means + any tangible personal property which is normally used for personal, + family, or household purposes, or (2) anything designed or sold for + incorporation into a dwelling. In determining whether a product is + a consumer product, doubtful cases shall be resolved in favor of + coverage. For a particular product received by a particular user, + "normally used" refers to a typical or common use of that class of + product, regardless of the status of the particular user or of the + way in which the particular user actually uses, or expects or is + expected to use, the product. A product is a consumer product + regardless of whether the product has substantial commercial, + industrial or non-consumer uses, unless such uses represent the + only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, + procedures, authorization keys, or other information required to + install and execute modified versions of a covered work in that + User Product from a modified version of its Corresponding Source. + The information must suffice to ensure that the continued + functioning of the modified object code is in no case prevented or + interfered with solely because modification has been made. + + If you convey an object code work under this section in, or with, + or specifically for use in, a User Product, and the conveying + occurs as part of a transaction in which the right of possession + and use of the User Product is transferred to the recipient in + perpetuity or for a fixed term (regardless of how the transaction + is characterized), the Corresponding Source conveyed under this + section must be accompanied by the Installation Information. But + this requirement does not apply if neither you nor any third party + retains the ability to install modified object code on the User + Product (for example, the work has been installed in ROM). + + The requirement to provide Installation Information does not + include a requirement to continue to provide support service, + warranty, or updates for a work that has been modified or installed + by the recipient, or for the User Product in which it has been + modified or installed. Access to a network may be denied when the + modification itself materially and adversely affects the operation + of the network or violates the rules and protocols for + communication across the network. + + Corresponding Source conveyed, and Installation Information + provided, in accord with this section must be in a format that is + publicly documented (and with an implementation available to the + public in source code form), and must require no special password + or key for unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of + this License by making exceptions from one or more of its + conditions. Additional permissions that are applicable to the + entire Program shall be treated as though they were included in + this License, to the extent that they are valid under applicable + law. If additional permissions apply only to part of the Program, + that part may be used separately under those permissions, but the + entire Program remains governed by this License without regard to + the additional permissions. + + When you convey a copy of a covered work, you may at your option + remove any additional permissions from that copy, or from any part + of it. (Additional permissions may be written to require their own + removal in certain cases when you modify the work.) You may place + additional permissions on material, added by you to a covered work, + for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material + you add to a covered work, you may (if authorized by the copyright + holders of that material) supplement the terms of this License with + terms: + + a. Disclaiming warranty or limiting liability differently from + the terms of sections 15 and 16 of this License; or + + b. Requiring preservation of specified reasonable legal notices + or author attributions in that material or in the Appropriate + Legal Notices displayed by works containing it; or + + c. Prohibiting misrepresentation of the origin of that material, + or requiring that modified versions of such material be marked + in reasonable ways as different from the original version; or + + d. Limiting the use for publicity purposes of names of licensors + or authors of the material; or + + e. Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f. Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified + versions of it) with contractual assumptions of liability to + the recipient, for any liability that these contractual + assumptions directly impose on those licensors and authors. + + All other non-permissive additional terms are considered "further + restrictions" within the meaning of section 10. If the Program as + you received it, or any part of it, contains a notice stating that + it is governed by this License along with a term that is a further + restriction, you may remove that term. If a license document + contains a further restriction but permits relicensing or conveying + under this License, you may add to a covered work material governed + by the terms of that license document, provided that the further + restriction does not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you + must place, in the relevant source files, a statement of the + additional terms that apply to those files, or a notice indicating + where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in + the form of a separately written license, or stated as exceptions; + the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly + provided under this License. Any attempt otherwise to propagate or + modify it is void, and will automatically terminate your rights + under this License (including any patent licenses granted under the + third paragraph of section 11). + + However, if you cease all violation of this License, then your + license from a particular copyright holder is reinstated (a) + provisionally, unless and until the copyright holder explicitly and + finally terminates your license, and (b) permanently, if the + copyright holder fails to notify you of the violation by some + reasonable means prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is + reinstated permanently if the copyright holder notifies you of the + violation by some reasonable means, this is the first time you have + received notice of violation of this License (for any work) from + that copyright holder, and you cure the violation prior to 30 days + after your receipt of the notice. + + Termination of your rights under this section does not terminate + the licenses of parties who have received copies or rights from you + under this License. If your rights have been terminated and not + permanently reinstated, you do not qualify to receive new licenses + for the same material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or + run a copy of the Program. Ancillary propagation of a covered work + occurring solely as a consequence of using peer-to-peer + transmission to receive a copy likewise does not require + acceptance. However, nothing other than this License grants you + permission to propagate or modify any covered work. These actions + infringe copyright if you do not accept this License. Therefore, + by modifying or propagating a covered work, you indicate your + acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically + receives a license from the original licensors, to run, modify and + propagate that work, subject to this License. You are not + responsible for enforcing compliance by third parties with this + License. + + An "entity transaction" is a transaction transferring control of an + organization, or substantially all assets of one, or subdividing an + organization, or merging organizations. If propagation of a + covered work results from an entity transaction, each party to that + transaction who receives a copy of the work also receives whatever + licenses to the work the party's predecessor in interest had or + could give under the previous paragraph, plus a right to possession + of the Corresponding Source of the work from the predecessor in + interest, if the predecessor has it or can get it with reasonable + efforts. + + You may not impose any further restrictions on the exercise of the + rights granted or affirmed under this License. For example, you + may not impose a license fee, royalty, or other charge for exercise + of rights granted under this License, and you may not initiate + litigation (including a cross-claim or counterclaim in a lawsuit) + alleging that any patent claim is infringed by making, using, + selling, offering for sale, or importing the Program or any portion + of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this + License of the Program or a work on which the Program is based. + The work thus licensed is called the contributor's "contributor + version". + + A contributor's "essential patent claims" are all patent claims + owned or controlled by the contributor, whether already acquired or + hereafter acquired, that would be infringed by some manner, + permitted by this License, of making, using, or selling its + contributor version, but do not include claims that would be + infringed only as a consequence of further modification of the + contributor version. For purposes of this definition, "control" + includes the right to grant patent sublicenses in a manner + consistent with the requirements of this License. + + Each contributor grants you a non-exclusive, worldwide, + royalty-free patent license under the contributor's essential + patent claims, to make, use, sell, offer for sale, import and + otherwise run, modify and propagate the contents of its contributor + version. + + In the following three paragraphs, a "patent license" is any + express agreement or commitment, however denominated, not to + enforce a patent (such as an express permission to practice a + patent or covenant not to sue for patent infringement). To "grant" + such a patent license to a party means to make such an agreement or + commitment not to enforce a patent against the party. + + If you convey a covered work, knowingly relying on a patent + license, and the Corresponding Source of the work is not available + for anyone to copy, free of charge and under the terms of this + License, through a publicly available network server or other + readily accessible means, then you must either (1) cause the + Corresponding Source to be so available, or (2) arrange to deprive + yourself of the benefit of the patent license for this particular + work, or (3) arrange, in a manner consistent with the requirements + of this License, to extend the patent license to downstream + recipients. "Knowingly relying" means you have actual knowledge + that, but for the patent license, your conveying the covered work + in a country, or your recipient's use of the covered work in a + country, would infringe one or more identifiable patents in that + country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or + arrangement, you convey, or propagate by procuring conveyance of, a + covered work, and grant a patent license to some of the parties + receiving the covered work authorizing them to use, propagate, + modify or convey a specific copy of the covered work, then the + patent license you grant is automatically extended to all + recipients of the covered work and works based on it. + + A patent license is "discriminatory" if it does not include within + the scope of its coverage, prohibits the exercise of, or is + conditioned on the non-exercise of one or more of the rights that + are specifically granted under this License. You may not convey a + covered work if you are a party to an arrangement with a third + party that is in the business of distributing software, under which + you make payment to the third party based on the extent of your + activity of conveying the work, and under which the third party + grants, to any of the parties who would receive the covered work + from you, a discriminatory patent license (a) in connection with + copies of the covered work conveyed by you (or copies made from + those copies), or (b) primarily for and in connection with specific + products or compilations that contain the covered work, unless you + entered into that arrangement, or that patent license was granted, + prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting + any implied license or other defenses to infringement that may + otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement + or otherwise) that contradict the conditions of this License, they + do not excuse you from the conditions of this License. If you + cannot convey a covered work so as to satisfy simultaneously your + obligations under this License and any other pertinent obligations, + then as a consequence you may not convey it at all. For example, + if you agree to terms that obligate you to collect a royalty for + further conveying from those to whom you convey the Program, the + only way you could satisfy both those terms and this License would + be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have + permission to link or combine any covered work with a work licensed + under version 3 of the GNU Affero General Public License into a + single combined work, and to convey the resulting work. The terms + of this License will continue to apply to the part which is the + covered work, but the special requirements of the GNU Affero + General Public License, section 13, concerning interaction through + a network will apply to the combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new + versions of the GNU General Public License from time to time. Such + new versions will be similar in spirit to the present version, but + may differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the + Program specifies that a certain numbered version of the GNU + General Public License "or any later version" applies to it, you + have the option of following the terms and conditions either of + that numbered version or of any later version published by the Free + Software Foundation. If the Program does not specify a version + number of the GNU General Public License, you may choose any + version ever published by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future + versions of the GNU General Public License can be used, that + proxy's public statement of acceptance of a version permanently + authorizes you to choose that version for the Program. + + Later license versions may give you additional or different + permissions. However, no additional obligations are imposed on any + author or copyright holder as a result of your choosing to follow a + later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY + APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE + COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" + WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE + RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. + SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL + NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN + WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES + AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR + DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR + CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE + THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA + BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD + PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER + PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF + THE POSSIBILITY OF SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided + above cannot be given local legal effect according to their terms, + reviewing courts shall apply local law that most closely + approximates an absolute waiver of all civil liability in + connection with the Program, unless a warranty or assumption of + liability accompanies a copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + =========================== + + How to Apply These Terms to Your New Programs + ============================================= + + If you develop a new program, and you want it to be of the greatest + possible use to the public, the best way to achieve this is to make it + free software which everyone can redistribute and change under these + terms. + + To do so, attach the following notices to the program. It is safest + to attach them to the start of each source file to most effectively + state the exclusion of warranty; and each file should have at least the + "copyright" line and a pointer to where the full notice is found. + + ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES. + Copyright (C) YEAR NAME OF AUTHOR + + This program 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 of the License, or (at + your option) any later version. + + This program 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 this program. If not, see . + + Also add information on how to contact you by electronic and paper + mail. + + If the program does terminal interaction, make it output a short + notice like this when it starts in an interactive mode: + + PROGRAM Copyright (C) YEAR NAME OF AUTHOR + This program comes with ABSOLUTELY NO WARRANTY; for details type 'show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type 'show c' for details. + + The hypothetical commands 'show w' and 'show c' should show the + appropriate parts of the General Public License. Of course, your + program's commands might be different; for a GUI interface, you would + use an "about box". + + You should also get your employer (if you work as a programmer) or + school, if any, to sign a "copyright disclaimer" for the program, if + necessary. For more information on this, and how to apply and follow + the GNU GPL, see . + + The GNU General Public License does not permit incorporating your + program into proprietary programs. If your program is a subroutine + library, you may consider it more useful to permit linking proprietary + applications with the library. If this is what you want to do, use the + GNU Lesser General Public License instead of this License. But first, + please read . + +  + File: gdc.info, Node: GNU Free Documentation License, Next: Invoking gdc, Prev: Copying, Up: Top + + GNU Free Documentation License + ****************************** + + Version 1.3, 3 November 2008 + + Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. + + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + 0. PREAMBLE + + The purpose of this License is to make a manual, textbook, or other + functional and useful document "free" in the sense of freedom: to + assure everyone the effective freedom to copy and redistribute it, + with or without modifying it, either commercially or + noncommercially. Secondarily, this License preserves for the + author and publisher a way to get credit for their work, while not + being considered responsible for modifications made by others. + + This License is a kind of "copyleft", which means that derivative + works of the document must themselves be free in the same sense. + It complements the GNU General Public License, which is a copyleft + license designed for free software. + + We have designed this License in order to use it for manuals for + free software, because free software needs free documentation: a + free program should come with manuals providing the same freedoms + that the software does. But this License is not limited to + software manuals; it can be used for any textual work, regardless + of subject matter or whether it is published as a printed book. We + recommend this License principally for works whose purpose is + instruction or reference. + + 1. APPLICABILITY AND DEFINITIONS + + This License applies to any manual or other work, in any medium, + that contains a notice placed by the copyright holder saying it can + be distributed under the terms of this License. Such a notice + grants a world-wide, royalty-free license, unlimited in duration, + to use that work under the conditions stated herein. The + "Document", below, refers to any such manual or work. Any member + of the public is a licensee, and is addressed as "you". You accept + the license if you copy, modify or distribute the work in a way + requiring permission under copyright law. + + A "Modified Version" of the Document means any work containing the + Document or a portion of it, either copied verbatim, or with + modifications and/or translated into another language. + + A "Secondary Section" is a named appendix or a front-matter section + of the Document that deals exclusively with the relationship of the + publishers or authors of the Document to the Document's overall + subject (or to related matters) and contains nothing that could + fall directly within that overall subject. (Thus, if the Document + is in part a textbook of mathematics, a Secondary Section may not + explain any mathematics.) The relationship could be a matter of + historical connection with the subject or with related matters, or + of legal, commercial, philosophical, ethical or political position + regarding them. + + The "Invariant Sections" are certain Secondary Sections whose + titles are designated, as being those of Invariant Sections, in the + notice that says that the Document is released under this License. + If a section does not fit the above definition of Secondary then it + is not allowed to be designated as Invariant. The Document may + contain zero Invariant Sections. If the Document does not identify + any Invariant Sections then there are none. + + The "Cover Texts" are certain short passages of text that are + listed, as Front-Cover Texts or Back-Cover Texts, in the notice + that says that the Document is released under this License. A + Front-Cover Text may be at most 5 words, and a Back-Cover Text may + be at most 25 words. + + A "Transparent" copy of the Document means a machine-readable copy, + represented in a format whose specification is available to the + general public, that is suitable for revising the document + straightforwardly with generic text editors or (for images composed + of pixels) generic paint programs or (for drawings) some widely + available drawing editor, and that is suitable for input to text + formatters or for automatic translation to a variety of formats + suitable for input to text formatters. A copy made in an otherwise + Transparent file format whose markup, or absence of markup, has + been arranged to thwart or discourage subsequent modification by + readers is not Transparent. An image format is not Transparent if + used for any substantial amount of text. A copy that is not + "Transparent" is called "Opaque". + + Examples of suitable formats for Transparent copies include plain + ASCII without markup, Texinfo input format, LaTeX input format, + SGML or XML using a publicly available DTD, and standard-conforming + simple HTML, PostScript or PDF designed for human modification. + Examples of transparent image formats include PNG, XCF and JPG. + Opaque formats include proprietary formats that can be read and + edited only by proprietary word processors, SGML or XML for which + the DTD and/or processing tools are not generally available, and + the machine-generated HTML, PostScript or PDF produced by some word + processors for output purposes only. + + The "Title Page" means, for a printed book, the title page itself, + plus such following pages as are needed to hold, legibly, the + material this License requires to appear in the title page. For + works in formats which do not have any title page as such, "Title + Page" means the text near the most prominent appearance of the + work's title, preceding the beginning of the body of the text. + + The "publisher" means any person or entity that distributes copies + of the Document to the public. + + A section "Entitled XYZ" means a named subunit of the Document + whose title either is precisely XYZ or contains XYZ in parentheses + following text that translates XYZ in another language. (Here XYZ + stands for a specific section name mentioned below, such as + "Acknowledgements", "Dedications", "Endorsements", or "History".) + To "Preserve the Title" of such a section when you modify the + Document means that it remains a section "Entitled XYZ" according + to this definition. + + The Document may include Warranty Disclaimers next to the notice + which states that this License applies to the Document. These + Warranty Disclaimers are considered to be included by reference in + this License, but only as regards disclaiming warranties: any other + implication that these Warranty Disclaimers may have is void and + has no effect on the meaning of this License. + + 2. VERBATIM COPYING + + You may copy and distribute the Document in any medium, either + commercially or noncommercially, provided that this License, the + copyright notices, and the license notice saying this License + applies to the Document are reproduced in all copies, and that you + add no other conditions whatsoever to those of this License. You + may not use technical measures to obstruct or control the reading + or further copying of the copies you make or distribute. However, + you may accept compensation in exchange for copies. If you + distribute a large enough number of copies you must also follow the + conditions in section 3. + + You may also lend copies, under the same conditions stated above, + and you may publicly display copies. + + 3. COPYING IN QUANTITY + + If you publish printed copies (or copies in media that commonly + have printed covers) of the Document, numbering more than 100, and + the Document's license notice requires Cover Texts, you must + enclose the copies in covers that carry, clearly and legibly, all + these Cover Texts: Front-Cover Texts on the front cover, and + Back-Cover Texts on the back cover. Both covers must also clearly + and legibly identify you as the publisher of these copies. The + front cover must present the full title with all words of the title + equally prominent and visible. You may add other material on the + covers in addition. Copying with changes limited to the covers, as + long as they preserve the title of the Document and satisfy these + conditions, can be treated as verbatim copying in other respects. + + If the required texts for either cover are too voluminous to fit + legibly, you should put the first ones listed (as many as fit + reasonably) on the actual cover, and continue the rest onto + adjacent pages. + + If you publish or distribute Opaque copies of the Document + numbering more than 100, you must either include a machine-readable + Transparent copy along with each Opaque copy, or state in or with + each Opaque copy a computer-network location from which the general + network-using public has access to download using public-standard + network protocols a complete Transparent copy of the Document, free + of added material. If you use the latter option, you must take + reasonably prudent steps, when you begin distribution of Opaque + copies in quantity, to ensure that this Transparent copy will + remain thus accessible at the stated location until at least one + year after the last time you distribute an Opaque copy (directly or + through your agents or retailers) of that edition to the public. + + It is requested, but not required, that you contact the authors of + the Document well before redistributing any large number of copies, + to give them a chance to provide you with an updated version of the + Document. + + 4. MODIFICATIONS + + You may copy and distribute a Modified Version of the Document + under the conditions of sections 2 and 3 above, provided that you + release the Modified Version under precisely this License, with the + Modified Version filling the role of the Document, thus licensing + distribution and modification of the Modified Version to whoever + possesses a copy of it. In addition, you must do these things in + the Modified Version: + + A. Use in the Title Page (and on the covers, if any) a title + distinct from that of the Document, and from those of previous + versions (which should, if there were any, be listed in the + History section of the Document). You may use the same title + as a previous version if the original publisher of that + version gives permission. + + B. List on the Title Page, as authors, one or more persons or + entities responsible for authorship of the modifications in + the Modified Version, together with at least five of the + principal authors of the Document (all of its principal + authors, if it has fewer than five), unless they release you + from this requirement. + + C. State on the Title page the name of the publisher of the + Modified Version, as the publisher. + + D. Preserve all the copyright notices of the Document. + + E. Add an appropriate copyright notice for your modifications + adjacent to the other copyright notices. + + F. Include, immediately after the copyright notices, a license + notice giving the public permission to use the Modified + Version under the terms of this License, in the form shown in + the Addendum below. + + G. Preserve in that license notice the full lists of Invariant + Sections and required Cover Texts given in the Document's + license notice. + + H. Include an unaltered copy of this License. + + I. Preserve the section Entitled "History", Preserve its Title, + and add to it an item stating at least the title, year, new + authors, and publisher of the Modified Version as given on the + Title Page. If there is no section Entitled "History" in the + Document, create one stating the title, year, authors, and + publisher of the Document as given on its Title Page, then add + an item describing the Modified Version as stated in the + previous sentence. + + J. Preserve the network location, if any, given in the Document + for public access to a Transparent copy of the Document, and + likewise the network locations given in the Document for + previous versions it was based on. These may be placed in the + "History" section. You may omit a network location for a work + that was published at least four years before the Document + itself, or if the original publisher of the version it refers + to gives permission. + + K. For any section Entitled "Acknowledgements" or "Dedications", + Preserve the Title of the section, and preserve in the section + all the substance and tone of each of the contributor + acknowledgements and/or dedications given therein. + + L. Preserve all the Invariant Sections of the Document, unaltered + in their text and in their titles. Section numbers or the + equivalent are not considered part of the section titles. + + M. Delete any section Entitled "Endorsements". Such a section + may not be included in the Modified Version. + + N. Do not retitle any existing section to be Entitled + "Endorsements" or to conflict in title with any Invariant + Section. + + O. Preserve any Warranty Disclaimers. + + If the Modified Version includes new front-matter sections or + appendices that qualify as Secondary Sections and contain no + material copied from the Document, you may at your option designate + some or all of these sections as invariant. To do this, add their + titles to the list of Invariant Sections in the Modified Version's + license notice. These titles must be distinct from any other + section titles. + + You may add a section Entitled "Endorsements", provided it contains + nothing but endorsements of your Modified Version by various + parties--for example, statements of peer review or that the text + has been approved by an organization as the authoritative + definition of a standard. + + You may add a passage of up to five words as a Front-Cover Text, + and a passage of up to 25 words as a Back-Cover Text, to the end of + the list of Cover Texts in the Modified Version. Only one passage + of Front-Cover Text and one of Back-Cover Text may be added by (or + through arrangements made by) any one entity. If the Document + already includes a cover text for the same cover, previously added + by you or by arrangement made by the same entity you are acting on + behalf of, you may not add another; but you may replace the old + one, on explicit permission from the previous publisher that added + the old one. + + The author(s) and publisher(s) of the Document do not by this + License give permission to use their names for publicity for or to + assert or imply endorsement of any Modified Version. + + 5. COMBINING DOCUMENTS + + You may combine the Document with other documents released under + this License, under the terms defined in section 4 above for + modified versions, provided that you include in the combination all + of the Invariant Sections of all of the original documents, + unmodified, and list them all as Invariant Sections of your + combined work in its license notice, and that you preserve all + their Warranty Disclaimers. + + The combined work need only contain one copy of this License, and + multiple identical Invariant Sections may be replaced with a single + copy. If there are multiple Invariant Sections with the same name + but different contents, make the title of each such section unique + by adding at the end of it, in parentheses, the name of the + original author or publisher of that section if known, or else a + unique number. Make the same adjustment to the section titles in + the list of Invariant Sections in the license notice of the + combined work. + + In the combination, you must combine any sections Entitled + "History" in the various original documents, forming one section + Entitled "History"; likewise combine any sections Entitled + "Acknowledgements", and any sections Entitled "Dedications". You + must delete all sections Entitled "Endorsements." + + 6. COLLECTIONS OF DOCUMENTS + + You may make a collection consisting of the Document and other + documents released under this License, and replace the individual + copies of this License in the various documents with a single copy + that is included in the collection, provided that you follow the + rules of this License for verbatim copying of each of the documents + in all other respects. + + You may extract a single document from such a collection, and + distribute it individually under this License, provided you insert + a copy of this License into the extracted document, and follow this + License in all other respects regarding verbatim copying of that + document. + + 7. AGGREGATION WITH INDEPENDENT WORKS + + A compilation of the Document or its derivatives with other + separate and independent documents or works, in or on a volume of a + storage or distribution medium, is called an "aggregate" if the + copyright resulting from the compilation is not used to limit the + legal rights of the compilation's users beyond what the individual + works permit. When the Document is included in an aggregate, this + License does not apply to the other works in the aggregate which + are not themselves derivative works of the Document. + + If the Cover Text requirement of section 3 is applicable to these + copies of the Document, then if the Document is less than one half + of the entire aggregate, the Document's Cover Texts may be placed + on covers that bracket the Document within the aggregate, or the + electronic equivalent of covers if the Document is in electronic + form. Otherwise they must appear on printed covers that bracket + the whole aggregate. + + 8. TRANSLATION + + Translation is considered a kind of modification, so you may + distribute translations of the Document under the terms of section + 4. Replacing Invariant Sections with translations requires special + permission from their copyright holders, but you may include + translations of some or all Invariant Sections in addition to the + original versions of these Invariant Sections. You may include a + translation of this License, and all the license notices in the + Document, and any Warranty Disclaimers, provided that you also + include the original English version of this License and the + original versions of those notices and disclaimers. In case of a + disagreement between the translation and the original version of + this License or a notice or disclaimer, the original version will + prevail. + + If a section in the Document is Entitled "Acknowledgements", + "Dedications", or "History", the requirement (section 4) to + Preserve its Title (section 1) will typically require changing the + actual title. + + 9. TERMINATION + + You may not copy, modify, sublicense, or distribute the Document + except as expressly provided under this License. Any attempt + otherwise to copy, modify, sublicense, or distribute it is void, + and will automatically terminate your rights under this License. + + However, if you cease all violation of this License, then your + license from a particular copyright holder is reinstated (a) + provisionally, unless and until the copyright holder explicitly and + finally terminates your license, and (b) permanently, if the + copyright holder fails to notify you of the violation by some + reasonable means prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is + reinstated permanently if the copyright holder notifies you of the + violation by some reasonable means, this is the first time you have + received notice of violation of this License (for any work) from + that copyright holder, and you cure the violation prior to 30 days + after your receipt of the notice. + + Termination of your rights under this section does not terminate + the licenses of parties who have received copies or rights from you + under this License. If your rights have been terminated and not + permanently reinstated, receipt of a copy of some or all of the + same material does not give you any rights to use it. + + 10. FUTURE REVISIONS OF THIS LICENSE + + The Free Software Foundation may publish new, revised versions of + the GNU Free Documentation License from time to time. Such new + versions will be similar in spirit to the present version, but may + differ in detail to address new problems or concerns. See + . + + Each version of the License is given a distinguishing version + number. If the Document specifies that a particular numbered + version of this License "or any later version" applies to it, you + have the option of following the terms and conditions either of + that specified version or of any later version that has been + published (not as a draft) by the Free Software Foundation. If the + Document does not specify a version number of this License, you may + choose any version ever published (not as a draft) by the Free + Software Foundation. If the Document specifies that a proxy can + decide which future versions of this License can be used, that + proxy's public statement of acceptance of a version permanently + authorizes you to choose that version for the Document. + + 11. RELICENSING + + "Massive Multiauthor Collaboration Site" (or "MMC Site") means any + World Wide Web server that publishes copyrightable works and also + provides prominent facilities for anybody to edit those works. A + public wiki that anybody can edit is an example of such a server. + A "Massive Multiauthor Collaboration" (or "MMC") contained in the + site means any set of copyrightable works thus published on the MMC + site. + + "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 + license published by Creative Commons Corporation, a not-for-profit + corporation with a principal place of business in San Francisco, + California, as well as future copyleft versions of that license + published by that same organization. + + "Incorporate" means to publish or republish a Document, in whole or + in part, as part of another Document. + + An MMC is "eligible for relicensing" if it is licensed under this + License, and if all works that were first published under this + License somewhere other than this MMC, and subsequently + incorporated in whole or in part into the MMC, (1) had no cover + texts or invariant sections, and (2) were thus incorporated prior + to November 1, 2008. + + The operator of an MMC Site may republish an MMC contained in the + site under CC-BY-SA on the same site at any time before August 1, + 2009, provided the MMC is eligible for relicensing. + + ADDENDUM: How to use this License for your documents + ==================================================== + + To use this License in a document you have written, include a copy of + the License in the document and put the following copyright and license + notices just after the title page: + + Copyright (C) YEAR YOUR NAME. + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.3 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover + Texts. A copy of the license is included in the section entitled ``GNU + Free Documentation License''. + + If you have Invariant Sections, Front-Cover Texts and Back-Cover + Texts, replace the "with...Texts." line with this: + + with the Invariant Sections being LIST THEIR TITLES, with + the Front-Cover Texts being LIST, and with the Back-Cover Texts + being LIST. + + If you have Invariant Sections without Cover Texts, or some other + combination of the three, merge those two alternatives to suit the + situation. + + If your document contains nontrivial examples of program code, we + recommend releasing these examples in parallel under your choice of free + software license, such as the GNU General Public License, to permit + their use in free software. + +  + File: gdc.info, Node: Invoking gdc, Next: Index, Prev: GNU Free Documentation License, Up: Top + + 1 Invoking gdc + ************** + + The 'gdc' command is the GNU compiler for the D language and supports + many of the same options as 'gcc'. *Note Option Summary: (gcc)Option + Summary. This manual only documents the options specific to 'gdc'. + + * Menu: + + * Input and Output files:: Controlling the kind of output: + an executable, object files, assembler files, + * Runtime Options:: Options controlling runtime behavior + * Directory Options:: Where to find module files + * Code Generation:: Options controlling the output of gdc + * Warnings:: Options controlling warnings specific to gdc + * Linking:: Options influencing the linking step + * Developer Options:: Options useful for developers of gdc + +  + File: gdc.info, Node: Input and Output files, Next: Runtime Options, Up: Invoking gdc + + 1.1 Input and Output files + ========================== + + For any given input file, the file name suffix determines what kind of + compilation is done. The following kinds of input file names are + supported: + + 'FILE.d' + D source files. + 'FILE.dd' + Ddoc source files. + 'FILE.di' + D interface files. + + You can specify more than one input file on the 'gdc' command line, + each being compiled separately in the compilation process. If you + specify a '-o FILE' option, all the input files are compiled together, + producing a single output file, named FILE. This is allowed even when + using '-S' or '-c'. + + A D interface file contains only what an import of the module needs, + rather than the whole implementation of that module. They can be + created by 'gdc' from a D source file by using the '-H' option. When + the compiler resolves an import declaration, it searches for matching + '.di' files first, then for '.d'. + + A Ddoc source file contains code in the D macro processor language. + It is primarily designed for use in producing user documentation from + embedded comments, with a slight affinity towards HTML generation. If a + '.d' source file starts with the string 'Ddoc' then it is treated as + general purpose documentation, not as a D source file. + +  + File: gdc.info, Node: Runtime Options, Next: Directory Options, Prev: Input and Output files, Up: Invoking gdc + + 1.2 Runtime Options + =================== + + These options affect the runtime behavior of programs compiled with + 'gdc'. + + '-fall-instantiations' + Generate code for all template instantiations. The default + template emission strategy is to not generate code for declarations + that were either instantiated speculatively, such as from + '__traits(compiles, ...)', or that come from an imported module not + being compiled. + + '-fno-assert' + Turn off code generation for 'assert' contracts. + + '-fno-bounds-check' + Turns off array bounds checking for all functions, which can + improve performance for code that uses arrays extensively. Note + that this can result in unpredictable behavior if the code in + question actually does violate array bounds constraints. It is + safe to use this option if you are sure that your code never throws + a 'RangeError'. + + '-fbounds-check=VALUE' + An alternative to '-fbounds-check' that allows more control as to + where bounds checking is turned on or off. The following values + are supported: + + 'on' + Turns on array bounds checking for all functions. + 'safeonly' + Turns on array bounds checking only for '@safe' functions. + 'off' + Turns off array bounds checking completely. + + '-fno-builtin' + Don't recognize built-in functions unless they begin with the + prefix '__builtin_'. By default, the compiler will recognize when + a function in the 'core.stdc' package is a built-in function. + + '-fcheckaction=VALUE' + This option controls what code is generated on an assertion, bounds + check, or final switch failure. The following values are + supported: + + 'context' + Throw an 'AssertError' with extra context information. + 'halt' + Halt the program execution. + 'throw' + Throw an 'AssertError' (the default). + + '-fdebug' + '-fdebug=VALUE' + Turn on compilation of conditional 'debug' code into the program. + The '-fdebug' option itself sets the debug level to '1', while + '-fdebug=' enables 'debug' code that are identified by any of the + following values: + + 'level' + Sets the debug level to LEVEL, any 'debug' code <= LEVEL is + compiled into the program. + 'ident' + Turns on compilation of any 'debug' code identified by IDENT. + + '-fno-druntime' + Implements . Assumes that + compilation targets an environment without a D runtime library. + + This is equivalent to compiling with the following options: + + gdc -nophoboslib -fno-exceptions -fno-moduleinfo -fno-rtti + + '-fextern-std=STANDARD' + Sets the C++ name mangling compatibility to the version identified + by STANDARD. The following values are supported: + + 'c++98' + 'c++03' + Sets '__traits(getTargetInfo, "cppStd")' to '199711'. + 'c++11' + Sets '__traits(getTargetInfo, "cppStd")' to '201103'. + 'c++14' + Sets '__traits(getTargetInfo, "cppStd")' to '201402'. + 'c++17' + Sets '__traits(getTargetInfo, "cppStd")' to '201703'. This is + the default. + 'c++20' + Sets '__traits(getTargetInfo, "cppStd")' to '202002'. + + '-fno-invariants' + Turns off code generation for class 'invariant' contracts. + + '-fmain' + Generates a default 'main()' function when compiling. This is + useful when unittesting a library, as it enables running the + unittests in a library without having to manually define an + entry-point function. This option does nothing when 'main' is + already defined in user code. + + '-fno-moduleinfo' + Turns off generation of the 'ModuleInfo' and related functions that + would become unreferenced without it, which may allow linking to + programs not written in D. Functions that are not be generated + include module constructors and destructors ('static this' and + 'static ~this'), 'unittest' code, and 'DSO' registry functions for + dynamically linked code. + + '-fonly=FILENAME' + Tells the compiler to parse and run semantic analysis on all + modules on the command line, but only generate code for the module + specified by FILENAME. + + '-fno-postconditions' + Turns off code generation for postcondition 'out' contracts. + + '-fno-preconditions' + Turns off code generation for precondition 'in' contracts. + + '-fpreview=ID' + Turns on an upcoming D language change identified by ID. The + following values are supported: + + 'all' + Turns on all upcoming D language features. + 'dip1000' + Implements + + (Scoped pointers). + 'dip1008' + Implements + + (Allow exceptions in '@nogc' code). + 'dip1021' + Implements + + (Mutable function arguments). + 'dip25' + Implements + + (Sealed references). + 'dtorfields' + Turns on generation for destructing fields of partially + constructed objects. + 'fieldwise' + Turns on generation of struct equality to use field-wise + comparisons. + 'fixaliasthis' + Implements new lookup rules that check the current scope for + 'alias this' before searching in upper scopes. + 'in' + Implements 'in' parameters to mean 'scope const [ref]' and + accepts rvalues. + 'inclusiveincontracts' + Implements 'in' contracts of overridden methods to be a + superset of parent contract. + 'intpromote' + Implements C-style integral promotion for unary '+', '-' and + '~' expressions. + 'nosharedaccess' + Turns off and disallows all access to shared memory objects. + 'rvaluerefparam' + Implements rvalue arguments to 'ref' parameters. + 'shortenedmethods' + Implements use of '=>' for methods and top-level functions in + addition to lambdas. + + '-frelease' + Turns on compiling in release mode, which means not emitting + runtime checks for contracts and asserts. Array bounds checking is + not done for '@system' and '@trusted' functions, and assertion + failures are undefined behavior. + + This is equivalent to compiling with the following options: + + gdc -fno-assert -fbounds-check=safe -fno-invariants \ + -fno-postconditions -fno-preconditions -fno-switch-errors + + '-frevert=' + Turns off a D language feature identified by ID. The following + values are supported: + + 'all' + Turns off all revertable D language features. + 'dip25' + Reverts + + (Sealed references). + 'dtorfields' + Turns off generation for destructing fields of partially + constructed objects. + 'markdown' + Turns off Markdown replacements in Ddoc comments. + + '-fno-rtti' + Turns off generation of run-time type information for all user + defined types. Any code that uses features of the language that + require access to this information will result in an error. + + '-fno-switch-errors' + This option controls what code is generated when no case is matched + in a 'final switch' statement. The default run time behavior is to + throw a 'SwitchError'. Turning off '-fswitch-errors' means that + instead the execution of the program is immediately halted. + + '-funittest' + Turns on compilation of 'unittest' code, and turns on the + 'version(unittest)' identifier. This implies '-fassert'. + + '-fversion=VALUE' + Turns on compilation of conditional 'version' code into the program + identified by any of the following values: + + 'level' + Sets the version level to LEVEL, any 'version' code >= LEVEL + is compiled into the program. + 'ident' + Turns on compilation of 'version' code identified by IDENT. + + '-fno-weak-templates' + Turns off emission of declarations that can be defined in multiple + objects as weak symbols. The default is to emit all public symbols + as weak, unless the target lacks support for weak symbols. + Disabling this option means that common symbols are instead put in + COMDAT or become private. + +  + File: gdc.info, Node: Directory Options, Next: Code Generation, Prev: Runtime Options, Up: Invoking gdc + + 1.3 Options for Directory Search + ================================ + + These options specify directories to search for files, libraries, and + other parts of the compiler: + + '-IDIR' + Specify a directory to use when searching for imported modules at + compile time. Multiple '-I' options can be used, and the paths are + searched in the same order. + + '-JDIR' + Specify a directory to use when searching for files in string + imports at compile time. This switch is required in order to use + 'import(file)' expressions. Multiple '-J' options can be used, and + the paths are searched in the same order. + + '-LDIR' + When linking, specify a library search directory, as with 'gcc'. + + '-BDIR' + This option specifies where to find the executables, libraries, + source files, and data files of the compiler itself, as with 'gcc'. + + '-fmodule-file=MODULE=SPEC' + This option manipulates file paths of imported modules, such that + if an imported module matches all or the leftmost part of MODULE, + the file path in SPEC is used as the location to search for D + sources. This is used when the source file path and names are not + the same as the package and module hierarchy. Consider the + following examples: + + gdc test.d -fmodule-file=A.B=foo.d -fmodule-file=C=bar + + This will tell the compiler to search in all import paths for the + source file FOO.D when importing A.B, and the directory BAR/ when + importing C, as annotated in the following D code: + + module test; + import A.B; // Matches A.B, searches for foo.d + import C.D.E; // Matches C, searches for bar/D/E.d + import A.B.C; // No match, searches for A/B/C.d + + '-imultilib DIR' + Use DIR as a subdirectory of the gcc directory containing + target-specific D sources and interfaces. + + '-iprefix PREFIX' + Specify PREFIX as the prefix for the gcc directory containing + target-specific D sources and interfaces. If the PREFIX represents + a directory, you should include the final ''/''. + + '-nostdinc' + Do not search the standard system directories for D source and + interface files. Only the directories that have been specified + with '-I' options (and the directory of the current file, if + appropriate) are searched. + +  + File: gdc.info, Node: Code Generation, Next: Warnings, Prev: Directory Options, Up: Invoking gdc + + 1.4 Code Generation + =================== + + In addition to the many 'gcc' options controlling code generation, 'gdc' + has several options specific to itself. + + '-H' + Generates D interface files for all modules being compiled. The + compiler determines the output file based on the name of the input + file, removes any directory components and suffix, and applies the + '.di' suffix. + + '-Hd DIR' + Same as '-H', but writes interface files to directory DIR. This + option can be used with '-Hf FILE' to independently set the output + file and directory path. + + '-Hf FILE' + Same as '-H' but writes interface files to FILE. This option can + be used with '-Hd DIR' to independently set the output file and + directory path. + + '-M' + Output the module dependencies of all source files being compiled + in a format suitable for 'make'. The compiler outputs one 'make' + rule containing the object file name for that source file, a colon, + and the names of all imported files. + + '-MM' + Like '-M' but does not mention imported modules from the D standard + library package directories. + + '-MF FILE' + When used with '-M' or '-MM', specifies a FILE to write the + dependencies to. When used with the driver options '-MD' or + '-MMD', '-MF' overrides the default dependency output file. + + '-MG' + This option is for compatibility with 'gcc', and is ignored by the + compiler. + + '-MP' + Outputs a phony target for each dependency other than the modules + being compiled, causing each to depend on nothing. + + '-MT TARGET' + Change the TARGET of the rule emitted by dependency generation to + be exactly the string you specify. If you want multiple targets, + you can specify them as a single argument to '-MT', or use multiple + '-MT' options. + + '-MQ TARGET' + Same as '-MT', but it quotes any characters which are special to + 'make'. + + '-MD' + This option is equivalent to '-M -MF FILE'. The driver determines + FILE by removing any directory components and suffix from the input + file, and then adding a '.deps' suffix. + + '-MMD' + Like '-MD' but does not mention imported modules from the D + standard library package directories. + + '-X' + Output information describing the contents of all source files + being compiled in JSON format to a file. The driver determines + FILE by removing any directory components and suffix from the input + file, and then adding a '.json' suffix. + + '-Xf FILE' + Same as '-X', but writes all JSON contents to the specified FILE. + + '-fdoc' + Generates 'Ddoc' documentation and writes it to a file. The + compiler determines FILE by removing any directory components and + suffix from the input file, and then adding a '.html' suffix. + + '-fdoc-dir=DIR' + Same as '-fdoc', but writes documentation to directory DIR. This + option can be used with '-fdoc-file=FILE' to independently set the + output file and directory path. + + '-fdoc-file=FILE' + Same as '-fdoc', but writes documentation to FILE. This option can + be used with '-fdoc-dir=DIR' to independently set the output file + and directory path. + + '-fdoc-inc=FILE' + Specify FILE as a DDOC macro file to be read. Multiple '-fdoc-inc' + options can be used, and files are read and processed in the same + order. + + '-fdump-c++-spec=FILE' + For D source files, generate corresponding C++ declarations in + FILE. + + '-fdump-c++-spec-verbose' + In conjunction with '-fdump-c++-spec=' above, add comments for + ignored declarations in the generated C++ header. + + '-fsave-mixins=FILE' + Generates code expanded from D 'mixin' statements and writes the + processed sources to FILE. This is useful to debug errors in + compilation and provides source for debuggers to show when + requested. + +  + File: gdc.info, Node: Warnings, Next: Linking, Prev: Code Generation, Up: Invoking gdc + + 1.5 Warnings + ============ + + Warnings are diagnostic messages that report constructions that are not + inherently erroneous but that are risky or suggest there is likely to be + a bug in the program. Unless '-Werror' is specified, they do not + prevent compilation of the program. + + '-Wall' + Turns on all warnings messages. Warnings are not a defined part of + the D language, and all constructs for which this may generate a + warning message are valid code. + + '-Walloca' + This option warns on all uses of "alloca" in the source. + + '-Walloca-larger-than=N' + Warn on unbounded uses of alloca, and on bounded uses of alloca + whose bound can be larger than N bytes. '-Wno-alloca-larger-than' + disables '-Walloca-larger-than' warning and is equivalent to + '-Walloca-larger-than=SIZE_MAX' or larger. + + '-Wcast-result' + Warn about casts that will produce a null or zero result. + Currently this is only done for casting between an imaginary and + non-imaginary data type, or casting between a D and C++ class. + + '-Wno-deprecated' + Do not warn about usage of deprecated features and symbols with + 'deprecated' attributes. + + '-Werror' + Turns all warnings into errors. + + '-Wspeculative' + List all error messages from speculative compiles, such as + '__traits(compiles, ...)'. This option does not report messages as + warnings, and these messages therefore never become errors when the + '-Werror' option is also used. + + '-Wtemplates' + Warn when a template instantiation is encountered. Some coding + rules disallow templates, and this may be used to enforce that + rule. + + '-Wunknown-pragmas' + Warn when a 'pragma()' is encountered that is not understood by + 'gdc'. This differs from '-fignore-unknown-pragmas' where a pragma + that is part of the D language, but not implemented by the + compiler, won't get reported. + + '-Wno-varargs' + Do not warn upon questionable usage of the macros used to handle + variable arguments like 'va_start'. + + '-fignore-unknown-pragmas' + Turns off errors for unsupported pragmas. + + '-fmax-errors=N' + Limits the maximum number of error messages to N, at which point + 'gdc' bails out rather than attempting to continue processing the + source code. If N is 0 (the default), there is no limit on the + number of error messages produced. + + '-fsyntax-only' + Check the code for syntax errors, but do not actually compile it. + This can be used in conjunction with '-fdoc' or '-H' to generate + files for each module present on the command-line, but no other + output file. + + '-ftransition=ID' + Report additional information about D language changes identified + by ID. The following values are supported: + + 'all' + List information on all D language transitions. + 'complex' + List all usages of complex or imaginary types. + 'field' + List all non-mutable fields which occupy an object instance. + 'in' + List all usages of 'in' on parameter. + 'nogc' + List all hidden GC allocations. + 'templates' + List statistics on template instantiations. + 'tls' + List all variables going into thread local storage. + 'vmarkdown' + List instances of Markdown replacements in Ddoc. + +  + File: gdc.info, Node: Linking, Next: Developer Options, Prev: Warnings, Up: Invoking gdc + + 1.6 Options for Linking + ======================= + + These options come into play when the compiler links object files into + an executable output file. They are meaningless if the compiler is not + doing a link step. + + '-defaultlib=LIBNAME' + Specify the library to use instead of libphobos when linking. + Options specifying the linkage of libphobos, such as + '-static-libphobos' or '-shared-libphobos', are ignored. + + '-debuglib=LIBNAME' + Specify the debug library to use instead of libphobos when linking. + This option has no effect unless the '-g' option was also given on + the command line. Options specifying the linkage of libphobos, + such as '-static-libphobos' or '-shared-libphobos', are ignored. + + '-nophoboslib' + Do not use the Phobos or D runtime library when linking. Options + specifying the linkage of libphobos, such as '-static-libphobos' or + '-shared-libphobos', are ignored. The standard system libraries + are used normally, unless '-nostdlib' or '-nodefaultlibs' is used. + + '-shared-libphobos' + On systems that provide 'libgphobos' and 'libgdruntime' as a shared + and a static library, this option forces the use of the shared + version. If no shared version was built when the compiler was + configured, this option has no effect. + + '-static-libphobos' + On systems that provide 'libgphobos' and 'libgdruntime' as a shared + and a static library, this option forces the use of the static + version. If no static version was built when the compiler was + configured, this option has no effect. + +  + File: gdc.info, Node: Developer Options, Prev: Linking, Up: Invoking gdc + + 1.7 Developer Options + ===================== + + This section describes command-line options that are primarily of + interest to developers or language tooling. + + '-fdump-d-original' + Output the internal front-end AST after the 'semantic3' stage. + This option is only useful for debugging the GNU D compiler itself. + + '-v' + Dump information about the compiler language processing stages as + the source program is being compiled. This includes listing all + modules that are processed through the 'parse', 'semantic', + 'semantic2', and 'semantic3' stages; all 'import' modules and their + file paths; and all 'function' bodies that are being compiled. + +  + File: gdc.info, Node: Index, Prev: Invoking gdc, Up: Top + + Index + ***** + + [index] + * Menu: + + * -B: Directory Options. (line 24) + * -debuglib=: Linking. (line 16) + * -defaultlib=: Linking. (line 11) + * -fall-instantiations: Runtime Options. (line 10) + * -fassert: Runtime Options. (line 17) + * -fbounds-check: Runtime Options. (line 20) + * -fbounds-check=: Runtime Options. (line 28) + * -fbuiltin: Runtime Options. (line 40) + * -fcheckaction: Runtime Options. (line 45) + * -fdebug: Runtime Options. (line 58) + * -fdoc: Code Generation. (line 77) + * -fdoc-dir: Code Generation. (line 82) + * -fdoc-file: Code Generation. (line 87) + * -fdoc-inc: Code Generation. (line 92) + * -fdruntime: Runtime Options. (line 70) + * -fdump-d-original: Developer Options. (line 10) + * -fextern-std: Runtime Options. (line 78) + * -fignore-unknown-pragmas: Warnings. (line 59) + * -finvariants: Runtime Options. (line 95) + * -fmain: Runtime Options. (line 98) + * -fmax-errors: Warnings. (line 62) + * -fmodule-file: Directory Options. (line 28) + * -fmoduleinfo: Runtime Options. (line 105) + * -fno-all-instantiations: Runtime Options. (line 10) + * -fno-assert: Runtime Options. (line 17) + * -fno-bounds-check: Runtime Options. (line 20) + * -fno-builtin: Runtime Options. (line 40) + * -fno-debug: Runtime Options. (line 58) + * -fno-druntime: Runtime Options. (line 70) + * -fno-ignore-unknown-pragmas: Warnings. (line 59) + * -fno-invariants: Runtime Options. (line 95) + * -fno-moduleinfo: Runtime Options. (line 105) + * -fno-postconditions: Runtime Options. (line 118) + * -fno-preconditions: Runtime Options. (line 121) + * -fno-release: Runtime Options. (line 172) + * -fno-rtti: Runtime Options. (line 199) + * -fno-switch-errors: Runtime Options. (line 204) + * -fno-syntax-only: Warnings. (line 68) + * -fno-unittest: Runtime Options. (line 210) + * -fno-weak-templates: Runtime Options. (line 224) + * -fonly: Runtime Options. (line 113) + * -fpostconditions: Runtime Options. (line 118) + * -fpreconditions: Runtime Options. (line 121) + * -fpreview: Runtime Options. (line 124) + * -frelease: Runtime Options. (line 172) + * -frevert: Runtime Options. (line 183) + * -frtti: Runtime Options. (line 199) + * -fsave-mixins: Code Generation. (line 105) + * -fswitch-errors: Runtime Options. (line 204) + * -fsyntax-only: Warnings. (line 68) + * -ftransition: Warnings. (line 74) + * -funittest: Runtime Options. (line 210) + * -fversion: Runtime Options. (line 214) + * -fweak-templates: Runtime Options. (line 224) + * -H: Code Generation. (line 10) + * -Hd: Code Generation. (line 16) + * -Hf: Code Generation. (line 21) + * -I: Directory Options. (line 10) + * -imultilib: Directory Options. (line 47) + * -iprefix: Directory Options. (line 51) + * -J: Directory Options. (line 15) + * -L: Directory Options. (line 21) + * -M: Code Generation. (line 26) + * -MD: Code Generation. (line 59) + * -MF: Code Generation. (line 36) + * -MG: Code Generation. (line 41) + * -MM: Code Generation. (line 32) + * -MMD: Code Generation. (line 64) + * -MP: Code Generation. (line 45) + * -MQ: Code Generation. (line 55) + * -MT: Code Generation. (line 49) + * -nophoboslib: Linking. (line 22) + * -nostdinc: Directory Options. (line 56) + * -shared-libphobos: Linking. (line 28) + * -static-libphobos: Linking. (line 34) + * -v: Developer Options. (line 14) + * -Wall: Warnings. (line 12) + * -Walloca: Warnings. (line 17) + * -Walloca-larger-than: Warnings. (line 20) + * -Wcast-result: Warnings. (line 26) + * -Wdeprecated: Warnings. (line 31) + * -Werror: Warnings. (line 35) + * -Wno-all: Warnings. (line 12) + * -Wno-alloca-larger-than: Warnings. (line 20) + * -Wno-cast-result: Warnings. (line 26) + * -Wno-deprecated: Warnings. (line 31) + * -Wno-error: Warnings. (line 35) + * -Wno-speculative: Warnings. (line 38) + * -Wno-templates: Warnings. (line 44) + * -Wno-unknown-pragmas: Warnings. (line 49) + * -Wspeculative: Warnings. (line 38) + * -Wtemplates: Warnings. (line 44) + * -Wunknown-pragmas: Warnings. (line 49) + * -X: Code Generation. (line 68) + * -Xf: Code Generation. (line 74) + * D interface files.: Input and Output files. + (line 23) + * D source file suffixes: Input and Output files. + (line 6) + * Ddoc source files.: Input and Output files. + (line 29) + * debug dump options: Developer Options. (line 6) + * developer options: Developer Options. (line 6) + * directory options: Directory Options. (line 6) + * dump options: Developer Options. (line 6) + * FDL, GNU Free Documentation License: GNU Free Documentation License. + (line 6) + * linking, static: Linking. (line 6) + * messages, warning: Warnings. (line 6) + * options to control warnings: Warnings. (line 6) + * options, code generation: Code Generation. (line 6) + * options, directory search: Directory Options. (line 6) + * options, linking: Linking. (line 6) + * options, runtime: Runtime Options. (line 6) + * search path: Directory Options. (line 6) + * suffixes for D source: Input and Output files. + (line 6) + * suppressing warnings: Warnings. (line 6) + * warning messages: Warnings. (line 6) + * Wno-varargs: Warnings. (line 55) + * Wvarargs: Warnings. (line 55) + + +  + Tag Table: + Node: Top1075 + Node: Copying1723 + Node: GNU Free Documentation License39257 + Node: Invoking gdc64383 + Node: Input and Output files65258 + Node: Runtime Options66606 + Node: Directory Options75222 + Node: Code Generation77645 + Node: Warnings81579 + Node: Linking84976 + Node: Developer Options86649 + Node: Index87399 +  + End Tag Table diff -Nrcpad gcc-12.4.0/gcc/doc/gfdl.7 gcc-12.5.0-RC-20250704/gcc/doc/gfdl.7 *** gcc-12.4.0/gcc/doc/gfdl.7 Thu Jun 20 08:11:52 2024 --- gcc-12.5.0-RC-20250704/gcc/doc/gfdl.7 Fri Jul 4 07:26:03 2025 *************** *** 1,4 **** ! .\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.43) .\" .\" Standard preamble: .\" ======================================================================== --- 1,4 ---- ! .\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35) .\" .\" Standard preamble: .\" ======================================================================== *************** *** 54,73 **** .\" Avoid warning from groff about undefined register 'F'. .de IX .. ! .nr rF 0 ! .if \n(.g .if rF .nr rF 1 ! .if (\n(rF:(\n(.g==0)) \{\ ! . if \nF \{\ ! . de IX ! . tm Index:\\$1\t\\n%\t"\\$2" .. ! . if !\nF==2 \{\ ! . nr % 0 ! . nr F 2 ! . \} . \} .\} - .rr rF .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. --- 54,69 ---- .\" Avoid warning from groff about undefined register 'F'. .de IX .. ! .if !\nF .nr F 0 ! .if \nF>0 \{\ ! . de IX ! . tm Index:\\$1\t\\n%\t"\\$2" .. ! . if !\nF==2 \{\ ! . nr % 0 ! . nr F 2 . \} .\} .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. *************** *** 133,139 **** .\" ======================================================================== .\" .IX Title "GFDL 7" ! .TH GFDL 7 "2024-06-20" "gcc-12.4.0" "GNU" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l --- 129,135 ---- .\" ======================================================================== .\" .IX Title "GFDL 7" ! .TH GFDL 7 "2025-07-04" "gcc-12.4.1" "GNU" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l *************** free software license, such as the \s-1G *** 641,647 **** to permit their use in free software. .SH "SEE ALSO" .IX Header "SEE ALSO" ! \&\fBgpl\fR\|(7), \fBfsf\-funding\fR\|(7). .SH "COPYRIGHT" .IX Header "COPYRIGHT" Copyright (c) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. --- 637,643 ---- to permit their use in free software. .SH "SEE ALSO" .IX Header "SEE ALSO" ! \&\fIgpl\fR\|(7), \fIfsf\-funding\fR\|(7). .SH "COPYRIGHT" .IX Header "COPYRIGHT" Copyright (c) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. diff -Nrcpad gcc-12.4.0/gcc/doc/gfortran.1 gcc-12.5.0-RC-20250704/gcc/doc/gfortran.1 *** gcc-12.4.0/gcc/doc/gfortran.1 Thu Jun 20 08:26:15 2024 --- gcc-12.5.0-RC-20250704/gcc/doc/gfortran.1 Fri Jul 4 07:45:02 2025 *************** *** 1,4 **** ! .\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.43) .\" .\" Standard preamble: .\" ======================================================================== --- 1,4 ---- ! .\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35) .\" .\" Standard preamble: .\" ======================================================================== *************** *** 54,73 **** .\" Avoid warning from groff about undefined register 'F'. .de IX .. ! .nr rF 0 ! .if \n(.g .if rF .nr rF 1 ! .if (\n(rF:(\n(.g==0)) \{\ ! . if \nF \{\ ! . de IX ! . tm Index:\\$1\t\\n%\t"\\$2" .. ! . if !\nF==2 \{\ ! . nr % 0 ! . nr F 2 ! . \} . \} .\} - .rr rF .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. --- 54,69 ---- .\" Avoid warning from groff about undefined register 'F'. .de IX .. ! .if !\nF .nr F 0 ! .if \nF>0 \{\ ! . de IX ! . tm Index:\\$1\t\\n%\t"\\$2" .. ! . if !\nF==2 \{\ ! . nr % 0 ! . nr F 2 . \} .\} .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. *************** *** 133,139 **** .\" ======================================================================== .\" .IX Title "GFORTRAN 1" ! .TH GFORTRAN 1 "2024-06-20" "gcc-12.4.0" "GNU" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l --- 129,135 ---- .\" ======================================================================== .\" .IX Title "GFORTRAN 1" ! .TH GFORTRAN 1 "2025-07-04" "gcc-12.4.1" "GNU" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l *************** For instructions on reporting bugs, see *** 1781,1788 **** <\fBhttps://gcc.gnu.org/bugs/\fR>. .SH "SEE ALSO" .IX Header "SEE ALSO" ! \&\fBgpl\fR\|(7), \fBgfdl\fR\|(7), \fBfsf\-funding\fR\|(7), ! \&\fBcpp\fR\|(1), \fBgcov\fR\|(1), \fBgcc\fR\|(1), \fBas\fR\|(1), \fBld\fR\|(1), \fBgdb\fR\|(1), \fBdbx\fR\|(1) and the Info entries for \fIgcc\fR, \fIcpp\fR, \fIgfortran\fR, \fIas\fR, \&\fIld\fR, \fIbinutils\fR and \fIgdb\fR. .SH "AUTHOR" --- 1777,1784 ---- <\fBhttps://gcc.gnu.org/bugs/\fR>. .SH "SEE ALSO" .IX Header "SEE ALSO" ! \&\fIgpl\fR\|(7), \fIgfdl\fR\|(7), \fIfsf\-funding\fR\|(7), ! \&\fIcpp\fR\|(1), \fIgcov\fR\|(1), \fIgcc\fR\|(1), \fIas\fR\|(1), \fIld\fR\|(1), \fIgdb\fR\|(1), \fIdbx\fR\|(1) and the Info entries for \fIgcc\fR, \fIcpp\fR, \fIgfortran\fR, \fIas\fR, \&\fIld\fR, \fIbinutils\fR and \fIgdb\fR. .SH "AUTHOR" *************** under the terms of the \s-1GNU\s0 Free D *** 1798,1804 **** any later version published by the Free Software Foundation; with the Invariant Sections being \*(L"Funding Free Software\*(R", the Front-Cover Texts being (a) (see below), and with the Back-Cover Texts being (b) ! (see below). A copy of the license is included in the \fBgfdl\fR\|(7) man page. .PP (a) The \s-1FSF\s0's Front-Cover Text is: .PP --- 1794,1800 ---- any later version published by the Free Software Foundation; with the Invariant Sections being \*(L"Funding Free Software\*(R", the Front-Cover Texts being (a) (see below), and with the Back-Cover Texts being (b) ! (see below). A copy of the license is included in the \fIgfdl\fR\|(7) man page. .PP (a) The \s-1FSF\s0's Front-Cover Text is: .PP diff -Nrcpad gcc-12.4.0/gcc/doc/gnat-style.info gcc-12.5.0-RC-20250704/gcc/doc/gnat-style.info *** gcc-12.4.0/gcc/doc/gnat-style.info Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/doc/gnat-style.info Fri Jul 4 07:44:58 2025 *************** *** 0 **** --- 1,1287 ---- + This is gnat-style.info, produced by makeinfo version 6.5 from + gnat-style.texi. + + GNAT Coding Style: A Guide for GNAT Developers , Jan 03, 2022 + + AdaCore + + Copyright © 2008-2022, Free Software Foundation + + INFO-DIR-SECTION GNU Ada Tools + START-INFO-DIR-ENTRY + * gnat-style: (gnat-style.info). gnat-style + END-INFO-DIR-ENTRY + + + Generated by Sphinx 4.3.1. + +  + File: gnat-style.info, Node: Top, Next: General, Up: (dir) + + GNAT Coding Style A Guide for GNAT Developers + ********************************************* + + GNAT Coding Style: A Guide for GNAT Developers , Jan 03, 2022 + + AdaCore + + Copyright © 2008-2022, Free Software Foundation + + * Menu: + + * General:: + * Lexical Elements:: + * Declarations and Types:: + * Expressions and Names:: + * Statements:: + * Subprograms:: + * Packages and Visibility Rules:: + * Program Structure and Compilation Issues:: + * Index:: + +  + File: gnat-style.info, Node: General, Next: Lexical Elements, Prev: Top, Up: Top + + 1 General + ********* + + Most of GNAT is written in Ada using a consistent style to ensure + readability of the code. This document has been written to help + maintain this consistent style, while having a large group of developers + work on the compiler. + + For the coding style in the C parts of the compiler and run time, see + the GNU Coding Guidelines. + + This document is structured after the Ada Reference Manual. Those + familiar with that document should be able to quickly lookup style rules + for particular constructs. + +  + File: gnat-style.info, Node: Lexical Elements, Next: Declarations and Types, Prev: General, Up: Top + + 2 Lexical Elements + ****************** + + * Menu: + + * Character Set and Separators:: + * Identifiers:: + * Numeric Literals:: + * Reserved Words:: + * Comments:: + +  + File: gnat-style.info, Node: Character Set and Separators, Next: Identifiers, Up: Lexical Elements + + 2.1 Character Set and Separators + ================================ + + * The character set used should be plain 7-bit ASCII. The only + separators allowed are space and the end-of-line sequence. No + other control character or format effector (such as ‘HT’, ‘VT’, + ‘FF’ ) should be used. The normal end-of-line sequence is used, + which may be ‘LF’, ‘CR/LF’ or ‘CR’, depending on the host system. + An optional ‘SUB’ ( ‘16#1A#’ ) may be present as the last character + in the file on hosts using that character as file terminator. + + * Files that are checked in or distributed should be in host format. + + * A line should never be longer than 79 characters, not counting the + line separator. + + * Lines must not have trailing blanks. + + * Indentation is 3 characters per level for ‘if’ statements, loops, + and ‘case’ statements. For exact information on required spacing + between lexical elements, see file style.adb. + +  + File: gnat-style.info, Node: Identifiers, Next: Numeric Literals, Prev: Character Set and Separators, Up: Lexical Elements + + 2.2 Identifiers + =============== + + * Identifiers will start with an upper case letter, and each letter + following an underscore will be upper case. + + Short acronyms may be all upper case. All other letters are lower + case. An exception is for identifiers matching a foreign language. + In particular, we use all lower case where appropriate for C. + + * Use underscores to separate words in an identifier. + + * Try to limit your use of abbreviations in identifiers. It is ok to + make a few abbreviations, explain what they mean, and then use them + frequently, but don’t use lots of obscure abbreviations. An + example is the ‘ALI’ word which stands for Ada Library Information + and is by convention always written in upper-case when used in + entity names. + + procedure Find_ALI_Files; + + * Don’t use the variable name ‘I’, use ‘J’ instead; ‘I’ is too easily + confused with ‘1’ in some fonts. Similarly don’t use the variable + ‘O’, which is too easily mistaken for the number ‘0’. + +  + File: gnat-style.info, Node: Numeric Literals, Next: Reserved Words, Prev: Identifiers, Up: Lexical Elements + + 2.3 Numeric Literals + ==================== + + * Numeric literals should include underscores where helpful for + readability. + + 1_000_000 + 16#8000_0000# + 3.14159_26535_89793_23846 + +  + File: gnat-style.info, Node: Reserved Words, Next: Comments, Prev: Numeric Literals, Up: Lexical Elements + + 2.4 Reserved Words + ================== + + * Reserved words use all lower case. + + return else + + * The words ‘Access’, ‘Delta’ and ‘Digits’ are capitalized when used + as attribute_designator. + +  + File: gnat-style.info, Node: Comments, Prev: Reserved Words, Up: Lexical Elements + + 2.5 Comments + ============ + + * A comment starts with ‘--’ followed by two spaces. The only + exception to this rule (i.e. one space is tolerated) is when the + comment ends with a single space followed by ‘--’. It is also + acceptable to have only one space between ‘--’ and the start of the + comment when the comment is at the end of a line, after some Ada + code. + + * Every sentence in a comment should start with an upper-case letter + (including the first letter of the comment). + + * When declarations are commented with ‘hanging’ comments, i.e. + comments after the declaration, there is no blank line before the + comment, and if it is absolutely necessary to have blank lines + within the comments, e.g. to make paragraph separations within a + single comment, these blank lines `do' have a ‘--’ (unlike the + normal rule, which is to use entirely blank lines for separating + comment paragraphs). The comment starts at same level of + indentation as code it is commenting. + + z : Integer; + -- Integer value for storing value of z + -- + -- The previous line was a blank line. + + * Comments that are dubious or incomplete, or that comment on + possibly wrong or incomplete code, should be preceded or followed + by ‘???’. + + * Comments in a subprogram body must generally be surrounded by blank + lines. An exception is a comment that follows a line containing a + single keyword ( ‘begin’, ‘else’, ‘loop’ ): + + begin + -- Comment for the next statement + + A := 5; + + -- Comment for the B statement + + B := 6; + end; + + * In sequences of statements, comments at the end of the lines should + be aligned. + + My_Identifier := 5; -- First comment + Other_Id := 6; -- Second comment + + * Short comments that fit on a single line are `not' ended with a + period. Comments taking more than a line are punctuated in the + normal manner. + + * Comments should focus on `why' instead of `what'. Descriptions of + what subprograms do go with the specification. + + * Comments describing a subprogram spec should specifically mention + the formal argument names. General rule: write a comment that does + not depend on the names of things. The names are supplementary, + not sufficient, as comments. + + * `Do not' put two spaces after periods in comments. + +  + File: gnat-style.info, Node: Declarations and Types, Next: Expressions and Names, Prev: Lexical Elements, Up: Top + + 3 Declarations and Types + ************************ + + * In entity declarations, colons must be surrounded by spaces. + Colons should be aligned. + + Entity1 : Integer; + My_Entity : Integer; + + * Declarations should be grouped in a logical order. Related groups + of declarations may be preceded by a header comment. + + * All local subprograms in a subprogram or package body should be + declared before the first local subprogram body. + + * Do not declare local entities that hide global entities. + + * Do not declare multiple variables in one declaration that spans + lines. Start a new declaration on each line, instead. + + * The defining_identifiers of global declarations serve as comments + of a sort. So don’t choose terse names, but look for names that + give useful information instead. + + * Local names can be shorter, because they are used only within one + context, where comments explain their purpose. + + * When starting an initialization or default expression on the line + that follows the declaration line, use 2 characters for + indentation. + + Entity1 : Integer := + Function_Name (Parameters, For_Call); + + * If an initialization or default expression needs to be continued on + subsequent lines, the continuations should be indented from the + start of the expression. + + Entity1 : Integer := Long_Function_Name + (parameters for call); + +  + File: gnat-style.info, Node: Expressions and Names, Next: Statements, Prev: Declarations and Types, Up: Top + + 4 Expressions and Names + *********************** + + * Every operator must be surrounded by spaces. An exception is that + this rule does not apply to the exponentiation operator, for which + there are no specific layout rules. The reason for this exception + is that sometimes it makes clearer reading to leave out the spaces + around exponentiation. + + E := A * B**2 + 3 * (C - D); + + * Use parentheses where they clarify the intended association of + operands with operators: + + (A / B) * C + +  + File: gnat-style.info, Node: Statements, Next: Subprograms, Prev: Expressions and Names, Up: Top + + 5 Statements + ************ + + * Menu: + + * Simple and Compound Statements:: + * If Statements:: + * Case Statements:: + * Loop Statements:: + * Block Statements:: + +  + File: gnat-style.info, Node: Simple and Compound Statements, Next: If Statements, Up: Statements + + 5.1 Simple and Compound Statements + ================================== + + * Use only one statement or label per line. + + * A longer sequence_of_statements may be divided in logical groups or + separated from surrounding code using a blank line. + +  + File: gnat-style.info, Node: If Statements, Next: Case Statements, Prev: Simple and Compound Statements, Up: Statements + + 5.2 If Statements + ================= + + * When the ‘if’, ‘elsif’ or ‘else’ keywords fit on the same line with + the condition and the ‘then’ keyword, then the statement is + formatted as follows: + + if condition then + ... + elsif condition then + ... + else + ... + end if; + + When the above layout is not possible, ‘then’ should be aligned + with ‘if’, and conditions should preferably be split before an + ‘and’ or ‘or’ keyword a follows: + + if long_condition_that_has_to_be_split + and then continued_on_the_next_line + then + ... + end if; + + The ‘elsif’, ‘else’ and ‘end if’ always line up with the ‘if’ + keyword. The preferred location for splitting the line is before + ‘and’ or ‘or’. The continuation of a condition is indented with + two spaces or as many as needed to make nesting clear. As an + exception, if conditions are closely related either of the + following is allowed: + + if x = lakdsjfhlkashfdlkflkdsalkhfsalkdhflkjdsahf + or else + x = asldkjhalkdsjfhhfd + or else + x = asdfadsfadsf + then + ... + end if; + + if x = lakdsjfhlkashfdlkflkdsalkhfsalkdhflkjdsahf or else + x = asldkjhalkdsjfhhfd or else + x = asdfadsfadsf + then + ... + end if; + + * Conditions should use short-circuit forms ( ‘and then’, ‘or else’ + ), except when the operands are boolean variables or boolean + constants. + + * Complex conditions in ‘if’ statements are indented two characters: + + if this_complex_condition + and then that_other_one + and then one_last_one + then + ... + end if; + + There are some cases where complex conditionals can be laid out in + manners that do not follow these rules to preserve better + parallelism between branches, e.g. + + if xyz.abc (gef) = 'c' + or else + xyz.abc (gef) = 'x' + then + ... + end if; + + * Every ‘if’ block is preceded and followed by a blank line, except + where it begins or ends a sequence_of_statements. + + A := 5; + + if A = 5 then + null; + end if; + + A := 6; + +  + File: gnat-style.info, Node: Case Statements, Next: Loop Statements, Prev: If Statements, Up: Statements + + 5.3 Case Statements + =================== + + * Layout is as below. For long ‘case’ statements, the extra + indentation can be saved by aligning the ‘when’ clauses with the + opening ‘case’. + + case expression is + when condition => + ... + when condition => + ... + end case; + +  + File: gnat-style.info, Node: Loop Statements, Next: Block Statements, Prev: Case Statements, Up: Statements + + 5.4 Loop Statements + =================== + + * When possible, have ‘for’ or ‘while’ on one line with the condition + and the ‘loop’ keyword. + + for J in S'Range loop + ... + end loop; + + If the condition is too long, split the condition (see ‘If + statements’ above) and align ‘loop’ with the ‘for’ or ‘while’ + keyword. + + while long_condition_that_has_to_be_split + and then continued_on_the_next_line + loop + ... + end loop; + + If the loop_statement has an identifier, it is laid out as follows: + + Outer : while not condition loop + ... + end Outer; + +  + File: gnat-style.info, Node: Block Statements, Prev: Loop Statements, Up: Statements + + 5.5 Block Statements + ==================== + + * The ‘declare’ (optional), ‘begin’ and ‘end’ words are aligned, + except when the block_statement is named. There is a blank line + before the ‘begin’ keyword: + + Some_Block : declare + ... + + begin + ... + end Some_Block; + +  + File: gnat-style.info, Node: Subprograms, Next: Packages and Visibility Rules, Prev: Statements, Up: Top + + 6 Subprograms + ************* + + * Menu: + + * Subprogram Declarations:: + * Subprogram Bodies:: + +  + File: gnat-style.info, Node: Subprogram Declarations, Next: Subprogram Bodies, Up: Subprograms + + 6.1 Subprogram Declarations + =========================== + + * Do not write the ‘in’ for parameters. + + function Length (S : String) return Integer; + + * When the declaration line for a procedure or a function is too long + to fit the entire declaration (including the keyword procedure or + function) on a single line, then fold it, putting a single + parameter on a line, aligning the colons, as in: + + procedure Set_Heading + (Source : String; + Count : Natural; + Pad : Character := Space; + Fill : Boolean := True); + + In the case of a function, if the entire spec does not fit on one + line, then the return may appear after the last parameter, as in: + + function Head + (Source : String; + Count : Natural; + Pad : Character := Space) return String; + + Or it may appear on its own as a separate line. This form is + preferred when putting the return on the same line as the last + parameter would result in an overlong line. The return type may + optionally be aligned with the types of the parameters (usually we + do this aligning if it results only in a small number of extra + spaces, and otherwise we don’t attempt to align). So two + alternative forms for the above spec are: + + function Head + (Source : String; + Count : Natural; + Pad : Character := Space) + return String; + + function Head + (Source : String; + Count : Natural; + Pad : Character := Space) + return String; + +  + File: gnat-style.info, Node: Subprogram Bodies, Prev: Subprogram Declarations, Up: Subprograms + + 6.2 Subprogram Bodies + ===================== + + * Function and procedure bodies should usually be sorted + alphabetically. Do not attempt to sort them in some logical order + by functionality. For a sequence of subprogram specs, a general + alphabetical sorting is also usually appropriate, but occasionally + it makes sense to group by major function, with appropriate + headers. + + * All subprograms have a header giving the function name, with the + following format: + + ----------------- + -- My_Function -- + ----------------- + + procedure My_Function is + begin + ... + end My_Function; + + Note that the name in the header is preceded by a single space, not + two spaces as for other comments. These headers are used on nested + subprograms as well as outer level subprograms. They may also be + used as headers for sections of comments, or collections of + declarations that are related. + + * Every subprogram body must have a preceding subprogram_declaration, + which includes proper client documentation so that you do not need + to read the subprogram body in order to understand what the + subprogram does and how to call it. All subprograms should be + documented, without exceptions. + + * A sequence of declarations may optionally be separated from the + following begin by a blank line. Just as we optionally allow blank + lines in general between declarations, this blank line should be + present only if it improves readability. Generally we avoid this + blank line if the declarative part is small (one or two lines) and + the body has no blank lines, and we include it if the declarative + part is long or if the body has blank lines. + + * If the declarations in a subprogram contain at least one nested + subprogram body, then just before the ‘begin’ of the enclosing + subprogram, there is a comment line and a blank line: + + -- Start of processing for Enclosing_Subprogram + + begin + ... + end Enclosing_Subprogram; + + * When nested subprograms are present, variables that are referenced + by any nested subprogram should precede the nested subprogram + specs. For variables that are not referenced by nested procedures, + the declarations can either also be before any of the nested + subprogram specs (this is the old style, more generally used). Or + then can come just before the begin, with a header. The following + example shows the two possible styles: + + procedure Style1 is + Var_Referenced_In_Nested : Integer; + Var_Referenced_Only_In_Style1 : Integer; + + proc Nested; + -- Comments ... + + ------------ + -- Nested -- + ------------ + + procedure Nested is + begin + ... + end Nested; + + -- Start of processing for Style1 + + begin + ... + end Style1; + + procedure Style2 is + Var_Referenced_In_Nested : Integer; + + proc Nested; + -- Comments ... + + ------------ + -- Nested -- + ------------ + + procedure Nested is + begin + ... + end Nested; + + -- Local variables + + Var_Referenced_Only_In_Style2 : Integer; + + -- Start of processing for Style2 + + begin + ... + end Style2; + + For new code, we generally prefer Style2, but we do not insist on + modifying all legacy occurrences of Style1, which is still much + more common in the sources. + +  + File: gnat-style.info, Node: Packages and Visibility Rules, Next: Program Structure and Compilation Issues, Prev: Subprograms, Up: Top + + 7 Packages and Visibility Rules + ******************************* + + * All program units and subprograms have their name at the end: + + package P is + ... + end P; + + * We will use the style of ‘use’ -ing ‘with’ -ed packages, with the + context clauses looking like: + + with A; use A; + with B; use B; + + * Names declared in the visible part of packages should be unique, to + prevent name clashes when the packages are ‘use’ d. + + package Entity is + type Entity_Kind is ...; + ... + end Entity; + + * After the file header comment, the context clause and unit + specification should be the first thing in a program_unit. + + * Preelaborate, Pure and Elaborate_Body pragmas should be added right + after the package name, indented an extra level and using the + parameterless form: + + package Preelaborate_Package is + pragma Preelaborate; + ... + end Preelaborate_Package; + +  + File: gnat-style.info, Node: Program Structure and Compilation Issues, Next: Index, Prev: Packages and Visibility Rules, Up: Top + + 8 Program Structure and Compilation Issues + ****************************************** + + * Every GNAT source file must be compiled with the ‘-gnatg’ switch to + check the coding style. (Note that you should look at style.adb to + see the lexical rules enforced by ‘-gnatg’ ). + + * Each source file should contain only one compilation unit. + + * Filenames should be 8 or fewer characters, followed by the ‘.adb’ + extension for a body or ‘.ads’ for a spec. + + * Unit names should be distinct when ‘krunch’ed to 8 characters (see + krunch.ads) and the filenames should match the unit name, except + that they are all lower case. + + * Menu: + + * GNU Free Documentation License:: + +  + File: gnat-style.info, Node: GNU Free Documentation License, Up: Program Structure and Compilation Issues + + 8.1 GNU Free Documentation License + ================================== + + Version 1.3, 3 November 2008 + + Copyright 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc + ‘https://fsf.org/’ + + Everyone is permitted to copy and distribute verbatim copies of this + license document, but changing it is not allowed. + + `Preamble' + + The purpose of this License is to make a manual, textbook, or other + functional and useful document “free” in the sense of freedom: to assure + everyone the effective freedom to copy and redistribute it, with or + without modifying it, either commercially or noncommercially. + Secondarily, this License preserves for the author and publisher a way + to get credit for their work, while not being considered responsible for + modifications made by others. + + This License is a kind of “copyleft”, which means that derivative works + of the document must themselves be free in the same sense. It + complements the GNU General Public License, which is a copyleft license + designed for free software. + + We have designed this License in order to use it for manuals for free + software, because free software needs free documentation: a free program + should come with manuals providing the same freedoms that the software + does. But this License is not limited to software manuals; it can be + used for any textual work, regardless of subject matter or whether it is + published as a printed book. We recommend this License principally for + works whose purpose is instruction or reference. + + `1. APPLICABILITY AND DEFINITIONS' + + This License applies to any manual or other work, in any medium, that + contains a notice placed by the copyright holder saying it can be + distributed under the terms of this License. Such a notice grants a + world-wide, royalty-free license, unlimited in duration, to use that + work under the conditions stated herein. The `Document', below, refers + to any such manual or work. Any member of the public is a licensee, and + is addressed as “`you'”. You accept the license if you copy, modify or + distribute the work in a way requiring permission under copyright law. + + A “`Modified Version'” of the Document means any work containing the + Document or a portion of it, either copied verbatim, or with + modifications and/or translated into another language. + + A “`Secondary Section'” is a named appendix or a front-matter section of + the Document that deals exclusively with the relationship of the + publishers or authors of the Document to the Document’s overall subject + (or to related matters) and contains nothing that could fall directly + within that overall subject. (Thus, if the Document is in part a + textbook of mathematics, a Secondary Section may not explain any + mathematics.) The relationship could be a matter of historical + connection with the subject or with related matters, or of legal, + commercial, philosophical, ethical or political position regarding them. + + The “`Invariant Sections'” are certain Secondary Sections whose titles + are designated, as being those of Invariant Sections, in the notice that + says that the Document is released under this License. If a section + does not fit the above definition of Secondary then it is not allowed to + be designated as Invariant. The Document may contain zero Invariant + Sections. If the Document does not identify any Invariant Sections then + there are none. + + The “`Cover Texts'” are certain short passages of text that are listed, + as Front-Cover Texts or Back-Cover Texts, in the notice that says that + the Document is released under this License. A Front-Cover Text may be + at most 5 words, and a Back-Cover Text may be at most 25 words. + + A “`Transparent'” copy of the Document means a machine-readable copy, + represented in a format whose specification is available to the general + public, that is suitable for revising the document straightforwardly + with generic text editors or (for images composed of pixels) generic + paint programs or (for drawings) some widely available drawing editor, + and that is suitable for input to text formatters or for automatic + translation to a variety of formats suitable for input to text + formatters. A copy made in an otherwise Transparent file format whose + markup, or absence of markup, has been arranged to thwart or discourage + subsequent modification by readers is not Transparent. An image format + is not Transparent if used for any substantial amount of text. A copy + that is not “Transparent” is called `Opaque'. + + Examples of suitable formats for Transparent copies include plain ASCII + without markup, Texinfo input format, LaTeX input format, SGML or XML + using a publicly available DTD, and standard-conforming simple HTML, + PostScript or PDF designed for human modification. Examples of + transparent image formats include PNG, XCF and JPG. Opaque formats + include proprietary formats that can be read and edited only by + proprietary word processors, SGML or XML for which the DTD and/or + processing tools are not generally available, and the machine-generated + HTML, PostScript or PDF produced by some word processors for output + purposes only. + + The “`Title Page'” means, for a printed book, the title page itself, + plus such following pages as are needed to hold, legibly, the material + this License requires to appear in the title page. For works in formats + which do not have any title page as such, “Title Page” means the text + near the most prominent appearance of the work’s title, preceding the + beginning of the body of the text. + + The “`publisher'” means any person or entity that distributes copies of + the Document to the public. + + A section “`Entitled XYZ'” means a named subunit of the Document whose + title either is precisely XYZ or contains XYZ in parentheses following + text that translates XYZ in another language. (Here XYZ stands for a + specific section name mentioned below, such as “`Acknowledgements'”, + “`Dedications'”, “`Endorsements'”, or “`History'”.) To “`Preserve the + Title'” of such a section when you modify the Document means that it + remains a section “Entitled XYZ” according to this definition. + + The Document may include Warranty Disclaimers next to the notice which + states that this License applies to the Document. These Warranty + Disclaimers are considered to be included by reference in this License, + but only as regards disclaiming warranties: any other implication that + these Warranty Disclaimers may have is void and has no effect on the + meaning of this License. + + `2. VERBATIM COPYING' + + You may copy and distribute the Document in any medium, either + commercially or noncommercially, provided that this License, the + copyright notices, and the license notice saying this License applies to + the Document are reproduced in all copies, and that you add no other + conditions whatsoever to those of this License. You may not use + technical measures to obstruct or control the reading or further copying + of the copies you make or distribute. However, you may accept + compensation in exchange for copies. If you distribute a large enough + number of copies you must also follow the conditions in section 3. + + You may also lend copies, under the same conditions stated above, and + you may publicly display copies. + + `3. COPYING IN QUANTITY' + + If you publish printed copies (or copies in media that commonly have + printed covers) of the Document, numbering more than 100, and the + Document’s license notice requires Cover Texts, you must enclose the + copies in covers that carry, clearly and legibly, all these Cover Texts: + Front-Cover Texts on the front cover, and Back-Cover Texts on the back + cover. Both covers must also clearly and legibly identify you as the + publisher of these copies. The front cover must present the full title + with all words of the title equally prominent and visible. You may add + other material on the covers in addition. Copying with changes limited + to the covers, as long as they preserve the title of the Document and + satisfy these conditions, can be treated as verbatim copying in other + respects. + + If the required texts for either cover are too voluminous to fit + legibly, you should put the first ones listed (as many as fit + reasonably) on the actual cover, and continue the rest onto adjacent + pages. + + If you publish or distribute Opaque copies of the Document numbering + more than 100, you must either include a machine-readable Transparent + copy along with each Opaque copy, or state in or with each Opaque copy a + computer-network location from which the general network-using public + has access to download using public-standard network protocols a + complete Transparent copy of the Document, free of added material. If + you use the latter option, you must take reasonably prudent steps, when + you begin distribution of Opaque copies in quantity, to ensure that this + Transparent copy will remain thus accessible at the stated location + until at least one year after the last time you distribute an Opaque + copy (directly or through your agents or retailers) of that edition to + the public. + + It is requested, but not required, that you contact the authors of the + Document well before redistributing any large number of copies, to give + them a chance to provide you with an updated version of the Document. + + `4. MODIFICATIONS' + + You may copy and distribute a Modified Version of the Document under the + conditions of sections 2 and 3 above, provided that you release the + Modified Version under precisely this License, with the Modified Version + filling the role of the Document, thus licensing distribution and + modification of the Modified Version to whoever possesses a copy of it. + In addition, you must do these things in the Modified Version: + + A. Use in the Title Page (and on the covers, if any) a title distinct + from that of the Document, and from those of previous versions + (which should, if there were any, be listed in the History section + of the Document). You may use the same title as a previous version + if the original publisher of that version gives permission. + + B. List on the Title Page, as authors, one or more persons or entities + responsible for authorship of the modifications in the Modified + Version, together with at least five of the principal authors of + the Document (all of its principal authors, if it has fewer than + five), unless they release you from this requirement. + + C. State on the Title page the name of the publisher of the Modified + Version, as the publisher. + + D. Preserve all the copyright notices of the Document. + + E. Add an appropriate copyright notice for your modifications adjacent + to the other copyright notices. + + F. Include, immediately after the copyright notices, a license notice + giving the public permission to use the Modified Version under the + terms of this License, in the form shown in the Addendum below. + + G. Preserve in that license notice the full lists of Invariant + Sections and required Cover Texts given in the Document’s license + notice. + + H. Include an unaltered copy of this License. + + I. Preserve the section Entitled “History”, Preserve its Title, and + add to it an item stating at least the title, year, new authors, + and publisher of the Modified Version as given on the Title Page. + If there is no section Entitled “History” in the Document, create + one stating the title, year, authors, and publisher of the Document + as given on its Title Page, then add an item describing the + Modified Version as stated in the previous sentence. + + J. Preserve the network location, if any, given in the Document for + public access to a Transparent copy of the Document, and likewise + the network locations given in the Document for previous versions + it was based on. These may be placed in the “History” section. + You may omit a network location for a work that was published at + least four years before the Document itself, or if the original + publisher of the version it refers to gives permission. + + K. For any section Entitled “Acknowledgements” or “Dedications”, + Preserve the Title of the section, and preserve in the section all + the substance and tone of each of the contributor acknowledgements + and/or dedications given therein. + + L. Preserve all the Invariant Sections of the Document, unaltered in + their text and in their titles. Section numbers or the equivalent + are not considered part of the section titles. + + M. Delete any section Entitled “Endorsements”. Such a section may not + be included in the Modified Version. + + N. Do not retitle any existing section to be Entitled “Endorsements” + or to conflict in title with any Invariant Section. + + O. Preserve any Warranty Disclaimers. + + If the Modified Version includes new front-matter sections or appendices + that qualify as Secondary Sections and contain no material copied from + the Document, you may at your option designate some or all of these + sections as invariant. To do this, add their titles to the list of + Invariant Sections in the Modified Version’s license notice. These + titles must be distinct from any other section titles. + + You may add a section Entitled “Endorsements”, provided it contains + nothing but endorsements of your Modified Version by various parties—for + example, statements of peer review or that the text has been approved by + an organization as the authoritative definition of a standard. + + You may add a passage of up to five words as a Front-Cover Text, and a + passage of up to 25 words as a Back-Cover Text, to the end of the list + of Cover Texts in the Modified Version. Only one passage of Front-Cover + Text and one of Back-Cover Text may be added by (or through arrangements + made by) any one entity. If the Document already includes a cover text + for the same cover, previously added by you or by arrangement made by + the same entity you are acting on behalf of, you may not add another; + but you may replace the old one, on explicit permission from the + previous publisher that added the old one. + + The author(s) and publisher(s) of the Document do not by this License + give permission to use their names for publicity for or to assert or + imply endorsement of any Modified Version. + + `5. COMBINING DOCUMENTS' + + You may combine the Document with other documents released under this + License, under the terms defined in section 4 above for modified + versions, provided that you include in the combination all of the + Invariant Sections of all of the original documents, unmodified, and + list them all as Invariant Sections of your combined work in its license + notice, and that you preserve all their Warranty Disclaimers. + + The combined work need only contain one copy of this License, and + multiple identical Invariant Sections may be replaced with a single + copy. If there are multiple Invariant Sections with the same name but + different contents, make the title of each such section unique by adding + at the end of it, in parentheses, the name of the original author or + publisher of that section if known, or else a unique number. Make the + same adjustment to the section titles in the list of Invariant Sections + in the license notice of the combined work. + + In the combination, you must combine any sections Entitled “History” in + the various original documents, forming one section Entitled “History”; + likewise combine any sections Entitled “Acknowledgements”, and any + sections Entitled “Dedications”. You must delete all sections Entitled + “Endorsements”. + + `6. COLLECTIONS OF DOCUMENTS' + + You may make a collection consisting of the Document and other documents + released under this License, and replace the individual copies of this + License in the various documents with a single copy that is included in + the collection, provided that you follow the rules of this License for + verbatim copying of each of the documents in all other respects. + + You may extract a single document from such a collection, and distribute + it individually under this License, provided you insert a copy of this + License into the extracted document, and follow this License in all + other respects regarding verbatim copying of that document. + + `7. AGGREGATION WITH INDEPENDENT WORKS' + + A compilation of the Document or its derivatives with other separate and + independent documents or works, in or on a volume of a storage or + distribution medium, is called an “aggregate” if the copyright resulting + from the compilation is not used to limit the legal rights of the + compilation’s users beyond what the individual works permit. When the + Document is included in an aggregate, this License does not apply to the + other works in the aggregate which are not themselves derivative works + of the Document. + + If the Cover Text requirement of section 3 is applicable to these copies + of the Document, then if the Document is less than one half of the + entire aggregate, the Document’s Cover Texts may be placed on covers + that bracket the Document within the aggregate, or the electronic + equivalent of covers if the Document is in electronic form. Otherwise + they must appear on printed covers that bracket the whole aggregate. + + `8. TRANSLATION' + + Translation is considered a kind of modification, so you may distribute + translations of the Document under the terms of section 4. Replacing + Invariant Sections with translations requires special permission from + their copyright holders, but you may include translations of some or all + Invariant Sections in addition to the original versions of these + Invariant Sections. You may include a translation of this License, and + all the license notices in the Document, and any Warranty Disclaimers, + provided that you also include the original English version of this + License and the original versions of those notices and disclaimers. In + case of a disagreement between the translation and the original version + of this License or a notice or disclaimer, the original version will + prevail. + + If a section in the Document is Entitled “Acknowledgements”, + “Dedications”, or “History”, the requirement (section 4) to Preserve its + Title (section 1) will typically require changing the actual title. + + `9. TERMINATION' + + You may not copy, modify, sublicense, or distribute the Document except + as expressly provided under this License. Any attempt otherwise to + copy, modify, sublicense, or distribute it is void, and will + automatically terminate your rights under this License. + + However, if you cease all violation of this License, then your license + from a particular copyright holder is reinstated (a) provisionally, + unless and until the copyright holder explicitly and finally terminates + your license, and (b) permanently, if the copyright holder fails to + notify you of the violation by some reasonable means prior to 60 days + after the cessation. + + Moreover, your license from a particular copyright holder is reinstated + permanently if the copyright holder notifies you of the violation by + some reasonable means, this is the first time you have received notice + of violation of this License (for any work) from that copyright holder, + and you cure the violation prior to 30 days after your receipt of the + notice. + + Termination of your rights under this section does not terminate the + licenses of parties who have received copies or rights from you under + this License. If your rights have been terminated and not permanently + reinstated, receipt of a copy of some or all of the same material does + not give you any rights to use it. + + `10. FUTURE REVISIONS OF THIS LICENSE' + + The Free Software Foundation may publish new, revised versions of the + GNU Free Documentation License from time to time. Such new versions + will be similar in spirit to the present version, but may differ in + detail to address new problems or concerns. See + ‘https://www.gnu.org/copyleft/’. + + Each version of the License is given a distinguishing version number. + If the Document specifies that a particular numbered version of this + License “or any later version” applies to it, you have the option of + following the terms and conditions either of that specified version or + of any later version that has been published (not as a draft) by the + Free Software Foundation. If the Document does not specify a version + number of this License, you may choose any version ever published (not + as a draft) by the Free Software Foundation. If the Document specifies + that a proxy can decide which future versions of this License can be + used, that proxy’s public statement of acceptance of a version + permanently authorizes you to choose that version for the Document. + + `11. RELICENSING' + + “Massive Multiauthor Collaboration Site” (or “MMC Site”) means any World + Wide Web server that publishes copyrightable works and also provides + prominent facilities for anybody to edit those works. A public wiki + that anybody can edit is an example of such a server. A “Massive + Multiauthor Collaboration” (or “MMC”) contained in the site means any + set of copyrightable works thus published on the MMC site. + + “CC-BY-SA” means the Creative Commons Attribution-Share Alike 3.0 + license published by Creative Commons Corporation, a not-for-profit + corporation with a principal place of business in San Francisco, + California, as well as future copyleft versions of that license + published by that same organization. + + “Incorporate” means to publish or republish a Document, in whole or in + part, as part of another Document. + + An MMC is “eligible for relicensing” if it is licensed under this + License, and if all works that were first published under this License + somewhere other than this MMC, and subsequently incorporated in whole or + in part into the MMC, (1) had no cover texts or invariant sections, and + (2) were thus incorporated prior to November 1, 2008. + + The operator of an MMC Site may republish an MMC contained in the site + under CC-BY-SA on the same site at any time before August 1, 2009, + provided the MMC is eligible for relicensing. + + `ADDENDUM: How to use this License for your documents' + + To use this License in a document you have written, include a copy of + the License in the document and put the following copyright and license + notices just after the title page: + + Copyright © YEAR YOUR NAME. Permission is granted to copy, + distribute and/or modify this document under the terms of the GNU + Free Documentation License, Version 1.3 or any later version + published by the Free Software Foundation; with no Invariant + Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of + the license is included in the section entitled “GNU Free + Documentation License”. + + If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, + replace the “with … Texts.” line with this: + + with the Invariant Sections being LIST THEIR TITLES, with the + Front-Cover Texts being LIST, and with the Back-Cover Texts being + LIST. + + If you have Invariant Sections without Cover Texts, or some other + combination of the three, merge those two alternatives to suit the + situation. + + If your document contains nontrivial examples of program code, we + recommend releasing these examples in parallel under your choice of free + software license, such as the GNU General Public License, to permit + their use in free software. + +  + File: gnat-style.info, Node: Index, Prev: Program Structure and Compilation Issues, Up: Top + + Index + ***** + + [index] + * Menu: + + * -gnatg option (to gcc): Program Structure and Compilation Issues. + (line 10) + * Alignment (in a block statement): Block Statements. (line 10) + * Alignment (in a loop statement): Loop Statements. (line 17) + * Alignment (in an if statement): If Statements. (line 10) + * Alignment (in comments): Comments. (line 51) + * Alignment (in declarations): Declarations and Types. + (line 9) + * ASCII: Character Set and Separators. + (line 6) + * Blank lines (in an if statement): If Statements. (line 78) + * Blank lines (in comments): Comments. (line 25) + * Blank lines (in subprogram bodies): Subprogram Bodies. (line 37) + * Casing (for identifiers): Identifiers. (line 9) + * Casing (for reserved words): Reserved Words. (line 8) + * Casing (in comments): Comments. (line 16) + * Character set: Character Set and Separators. + (line 6) + * End-of-line: Character Set and Separators. + (line 6) + * File name length: Program Structure and Compilation Issues. + (line 15) + * Hiding of outer entities: Declarations and Types. + (line 20) + * Indentation: Character Set and Separators. + (line 6) + * Indentation <1>: Comments. (line 25) + * Indentation (in if statements): If Statements. (line 57) + * krunch.ads file: Program Structure and Compilation Issues. + (line 19) + * Line length: Character Set and Separators. + (line 6) + * Name clash avoidance: Packages and Visibility Rules. + (line 21) + * Operators: Expressions and Names. + (line 12) + * Parenthesization of expressions: Expressions and Names. + (line 17) + * Separators: Character Set and Separators. + (line 6) + * Short-circuit forms: If Statements. (line 55) + * style.adb file: Character Set and Separators. + (line 25) + * style.adb file <1>: Program Structure and Compilation Issues. + (line 10) + * Underscores: Identifiers. (line 15) + * Underscores <1>: Numeric Literals. (line 9) + * use clauses: Packages and Visibility Rules. + (line 15) + + +  + Tag Table: + Node: Top366 + Ref: gnat-style doc661 + Ref: 0661 + Node: General877 + Ref: gnat-style general965 + Ref: 1965 + Ref: gnat-style gnat-coding-style-a-guide-for-gnat-developers965 + Ref: 2965 + Node: Lexical Elements1479 + Ref: gnat-style lexical-elements1586 + Ref: 31586 + Node: Character Set and Separators1737 + Ref: gnat-style character-set-and-separators1842 + Ref: 41842 + Node: Identifiers2838 + Ref: gnat-style identifiers2968 + Ref: 52968 + Node: Numeric Literals4041 + Ref: gnat-style numeric-literals4157 + Ref: 64157 + Node: Reserved Words4367 + Ref: gnat-style reserved-words4480 + Ref: 74480 + Node: Comments4698 + Ref: gnat-style comments4786 + Ref: 84786 + Node: Declarations and Types7298 + Ref: gnat-style declarations-and-types7419 + Ref: 97419 + Node: Expressions and Names8898 + Ref: gnat-style expressions-and-names9013 + Ref: a9013 + Node: Statements9541 + Ref: gnat-style statements9645 + Ref: b9645 + Node: Simple and Compound Statements9796 + Ref: gnat-style simple-and-compound-statements9899 + Ref: c9899 + Node: If Statements10149 + Ref: gnat-style if-statements10276 + Ref: d10276 + Node: Case Statements12751 + Ref: gnat-style case-statements12863 + Ref: e12863 + Node: Loop Statements13224 + Ref: gnat-style loop-statements13339 + Ref: f13339 + Node: Block Statements14036 + Ref: gnat-style block-statements14127 + Ref: 1014127 + Node: Subprograms14467 + Ref: gnat-style subprograms14579 + Ref: 1114579 + Node: Subprogram Declarations14668 + Ref: gnat-style subprogram-declarations14769 + Ref: 1214769 + Node: Subprogram Bodies16429 + Ref: gnat-style subprogram-bodies16530 + Ref: 1316530 + Node: Packages and Visibility Rules20266 + Ref: gnat-style packages-and-visibility-rules20408 + Ref: 1420408 + Node: Program Structure and Compilation Issues21431 + Ref: gnat-style program-structure-and-compilation-issues21567 + Ref: 1521567 + Node: GNU Free Documentation License22280 + Ref: share/gnu_free_documentation_license doc22391 + Ref: 1622391 + Ref: share/gnu_free_documentation_license gnu-fdl22391 + Ref: 1722391 + Ref: share/gnu_free_documentation_license gnu-free-documentation-license22391 + Ref: 1822391 + Node: Index45735 +  + End Tag Table + +  + Local Variables: + coding: utf-8 + End: diff -Nrcpad gcc-12.4.0/gcc/doc/gnat_rm.info gcc-12.5.0-RC-20250704/gcc/doc/gnat_rm.info *** gcc-12.4.0/gcc/doc/gnat_rm.info Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/doc/gnat_rm.info Fri Jul 4 07:44:58 2025 *************** *** 0 **** --- 1,29799 ---- + This is gnat_rm.info, produced by makeinfo version 6.5 from + gnat_rm.texi. + + GNAT Reference Manual , Jan 03, 2022 + + AdaCore + + Copyright © 2008-2022, Free Software Foundation + + INFO-DIR-SECTION GNU Ada Tools + START-INFO-DIR-ENTRY + * gnat_rm: (gnat_rm.info). gnat_rm + END-INFO-DIR-ENTRY + + + Generated by Sphinx 4.3.1. + +  + File: gnat_rm.info, Node: Top, Next: About This Guide, Up: (dir) + + GNAT Reference Manual + ********************* + + GNAT Reference Manual , Jan 03, 2022 + + AdaCore + + Copyright © 2008-2022, Free Software Foundation + + `GNAT, The GNU Ada Development Environment' + + GCC version 12.4.1 + AdaCore + + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.3 or + any later version published by the Free Software Foundation; with no + Invariant Sections, with the Front-Cover Texts being “GNAT Reference + Manual”, and with no Back-Cover Texts. A copy of the license is + included in the section entitled *note GNU Free Documentation License: + 1. + + * Menu: + + * About This Guide:: + * Implementation Defined Pragmas:: + * Implementation Defined Aspects:: + * Implementation Defined Attributes:: + * Standard and Implementation Defined Restrictions:: + * Implementation Advice:: + * Implementation Defined Characteristics:: + * Intrinsic Subprograms:: + * Representation Clauses and Pragmas:: + * Standard Library Routines:: + * The Implementation of Standard I/O:: + * The GNAT Library:: + * Interfacing to Other Languages:: + * Specialized Needs Annexes:: + * Implementation of Specific Ada Features:: + * Implementation of Ada 2012 Features:: + * Security Hardening Features:: + * Obsolescent Features:: + * Compatibility and Porting Guide:: + * GNU Free Documentation License:: + * Index:: + + — The Detailed Node Listing — + + About This Guide + + * What This Reference Manual Contains:: + * Conventions:: + * Related Information:: + + Implementation Defined Pragmas + + * Pragma Abort_Defer:: + * Pragma Abstract_State:: + * Pragma Ada_83:: + * Pragma Ada_95:: + * Pragma Ada_05:: + * Pragma Ada_2005:: + * Pragma Ada_12:: + * Pragma Ada_2012:: + * Pragma Aggregate_Individually_Assign:: + * Pragma Allow_Integer_Address:: + * Pragma Annotate:: + * Pragma Assert:: + * Pragma Assert_And_Cut:: + * Pragma Assertion_Policy:: + * Pragma Assume:: + * Pragma Assume_No_Invalid_Values:: + * Pragma Async_Readers:: + * Pragma Async_Writers:: + * Pragma Attribute_Definition:: + * Pragma C_Pass_By_Copy:: + * Pragma Check:: + * Pragma Check_Float_Overflow:: + * Pragma Check_Name:: + * Pragma Check_Policy:: + * Pragma Comment:: + * Pragma Common_Object:: + * Pragma Compile_Time_Error:: + * Pragma Compile_Time_Warning:: + * Pragma Complete_Representation:: + * Pragma Complex_Representation:: + * Pragma Component_Alignment:: + * Pragma Constant_After_Elaboration:: + * Pragma Contract_Cases:: + * Pragma Convention_Identifier:: + * Pragma CPP_Class:: + * Pragma CPP_Constructor:: + * Pragma CPP_Virtual:: + * Pragma CPP_Vtable:: + * Pragma CPU:: + * Pragma Deadline_Floor:: + * Pragma Default_Initial_Condition:: + * Pragma Debug:: + * Pragma Debug_Policy:: + * Pragma Default_Scalar_Storage_Order:: + * Pragma Default_Storage_Pool:: + * Pragma Depends:: + * Pragma Detect_Blocking:: + * Pragma Disable_Atomic_Synchronization:: + * Pragma Dispatching_Domain:: + * Pragma Effective_Reads:: + * Pragma Effective_Writes:: + * Pragma Elaboration_Checks:: + * Pragma Eliminate:: + * Pragma Enable_Atomic_Synchronization:: + * Pragma Export_Function:: + * Pragma Export_Object:: + * Pragma Export_Procedure:: + * Pragma Export_Valued_Procedure:: + * Pragma Extend_System:: + * Pragma Extensions_Allowed:: + * Pragma Extensions_Visible:: + * Pragma External:: + * Pragma External_Name_Casing:: + * Pragma Fast_Math:: + * Pragma Favor_Top_Level:: + * Pragma Finalize_Storage_Only:: + * Pragma Float_Representation:: + * Pragma Ghost:: + * Pragma Global:: + * Pragma Ident:: + * Pragma Ignore_Pragma:: + * Pragma Implementation_Defined:: + * Pragma Implemented:: + * Pragma Implicit_Packing:: + * Pragma Import_Function:: + * Pragma Import_Object:: + * Pragma Import_Procedure:: + * Pragma Import_Valued_Procedure:: + * Pragma Independent:: + * Pragma Independent_Components:: + * Pragma Initial_Condition:: + * Pragma Initialize_Scalars:: + * Pragma Initializes:: + * Pragma Inline_Always:: + * Pragma Inline_Generic:: + * Pragma Interface:: + * Pragma Interface_Name:: + * Pragma Interrupt_Handler:: + * Pragma Interrupt_State:: + * Pragma Invariant:: + * Pragma Keep_Names:: + * Pragma License:: + * Pragma Link_With:: + * Pragma Linker_Alias:: + * Pragma Linker_Constructor:: + * Pragma Linker_Destructor:: + * Pragma Linker_Section:: + * Pragma Lock_Free:: + * Pragma Loop_Invariant:: + * Pragma Loop_Optimize:: + * Pragma Loop_Variant:: + * Pragma Machine_Attribute:: + * Pragma Main:: + * Pragma Main_Storage:: + * Pragma Max_Queue_Length:: + * Pragma No_Body:: + * Pragma No_Caching:: + * Pragma No_Component_Reordering:: + * Pragma No_Elaboration_Code_All:: + * Pragma No_Heap_Finalization:: + * Pragma No_Inline:: + * Pragma No_Return:: + * Pragma No_Strict_Aliasing:: + * Pragma No_Tagged_Streams:: + * Pragma Normalize_Scalars:: + * Pragma Obsolescent:: + * Pragma Optimize_Alignment:: + * Pragma Ordered:: + * Pragma Overflow_Mode:: + * Pragma Overriding_Renamings:: + * Pragma Partition_Elaboration_Policy:: + * Pragma Part_Of:: + * Pragma Passive:: + * Pragma Persistent_BSS:: + * Pragma Post:: + * Pragma Postcondition:: + * Pragma Post_Class:: + * Pragma Pre:: + * Pragma Precondition:: + * Pragma Predicate:: + * Pragma Predicate_Failure:: + * Pragma Preelaborable_Initialization:: + * Pragma Prefix_Exception_Messages:: + * Pragma Pre_Class:: + * Pragma Priority_Specific_Dispatching:: + * Pragma Profile:: + * Pragma Profile_Warnings:: + * Pragma Propagate_Exceptions:: + * Pragma Provide_Shift_Operators:: + * Pragma Psect_Object:: + * Pragma Pure_Function:: + * Pragma Rational:: + * Pragma Ravenscar:: + * Pragma Refined_Depends:: + * Pragma Refined_Global:: + * Pragma Refined_Post:: + * Pragma Refined_State:: + * Pragma Relative_Deadline:: + * Pragma Remote_Access_Type:: + * Pragma Rename_Pragma:: + * Pragma Restricted_Run_Time:: + * Pragma Restriction_Warnings:: + * Pragma Reviewable:: + * Pragma Secondary_Stack_Size:: + * Pragma Share_Generic:: + * Pragma Shared:: + * Pragma Short_Circuit_And_Or:: + * Pragma Short_Descriptors:: + * Pragma Simple_Storage_Pool_Type:: + * Pragma Source_File_Name:: + * Pragma Source_File_Name_Project:: + * Pragma Source_Reference:: + * Pragma SPARK_Mode:: + * Pragma Static_Elaboration_Desired:: + * Pragma Stream_Convert:: + * Pragma Style_Checks:: + * Pragma Subtitle:: + * Pragma Suppress:: + * Pragma Suppress_All:: + * Pragma Suppress_Debug_Info:: + * Pragma Suppress_Exception_Locations:: + * Pragma Suppress_Initialization:: + * Pragma Task_Name:: + * Pragma Task_Storage:: + * Pragma Test_Case:: + * Pragma Thread_Local_Storage:: + * Pragma Time_Slice:: + * Pragma Title:: + * Pragma Type_Invariant:: + * Pragma Type_Invariant_Class:: + * Pragma Unchecked_Union:: + * Pragma Unevaluated_Use_Of_Old:: + * Pragma Unimplemented_Unit:: + * Pragma Universal_Aliasing:: + * Pragma Unmodified:: + * Pragma Unreferenced:: + * Pragma Unreferenced_Objects:: + * Pragma Unreserve_All_Interrupts:: + * Pragma Unsuppress:: + * Pragma Use_VADS_Size:: + * Pragma Unused:: + * Pragma Validity_Checks:: + * Pragma Volatile:: + * Pragma Volatile_Full_Access:: + * Pragma Volatile_Function:: + * Pragma Warning_As_Error:: + * Pragma Warnings:: + * Pragma Weak_External:: + * Pragma Wide_Character_Encoding:: + + Implementation Defined Aspects + + * Aspect Abstract_State:: + * Aspect Annotate:: + * Aspect Async_Readers:: + * Aspect Async_Writers:: + * Aspect Constant_After_Elaboration:: + * Aspect Contract_Cases:: + * Aspect Depends:: + * Aspect Default_Initial_Condition:: + * Aspect Dimension:: + * Aspect Dimension_System:: + * Aspect Disable_Controlled:: + * Aspect Effective_Reads:: + * Aspect Effective_Writes:: + * Aspect Extensions_Visible:: + * Aspect Favor_Top_Level:: + * Aspect Ghost:: + * Aspect Global:: + * Aspect Initial_Condition:: + * Aspect Initializes:: + * Aspect Inline_Always:: + * Aspect Invariant:: + * Aspect Invariant’Class:: + * Aspect Iterable:: + * Aspect Linker_Section:: + * Aspect Lock_Free:: + * Aspect Max_Queue_Length:: + * Aspect No_Caching:: + * Aspect No_Elaboration_Code_All:: + * Aspect No_Inline:: + * Aspect No_Tagged_Streams:: + * Aspect No_Task_Parts:: + * Aspect Object_Size:: + * Aspect Obsolescent:: + * Aspect Part_Of:: + * Aspect Persistent_BSS:: + * Aspect Predicate:: + * Aspect Pure_Function:: + * Aspect Refined_Depends:: + * Aspect Refined_Global:: + * Aspect Refined_Post:: + * Aspect Refined_State:: + * Aspect Relaxed_Initialization:: + * Aspect Remote_Access_Type:: + * Aspect Secondary_Stack_Size:: + * Aspect Scalar_Storage_Order:: + * Aspect Shared:: + * Aspect Simple_Storage_Pool:: + * Aspect Simple_Storage_Pool_Type:: + * Aspect SPARK_Mode:: + * Aspect Suppress_Debug_Info:: + * Aspect Suppress_Initialization:: + * Aspect Test_Case:: + * Aspect Thread_Local_Storage:: + * Aspect Universal_Aliasing:: + * Aspect Unmodified:: + * Aspect Unreferenced:: + * Aspect Unreferenced_Objects:: + * Aspect Value_Size:: + * Aspect Volatile_Full_Access:: + * Aspect Volatile_Function:: + * Aspect Warnings:: + + Implementation Defined Attributes + + * Attribute Abort_Signal:: + * Attribute Address_Size:: + * Attribute Asm_Input:: + * Attribute Asm_Output:: + * Attribute Atomic_Always_Lock_Free:: + * Attribute Bit:: + * Attribute Bit_Position:: + * Attribute Code_Address:: + * Attribute Compiler_Version:: + * Attribute Constrained:: + * Attribute Default_Bit_Order:: + * Attribute Default_Scalar_Storage_Order:: + * Attribute Deref:: + * Attribute Descriptor_Size:: + * Attribute Elaborated:: + * Attribute Elab_Body:: + * Attribute Elab_Spec:: + * Attribute Elab_Subp_Body:: + * Attribute Emax:: + * Attribute Enabled:: + * Attribute Enum_Rep:: + * Attribute Enum_Val:: + * Attribute Epsilon:: + * Attribute Fast_Math:: + * Attribute Finalization_Size:: + * Attribute Fixed_Value:: + * Attribute From_Any:: + * Attribute Has_Access_Values:: + * Attribute Has_Discriminants:: + * Attribute Has_Tagged_Values:: + * Attribute Img:: + * Attribute Initialized:: + * Attribute Integer_Value:: + * Attribute Invalid_Value:: + * Attribute Iterable:: + * Attribute Large:: + * Attribute Library_Level:: + * Attribute Lock_Free:: + * Attribute Loop_Entry:: + * Attribute Machine_Size:: + * Attribute Mantissa:: + * Attribute Maximum_Alignment:: + * Attribute Max_Integer_Size:: + * Attribute Mechanism_Code:: + * Attribute Null_Parameter:: + * Attribute Object_Size:: + * Attribute Old:: + * Attribute Passed_By_Reference:: + * Attribute Pool_Address:: + * Attribute Range_Length:: + * Attribute Restriction_Set:: + * Attribute Result:: + * Attribute Safe_Emax:: + * Attribute Safe_Large:: + * Attribute Safe_Small:: + * Attribute Scalar_Storage_Order:: + * Attribute Simple_Storage_Pool:: + * Attribute Small:: + * Attribute Small_Denominator:: + * Attribute Small_Numerator:: + * Attribute Storage_Unit:: + * Attribute Stub_Type:: + * Attribute System_Allocator_Alignment:: + * Attribute Target_Name:: + * Attribute To_Address:: + * Attribute To_Any:: + * Attribute Type_Class:: + * Attribute Type_Key:: + * Attribute TypeCode:: + * Attribute Unconstrained_Array:: + * Attribute Universal_Literal_String:: + * Attribute Unrestricted_Access:: + * Attribute Update:: + * Attribute Valid_Image:: + * Attribute Valid_Scalars:: + * Attribute VADS_Size:: + * Attribute Value_Size:: + * Attribute Wchar_T_Size:: + * Attribute Word_Size:: + + Standard and Implementation Defined Restrictions + + * Partition-Wide Restrictions:: + * Program Unit Level Restrictions:: + + Partition-Wide Restrictions + + * Immediate_Reclamation:: + * Max_Asynchronous_Select_Nesting:: + * Max_Entry_Queue_Length:: + * Max_Protected_Entries:: + * Max_Select_Alternatives:: + * Max_Storage_At_Blocking:: + * Max_Task_Entries:: + * Max_Tasks:: + * No_Abort_Statements:: + * No_Access_Parameter_Allocators:: + * No_Access_Subprograms:: + * No_Allocators:: + * No_Anonymous_Allocators:: + * No_Asynchronous_Control:: + * No_Calendar:: + * No_Coextensions:: + * No_Default_Initialization:: + * No_Delay:: + * No_Dependence:: + * No_Direct_Boolean_Operators:: + * No_Dispatch:: + * No_Dispatching_Calls:: + * No_Dynamic_Attachment:: + * No_Dynamic_Priorities:: + * No_Entry_Calls_In_Elaboration_Code:: + * No_Enumeration_Maps:: + * No_Exception_Handlers:: + * No_Exception_Propagation:: + * No_Exception_Registration:: + * No_Exceptions:: + * No_Finalization:: + * No_Fixed_Point:: + * No_Floating_Point:: + * No_Implicit_Conditionals:: + * No_Implicit_Dynamic_Code:: + * No_Implicit_Heap_Allocations:: + * No_Implicit_Protected_Object_Allocations:: + * No_Implicit_Task_Allocations:: + * No_Initialize_Scalars:: + * No_IO:: + * No_Local_Allocators:: + * No_Local_Protected_Objects:: + * No_Local_Timing_Events:: + * No_Long_Long_Integers:: + * No_Multiple_Elaboration:: + * No_Nested_Finalization:: + * No_Protected_Type_Allocators:: + * No_Protected_Types:: + * No_Recursion:: + * No_Reentrancy:: + * No_Relative_Delay:: + * No_Requeue_Statements:: + * No_Secondary_Stack:: + * No_Select_Statements:: + * No_Specific_Termination_Handlers:: + * No_Specification_of_Aspect:: + * No_Standard_Allocators_After_Elaboration:: + * No_Standard_Storage_Pools:: + * No_Stream_Optimizations:: + * No_Streams:: + * No_Tagged_Type_Registration:: + * No_Task_Allocators:: + * No_Task_At_Interrupt_Priority:: + * No_Task_Attributes_Package:: + * No_Task_Hierarchy:: + * No_Task_Termination:: + * No_Tasking:: + * No_Terminate_Alternatives:: + * No_Unchecked_Access:: + * No_Unchecked_Conversion:: + * No_Unchecked_Deallocation:: + * No_Use_Of_Entity:: + * Pure_Barriers:: + * Simple_Barriers:: + * Static_Priorities:: + * Static_Storage_Size:: + + Program Unit Level Restrictions + + * No_Elaboration_Code:: + * No_Dynamic_Accessibility_Checks:: + * No_Dynamic_Sized_Objects:: + * No_Entry_Queue:: + * No_Implementation_Aspect_Specifications:: + * No_Implementation_Attributes:: + * No_Implementation_Identifiers:: + * No_Implementation_Pragmas:: + * No_Implementation_Restrictions:: + * No_Implementation_Units:: + * No_Implicit_Aliasing:: + * No_Implicit_Loops:: + * No_Obsolescent_Features:: + * No_Wide_Characters:: + * Static_Dispatch_Tables:: + * SPARK_05:: + + Implementation Advice + + * RM 1.1.3(20); Error Detection: RM 1 1 3 20 Error Detection. + * RM 1.1.3(31); Child Units: RM 1 1 3 31 Child Units. + * RM 1.1.5(12); Bounded Errors: RM 1 1 5 12 Bounded Errors. + * RM 2.8(16); Pragmas: RM 2 8 16 Pragmas. + * RM 2.8(17-19); Pragmas: RM 2 8 17-19 Pragmas. + * RM 3.5.2(5); Alternative Character Sets: RM 3 5 2 5 Alternative Character Sets. + * RM 3.5.4(28); Integer Types: RM 3 5 4 28 Integer Types. + * RM 3.5.4(29); Integer Types: RM 3 5 4 29 Integer Types. + * RM 3.5.5(8); Enumeration Values: RM 3 5 5 8 Enumeration Values. + * RM 3.5.7(17); Float Types: RM 3 5 7 17 Float Types. + * RM 3.6.2(11); Multidimensional Arrays: RM 3 6 2 11 Multidimensional Arrays. + * RM 9.6(30-31); Duration’Small: RM 9 6 30-31 Duration’Small. + * RM 10.2.1(12); Consistent Representation: RM 10 2 1 12 Consistent Representation. + * RM 11.4.1(19); Exception Information: RM 11 4 1 19 Exception Information. + * RM 11.5(28); Suppression of Checks: RM 11 5 28 Suppression of Checks. + * RM 13.1 (21-24); Representation Clauses: RM 13 1 21-24 Representation Clauses. + * RM 13.2(6-8); Packed Types: RM 13 2 6-8 Packed Types. + * RM 13.3(14-19); Address Clauses: RM 13 3 14-19 Address Clauses. + * RM 13.3(29-35); Alignment Clauses: RM 13 3 29-35 Alignment Clauses. + * RM 13.3(42-43); Size Clauses: RM 13 3 42-43 Size Clauses. + * RM 13.3(50-56); Size Clauses: RM 13 3 50-56 Size Clauses. + * RM 13.3(71-73); Component Size Clauses: RM 13 3 71-73 Component Size Clauses. + * RM 13.4(9-10); Enumeration Representation Clauses: RM 13 4 9-10 Enumeration Representation Clauses. + * RM 13.5.1(17-22); Record Representation Clauses: RM 13 5 1 17-22 Record Representation Clauses. + * RM 13.5.2(5); Storage Place Attributes: RM 13 5 2 5 Storage Place Attributes. + * RM 13.5.3(7-8); Bit Ordering: RM 13 5 3 7-8 Bit Ordering. + * RM 13.7(37); Address as Private: RM 13 7 37 Address as Private. + * RM 13.7.1(16); Address Operations: RM 13 7 1 16 Address Operations. + * RM 13.9(14-17); Unchecked Conversion: RM 13 9 14-17 Unchecked Conversion. + * RM 13.11(23-25); Implicit Heap Usage: RM 13 11 23-25 Implicit Heap Usage. + * RM 13.11.2(17); Unchecked Deallocation: RM 13 11 2 17 Unchecked Deallocation. + * RM 13.13.2(1.6); Stream Oriented Attributes: RM 13 13 2 1 6 Stream Oriented Attributes. + * RM A.1(52); Names of Predefined Numeric Types: RM A 1 52 Names of Predefined Numeric Types. + * RM A.3.2(49); Ada.Characters.Handling: RM A 3 2 49 Ada Characters Handling. + * RM A.4.4(106); Bounded-Length String Handling: RM A 4 4 106 Bounded-Length String Handling. + * RM A.5.2(46-47); Random Number Generation: RM A 5 2 46-47 Random Number Generation. + * RM A.10.7(23); Get_Immediate: RM A 10 7 23 Get_Immediate. + * RM A.18; Containers: RM A 18 Containers. + * RM B.1(39-41); Pragma Export: RM B 1 39-41 Pragma Export. + * RM B.2(12-13); Package Interfaces: RM B 2 12-13 Package Interfaces. + * RM B.3(63-71); Interfacing with C: RM B 3 63-71 Interfacing with C. + * RM B.4(95-98); Interfacing with COBOL: RM B 4 95-98 Interfacing with COBOL. + * RM B.5(22-26); Interfacing with Fortran: RM B 5 22-26 Interfacing with Fortran. + * RM C.1(3-5); Access to Machine Operations: RM C 1 3-5 Access to Machine Operations. + * RM C.1(10-16); Access to Machine Operations: RM C 1 10-16 Access to Machine Operations. + * RM C.3(28); Interrupt Support: RM C 3 28 Interrupt Support. + * RM C.3.1(20-21); Protected Procedure Handlers: RM C 3 1 20-21 Protected Procedure Handlers. + * RM C.3.2(25); Package Interrupts: RM C 3 2 25 Package Interrupts. + * RM C.4(14); Pre-elaboration Requirements: RM C 4 14 Pre-elaboration Requirements. + * RM C.5(8); Pragma Discard_Names: RM C 5 8 Pragma Discard_Names. + * RM C.7.2(30); The Package Task_Attributes: RM C 7 2 30 The Package Task_Attributes. + * RM D.3(17); Locking Policies: RM D 3 17 Locking Policies. + * RM D.4(16); Entry Queuing Policies: RM D 4 16 Entry Queuing Policies. + * RM D.6(9-10); Preemptive Abort: RM D 6 9-10 Preemptive Abort. + * RM D.7(21); Tasking Restrictions: RM D 7 21 Tasking Restrictions. + * RM D.8(47-49); Monotonic Time: RM D 8 47-49 Monotonic Time. + * RM E.5(28-29); Partition Communication Subsystem: RM E 5 28-29 Partition Communication Subsystem. + * RM F(7); COBOL Support: RM F 7 COBOL Support. + * RM F.1(2); Decimal Radix Support: RM F 1 2 Decimal Radix Support. + * RM G; Numerics: RM G Numerics. + * RM G.1.1(56-58); Complex Types: RM G 1 1 56-58 Complex Types. + * RM G.1.2(49); Complex Elementary Functions: RM G 1 2 49 Complex Elementary Functions. + * RM G.2.4(19); Accuracy Requirements: RM G 2 4 19 Accuracy Requirements. + * RM G.2.6(15); Complex Arithmetic Accuracy: RM G 2 6 15 Complex Arithmetic Accuracy. + * RM H.6(15/2); Pragma Partition_Elaboration_Policy: RM H 6 15/2 Pragma Partition_Elaboration_Policy. + + Intrinsic Subprograms + + * Intrinsic Operators:: + * Compilation_ISO_Date:: + * Compilation_Date:: + * Compilation_Time:: + * Enclosing_Entity:: + * Exception_Information:: + * Exception_Message:: + * Exception_Name:: + * File:: + * Line:: + * Shifts and Rotates:: + * Source_Location:: + + Representation Clauses and Pragmas + + * Alignment Clauses:: + * Size Clauses:: + * Storage_Size Clauses:: + * Size of Variant Record Objects:: + * Biased Representation:: + * Value_Size and Object_Size Clauses:: + * Component_Size Clauses:: + * Bit_Order Clauses:: + * Effect of Bit_Order on Byte Ordering:: + * Pragma Pack for Arrays:: + * Pragma Pack for Records:: + * Record Representation Clauses:: + * Handling of Records with Holes:: + * Enumeration Clauses:: + * Address Clauses:: + * Use of Address Clauses for Memory-Mapped I/O:: + * Effect of Convention on Representation:: + * Conventions and Anonymous Access Types:: + * Determining the Representations chosen by GNAT:: + + The Implementation of Standard I/O + + * Standard I/O Packages:: + * FORM Strings:: + * Direct_IO:: + * Sequential_IO:: + * Text_IO:: + * Wide_Text_IO:: + * Wide_Wide_Text_IO:: + * Stream_IO:: + * Text Translation:: + * Shared Files:: + * Filenames encoding:: + * File content encoding:: + * Open Modes:: + * Operations on C Streams:: + * Interfacing to C Streams:: + + Text_IO + + * Stream Pointer Positioning:: + * Reading and Writing Non-Regular Files:: + * Get_Immediate:: + * Treating Text_IO Files as Streams:: + * Text_IO Extensions:: + * Text_IO Facilities for Unbounded Strings:: + + Wide_Text_IO + + * Stream Pointer Positioning: Stream Pointer Positioning<2>. + * Reading and Writing Non-Regular Files: Reading and Writing Non-Regular Files<2>. + + Wide_Wide_Text_IO + + * Stream Pointer Positioning: Stream Pointer Positioning<3>. + * Reading and Writing Non-Regular Files: Reading and Writing Non-Regular Files<3>. + + The GNAT Library + + * Ada.Characters.Latin_9 (a-chlat9.ads): Ada Characters Latin_9 a-chlat9 ads. + * Ada.Characters.Wide_Latin_1 (a-cwila1.ads): Ada Characters Wide_Latin_1 a-cwila1 ads. + * Ada.Characters.Wide_Latin_9 (a-cwila1.ads): Ada Characters Wide_Latin_9 a-cwila1 ads. + * Ada.Characters.Wide_Wide_Latin_1 (a-chzla1.ads): Ada Characters Wide_Wide_Latin_1 a-chzla1 ads. + * Ada.Characters.Wide_Wide_Latin_9 (a-chzla9.ads): Ada Characters Wide_Wide_Latin_9 a-chzla9 ads. + * Ada.Containers.Formal_Doubly_Linked_Lists (a-cfdlli.ads): Ada Containers Formal_Doubly_Linked_Lists a-cfdlli ads. + * Ada.Containers.Formal_Hashed_Maps (a-cfhama.ads): Ada Containers Formal_Hashed_Maps a-cfhama ads. + * Ada.Containers.Formal_Hashed_Sets (a-cfhase.ads): Ada Containers Formal_Hashed_Sets a-cfhase ads. + * Ada.Containers.Formal_Ordered_Maps (a-cforma.ads): Ada Containers Formal_Ordered_Maps a-cforma ads. + * Ada.Containers.Formal_Ordered_Sets (a-cforse.ads): Ada Containers Formal_Ordered_Sets a-cforse ads. + * Ada.Containers.Formal_Vectors (a-cofove.ads): Ada Containers Formal_Vectors a-cofove ads. + * Ada.Containers.Formal_Indefinite_Vectors (a-cfinve.ads): Ada Containers Formal_Indefinite_Vectors a-cfinve ads. + * Ada.Containers.Functional_Vectors (a-cofuve.ads): Ada Containers Functional_Vectors a-cofuve ads. + * Ada.Containers.Functional_Sets (a-cofuse.ads): Ada Containers Functional_Sets a-cofuse ads. + * Ada.Containers.Functional_Maps (a-cofuma.ads): Ada Containers Functional_Maps a-cofuma ads. + * Ada.Containers.Bounded_Holders (a-coboho.ads): Ada Containers Bounded_Holders a-coboho ads. + * Ada.Command_Line.Environment (a-colien.ads): Ada Command_Line Environment a-colien ads. + * Ada.Command_Line.Remove (a-colire.ads): Ada Command_Line Remove a-colire ads. + * Ada.Command_Line.Response_File (a-clrefi.ads): Ada Command_Line Response_File a-clrefi ads. + * Ada.Direct_IO.C_Streams (a-diocst.ads): Ada Direct_IO C_Streams a-diocst ads. + * Ada.Exceptions.Is_Null_Occurrence (a-einuoc.ads): Ada Exceptions Is_Null_Occurrence a-einuoc ads. + * Ada.Exceptions.Last_Chance_Handler (a-elchha.ads): Ada Exceptions Last_Chance_Handler a-elchha ads. + * Ada.Exceptions.Traceback (a-exctra.ads): Ada Exceptions Traceback a-exctra ads. + * Ada.Sequential_IO.C_Streams (a-siocst.ads): Ada Sequential_IO C_Streams a-siocst ads. + * Ada.Streams.Stream_IO.C_Streams (a-ssicst.ads): Ada Streams Stream_IO C_Streams a-ssicst ads. + * Ada.Strings.Unbounded.Text_IO (a-suteio.ads): Ada Strings Unbounded Text_IO a-suteio ads. + * Ada.Strings.Wide_Unbounded.Wide_Text_IO (a-swuwti.ads): Ada Strings Wide_Unbounded Wide_Text_IO a-swuwti ads. + * Ada.Strings.Wide_Wide_Unbounded.Wide_Wide_Text_IO (a-szuzti.ads): Ada Strings Wide_Wide_Unbounded Wide_Wide_Text_IO a-szuzti ads. + * Ada.Task_Initialization (a-tasini.ads): Ada Task_Initialization a-tasini ads. + * Ada.Text_IO.C_Streams (a-tiocst.ads): Ada Text_IO C_Streams a-tiocst ads. + * Ada.Text_IO.Reset_Standard_Files (a-tirsfi.ads): Ada Text_IO Reset_Standard_Files a-tirsfi ads. + * Ada.Wide_Characters.Unicode (a-wichun.ads): Ada Wide_Characters Unicode a-wichun ads. + * Ada.Wide_Text_IO.C_Streams (a-wtcstr.ads): Ada Wide_Text_IO C_Streams a-wtcstr ads. + * Ada.Wide_Text_IO.Reset_Standard_Files (a-wrstfi.ads): Ada Wide_Text_IO Reset_Standard_Files a-wrstfi ads. + * Ada.Wide_Wide_Characters.Unicode (a-zchuni.ads): Ada Wide_Wide_Characters Unicode a-zchuni ads. + * Ada.Wide_Wide_Text_IO.C_Streams (a-ztcstr.ads): Ada Wide_Wide_Text_IO C_Streams a-ztcstr ads. + * Ada.Wide_Wide_Text_IO.Reset_Standard_Files (a-zrstfi.ads): Ada Wide_Wide_Text_IO Reset_Standard_Files a-zrstfi ads. + * GNAT.Altivec (g-altive.ads): GNAT Altivec g-altive ads. + * GNAT.Altivec.Conversions (g-altcon.ads): GNAT Altivec Conversions g-altcon ads. + * GNAT.Altivec.Vector_Operations (g-alveop.ads): GNAT Altivec Vector_Operations g-alveop ads. + * GNAT.Altivec.Vector_Types (g-alvety.ads): GNAT Altivec Vector_Types g-alvety ads. + * GNAT.Altivec.Vector_Views (g-alvevi.ads): GNAT Altivec Vector_Views g-alvevi ads. + * GNAT.Array_Split (g-arrspl.ads): GNAT Array_Split g-arrspl ads. + * GNAT.AWK (g-awk.ads): GNAT AWK g-awk ads. + * GNAT.Bind_Environment (g-binenv.ads): GNAT Bind_Environment g-binenv ads. + * GNAT.Branch_Prediction (g-brapre.ads): GNAT Branch_Prediction g-brapre ads. + * GNAT.Bounded_Buffers (g-boubuf.ads): GNAT Bounded_Buffers g-boubuf ads. + * GNAT.Bounded_Mailboxes (g-boumai.ads): GNAT Bounded_Mailboxes g-boumai ads. + * GNAT.Bubble_Sort (g-bubsor.ads): GNAT Bubble_Sort g-bubsor ads. + * GNAT.Bubble_Sort_A (g-busora.ads): GNAT Bubble_Sort_A g-busora ads. + * GNAT.Bubble_Sort_G (g-busorg.ads): GNAT Bubble_Sort_G g-busorg ads. + * GNAT.Byte_Order_Mark (g-byorma.ads): GNAT Byte_Order_Mark g-byorma ads. + * GNAT.Byte_Swapping (g-bytswa.ads): GNAT Byte_Swapping g-bytswa ads. + * GNAT.Calendar (g-calend.ads): GNAT Calendar g-calend ads. + * GNAT.Calendar.Time_IO (g-catiio.ads): GNAT Calendar Time_IO g-catiio ads. + * GNAT.CRC32 (g-crc32.ads): GNAT CRC32 g-crc32 ads. + * GNAT.Case_Util (g-casuti.ads): GNAT Case_Util g-casuti ads. + * GNAT.CGI (g-cgi.ads): GNAT CGI g-cgi ads. + * GNAT.CGI.Cookie (g-cgicoo.ads): GNAT CGI Cookie g-cgicoo ads. + * GNAT.CGI.Debug (g-cgideb.ads): GNAT CGI Debug g-cgideb ads. + * GNAT.Command_Line (g-comlin.ads): GNAT Command_Line g-comlin ads. + * GNAT.Compiler_Version (g-comver.ads): GNAT Compiler_Version g-comver ads. + * GNAT.Ctrl_C (g-ctrl_c.ads): GNAT Ctrl_C g-ctrl_c ads. + * GNAT.Current_Exception (g-curexc.ads): GNAT Current_Exception g-curexc ads. + * GNAT.Debug_Pools (g-debpoo.ads): GNAT Debug_Pools g-debpoo ads. + * GNAT.Debug_Utilities (g-debuti.ads): GNAT Debug_Utilities g-debuti ads. + * GNAT.Decode_String (g-decstr.ads): GNAT Decode_String g-decstr ads. + * GNAT.Decode_UTF8_String (g-deutst.ads): GNAT Decode_UTF8_String g-deutst ads. + * GNAT.Directory_Operations (g-dirope.ads): GNAT Directory_Operations g-dirope ads. + * GNAT.Directory_Operations.Iteration (g-diopit.ads): GNAT Directory_Operations Iteration g-diopit ads. + * GNAT.Dynamic_HTables (g-dynhta.ads): GNAT Dynamic_HTables g-dynhta ads. + * GNAT.Dynamic_Tables (g-dyntab.ads): GNAT Dynamic_Tables g-dyntab ads. + * GNAT.Encode_String (g-encstr.ads): GNAT Encode_String g-encstr ads. + * GNAT.Encode_UTF8_String (g-enutst.ads): GNAT Encode_UTF8_String g-enutst ads. + * GNAT.Exception_Actions (g-excact.ads): GNAT Exception_Actions g-excact ads. + * GNAT.Exception_Traces (g-exctra.ads): GNAT Exception_Traces g-exctra ads. + * GNAT.Exceptions (g-except.ads): GNAT Exceptions g-except ads. + * GNAT.Expect (g-expect.ads): GNAT Expect g-expect ads. + * GNAT.Expect.TTY (g-exptty.ads): GNAT Expect TTY g-exptty ads. + * GNAT.Float_Control (g-flocon.ads): GNAT Float_Control g-flocon ads. + * GNAT.Formatted_String (g-forstr.ads): GNAT Formatted_String g-forstr ads. + * GNAT.Heap_Sort (g-heasor.ads): GNAT Heap_Sort g-heasor ads. + * GNAT.Heap_Sort_A (g-hesora.ads): GNAT Heap_Sort_A g-hesora ads. + * GNAT.Heap_Sort_G (g-hesorg.ads): GNAT Heap_Sort_G g-hesorg ads. + * GNAT.HTable (g-htable.ads): GNAT HTable g-htable ads. + * GNAT.IO (g-io.ads): GNAT IO g-io ads. + * GNAT.IO_Aux (g-io_aux.ads): GNAT IO_Aux g-io_aux ads. + * GNAT.Lock_Files (g-locfil.ads): GNAT Lock_Files g-locfil ads. + * GNAT.MBBS_Discrete_Random (g-mbdira.ads): GNAT MBBS_Discrete_Random g-mbdira ads. + * GNAT.MBBS_Float_Random (g-mbflra.ads): GNAT MBBS_Float_Random g-mbflra ads. + * GNAT.MD5 (g-md5.ads): GNAT MD5 g-md5 ads. + * GNAT.Memory_Dump (g-memdum.ads): GNAT Memory_Dump g-memdum ads. + * GNAT.Most_Recent_Exception (g-moreex.ads): GNAT Most_Recent_Exception g-moreex ads. + * GNAT.OS_Lib (g-os_lib.ads): GNAT OS_Lib g-os_lib ads. + * GNAT.Perfect_Hash_Generators (g-pehage.ads): GNAT Perfect_Hash_Generators g-pehage ads. + * GNAT.Random_Numbers (g-rannum.ads): GNAT Random_Numbers g-rannum ads. + * GNAT.Regexp (g-regexp.ads): GNAT Regexp g-regexp ads. + * GNAT.Registry (g-regist.ads): GNAT Registry g-regist ads. + * GNAT.Regpat (g-regpat.ads): GNAT Regpat g-regpat ads. + * GNAT.Rewrite_Data (g-rewdat.ads): GNAT Rewrite_Data g-rewdat ads. + * GNAT.Secondary_Stack_Info (g-sestin.ads): GNAT Secondary_Stack_Info g-sestin ads. + * GNAT.Semaphores (g-semaph.ads): GNAT Semaphores g-semaph ads. + * GNAT.Serial_Communications (g-sercom.ads): GNAT Serial_Communications g-sercom ads. + * GNAT.SHA1 (g-sha1.ads): GNAT SHA1 g-sha1 ads. + * GNAT.SHA224 (g-sha224.ads): GNAT SHA224 g-sha224 ads. + * GNAT.SHA256 (g-sha256.ads): GNAT SHA256 g-sha256 ads. + * GNAT.SHA384 (g-sha384.ads): GNAT SHA384 g-sha384 ads. + * GNAT.SHA512 (g-sha512.ads): GNAT SHA512 g-sha512 ads. + * GNAT.Signals (g-signal.ads): GNAT Signals g-signal ads. + * GNAT.Sockets (g-socket.ads): GNAT Sockets g-socket ads. + * GNAT.Source_Info (g-souinf.ads): GNAT Source_Info g-souinf ads. + * GNAT.Spelling_Checker (g-speche.ads): GNAT Spelling_Checker g-speche ads. + * GNAT.Spelling_Checker_Generic (g-spchge.ads): GNAT Spelling_Checker_Generic g-spchge ads. + * GNAT.Spitbol.Patterns (g-spipat.ads): GNAT Spitbol Patterns g-spipat ads. + * GNAT.Spitbol (g-spitbo.ads): GNAT Spitbol g-spitbo ads. + * GNAT.Spitbol.Table_Boolean (g-sptabo.ads): GNAT Spitbol Table_Boolean g-sptabo ads. + * GNAT.Spitbol.Table_Integer (g-sptain.ads): GNAT Spitbol Table_Integer g-sptain ads. + * GNAT.Spitbol.Table_VString (g-sptavs.ads): GNAT Spitbol Table_VString g-sptavs ads. + * GNAT.SSE (g-sse.ads): GNAT SSE g-sse ads. + * GNAT.SSE.Vector_Types (g-ssvety.ads): GNAT SSE Vector_Types g-ssvety ads. + * GNAT.String_Hash (g-strhas.ads): GNAT String_Hash g-strhas ads. + * GNAT.Strings (g-string.ads): GNAT Strings g-string ads. + * GNAT.String_Split (g-strspl.ads): GNAT String_Split g-strspl ads. + * GNAT.Table (g-table.ads): GNAT Table g-table ads. + * GNAT.Task_Lock (g-tasloc.ads): GNAT Task_Lock g-tasloc ads. + * GNAT.Time_Stamp (g-timsta.ads): GNAT Time_Stamp g-timsta ads. + * GNAT.Threads (g-thread.ads): GNAT Threads g-thread ads. + * GNAT.Traceback (g-traceb.ads): GNAT Traceback g-traceb ads. + * GNAT.Traceback.Symbolic (g-trasym.ads): GNAT Traceback Symbolic g-trasym ads. + * GNAT.UTF_32 (g-table.ads): GNAT UTF_32 g-table ads. + * GNAT.Wide_Spelling_Checker (g-u3spch.ads): GNAT Wide_Spelling_Checker g-u3spch ads. + * GNAT.Wide_Spelling_Checker (g-wispch.ads): GNAT Wide_Spelling_Checker g-wispch ads. + * GNAT.Wide_String_Split (g-wistsp.ads): GNAT Wide_String_Split g-wistsp ads. + * GNAT.Wide_Wide_Spelling_Checker (g-zspche.ads): GNAT Wide_Wide_Spelling_Checker g-zspche ads. + * GNAT.Wide_Wide_String_Split (g-zistsp.ads): GNAT Wide_Wide_String_Split g-zistsp ads. + * Interfaces.C.Extensions (i-cexten.ads): Interfaces C Extensions i-cexten ads. + * Interfaces.C.Streams (i-cstrea.ads): Interfaces C Streams i-cstrea ads. + * Interfaces.Packed_Decimal (i-pacdec.ads): Interfaces Packed_Decimal i-pacdec ads. + * Interfaces.VxWorks (i-vxwork.ads): Interfaces VxWorks i-vxwork ads. + * Interfaces.VxWorks.Int_Connection (i-vxinco.ads): Interfaces VxWorks Int_Connection i-vxinco ads. + * Interfaces.VxWorks.IO (i-vxwoio.ads): Interfaces VxWorks IO i-vxwoio ads. + * System.Address_Image (s-addima.ads): System Address_Image s-addima ads. + * System.Assertions (s-assert.ads): System Assertions s-assert ads. + * System.Atomic_Counters (s-atocou.ads): System Atomic_Counters s-atocou ads. + * System.Memory (s-memory.ads): System Memory s-memory ads. + * System.Multiprocessors (s-multip.ads): System Multiprocessors s-multip ads. + * System.Multiprocessors.Dispatching_Domains (s-mudido.ads): System Multiprocessors Dispatching_Domains s-mudido ads. + * System.Partition_Interface (s-parint.ads): System Partition_Interface s-parint ads. + * System.Pool_Global (s-pooglo.ads): System Pool_Global s-pooglo ads. + * System.Pool_Local (s-pooloc.ads): System Pool_Local s-pooloc ads. + * System.Restrictions (s-restri.ads): System Restrictions s-restri ads. + * System.Rident (s-rident.ads): System Rident s-rident ads. + * System.Strings.Stream_Ops (s-ststop.ads): System Strings Stream_Ops s-ststop ads. + * System.Unsigned_Types (s-unstyp.ads): System Unsigned_Types s-unstyp ads. + * System.Wch_Cnv (s-wchcnv.ads): System Wch_Cnv s-wchcnv ads. + * System.Wch_Con (s-wchcon.ads): System Wch_Con s-wchcon ads. + + Interfacing to Other Languages + + * Interfacing to C:: + * Interfacing to C++:: + * Interfacing to COBOL:: + * Interfacing to Fortran:: + * Interfacing to non-GNAT Ada code:: + + Implementation of Specific Ada Features + + * Machine Code Insertions:: + * GNAT Implementation of Tasking:: + * GNAT Implementation of Shared Passive Packages:: + * Code Generation for Array Aggregates:: + * The Size of Discriminated Records with Default Discriminants:: + * Image Values For Nonscalar Types:: + * Strict Conformance to the Ada Reference Manual:: + + GNAT Implementation of Tasking + + * Mapping Ada Tasks onto the Underlying Kernel Threads:: + * Ensuring Compliance with the Real-Time Annex:: + * Support for Locking Policies:: + + Code Generation for Array Aggregates + + * Static constant aggregates with static bounds:: + * Constant aggregates with unconstrained nominal types:: + * Aggregates with static bounds:: + * Aggregates with nonstatic bounds:: + * Aggregates in assignment statements:: + + Security Hardening Features + + * Register Scrubbing:: + * Stack Scrubbing:: + * Hardened Conditionals:: + + Obsolescent Features + + * pragma No_Run_Time:: + * pragma Ravenscar:: + * pragma Restricted_Run_Time:: + * pragma Task_Info:: + * package System.Task_Info (s-tasinf.ads): package System Task_Info s-tasinf ads. + + Compatibility and Porting Guide + + * Writing Portable Fixed-Point Declarations:: + * Compatibility with Ada 83:: + * Compatibility between Ada 95 and Ada 2005:: + * Implementation-dependent characteristics:: + * Compatibility with Other Ada Systems:: + * Representation Clauses:: + * Compatibility with HP Ada 83:: + + Compatibility with Ada 83 + + * Legal Ada 83 programs that are illegal in Ada 95:: + * More deterministic semantics:: + * Changed semantics:: + * Other language compatibility issues:: + + Implementation-dependent characteristics + + * Implementation-defined pragmas:: + * Implementation-defined attributes:: + * Libraries:: + * Elaboration order:: + * Target-specific aspects:: + + +  + File: gnat_rm.info, Node: About This Guide, Next: Implementation Defined Pragmas, Prev: Top, Up: Top + + 1 About This Guide + ****************** + + This manual contains useful information in writing programs using the + GNAT compiler. It includes information on implementation dependent + characteristics of GNAT, including all the information required by Annex + M of the Ada language standard. + + GNAT implements Ada 95, Ada 2005 and Ada 2012, and it may also be + invoked in Ada 83 compatibility mode. By default, GNAT assumes Ada + 2012, but you can override with a compiler switch to explicitly specify + the language version. (Please refer to the `GNAT User’s Guide' for + details on these switches.) Throughout this manual, references to ‘Ada’ + without a year suffix apply to all the Ada versions of the language. + + Ada is designed to be highly portable. In general, a program will have + the same effect even when compiled by different compilers on different + platforms. However, since Ada is designed to be used in a wide variety + of applications, it also contains a number of system dependent features + to be used in interfacing to the external world. + + Note: Any program that makes use of implementation-dependent features + may be non-portable. You should follow good programming practice and + isolate and clearly document any sections of your program that make use + of these features in a non-portable manner. + + * Menu: + + * What This Reference Manual Contains:: + * Conventions:: + * Related Information:: + +  + File: gnat_rm.info, Node: What This Reference Manual Contains, Next: Conventions, Up: About This Guide + + 1.1 What This Reference Manual Contains + ======================================= + + This reference manual contains the following chapters: + + * *note Implementation Defined Pragmas: 7, lists GNAT + implementation-dependent pragmas, which can be used to extend and + enhance the functionality of the compiler. + + * *note Implementation Defined Attributes: 8, lists GNAT + implementation-dependent attributes, which can be used to extend + and enhance the functionality of the compiler. + + * *note Standard and Implementation Defined Restrictions: 9, lists + GNAT implementation-dependent restrictions, which can be used to + extend and enhance the functionality of the compiler. + + * *note Implementation Advice: a, provides information on generally + desirable behavior which are not requirements that all compilers + must follow since it cannot be provided on all systems, or which + may be undesirable on some systems. + + * *note Implementation Defined Characteristics: b, provides a guide + to minimizing implementation dependent features. + + * *note Intrinsic Subprograms: c, describes the intrinsic subprograms + implemented by GNAT, and how they can be imported into user + application programs. + + * *note Representation Clauses and Pragmas: d, describes in detail + the way that GNAT represents data, and in particular the exact set + of representation clauses and pragmas that is accepted. + + * *note Standard Library Routines: e, provides a listing of packages + and a brief description of the functionality that is provided by + Ada’s extensive set of standard library routines as implemented by + GNAT. + + * *note The Implementation of Standard I/O: f, details how the GNAT + implementation of the input-output facilities. + + * *note The GNAT Library: 10, is a catalog of packages that + complement the Ada predefined library. + + * *note Interfacing to Other Languages: 11, describes how programs + written in Ada using GNAT can be interfaced to other programming + languages. + + * *note Specialized Needs Annexes: 12, describes the GNAT + implementation of all of the specialized needs annexes. + + * *note Implementation of Specific Ada Features: 13, discusses issues + related to GNAT’s implementation of machine code insertions, + tasking, and several other features. + + * *note Implementation of Ada 2012 Features: 14, describes the status + of the GNAT implementation of the Ada 2012 language standard. + + * *note Security Hardening Features: 15. documents GNAT extensions + aimed at security hardening. + + * *note Obsolescent Features: 16. documents implementation dependent + features, including pragmas and attributes, which are considered + obsolescent, since there are other preferred ways of achieving the + same results. These obsolescent forms are retained for backwards + compatibility. + + * *note Compatibility and Porting Guide: 17. presents some guidelines + for developing portable Ada code, describes the compatibility + issues that may arise between GNAT and other Ada compilation + systems (including those for Ada 83), and shows how GNAT can + expedite porting applications developed in other Ada environments. + + * *note GNU Free Documentation License: 1. contains the license for + this document. + + This reference manual assumes a basic familiarity with the Ada 95 + language, as described in the ‘International Standard + ANSI/ISO/IEC-8652:1995’. It does not require knowledge of the new + features introduced by Ada 2005 or Ada 2012. All three reference + manuals are included in the GNAT documentation package. + +  + File: gnat_rm.info, Node: Conventions, Next: Related Information, Prev: What This Reference Manual Contains, Up: About This Guide + + 1.2 Conventions + =============== + + Following are examples of the typographical and graphic conventions used + in this guide: + + * ‘Functions’, ‘utility program names’, ‘standard names’, and + ‘classes’. + + * ‘Option flags’ + + * ‘File names’ + + * ‘Variables’ + + * `Emphasis' + + * [optional information or parameters] + + * Examples are described by text + + and then shown this way. + + * Commands that are entered by the user are shown as preceded by a + prompt string comprising the ‘$’ character followed by a space. + +  + File: gnat_rm.info, Node: Related Information, Prev: Conventions, Up: About This Guide + + 1.3 Related Information + ======================= + + See the following documents for further information on GNAT: + + * ‘GNAT User’s Guide for Native Platforms’, which provides + information on how to use the GNAT development environment. + + * ‘Ada 95 Reference Manual’, the Ada 95 programming language + standard. + + * ‘Ada 95 Annotated Reference Manual’, which is an annotated version + of the Ada 95 standard. The annotations describe detailed aspects + of the design decision, and in particular contain useful sections + on Ada 83 compatibility. + + * ‘Ada 2005 Reference Manual’, the Ada 2005 programming language + standard. + + * ‘Ada 2005 Annotated Reference Manual’, which is an annotated + version of the Ada 2005 standard. The annotations describe + detailed aspects of the design decision. + + * ‘Ada 2012 Reference Manual’, the Ada 2012 programming language + standard. + + * ‘DEC Ada, Technical Overview and Comparison on DIGITAL Platforms’, + which contains specific information on compatibility between GNAT + and DEC Ada 83 systems. + + * ‘DEC Ada, Language Reference Manual’, part number AA-PYZAB-TK, + which describes in detail the pragmas and attributes provided by + the DEC Ada 83 compiler system. + +  + File: gnat_rm.info, Node: Implementation Defined Pragmas, Next: Implementation Defined Aspects, Prev: About This Guide, Up: Top + + 2 Implementation Defined Pragmas + ******************************** + + Ada defines a set of pragmas that can be used to supply additional + information to the compiler. These language defined pragmas are + implemented in GNAT and work as described in the Ada Reference Manual. + + In addition, Ada allows implementations to define additional pragmas + whose meaning is defined by the implementation. GNAT provides a number + of these implementation-defined pragmas, which can be used to extend and + enhance the functionality of the compiler. This section of the GNAT + Reference Manual describes these additional pragmas. + + Note that any program using these pragmas might not be portable to other + compilers (although GNAT implements this set of pragmas on all + platforms). Therefore if portability to other compilers is an important + consideration, the use of these pragmas should be minimized. + + * Menu: + + * Pragma Abort_Defer:: + * Pragma Abstract_State:: + * Pragma Ada_83:: + * Pragma Ada_95:: + * Pragma Ada_05:: + * Pragma Ada_2005:: + * Pragma Ada_12:: + * Pragma Ada_2012:: + * Pragma Aggregate_Individually_Assign:: + * Pragma Allow_Integer_Address:: + * Pragma Annotate:: + * Pragma Assert:: + * Pragma Assert_And_Cut:: + * Pragma Assertion_Policy:: + * Pragma Assume:: + * Pragma Assume_No_Invalid_Values:: + * Pragma Async_Readers:: + * Pragma Async_Writers:: + * Pragma Attribute_Definition:: + * Pragma C_Pass_By_Copy:: + * Pragma Check:: + * Pragma Check_Float_Overflow:: + * Pragma Check_Name:: + * Pragma Check_Policy:: + * Pragma Comment:: + * Pragma Common_Object:: + * Pragma Compile_Time_Error:: + * Pragma Compile_Time_Warning:: + * Pragma Complete_Representation:: + * Pragma Complex_Representation:: + * Pragma Component_Alignment:: + * Pragma Constant_After_Elaboration:: + * Pragma Contract_Cases:: + * Pragma Convention_Identifier:: + * Pragma CPP_Class:: + * Pragma CPP_Constructor:: + * Pragma CPP_Virtual:: + * Pragma CPP_Vtable:: + * Pragma CPU:: + * Pragma Deadline_Floor:: + * Pragma Default_Initial_Condition:: + * Pragma Debug:: + * Pragma Debug_Policy:: + * Pragma Default_Scalar_Storage_Order:: + * Pragma Default_Storage_Pool:: + * Pragma Depends:: + * Pragma Detect_Blocking:: + * Pragma Disable_Atomic_Synchronization:: + * Pragma Dispatching_Domain:: + * Pragma Effective_Reads:: + * Pragma Effective_Writes:: + * Pragma Elaboration_Checks:: + * Pragma Eliminate:: + * Pragma Enable_Atomic_Synchronization:: + * Pragma Export_Function:: + * Pragma Export_Object:: + * Pragma Export_Procedure:: + * Pragma Export_Valued_Procedure:: + * Pragma Extend_System:: + * Pragma Extensions_Allowed:: + * Pragma Extensions_Visible:: + * Pragma External:: + * Pragma External_Name_Casing:: + * Pragma Fast_Math:: + * Pragma Favor_Top_Level:: + * Pragma Finalize_Storage_Only:: + * Pragma Float_Representation:: + * Pragma Ghost:: + * Pragma Global:: + * Pragma Ident:: + * Pragma Ignore_Pragma:: + * Pragma Implementation_Defined:: + * Pragma Implemented:: + * Pragma Implicit_Packing:: + * Pragma Import_Function:: + * Pragma Import_Object:: + * Pragma Import_Procedure:: + * Pragma Import_Valued_Procedure:: + * Pragma Independent:: + * Pragma Independent_Components:: + * Pragma Initial_Condition:: + * Pragma Initialize_Scalars:: + * Pragma Initializes:: + * Pragma Inline_Always:: + * Pragma Inline_Generic:: + * Pragma Interface:: + * Pragma Interface_Name:: + * Pragma Interrupt_Handler:: + * Pragma Interrupt_State:: + * Pragma Invariant:: + * Pragma Keep_Names:: + * Pragma License:: + * Pragma Link_With:: + * Pragma Linker_Alias:: + * Pragma Linker_Constructor:: + * Pragma Linker_Destructor:: + * Pragma Linker_Section:: + * Pragma Lock_Free:: + * Pragma Loop_Invariant:: + * Pragma Loop_Optimize:: + * Pragma Loop_Variant:: + * Pragma Machine_Attribute:: + * Pragma Main:: + * Pragma Main_Storage:: + * Pragma Max_Queue_Length:: + * Pragma No_Body:: + * Pragma No_Caching:: + * Pragma No_Component_Reordering:: + * Pragma No_Elaboration_Code_All:: + * Pragma No_Heap_Finalization:: + * Pragma No_Inline:: + * Pragma No_Return:: + * Pragma No_Strict_Aliasing:: + * Pragma No_Tagged_Streams:: + * Pragma Normalize_Scalars:: + * Pragma Obsolescent:: + * Pragma Optimize_Alignment:: + * Pragma Ordered:: + * Pragma Overflow_Mode:: + * Pragma Overriding_Renamings:: + * Pragma Partition_Elaboration_Policy:: + * Pragma Part_Of:: + * Pragma Passive:: + * Pragma Persistent_BSS:: + * Pragma Post:: + * Pragma Postcondition:: + * Pragma Post_Class:: + * Pragma Pre:: + * Pragma Precondition:: + * Pragma Predicate:: + * Pragma Predicate_Failure:: + * Pragma Preelaborable_Initialization:: + * Pragma Prefix_Exception_Messages:: + * Pragma Pre_Class:: + * Pragma Priority_Specific_Dispatching:: + * Pragma Profile:: + * Pragma Profile_Warnings:: + * Pragma Propagate_Exceptions:: + * Pragma Provide_Shift_Operators:: + * Pragma Psect_Object:: + * Pragma Pure_Function:: + * Pragma Rational:: + * Pragma Ravenscar:: + * Pragma Refined_Depends:: + * Pragma Refined_Global:: + * Pragma Refined_Post:: + * Pragma Refined_State:: + * Pragma Relative_Deadline:: + * Pragma Remote_Access_Type:: + * Pragma Rename_Pragma:: + * Pragma Restricted_Run_Time:: + * Pragma Restriction_Warnings:: + * Pragma Reviewable:: + * Pragma Secondary_Stack_Size:: + * Pragma Share_Generic:: + * Pragma Shared:: + * Pragma Short_Circuit_And_Or:: + * Pragma Short_Descriptors:: + * Pragma Simple_Storage_Pool_Type:: + * Pragma Source_File_Name:: + * Pragma Source_File_Name_Project:: + * Pragma Source_Reference:: + * Pragma SPARK_Mode:: + * Pragma Static_Elaboration_Desired:: + * Pragma Stream_Convert:: + * Pragma Style_Checks:: + * Pragma Subtitle:: + * Pragma Suppress:: + * Pragma Suppress_All:: + * Pragma Suppress_Debug_Info:: + * Pragma Suppress_Exception_Locations:: + * Pragma Suppress_Initialization:: + * Pragma Task_Name:: + * Pragma Task_Storage:: + * Pragma Test_Case:: + * Pragma Thread_Local_Storage:: + * Pragma Time_Slice:: + * Pragma Title:: + * Pragma Type_Invariant:: + * Pragma Type_Invariant_Class:: + * Pragma Unchecked_Union:: + * Pragma Unevaluated_Use_Of_Old:: + * Pragma Unimplemented_Unit:: + * Pragma Universal_Aliasing:: + * Pragma Unmodified:: + * Pragma Unreferenced:: + * Pragma Unreferenced_Objects:: + * Pragma Unreserve_All_Interrupts:: + * Pragma Unsuppress:: + * Pragma Use_VADS_Size:: + * Pragma Unused:: + * Pragma Validity_Checks:: + * Pragma Volatile:: + * Pragma Volatile_Full_Access:: + * Pragma Volatile_Function:: + * Pragma Warning_As_Error:: + * Pragma Warnings:: + * Pragma Weak_External:: + * Pragma Wide_Character_Encoding:: + +  + File: gnat_rm.info, Node: Pragma Abort_Defer, Next: Pragma Abstract_State, Up: Implementation Defined Pragmas + + 2.1 Pragma Abort_Defer + ====================== + + Syntax: + + pragma Abort_Defer; + + This pragma must appear at the start of the statement sequence of a + handled sequence of statements (right after the ‘begin’). It has the + effect of deferring aborts for the sequence of statements (but not for + the declarations or handlers, if any, associated with this statement + sequence). This can also be useful for adding a polling point in Ada + code, where asynchronous abort of tasks is checked when leaving the + statement sequence, and is lighter than, for example, using ‘delay + 0.0;’, since with zero-cost exception handling, propagating exceptions + (implicitly used to implement task abort) cannot be done reliably in an + asynchronous way. + + An example of usage would be: + + -- Add a polling point to check for task aborts + + begin + pragma Abort_Defer; + end; + +  + File: gnat_rm.info, Node: Pragma Abstract_State, Next: Pragma Ada_83, Prev: Pragma Abort_Defer, Up: Implementation Defined Pragmas + + 2.2 Pragma Abstract_State + ========================= + + Syntax: + + pragma Abstract_State (ABSTRACT_STATE_LIST); + + ABSTRACT_STATE_LIST ::= + null + | STATE_NAME_WITH_OPTIONS + | (STATE_NAME_WITH_OPTIONS {, STATE_NAME_WITH_OPTIONS} ) + + STATE_NAME_WITH_OPTIONS ::= + STATE_NAME + | (STATE_NAME with OPTION_LIST) + + OPTION_LIST ::= OPTION {, OPTION} + + OPTION ::= + SIMPLE_OPTION + | NAME_VALUE_OPTION + + SIMPLE_OPTION ::= Ghost | Synchronous + + NAME_VALUE_OPTION ::= + Part_Of => ABSTRACT_STATE + | External [=> EXTERNAL_PROPERTY_LIST] + + EXTERNAL_PROPERTY_LIST ::= + EXTERNAL_PROPERTY + | (EXTERNAL_PROPERTY {, EXTERNAL_PROPERTY} ) + + EXTERNAL_PROPERTY ::= + Async_Readers [=> boolean_EXPRESSION] + | Async_Writers [=> boolean_EXPRESSION] + | Effective_Reads [=> boolean_EXPRESSION] + | Effective_Writes [=> boolean_EXPRESSION] + others => boolean_EXPRESSION + + STATE_NAME ::= defining_identifier + + ABSTRACT_STATE ::= name + + For the semantics of this pragma, see the entry for aspect + ‘Abstract_State’ in the SPARK 2014 Reference Manual, section 7.1.4. + +  + File: gnat_rm.info, Node: Pragma Ada_83, Next: Pragma Ada_95, Prev: Pragma Abstract_State, Up: Implementation Defined Pragmas + + 2.3 Pragma Ada_83 + ================= + + Syntax: + + pragma Ada_83; + + A configuration pragma that establishes Ada 83 mode for the unit to + which it applies, regardless of the mode set by the command line + switches. In Ada 83 mode, GNAT attempts to be as compatible with the + syntax and semantics of Ada 83, as defined in the original Ada 83 + Reference Manual as possible. In particular, the keywords added by Ada + 95 and Ada 2005 are not recognized, optional package bodies are allowed, + and generics may name types with unknown discriminants without using the + ‘(<>)’ notation. In addition, some but not all of the additional + restrictions of Ada 83 are enforced. + + Ada 83 mode is intended for two purposes. Firstly, it allows existing + Ada 83 code to be compiled and adapted to GNAT with less effort. + Secondly, it aids in keeping code backwards compatible with Ada 83. + However, there is no guarantee that code that is processed correctly by + GNAT in Ada 83 mode will in fact compile and execute with an Ada 83 + compiler, since GNAT does not enforce all the additional checks required + by Ada 83. + +  + File: gnat_rm.info, Node: Pragma Ada_95, Next: Pragma Ada_05, Prev: Pragma Ada_83, Up: Implementation Defined Pragmas + + 2.4 Pragma Ada_95 + ================= + + Syntax: + + pragma Ada_95; + + A configuration pragma that establishes Ada 95 mode for the unit to + which it applies, regardless of the mode set by the command line + switches. This mode is set automatically for the ‘Ada’ and ‘System’ + packages and their children, so you need not specify it in these + contexts. This pragma is useful when writing a reusable component that + itself uses Ada 95 features, but which is intended to be usable from + either Ada 83 or Ada 95 programs. + +  + File: gnat_rm.info, Node: Pragma Ada_05, Next: Pragma Ada_2005, Prev: Pragma Ada_95, Up: Implementation Defined Pragmas + + 2.5 Pragma Ada_05 + ================= + + Syntax: + + pragma Ada_05; + pragma Ada_05 (local_NAME); + + A configuration pragma that establishes Ada 2005 mode for the unit to + which it applies, regardless of the mode set by the command line + switches. This pragma is useful when writing a reusable component that + itself uses Ada 2005 features, but which is intended to be usable from + either Ada 83 or Ada 95 programs. + + The one argument form (which is not a configuration pragma) is used for + managing the transition from Ada 95 to Ada 2005 in the run-time library. + If an entity is marked as Ada_2005 only, then referencing the entity in + Ada_83 or Ada_95 mode will generate a warning. In addition, in Ada_83 + or Ada_95 mode, a preference rule is established which does not choose + such an entity unless it is unambiguously specified. This avoids extra + subprograms marked this way from generating ambiguities in otherwise + legal pre-Ada_2005 programs. The one argument form is intended for + exclusive use in the GNAT run-time library. + +  + File: gnat_rm.info, Node: Pragma Ada_2005, Next: Pragma Ada_12, Prev: Pragma Ada_05, Up: Implementation Defined Pragmas + + 2.6 Pragma Ada_2005 + =================== + + Syntax: + + pragma Ada_2005; + + This configuration pragma is a synonym for pragma Ada_05 and has the + same syntax and effect. + +  + File: gnat_rm.info, Node: Pragma Ada_12, Next: Pragma Ada_2012, Prev: Pragma Ada_2005, Up: Implementation Defined Pragmas + + 2.7 Pragma Ada_12 + ================= + + Syntax: + + pragma Ada_12; + pragma Ada_12 (local_NAME); + + A configuration pragma that establishes Ada 2012 mode for the unit to + which it applies, regardless of the mode set by the command line + switches. This mode is set automatically for the ‘Ada’ and ‘System’ + packages and their children, so you need not specify it in these + contexts. This pragma is useful when writing a reusable component that + itself uses Ada 2012 features, but which is intended to be usable from + Ada 83, Ada 95, or Ada 2005 programs. + + The one argument form, which is not a configuration pragma, is used for + managing the transition from Ada 2005 to Ada 2012 in the run-time + library. If an entity is marked as Ada_2012 only, then referencing the + entity in any pre-Ada_2012 mode will generate a warning. In addition, + in any pre-Ada_2012 mode, a preference rule is established which does + not choose such an entity unless it is unambiguously specified. This + avoids extra subprograms marked this way from generating ambiguities in + otherwise legal pre-Ada_2012 programs. The one argument form is + intended for exclusive use in the GNAT run-time library. + +  + File: gnat_rm.info, Node: Pragma Ada_2012, Next: Pragma Aggregate_Individually_Assign, Prev: Pragma Ada_12, Up: Implementation Defined Pragmas + + 2.8 Pragma Ada_2012 + =================== + + Syntax: + + pragma Ada_2012; + + This configuration pragma is a synonym for pragma Ada_12 and has the + same syntax and effect. + +  + File: gnat_rm.info, Node: Pragma Aggregate_Individually_Assign, Next: Pragma Allow_Integer_Address, Prev: Pragma Ada_2012, Up: Implementation Defined Pragmas + + 2.9 Pragma Aggregate_Individually_Assign + ======================================== + + Syntax: + + pragma Aggregate_Individually_Assign; + + Where possible, GNAT will store the binary representation of a record + aggregate in memory for space and performance reasons. This + configuration pragma changes this behavior so that record aggregates are + instead always converted into individual assignment statements. + +  + File: gnat_rm.info, Node: Pragma Allow_Integer_Address, Next: Pragma Annotate, Prev: Pragma Aggregate_Individually_Assign, Up: Implementation Defined Pragmas + + 2.10 Pragma Allow_Integer_Address + ================================= + + Syntax: + + pragma Allow_Integer_Address; + + In almost all versions of GNAT, ‘System.Address’ is a private type in + accordance with the implementation advice in the RM. This means that + integer values, in particular integer literals, are not allowed as + address values. If the configuration pragma ‘Allow_Integer_Address’ is + given, then integer expressions may be used anywhere a value of type + ‘System.Address’ is required. The effect is to introduce an implicit + unchecked conversion from the integer value to type ‘System.Address’. + The reverse case of using an address where an integer type is required + is handled analogously. The following example compiles without errors: + + pragma Allow_Integer_Address; + with System; use System; + package AddrAsInt is + X : Integer; + Y : Integer; + for X'Address use 16#1240#; + for Y use at 16#3230#; + m : Address := 16#4000#; + n : constant Address := 4000; + p : constant Address := Address (X + Y); + v : Integer := y'Address; + w : constant Integer := Integer (Y'Address); + type R is new integer; + RR : R := 1000; + Z : Integer; + for Z'Address use RR; + end AddrAsInt; + + Note that pragma ‘Allow_Integer_Address’ is ignored if ‘System.Address’ + is not a private type. In implementations of ‘GNAT’ where + System.Address is a visible integer type, this pragma serves no purpose + but is ignored rather than rejected to allow common sets of sources to + be used in the two situations. + +  + File: gnat_rm.info, Node: Pragma Annotate, Next: Pragma Assert, Prev: Pragma Allow_Integer_Address, Up: Implementation Defined Pragmas + + 2.11 Pragma Annotate + ==================== + + Syntax: + + pragma Annotate (IDENTIFIER [, IDENTIFIER {, ARG}] [, entity => local_NAME]); + + ARG ::= NAME | EXPRESSION + + This pragma is used to annotate programs. IDENTIFIER identifies the + type of annotation. GNAT verifies that it is an identifier, but does + not otherwise analyze it. The second optional identifier is also left + unanalyzed, and by convention is used to control the action of the tool + to which the annotation is addressed. The remaining ARG arguments can + be either string literals or more generally expressions. String + literals (and concatenations of string literals) are assumed to be + either of type ‘Standard.String’ or else ‘Wide_String’ or + ‘Wide_Wide_String’ depending on the character literals they contain. + All other kinds of arguments are analyzed as expressions, and must be + unambiguous. The last argument if present must have the identifier + ‘Entity’ and GNAT verifies that a local name is given. + + The analyzed pragma is retained in the tree, but not otherwise processed + by any part of the GNAT compiler, except to generate corresponding note + lines in the generated ALI file. For the format of these note lines, + see the compiler source file lib-writ.ads. This pragma is intended for + use by external tools, including ASIS. The use of pragma Annotate does + not affect the compilation process in any way. This pragma may be used + as a configuration pragma. + +  + File: gnat_rm.info, Node: Pragma Assert, Next: Pragma Assert_And_Cut, Prev: Pragma Annotate, Up: Implementation Defined Pragmas + + 2.12 Pragma Assert + ================== + + Syntax: + + pragma Assert ( + boolean_EXPRESSION + [, string_EXPRESSION]); + + The effect of this pragma depends on whether the corresponding command + line switch is set to activate assertions. The pragma expands into code + equivalent to the following: + + if assertions-enabled then + if not boolean_EXPRESSION then + System.Assertions.Raise_Assert_Failure + (string_EXPRESSION); + end if; + end if; + + The string argument, if given, is the message that will be associated + with the exception occurrence if the exception is raised. If no second + argument is given, the default message is ‘file’:‘nnn’, where ‘file’ is + the name of the source file containing the assert, and ‘nnn’ is the line + number of the assert. + + Note that, as with the ‘if’ statement to which it is equivalent, the + type of the expression is either ‘Standard.Boolean’, or any type derived + from this standard type. + + Assert checks can be either checked or ignored. By default they are + ignored. They will be checked if either the command line switch + `-gnata' is used, or if an ‘Assertion_Policy’ or ‘Check_Policy’ pragma + is used to enable ‘Assert_Checks’. + + If assertions are ignored, then there is no run-time effect (and in + particular, any side effects from the expression will not occur at run + time). (The expression is still analyzed at compile time, and may cause + types to be frozen if they are mentioned here for the first time). + + If assertions are checked, then the given expression is tested, and if + it is ‘False’ then ‘System.Assertions.Raise_Assert_Failure’ is called + which results in the raising of ‘Assert_Failure’ with the given message. + + You should generally avoid side effects in the expression arguments of + this pragma, because these side effects will turn on and off with the + setting of the assertions mode, resulting in assertions that have an + effect on the program. However, the expressions are analyzed for + semantic correctness whether or not assertions are enabled, so turning + assertions on and off cannot affect the legality of a program. + + Note that the implementation defined policy ‘DISABLE’, given in a pragma + ‘Assertion_Policy’, can be used to suppress this semantic analysis. + + Note: this is a standard language-defined pragma in versions of Ada from + 2005 on. In GNAT, it is implemented in all versions of Ada, and the + DISABLE policy is an implementation-defined addition. + +  + File: gnat_rm.info, Node: Pragma Assert_And_Cut, Next: Pragma Assertion_Policy, Prev: Pragma Assert, Up: Implementation Defined Pragmas + + 2.13 Pragma Assert_And_Cut + ========================== + + Syntax: + + pragma Assert_And_Cut ( + boolean_EXPRESSION + [, string_EXPRESSION]); + + The effect of this pragma is identical to that of pragma ‘Assert’, + except that in an ‘Assertion_Policy’ pragma, the identifier + ‘Assert_And_Cut’ is used to control whether it is ignored or checked (or + disabled). + + The intention is that this be used within a subprogram when the given + test expresion sums up all the work done so far in the subprogram, so + that the rest of the subprogram can be verified (informally or formally) + using only the entry preconditions, and the expression in this pragma. + This allows dividing up a subprogram into sections for the purposes of + testing or formal verification. The pragma also serves as useful + documentation. + +  + File: gnat_rm.info, Node: Pragma Assertion_Policy, Next: Pragma Assume, Prev: Pragma Assert_And_Cut, Up: Implementation Defined Pragmas + + 2.14 Pragma Assertion_Policy + ============================ + + Syntax: + + pragma Assertion_Policy (CHECK | DISABLE | IGNORE | SUPPRESSIBLE); + + pragma Assertion_Policy ( + ASSERTION_KIND => POLICY_IDENTIFIER + {, ASSERTION_KIND => POLICY_IDENTIFIER}); + + ASSERTION_KIND ::= RM_ASSERTION_KIND | ID_ASSERTION_KIND + + RM_ASSERTION_KIND ::= Assert | + Static_Predicate | + Dynamic_Predicate | + Pre | + Pre'Class | + Post | + Post'Class | + Type_Invariant | + Type_Invariant'Class | + Default_Initial_Condition + + ID_ASSERTION_KIND ::= Assertions | + Assert_And_Cut | + Assume | + Contract_Cases | + Debug | + Ghost | + Initial_Condition | + Invariant | + Invariant'Class | + Loop_Invariant | + Loop_Variant | + Postcondition | + Precondition | + Predicate | + Refined_Post | + Statement_Assertions | + Subprogram_Variant + + POLICY_IDENTIFIER ::= Check | Disable | Ignore | Suppressible + + This is a standard Ada 2012 pragma that is available as an + implementation-defined pragma in earlier versions of Ada. The assertion + kinds ‘RM_ASSERTION_KIND’ are those defined in the Ada standard. The + assertion kinds ‘ID_ASSERTION_KIND’ are implementation defined additions + recognized by the GNAT compiler. + + The pragma applies in both cases to pragmas and aspects with matching + names, e.g. ‘Pre’ applies to the Pre aspect, and ‘Precondition’ applies + to both the ‘Precondition’ pragma and the aspect ‘Precondition’. Note + that the identifiers for pragmas Pre_Class and Post_Class are Pre’Class + and Post’Class (not Pre_Class and Post_Class), since these pragmas are + intended to be identical to the corresponding aspects). + + If the policy is ‘CHECK’, then assertions are enabled, i.e. the + corresponding pragma or aspect is activated. If the policy is ‘IGNORE’, + then assertions are ignored, i.e. the corresponding pragma or aspect is + deactivated. This pragma overrides the effect of the `-gnata' switch on + the command line. If the policy is ‘SUPPRESSIBLE’, then assertions are + enabled by default, however, if the `-gnatp' switch is specified all + assertions are ignored. + + The implementation defined policy ‘DISABLE’ is like ‘IGNORE’ except that + it completely disables semantic checking of the corresponding pragma or + aspect. This is useful when the pragma or aspect argument references + subprograms in a with’ed package which is replaced by a dummy package + for the final build. + + The implementation defined assertion kind ‘Assertions’ applies to all + assertion kinds. The form with no assertion kind given implies this + choice, so it applies to all assertion kinds (RM defined, and + implementation defined). + + The implementation defined assertion kind ‘Statement_Assertions’ applies + to ‘Assert’, ‘Assert_And_Cut’, ‘Assume’, ‘Loop_Invariant’, and + ‘Loop_Variant’. + +  + File: gnat_rm.info, Node: Pragma Assume, Next: Pragma Assume_No_Invalid_Values, Prev: Pragma Assertion_Policy, Up: Implementation Defined Pragmas + + 2.15 Pragma Assume + ================== + + Syntax: + + pragma Assume ( + boolean_EXPRESSION + [, string_EXPRESSION]); + + The effect of this pragma is identical to that of pragma ‘Assert’, + except that in an ‘Assertion_Policy’ pragma, the identifier ‘Assume’ is + used to control whether it is ignored or checked (or disabled). + + The intention is that this be used for assumptions about the external + environment. So you cannot expect to verify formally or informally that + the condition is met, this must be established by examining things + outside the program itself. For example, we may have code that depends + on the size of ‘Long_Long_Integer’ being at least 64. So we could + write: + + pragma Assume (Long_Long_Integer'Size >= 64); + + This assumption cannot be proved from the program itself, but it acts as + a useful run-time check that the assumption is met, and documents the + need to ensure that it is met by reference to information outside the + program. + +  + File: gnat_rm.info, Node: Pragma Assume_No_Invalid_Values, Next: Pragma Async_Readers, Prev: Pragma Assume, Up: Implementation Defined Pragmas + + 2.16 Pragma Assume_No_Invalid_Values + ==================================== + + Syntax: + + pragma Assume_No_Invalid_Values (On | Off); + + This is a configuration pragma that controls the assumptions made by the + compiler about the occurrence of invalid representations (invalid + values) in the code. + + The default behavior (corresponding to an Off argument for this pragma), + is to assume that values may in general be invalid unless the compiler + can prove they are valid. Consider the following example: + + V1 : Integer range 1 .. 10; + V2 : Integer range 11 .. 20; + ... + for J in V2 .. V1 loop + ... + end loop; + + if V1 and V2 have valid values, then the loop is known at compile time + not to execute since the lower bound must be greater than the upper + bound. However in default mode, no such assumption is made, and the + loop may execute. If ‘Assume_No_Invalid_Values (On)’ is given, the + compiler will assume that any occurrence of a variable other than in an + explicit ‘'Valid’ test always has a valid value, and the loop above will + be optimized away. + + The use of ‘Assume_No_Invalid_Values (On)’ is appropriate if you know + your code is free of uninitialized variables and other possible sources + of invalid representations, and may result in more efficient code. A + program that accesses an invalid representation with this pragma in + effect is erroneous, so no guarantees can be made about its behavior. + + It is peculiar though permissible to use this pragma in conjunction with + validity checking (-gnatVa). In such cases, accessing invalid values + will generally give an exception, though formally the program is + erroneous so there are no guarantees that this will always be the case, + and it is recommended that these two options not be used together. + +  + File: gnat_rm.info, Node: Pragma Async_Readers, Next: Pragma Async_Writers, Prev: Pragma Assume_No_Invalid_Values, Up: Implementation Defined Pragmas + + 2.17 Pragma Async_Readers + ========================= + + Syntax: + + pragma Async_Readers [ (boolean_EXPRESSION) ]; + + For the semantics of this pragma, see the entry for aspect + ‘Async_Readers’ in the SPARK 2014 Reference Manual, section 7.1.2. + +  + File: gnat_rm.info, Node: Pragma Async_Writers, Next: Pragma Attribute_Definition, Prev: Pragma Async_Readers, Up: Implementation Defined Pragmas + + 2.18 Pragma Async_Writers + ========================= + + Syntax: + + pragma Async_Writers [ (boolean_EXPRESSION) ]; + + For the semantics of this pragma, see the entry for aspect + ‘Async_Writers’ in the SPARK 2014 Reference Manual, section 7.1.2. + +  + File: gnat_rm.info, Node: Pragma Attribute_Definition, Next: Pragma C_Pass_By_Copy, Prev: Pragma Async_Writers, Up: Implementation Defined Pragmas + + 2.19 Pragma Attribute_Definition + ================================ + + Syntax: + + pragma Attribute_Definition + ([Attribute =>] ATTRIBUTE_DESIGNATOR, + [Entity =>] LOCAL_NAME, + [Expression =>] EXPRESSION | NAME); + + If ‘Attribute’ is a known attribute name, this pragma is equivalent to + the attribute definition clause: + + for Entity'Attribute use Expression; + + If ‘Attribute’ is not a recognized attribute name, the pragma is + ignored, and a warning is emitted. This allows source code to be + written that takes advantage of some new attribute, while remaining + compilable with earlier compilers. + +  + File: gnat_rm.info, Node: Pragma C_Pass_By_Copy, Next: Pragma Check, Prev: Pragma Attribute_Definition, Up: Implementation Defined Pragmas + + 2.20 Pragma C_Pass_By_Copy + ========================== + + Syntax: + + pragma C_Pass_By_Copy + ([Max_Size =>] static_integer_EXPRESSION); + + Normally the default mechanism for passing C convention records to C + convention subprograms is to pass them by reference, as suggested by RM + B.3(69). Use the configuration pragma ‘C_Pass_By_Copy’ to change this + default, by requiring that record formal parameters be passed by copy if + all of the following conditions are met: + + * The size of the record type does not exceed the value specified for + ‘Max_Size’. + + * The record type has ‘Convention C’. + + * The formal parameter has this record type, and the subprogram has a + foreign (non-Ada) convention. + + If these conditions are met the argument is passed by copy; i.e., in a + manner consistent with what C expects if the corresponding formal in the + C prototype is a struct (rather than a pointer to a struct). + + You can also pass records by copy by specifying the convention + ‘C_Pass_By_Copy’ for the record type, or by using the extended ‘Import’ + and ‘Export’ pragmas, which allow specification of passing mechanisms on + a parameter by parameter basis. + +  + File: gnat_rm.info, Node: Pragma Check, Next: Pragma Check_Float_Overflow, Prev: Pragma C_Pass_By_Copy, Up: Implementation Defined Pragmas + + 2.21 Pragma Check + ================= + + Syntax: + + pragma Check ( + [Name =>] CHECK_KIND, + [Check =>] Boolean_EXPRESSION + [, [Message =>] string_EXPRESSION] ); + + CHECK_KIND ::= IDENTIFIER | + Pre'Class | + Post'Class | + Type_Invariant'Class | + Invariant'Class + + This pragma is similar to the predefined pragma ‘Assert’ except that an + extra identifier argument is present. In conjunction with pragma + ‘Check_Policy’, this can be used to define groups of assertions that can + be independently controlled. The identifier ‘Assertion’ is special, it + refers to the normal set of pragma ‘Assert’ statements. + + Checks introduced by this pragma are normally deactivated by default. + They can be activated either by the command line option `-gnata', which + turns on all checks, or individually controlled using pragma + ‘Check_Policy’. + + The identifiers ‘Assertions’ and ‘Statement_Assertions’ are not + permitted as check kinds, since this would cause confusion with the use + of these identifiers in ‘Assertion_Policy’ and ‘Check_Policy’ pragmas, + where they are used to refer to sets of assertions. + +  + File: gnat_rm.info, Node: Pragma Check_Float_Overflow, Next: Pragma Check_Name, Prev: Pragma Check, Up: Implementation Defined Pragmas + + 2.22 Pragma Check_Float_Overflow + ================================ + + Syntax: + + pragma Check_Float_Overflow; + + In Ada, the predefined floating-point types (‘Short_Float’, ‘Float’, + ‘Long_Float’, ‘Long_Long_Float’) are defined to be `unconstrained'. + This means that even though each has a well-defined base range, an + operation that delivers a result outside this base range is not required + to raise an exception. This implementation permission accommodates the + notion of infinities in IEEE floating-point, and corresponds to the + efficient execution mode on most machines. GNAT will not raise overflow + exceptions on these machines; instead it will generate infinities and + NaN’s as defined in the IEEE standard. + + Generating infinities, although efficient, is not always desirable. + Often the preferable approach is to check for overflow, even at the + (perhaps considerable) expense of run-time performance. This can be + accomplished by defining your own constrained floating-point subtypes – + i.e., by supplying explicit range constraints – and indeed such a + subtype can have the same base range as its base type. For example: + + subtype My_Float is Float range Float'Range; + + Here ‘My_Float’ has the same range as ‘Float’ but is constrained, so + operations on ‘My_Float’ values will be checked for overflow against + this range. + + This style will achieve the desired goal, but it is often more + convenient to be able to simply use the standard predefined + floating-point types as long as overflow checking could be guaranteed. + The ‘Check_Float_Overflow’ configuration pragma achieves this effect. + If a unit is compiled subject to this configuration pragma, then all + operations on predefined floating-point types including operations on + base types of these floating-point types will be treated as though those + types were constrained, and overflow checks will be generated. The + ‘Constraint_Error’ exception is raised if the result is out of range. + + This mode can also be set by use of the compiler switch `-gnateF'. + +  + File: gnat_rm.info, Node: Pragma Check_Name, Next: Pragma Check_Policy, Prev: Pragma Check_Float_Overflow, Up: Implementation Defined Pragmas + + 2.23 Pragma Check_Name + ====================== + + Syntax: + + pragma Check_Name (check_name_IDENTIFIER); + + This is a configuration pragma that defines a new implementation defined + check name (unless IDENTIFIER matches one of the predefined check names, + in which case the pragma has no effect). Check names are global to a + partition, so if two or more configuration pragmas are present in a + partition mentioning the same name, only one new check name is + introduced. + + An implementation defined check name introduced with this pragma may be + used in only three contexts: ‘pragma Suppress’, ‘pragma Unsuppress’, and + as the prefix of a ‘Check_Name'Enabled’ attribute reference. For any of + these three cases, the check name must be visible. A check name is + visible if it is in the configuration pragmas applying to the current + unit, or if it appears at the start of any unit that is part of the + dependency set of the current unit (e.g., units that are mentioned in + ‘with’ clauses). + + Check names introduced by this pragma are subject to control by compiler + switches (in particular -gnatp) in the usual manner. + +  + File: gnat_rm.info, Node: Pragma Check_Policy, Next: Pragma Comment, Prev: Pragma Check_Name, Up: Implementation Defined Pragmas + + 2.24 Pragma Check_Policy + ======================== + + Syntax: + + pragma Check_Policy + ([Name =>] CHECK_KIND, + [Policy =>] POLICY_IDENTIFIER); + + pragma Check_Policy ( + CHECK_KIND => POLICY_IDENTIFIER + {, CHECK_KIND => POLICY_IDENTIFIER}); + + ASSERTION_KIND ::= RM_ASSERTION_KIND | ID_ASSERTION_KIND + + CHECK_KIND ::= IDENTIFIER | + Pre'Class | + Post'Class | + Type_Invariant'Class | + Invariant'Class + + The identifiers Name and Policy are not allowed as CHECK_KIND values. This + avoids confusion between the two possible syntax forms for this pragma. + + POLICY_IDENTIFIER ::= ON | OFF | CHECK | DISABLE | IGNORE + + This pragma is used to set the checking policy for assertions (specified + by aspects or pragmas), the ‘Debug’ pragma, or additional checks to be + checked using the ‘Check’ pragma. It may appear either as a + configuration pragma, or within a declarative part of package. In the + latter case, it applies from the point where it appears to the end of + the declarative region (like pragma ‘Suppress’). + + The ‘Check_Policy’ pragma is similar to the predefined + ‘Assertion_Policy’ pragma, and if the check kind corresponds to one of + the assertion kinds that are allowed by ‘Assertion_Policy’, then the + effect is identical. + + If the first argument is Debug, then the policy applies to Debug + pragmas, disabling their effect if the policy is ‘OFF’, ‘DISABLE’, or + ‘IGNORE’, and allowing them to execute with normal semantics if the + policy is ‘ON’ or ‘CHECK’. In addition if the policy is ‘DISABLE’, then + the procedure call in ‘Debug’ pragmas will be totally ignored and not + analyzed semantically. + + Finally the first argument may be some other identifier than the above + possibilities, in which case it controls a set of named assertions that + can be checked using pragma ‘Check’. For example, if the pragma: + + pragma Check_Policy (Critical_Error, OFF); + + is given, then subsequent ‘Check’ pragmas whose first argument is also + ‘Critical_Error’ will be disabled. + + The check policy is ‘OFF’ to turn off corresponding checks, and ‘ON’ to + turn on corresponding checks. The default for a set of checks for which + no ‘Check_Policy’ is given is ‘OFF’ unless the compiler switch `-gnata' + is given, which turns on all checks by default. + + The check policy settings ‘CHECK’ and ‘IGNORE’ are recognized as + synonyms for ‘ON’ and ‘OFF’. These synonyms are provided for + compatibility with the standard ‘Assertion_Policy’ pragma. The check + policy setting ‘DISABLE’ causes the second argument of a corresponding + ‘Check’ pragma to be completely ignored and not analyzed. + +  + File: gnat_rm.info, Node: Pragma Comment, Next: Pragma Common_Object, Prev: Pragma Check_Policy, Up: Implementation Defined Pragmas + + 2.25 Pragma Comment + =================== + + Syntax: + + pragma Comment (static_string_EXPRESSION); + + This is almost identical in effect to pragma ‘Ident’. It allows the + placement of a comment into the object file and hence into the + executable file if the operating system permits such usage. The + difference is that ‘Comment’, unlike ‘Ident’, has no limitations on + placement of the pragma (it can be placed anywhere in the main source + unit), and if more than one pragma is used, all comments are retained. + +  + File: gnat_rm.info, Node: Pragma Common_Object, Next: Pragma Compile_Time_Error, Prev: Pragma Comment, Up: Implementation Defined Pragmas + + 2.26 Pragma Common_Object + ========================= + + Syntax: + + pragma Common_Object ( + [Internal =>] LOCAL_NAME + [, [External =>] EXTERNAL_SYMBOL] + [, [Size =>] EXTERNAL_SYMBOL] ); + + EXTERNAL_SYMBOL ::= + IDENTIFIER + | static_string_EXPRESSION + + This pragma enables the shared use of variables stored in overlaid + linker areas corresponding to the use of ‘COMMON’ in Fortran. The + single object ‘LOCAL_NAME’ is assigned to the area designated by the + ‘External’ argument. You may define a record to correspond to a series + of fields. The ‘Size’ argument is syntax checked in GNAT, but otherwise + ignored. + + ‘Common_Object’ is not supported on all platforms. If no support is + available, then the code generator will issue a message indicating that + the necessary attribute for implementation of this pragma is not + available. + +  + File: gnat_rm.info, Node: Pragma Compile_Time_Error, Next: Pragma Compile_Time_Warning, Prev: Pragma Common_Object, Up: Implementation Defined Pragmas + + 2.27 Pragma Compile_Time_Error + ============================== + + Syntax: + + pragma Compile_Time_Error + (boolean_EXPRESSION, static_string_EXPRESSION); + + This pragma can be used to generate additional compile time error + messages. It is particularly useful in generics, where errors can be + issued for specific problematic instantiations. The first parameter is + a boolean expression. The pragma ensures that the value of an + expression is known at compile time, and has the value False. The set + of expressions whose values are known at compile time includes all + static boolean expressions, and also other values which the compiler can + determine at compile time (e.g., the size of a record type set by an + explicit size representation clause, or the value of a variable which + was initialized to a constant and is known not to have been modified). + If these conditions are not met, an error message is generated using the + value given as the second argument. This string value may contain + embedded ASCII.LF characters to break the message into multiple lines. + +  + File: gnat_rm.info, Node: Pragma Compile_Time_Warning, Next: Pragma Complete_Representation, Prev: Pragma Compile_Time_Error, Up: Implementation Defined Pragmas + + 2.28 Pragma Compile_Time_Warning + ================================ + + Syntax: + + pragma Compile_Time_Warning + (boolean_EXPRESSION, static_string_EXPRESSION); + + Same as pragma Compile_Time_Error, except a warning is issued instead of + an error message. If switch `-gnatw_C' is used, a warning is only + issued if the value of the expression is known to be True at compile + time, not when the value of the expression is not known at compile time. + Note that if this pragma is used in a package that is with’ed by a + client, the client will get the warning even though it is issued by a + with’ed package (normally warnings in with’ed units are suppressed, but + this is a special exception to that rule). + + One typical use is within a generic where compile time known + characteristics of formal parameters are tested, and warnings given + appropriately. Another use with a first parameter of True is to warn a + client about use of a package, for example that it is not fully + implemented. + + In previous versions of the compiler, combining `-gnatwe' with + Compile_Time_Warning resulted in a fatal error. Now the compiler always + emits a warning. You can use *note Pragma Compile_Time_Error: 3a. to + force the generation of an error. + +  + File: gnat_rm.info, Node: Pragma Complete_Representation, Next: Pragma Complex_Representation, Prev: Pragma Compile_Time_Warning, Up: Implementation Defined Pragmas + + 2.29 Pragma Complete_Representation + =================================== + + Syntax: + + pragma Complete_Representation; + + This pragma must appear immediately within a record representation + clause. Typical placements are before the first component clause or + after the last component clause. The effect is to give an error message + if any component is missing a component clause. This pragma may be used + to ensure that a record representation clause is complete, and that this + invariant is maintained if fields are added to the record in the future. + +  + File: gnat_rm.info, Node: Pragma Complex_Representation, Next: Pragma Component_Alignment, Prev: Pragma Complete_Representation, Up: Implementation Defined Pragmas + + 2.30 Pragma Complex_Representation + ================================== + + Syntax: + + pragma Complex_Representation + ([Entity =>] LOCAL_NAME); + + The ‘Entity’ argument must be the name of a record type which has two + fields of the same floating-point type. The effect of this pragma is to + force gcc to use the special internal complex representation form for + this record, which may be more efficient. Note that this may result in + the code for this type not conforming to standard ABI (application + binary interface) requirements for the handling of record types. For + example, in some environments, there is a requirement for passing + records by pointer, and the use of this pragma may result in passing + this type in floating-point registers. + +  + File: gnat_rm.info, Node: Pragma Component_Alignment, Next: Pragma Constant_After_Elaboration, Prev: Pragma Complex_Representation, Up: Implementation Defined Pragmas + + 2.31 Pragma Component_Alignment + =============================== + + Syntax: + + pragma Component_Alignment ( + [Form =>] ALIGNMENT_CHOICE + [, [Name =>] type_LOCAL_NAME]); + + ALIGNMENT_CHOICE ::= + Component_Size + | Component_Size_4 + | Storage_Unit + | Default + + Specifies the alignment of components in array or record types. The + meaning of the ‘Form’ argument is as follows: + + `Component_Size' + + Aligns scalar components and subcomponents of the array or record + type on boundaries appropriate to their inherent size (naturally + aligned). For example, 1-byte components are aligned on byte + boundaries, 2-byte integer components are aligned on 2-byte + boundaries, 4-byte integer components are aligned on 4-byte + boundaries and so on. These alignment rules correspond to the + normal rules for C compilers on all machines except the VAX. + + `Component_Size_4' + + Naturally aligns components with a size of four or fewer bytes. + Components that are larger than 4 bytes are placed on the next + 4-byte boundary. + + `Storage_Unit' + + Specifies that array or record components are byte aligned, i.e., + aligned on boundaries determined by the value of the constant + ‘System.Storage_Unit’. + + `Default' + + Specifies that array or record components are aligned on default + boundaries, appropriate to the underlying hardware or operating + system or both. The ‘Default’ choice is the same as + ‘Component_Size’ (natural alignment). + + If the ‘Name’ parameter is present, ‘type_LOCAL_NAME’ must refer to a + local record or array type, and the specified alignment choice applies + to the specified type. The use of ‘Component_Alignment’ together with a + pragma ‘Pack’ causes the ‘Component_Alignment’ pragma to be ignored. + The use of ‘Component_Alignment’ together with a record representation + clause is only effective for fields not specified by the representation + clause. + + If the ‘Name’ parameter is absent, the pragma can be used as either a + configuration pragma, in which case it applies to one or more units in + accordance with the normal rules for configuration pragmas, or it can be + used within a declarative part, in which case it applies to types that + are declared within this declarative part, or within any nested scope + within this declarative part. In either case it specifies the alignment + to be applied to any record or array type which has otherwise standard + representation. + + If the alignment for a record or array type is not specified (using + pragma ‘Pack’, pragma ‘Component_Alignment’, or a record rep clause), + the GNAT uses the default alignment as described previously. + +  + File: gnat_rm.info, Node: Pragma Constant_After_Elaboration, Next: Pragma Contract_Cases, Prev: Pragma Component_Alignment, Up: Implementation Defined Pragmas + + 2.32 Pragma Constant_After_Elaboration + ====================================== + + Syntax: + + pragma Constant_After_Elaboration [ (boolean_EXPRESSION) ]; + + For the semantics of this pragma, see the entry for aspect + ‘Constant_After_Elaboration’ in the SPARK 2014 Reference Manual, section + 3.3.1. + +  + File: gnat_rm.info, Node: Pragma Contract_Cases, Next: Pragma Convention_Identifier, Prev: Pragma Constant_After_Elaboration, Up: Implementation Defined Pragmas + + 2.33 Pragma Contract_Cases + ========================== + + Syntax: + + pragma Contract_Cases ((CONTRACT_CASE {, CONTRACT_CASE)); + + CONTRACT_CASE ::= CASE_GUARD => CONSEQUENCE + + CASE_GUARD ::= boolean_EXPRESSION | others + + CONSEQUENCE ::= boolean_EXPRESSION + + The ‘Contract_Cases’ pragma allows defining fine-grain specifications + that can complement or replace the contract given by a precondition and + a postcondition. Additionally, the ‘Contract_Cases’ pragma can be used + by testing and formal verification tools. The compiler checks its + validity and, depending on the assertion policy at the point of + declaration of the pragma, it may insert a check in the executable. For + code generation, the contract cases + + pragma Contract_Cases ( + Cond1 => Pred1, + Cond2 => Pred2); + + are equivalent to + + C1 : constant Boolean := Cond1; -- evaluated at subprogram entry + C2 : constant Boolean := Cond2; -- evaluated at subprogram entry + pragma Precondition ((C1 and not C2) or (C2 and not C1)); + pragma Postcondition (if C1 then Pred1); + pragma Postcondition (if C2 then Pred2); + + The precondition ensures that one and only one of the case guards is + satisfied on entry to the subprogram. The postcondition ensures that + for the case guard that was True on entry, the corresponding consequence + is True on exit. Other consequence expressions are not evaluated. + + A precondition ‘P’ and postcondition ‘Q’ can also be expressed as + contract cases: + + pragma Contract_Cases (P => Q); + + The placement and visibility rules for ‘Contract_Cases’ pragmas are + identical to those described for preconditions and postconditions. + + The compiler checks that boolean expressions given in case guards and + consequences are valid, where the rules for case guards are the same as + the rule for an expression in ‘Precondition’ and the rules for + consequences are the same as the rule for an expression in + ‘Postcondition’. In particular, attributes ‘'Old’ and ‘'Result’ can + only be used within consequence expressions. The case guard for the + last contract case may be ‘others’, to denote any case not captured by + the previous cases. The following is an example of use within a package + spec: + + package Math_Functions is + ... + function Sqrt (Arg : Float) return Float; + pragma Contract_Cases (((Arg in 0.0 .. 99.0) => Sqrt'Result < 10.0, + Arg >= 100.0 => Sqrt'Result >= 10.0, + others => Sqrt'Result = 0.0)); + ... + end Math_Functions; + + The meaning of contract cases is that only one case should apply at each + call, as determined by the corresponding case guard evaluating to True, + and that the consequence for this case should hold when the subprogram + returns. + +  + File: gnat_rm.info, Node: Pragma Convention_Identifier, Next: Pragma CPP_Class, Prev: Pragma Contract_Cases, Up: Implementation Defined Pragmas + + 2.34 Pragma Convention_Identifier + ================================= + + Syntax: + + pragma Convention_Identifier ( + [Name =>] IDENTIFIER, + [Convention =>] convention_IDENTIFIER); + + This pragma provides a mechanism for supplying synonyms for existing + convention identifiers. The ‘Name’ identifier can subsequently be used + as a synonym for the given convention in other pragmas (including for + example pragma ‘Import’ or another ‘Convention_Identifier’ pragma). As + an example of the use of this, suppose you had legacy code which used + Fortran77 as the identifier for Fortran. Then the pragma: + + pragma Convention_Identifier (Fortran77, Fortran); + + would allow the use of the convention identifier ‘Fortran77’ in + subsequent code, avoiding the need to modify the sources. As another + example, you could use this to parameterize convention requirements + according to systems. Suppose you needed to use ‘Stdcall’ on windows + systems, and ‘C’ on some other system, then you could define a + convention identifier ‘Library’ and use a single ‘Convention_Identifier’ + pragma to specify which convention would be used system-wide. + +  + File: gnat_rm.info, Node: Pragma CPP_Class, Next: Pragma CPP_Constructor, Prev: Pragma Convention_Identifier, Up: Implementation Defined Pragmas + + 2.35 Pragma CPP_Class + ===================== + + Syntax: + + pragma CPP_Class ([Entity =>] LOCAL_NAME); + + The argument denotes an entity in the current declarative region that is + declared as a record type. It indicates that the type corresponds to an + externally declared C++ class type, and is to be laid out the same way + that C++ would lay out the type. If the C++ class has virtual + primitives then the record must be declared as a tagged record type. + + Types for which ‘CPP_Class’ is specified do not have assignment or + equality operators defined (such operations can be imported or declared + as subprograms as required). Initialization is allowed only by + constructor functions (see pragma ‘CPP_Constructor’). Such types are + implicitly limited if not explicitly declared as limited or derived from + a limited type, and an error is issued in that case. + + See *note Interfacing to C++: 46. for related information. + + Note: Pragma ‘CPP_Class’ is currently obsolete. It is supported for + backward compatibility but its functionality is available using pragma + ‘Import’ with ‘Convention’ = ‘CPP’. + +  + File: gnat_rm.info, Node: Pragma CPP_Constructor, Next: Pragma CPP_Virtual, Prev: Pragma CPP_Class, Up: Implementation Defined Pragmas + + 2.36 Pragma CPP_Constructor + =========================== + + Syntax: + + pragma CPP_Constructor ([Entity =>] LOCAL_NAME + [, [External_Name =>] static_string_EXPRESSION ] + [, [Link_Name =>] static_string_EXPRESSION ]); + + This pragma identifies an imported function (imported in the usual way + with pragma ‘Import’) as corresponding to a C++ constructor. If + ‘External_Name’ and ‘Link_Name’ are not specified then the ‘Entity’ + argument is a name that must have been previously mentioned in a pragma + ‘Import’ with ‘Convention’ = ‘CPP’. Such name must be of one of the + following forms: + + * `function' ‘Fname’ `return' T‘ + + * `function' ‘Fname’ `return' T’Class + + * `function' ‘Fname’ (…) `return' T‘ + + * `function' ‘Fname’ (…) `return' T’Class + + where ‘T’ is a limited record type imported from C++ with pragma + ‘Import’ and ‘Convention’ = ‘CPP’. + + The first two forms import the default constructor, used when an object + of type ‘T’ is created on the Ada side with no explicit constructor. + The latter two forms cover all the non-default constructors of the type. + See the GNAT User’s Guide for details. + + If no constructors are imported, it is impossible to create any objects + on the Ada side and the type is implicitly declared abstract. + + Pragma ‘CPP_Constructor’ is intended primarily for automatic generation + using an automatic binding generator tool (such as the ‘-fdump-ada-spec’ + GCC switch). See *note Interfacing to C++: 46. for more related + information. + + Note: The use of functions returning class-wide types for constructors + is currently obsolete. They are supported for backward compatibility. + The use of functions returning the type T leave the Ada sources more + clear because the imported C++ constructors always return an object of + type T; that is, they never return an object whose type is a descendant + of type T. + +  + File: gnat_rm.info, Node: Pragma CPP_Virtual, Next: Pragma CPP_Vtable, Prev: Pragma CPP_Constructor, Up: Implementation Defined Pragmas + + 2.37 Pragma CPP_Virtual + ======================= + + This pragma is now obsolete and, other than generating a warning if + warnings on obsolescent features are enabled, is completely ignored. It + is retained for compatibility purposes. It used to be required to + ensure compoatibility with C++, but is no longer required for that + purpose because GNAT generates the same object layout as the G++ + compiler by default. + + See *note Interfacing to C++: 46. for related information. + +  + File: gnat_rm.info, Node: Pragma CPP_Vtable, Next: Pragma CPU, Prev: Pragma CPP_Virtual, Up: Implementation Defined Pragmas + + 2.38 Pragma CPP_Vtable + ====================== + + This pragma is now obsolete and, other than generating a warning if + warnings on obsolescent features are enabled, is completely ignored. It + used to be required to ensure compatibility with C++, but is no longer + required for that purpose because GNAT generates the same object layout + as the G++ compiler by default. + + See *note Interfacing to C++: 46. for related information. + +  + File: gnat_rm.info, Node: Pragma CPU, Next: Pragma Deadline_Floor, Prev: Pragma CPP_Vtable, Up: Implementation Defined Pragmas + + 2.39 Pragma CPU + =============== + + Syntax: + + pragma CPU (EXPRESSION); + + This pragma is standard in Ada 2012, but is available in all earlier + versions of Ada as an implementation-defined pragma. See Ada 2012 + Reference Manual for details. + +  + File: gnat_rm.info, Node: Pragma Deadline_Floor, Next: Pragma Default_Initial_Condition, Prev: Pragma CPU, Up: Implementation Defined Pragmas + + 2.40 Pragma Deadline_Floor + ========================== + + Syntax: + + pragma Deadline_Floor (time_span_EXPRESSION); + + This pragma applies only to protected types and specifies the floor + deadline inherited by a task when the task enters a protected object. + It is effective only when the EDF scheduling policy is used. + +  + File: gnat_rm.info, Node: Pragma Default_Initial_Condition, Next: Pragma Debug, Prev: Pragma Deadline_Floor, Up: Implementation Defined Pragmas + + 2.41 Pragma Default_Initial_Condition + ===================================== + + Syntax: + + pragma Default_Initial_Condition [ (null | boolean_EXPRESSION) ]; + + For the semantics of this pragma, see the entry for aspect + ‘Default_Initial_Condition’ in the SPARK 2014 Reference Manual, section + 7.3.3. + +  + File: gnat_rm.info, Node: Pragma Debug, Next: Pragma Debug_Policy, Prev: Pragma Default_Initial_Condition, Up: Implementation Defined Pragmas + + 2.42 Pragma Debug + ================= + + Syntax: + + pragma Debug ([CONDITION, ]PROCEDURE_CALL_WITHOUT_SEMICOLON); + + PROCEDURE_CALL_WITHOUT_SEMICOLON ::= + PROCEDURE_NAME + | PROCEDURE_PREFIX ACTUAL_PARAMETER_PART + + The procedure call argument has the syntactic form of an expression, + meeting the syntactic requirements for pragmas. + + If debug pragmas are not enabled or if the condition is present and + evaluates to False, this pragma has no effect. If debug pragmas are + enabled, the semantics of the pragma is exactly equivalent to the + procedure call statement corresponding to the argument with a + terminating semicolon. Pragmas are permitted in sequences of + declarations, so you can use pragma ‘Debug’ to intersperse calls to + debug procedures in the middle of declarations. Debug pragmas can be + enabled either by use of the command line switch `-gnata' or by use of + the pragma ‘Check_Policy’ with a first argument of ‘Debug’. + +  + File: gnat_rm.info, Node: Pragma Debug_Policy, Next: Pragma Default_Scalar_Storage_Order, Prev: Pragma Debug, Up: Implementation Defined Pragmas + + 2.43 Pragma Debug_Policy + ======================== + + Syntax: + + pragma Debug_Policy (CHECK | DISABLE | IGNORE | ON | OFF); + + This pragma is equivalent to a corresponding ‘Check_Policy’ pragma with + a first argument of ‘Debug’. It is retained for historical + compatibility reasons. + +  + File: gnat_rm.info, Node: Pragma Default_Scalar_Storage_Order, Next: Pragma Default_Storage_Pool, Prev: Pragma Debug_Policy, Up: Implementation Defined Pragmas + + 2.44 Pragma Default_Scalar_Storage_Order + ======================================== + + Syntax: + + pragma Default_Scalar_Storage_Order (High_Order_First | Low_Order_First); + + Normally if no explicit ‘Scalar_Storage_Order’ is given for a record + type or array type, then the scalar storage order defaults to the + ordinary default for the target. But this default may be overridden + using this pragma. The pragma may appear as a configuration pragma, or + locally within a package spec or declarative part. In the latter case, + it applies to all subsequent types declared within that package spec or + declarative part. + + The following example shows the use of this pragma: + + pragma Default_Scalar_Storage_Order (High_Order_First); + with System; use System; + package DSSO1 is + type H1 is record + a : Integer; + end record; + + type L2 is record + a : Integer; + end record; + for L2'Scalar_Storage_Order use Low_Order_First; + + type L2a is new L2; + + package Inner is + type H3 is record + a : Integer; + end record; + + pragma Default_Scalar_Storage_Order (Low_Order_First); + + type L4 is record + a : Integer; + end record; + end Inner; + + type H4a is new Inner.L4; + + type H5 is record + a : Integer; + end record; + end DSSO1; + + In this example record types with names starting with `L' have + ‘Low_Order_First’ scalar storage order, and record types with names + starting with `H' have ‘High_Order_First’. Note that in the case of + ‘H4a’, the order is not inherited from the parent type. Only an + explicitly set ‘Scalar_Storage_Order’ gets inherited on type derivation. + + If this pragma is used as a configuration pragma which appears within a + configuration pragma file (as opposed to appearing explicitly at the + start of a single unit), then the binder will require that all units in + a partition be compiled in a similar manner, other than run-time units, + which are not affected by this pragma. Note that the use of this form + is discouraged because it may significantly degrade the run-time + performance of the software, instead the default scalar storage order + ought to be changed only on a local basis. + +  + File: gnat_rm.info, Node: Pragma Default_Storage_Pool, Next: Pragma Depends, Prev: Pragma Default_Scalar_Storage_Order, Up: Implementation Defined Pragmas + + 2.45 Pragma Default_Storage_Pool + ================================ + + Syntax: + + pragma Default_Storage_Pool (storage_pool_NAME | null); + + This pragma is standard in Ada 2012, but is available in all earlier + versions of Ada as an implementation-defined pragma. See Ada 2012 + Reference Manual for details. + +  + File: gnat_rm.info, Node: Pragma Depends, Next: Pragma Detect_Blocking, Prev: Pragma Default_Storage_Pool, Up: Implementation Defined Pragmas + + 2.46 Pragma Depends + =================== + + Syntax: + + pragma Depends (DEPENDENCY_RELATION); + + DEPENDENCY_RELATION ::= + null + | (DEPENDENCY_CLAUSE {, DEPENDENCY_CLAUSE}) + + DEPENDENCY_CLAUSE ::= + OUTPUT_LIST =>[+] INPUT_LIST + | NULL_DEPENDENCY_CLAUSE + + NULL_DEPENDENCY_CLAUSE ::= null => INPUT_LIST + + OUTPUT_LIST ::= OUTPUT | (OUTPUT {, OUTPUT}) + + INPUT_LIST ::= null | INPUT | (INPUT {, INPUT}) + + OUTPUT ::= NAME | FUNCTION_RESULT + INPUT ::= NAME + + where FUNCTION_RESULT is a function Result attribute_reference + + For the semantics of this pragma, see the entry for aspect ‘Depends’ in + the SPARK 2014 Reference Manual, section 6.1.5. + +  + File: gnat_rm.info, Node: Pragma Detect_Blocking, Next: Pragma Disable_Atomic_Synchronization, Prev: Pragma Depends, Up: Implementation Defined Pragmas + + 2.47 Pragma Detect_Blocking + =========================== + + Syntax: + + pragma Detect_Blocking; + + This is a standard pragma in Ada 2005, that is available in all earlier + versions of Ada as an implementation-defined pragma. + + This is a configuration pragma that forces the detection of potentially + blocking operations within a protected operation, and to raise + Program_Error if that happens. + +  + File: gnat_rm.info, Node: Pragma Disable_Atomic_Synchronization, Next: Pragma Dispatching_Domain, Prev: Pragma Detect_Blocking, Up: Implementation Defined Pragmas + + 2.48 Pragma Disable_Atomic_Synchronization + ========================================== + + Syntax: + + pragma Disable_Atomic_Synchronization [(Entity)]; + + Ada requires that accesses (reads or writes) of an atomic variable be + regarded as synchronization points in the case of multiple tasks. + Particularly in the case of multi-processors this may require special + handling, e.g. the generation of memory barriers. This capability may + be turned off using this pragma in cases where it is known not to be + required. + + The placement and scope rules for this pragma are the same as those for + ‘pragma Suppress’. In particular it can be used as a configuration + pragma, or in a declaration sequence where it applies till the end of + the scope. If an ‘Entity’ argument is present, the action applies only + to that entity. + +  + File: gnat_rm.info, Node: Pragma Dispatching_Domain, Next: Pragma Effective_Reads, Prev: Pragma Disable_Atomic_Synchronization, Up: Implementation Defined Pragmas + + 2.49 Pragma Dispatching_Domain + ============================== + + Syntax: + + pragma Dispatching_Domain (EXPRESSION); + + This pragma is standard in Ada 2012, but is available in all earlier + versions of Ada as an implementation-defined pragma. See Ada 2012 + Reference Manual for details. + +  + File: gnat_rm.info, Node: Pragma Effective_Reads, Next: Pragma Effective_Writes, Prev: Pragma Dispatching_Domain, Up: Implementation Defined Pragmas + + 2.50 Pragma Effective_Reads + =========================== + + Syntax: + + pragma Effective_Reads [ (boolean_EXPRESSION) ]; + + For the semantics of this pragma, see the entry for aspect + ‘Effective_Reads’ in the SPARK 2014 Reference Manual, section 7.1.2. + +  + File: gnat_rm.info, Node: Pragma Effective_Writes, Next: Pragma Elaboration_Checks, Prev: Pragma Effective_Reads, Up: Implementation Defined Pragmas + + 2.51 Pragma Effective_Writes + ============================ + + Syntax: + + pragma Effective_Writes [ (boolean_EXPRESSION) ]; + + For the semantics of this pragma, see the entry for aspect + ‘Effective_Writes’ in the SPARK 2014 Reference Manual, section 7.1.2. + +  + File: gnat_rm.info, Node: Pragma Elaboration_Checks, Next: Pragma Eliminate, Prev: Pragma Effective_Writes, Up: Implementation Defined Pragmas + + 2.52 Pragma Elaboration_Checks + ============================== + + Syntax: + + pragma Elaboration_Checks (Dynamic | Static); + + This is a configuration pragma which specifies the elaboration model to + be used during compilation. For more information on the elaboration + models of GNAT, consult the chapter on elaboration order handling in the + `GNAT User’s Guide'. + + The pragma may appear in the following contexts: + + * Configuration pragmas file + + * Prior to the context clauses of a compilation unit’s initial + declaration + + Any other placement of the pragma will result in a warning and the + effects of the offending pragma will be ignored. + + If the pragma argument is ‘Dynamic’, then the dynamic elaboration model + is in effect. If the pragma argument is ‘Static’, then the static + elaboration model is in effect. + +  + File: gnat_rm.info, Node: Pragma Eliminate, Next: Pragma Enable_Atomic_Synchronization, Prev: Pragma Elaboration_Checks, Up: Implementation Defined Pragmas + + 2.53 Pragma Eliminate + ===================== + + Syntax: + + pragma Eliminate ( + [ Unit_Name => ] IDENTIFIER | SELECTED_COMPONENT , + [ Entity => ] IDENTIFIER | + SELECTED_COMPONENT | + STRING_LITERAL + [, Source_Location => SOURCE_TRACE ] ); + + SOURCE_TRACE ::= STRING_LITERAL + + This pragma indicates that the given entity is not used in the program + to be compiled and built, thus allowing the compiler to eliminate the + code or data associated with the named entity. Any reference to an + eliminated entity causes a compile-time or link-time error. + + The pragma has the following semantics, where ‘U’ is the unit specified + by the ‘Unit_Name’ argument and ‘E’ is the entity specified by the + ‘Entity’ argument: + + * ‘E’ must be a subprogram that is explicitly declared either: + + o Within ‘U’, or + + o Within a generic package that is instantiated in ‘U’, or + + o As an instance of generic subprogram instantiated in ‘U’. + + Otherwise the pragma is ignored. + + * If ‘E’ is overloaded within ‘U’ then, in the absence of a + ‘Source_Location’ argument, all overloadings are eliminated. + + * If ‘E’ is overloaded within ‘U’ and only some overloadings are to + be eliminated, then each overloading to be eliminated must be + specified in a corresponding pragma ‘Eliminate’ with a + ‘Source_Location’ argument identifying the line where the + declaration appears, as described below. + + * If ‘E’ is declared as the result of a generic instantiation, then a + ‘Source_Location’ argument is needed, as described below + + Pragma ‘Eliminate’ allows a program to be compiled in a + system-independent manner, so that unused entities are eliminated but + without needing to modify the source text. Normally the required set of + ‘Eliminate’ pragmas is constructed automatically using the ‘gnatelim’ + tool. + + Any source file change that removes, splits, or adds lines may make the + set of ‘Eliminate’ pragmas invalid because their ‘Source_Location’ + argument values may get out of date. + + Pragma ‘Eliminate’ may be used where the referenced entity is a + dispatching operation. In this case all the subprograms to which the + given operation can dispatch are considered to be unused (are never + called as a result of a direct or a dispatching call). + + The string literal given for the source location specifies the line + number of the declaration of the entity, using the following syntax for + ‘SOURCE_TRACE’: + + SOURCE_TRACE ::= SOURCE_REFERENCE [ LBRACKET SOURCE_TRACE RBRACKET ] + + LBRACKET ::= '[' + RBRACKET ::= ']' + + SOURCE_REFERENCE ::= FILE_NAME : LINE_NUMBER + + LINE_NUMBER ::= DIGIT {DIGIT} + + Spaces around the colon in a ‘SOURCE_REFERENCE’ are optional. + + The source trace that is given as the ‘Source_Location’ must obey the + following rules (or else the pragma is ignored), where ‘U’ is the unit + ‘U’ specified by the ‘Unit_Name’ argument and ‘E’ is the subprogram + specified by the ‘Entity’ argument: + + * ‘FILE_NAME’ is the short name (with no directory information) of + the Ada source file for ‘U’, using the required syntax for the + underlying file system (e.g. case is significant if the underlying + operating system is case sensitive). If ‘U’ is a package and ‘E’ + is a subprogram declared in the package specification and its full + declaration appears in the package body, then the relevant source + file is the one for the package specification; analogously if ‘U’ + is a generic package. + + * If ‘E’ is not declared in a generic instantiation (this includes + generic subprogram instances), the source trace includes only one + source line reference. ‘LINE_NUMBER’ gives the line number of the + occurrence of the declaration of ‘E’ within the source file (as a + decimal literal without an exponent or point). + + * If ‘E’ is declared by a generic instantiation, its source trace + (from left to right) starts with the source location of the + declaration of ‘E’ in the generic unit and ends with the source + location of the instantiation, given in square brackets. This + approach is applied recursively with nested instantiations: the + rightmost (nested most deeply in square brackets) element of the + source trace is the location of the outermost instantiation, and + the leftmost element (that is, outside of any square brackets) is + the location of the declaration of ‘E’ in the generic unit. + + Examples: + + pragma Eliminate (Pkg0, Proc); + -- Eliminate (all overloadings of) Proc in Pkg0 + + pragma Eliminate (Pkg1, Proc, + Source_Location => "pkg1.ads:8"); + -- Eliminate overloading of Proc at line 8 in pkg1.ads + + -- Assume the following file contents: + -- gen_pkg.ads + -- 1: generic + -- 2: type T is private; + -- 3: package Gen_Pkg is + -- 4: procedure Proc(N : T); + -- ... ... + -- ... end Gen_Pkg; + -- + -- q.adb + -- 1: with Gen_Pkg; + -- 2: procedure Q is + -- 3: package Inst_Pkg is new Gen_Pkg(Integer); + -- ... -- No calls on Inst_Pkg.Proc + -- ... end Q; + + -- The following pragma eliminates Inst_Pkg.Proc from Q + pragma Eliminate (Q, Proc, + Source_Location => "gen_pkg.ads:4[q.adb:3]"); + +  + File: gnat_rm.info, Node: Pragma Enable_Atomic_Synchronization, Next: Pragma Export_Function, Prev: Pragma Eliminate, Up: Implementation Defined Pragmas + + 2.54 Pragma Enable_Atomic_Synchronization + ========================================= + + Syntax: + + pragma Enable_Atomic_Synchronization [(Entity)]; + + Ada requires that accesses (reads or writes) of an atomic variable be + regarded as synchronization points in the case of multiple tasks. + Particularly in the case of multi-processors this may require special + handling, e.g. the generation of memory barriers. This synchronization + is performed by default, but can be turned off using ‘pragma + Disable_Atomic_Synchronization’. The ‘Enable_Atomic_Synchronization’ + pragma can be used to turn it back on. + + The placement and scope rules for this pragma are the same as those for + ‘pragma Unsuppress’. In particular it can be used as a configuration + pragma, or in a declaration sequence where it applies till the end of + the scope. If an ‘Entity’ argument is present, the action applies only + to that entity. + +  + File: gnat_rm.info, Node: Pragma Export_Function, Next: Pragma Export_Object, Prev: Pragma Enable_Atomic_Synchronization, Up: Implementation Defined Pragmas + + 2.55 Pragma Export_Function + =========================== + + Syntax: + + pragma Export_Function ( + [Internal =>] LOCAL_NAME + [, [External =>] EXTERNAL_SYMBOL] + [, [Parameter_Types =>] PARAMETER_TYPES] + [, [Result_Type =>] result_SUBTYPE_MARK] + [, [Mechanism =>] MECHANISM] + [, [Result_Mechanism =>] MECHANISM_NAME]); + + EXTERNAL_SYMBOL ::= + IDENTIFIER + | static_string_EXPRESSION + | "" + + PARAMETER_TYPES ::= + null + | TYPE_DESIGNATOR {, TYPE_DESIGNATOR} + + TYPE_DESIGNATOR ::= + subtype_NAME + | subtype_Name ' Access + + MECHANISM ::= + MECHANISM_NAME + | (MECHANISM_ASSOCIATION {, MECHANISM_ASSOCIATION}) + + MECHANISM_ASSOCIATION ::= + [formal_parameter_NAME =>] MECHANISM_NAME + + MECHANISM_NAME ::= Value | Reference + + Use this pragma to make a function externally callable and optionally + provide information on mechanisms to be used for passing parameter and + result values. We recommend, for the purposes of improving portability, + this pragma always be used in conjunction with a separate pragma + ‘Export’, which must precede the pragma ‘Export_Function’. GNAT does + not require a separate pragma ‘Export’, but if none is present, + ‘Convention Ada’ is assumed, which is usually not what is wanted, so it + is usually appropriate to use this pragma in conjunction with a ‘Export’ + or ‘Convention’ pragma that specifies the desired foreign convention. + Pragma ‘Export_Function’ (and ‘Export’, if present) must appear in the + same declarative region as the function to which they apply. + + The ‘internal_name’ must uniquely designate the function to which the + pragma applies. If more than one function name exists of this name in + the declarative part you must use the ‘Parameter_Types’ and + ‘Result_Type’ parameters to achieve the required unique designation. + The ‘subtype_mark’s in these parameters must exactly match the subtypes + in the corresponding function specification, using positional notation + to match parameters with subtype marks. The form with an ‘'Access’ + attribute can be used to match an anonymous access parameter. + + Special treatment is given if the EXTERNAL is an explicit null string or + a static string expressions that evaluates to the null string. In this + case, no external name is generated. This form still allows the + specification of parameter mechanisms. + +  + File: gnat_rm.info, Node: Pragma Export_Object, Next: Pragma Export_Procedure, Prev: Pragma Export_Function, Up: Implementation Defined Pragmas + + 2.56 Pragma Export_Object + ========================= + + Syntax: + + pragma Export_Object + [Internal =>] LOCAL_NAME + [, [External =>] EXTERNAL_SYMBOL] + [, [Size =>] EXTERNAL_SYMBOL] + + EXTERNAL_SYMBOL ::= + IDENTIFIER + | static_string_EXPRESSION + + This pragma designates an object as exported, and apart from the + extended rules for external symbols, is identical in effect to the use + of the normal ‘Export’ pragma applied to an object. You may use a + separate Export pragma (and you probably should from the point of view + of portability), but it is not required. ‘Size’ is syntax checked, but + otherwise ignored by GNAT. + +  + File: gnat_rm.info, Node: Pragma Export_Procedure, Next: Pragma Export_Valued_Procedure, Prev: Pragma Export_Object, Up: Implementation Defined Pragmas + + 2.57 Pragma Export_Procedure + ============================ + + Syntax: + + pragma Export_Procedure ( + [Internal =>] LOCAL_NAME + [, [External =>] EXTERNAL_SYMBOL] + [, [Parameter_Types =>] PARAMETER_TYPES] + [, [Mechanism =>] MECHANISM]); + + EXTERNAL_SYMBOL ::= + IDENTIFIER + | static_string_EXPRESSION + | "" + + PARAMETER_TYPES ::= + null + | TYPE_DESIGNATOR {, TYPE_DESIGNATOR} + + TYPE_DESIGNATOR ::= + subtype_NAME + | subtype_Name ' Access + + MECHANISM ::= + MECHANISM_NAME + | (MECHANISM_ASSOCIATION {, MECHANISM_ASSOCIATION}) + + MECHANISM_ASSOCIATION ::= + [formal_parameter_NAME =>] MECHANISM_NAME + + MECHANISM_NAME ::= Value | Reference + + This pragma is identical to ‘Export_Function’ except that it applies to + a procedure rather than a function and the parameters ‘Result_Type’ and + ‘Result_Mechanism’ are not permitted. GNAT does not require a separate + pragma ‘Export’, but if none is present, ‘Convention Ada’ is assumed, + which is usually not what is wanted, so it is usually appropriate to use + this pragma in conjunction with a ‘Export’ or ‘Convention’ pragma that + specifies the desired foreign convention. + + Special treatment is given if the EXTERNAL is an explicit null string or + a static string expressions that evaluates to the null string. In this + case, no external name is generated. This form still allows the + specification of parameter mechanisms. + +  + File: gnat_rm.info, Node: Pragma Export_Valued_Procedure, Next: Pragma Extend_System, Prev: Pragma Export_Procedure, Up: Implementation Defined Pragmas + + 2.58 Pragma Export_Valued_Procedure + =================================== + + Syntax: + + pragma Export_Valued_Procedure ( + [Internal =>] LOCAL_NAME + [, [External =>] EXTERNAL_SYMBOL] + [, [Parameter_Types =>] PARAMETER_TYPES] + [, [Mechanism =>] MECHANISM]); + + EXTERNAL_SYMBOL ::= + IDENTIFIER + | static_string_EXPRESSION + | "" + + PARAMETER_TYPES ::= + null + | TYPE_DESIGNATOR {, TYPE_DESIGNATOR} + + TYPE_DESIGNATOR ::= + subtype_NAME + | subtype_Name ' Access + + MECHANISM ::= + MECHANISM_NAME + | (MECHANISM_ASSOCIATION {, MECHANISM_ASSOCIATION}) + + MECHANISM_ASSOCIATION ::= + [formal_parameter_NAME =>] MECHANISM_NAME + + MECHANISM_NAME ::= Value | Reference + + This pragma is identical to ‘Export_Procedure’ except that the first + parameter of ‘LOCAL_NAME’, which must be present, must be of mode ‘out’, + and externally the subprogram is treated as a function with this + parameter as the result of the function. GNAT provides for this + capability to allow the use of ‘out’ and ‘in out’ parameters in + interfacing to external functions (which are not permitted in Ada + functions). GNAT does not require a separate pragma ‘Export’, but if + none is present, ‘Convention Ada’ is assumed, which is almost certainly + not what is wanted since the whole point of this pragma is to interface + with foreign language functions, so it is usually appropriate to use + this pragma in conjunction with a ‘Export’ or ‘Convention’ pragma that + specifies the desired foreign convention. + + Special treatment is given if the EXTERNAL is an explicit null string or + a static string expressions that evaluates to the null string. In this + case, no external name is generated. This form still allows the + specification of parameter mechanisms. + +  + File: gnat_rm.info, Node: Pragma Extend_System, Next: Pragma Extensions_Allowed, Prev: Pragma Export_Valued_Procedure, Up: Implementation Defined Pragmas + + 2.59 Pragma Extend_System + ========================= + + Syntax: + + pragma Extend_System ([Name =>] IDENTIFIER); + + This pragma is used to provide backwards compatibility with other + implementations that extend the facilities of package ‘System’. In + GNAT, ‘System’ contains only the definitions that are present in the Ada + RM. However, other implementations, notably the DEC Ada 83 + implementation, provide many extensions to package ‘System’. + + For each such implementation accommodated by this pragma, GNAT provides + a package ‘Aux_`xxx'’, e.g., ‘Aux_DEC’ for the DEC Ada 83 + implementation, which provides the required additional definitions. You + can use this package in two ways. You can ‘with’ it in the normal way + and access entities either by selection or using a ‘use’ clause. In + this case no special processing is required. + + However, if existing code contains references such as ‘System.`xxx'’ + where `xxx' is an entity in the extended definitions provided in package + ‘System’, you may use this pragma to extend visibility in ‘System’ in a + non-standard way that provides greater compatibility with the existing + code. Pragma ‘Extend_System’ is a configuration pragma whose single + argument is the name of the package containing the extended definition + (e.g., ‘Aux_DEC’ for the DEC Ada case). A unit compiled under control + of this pragma will be processed using special visibility processing + that looks in package ‘System.Aux_`xxx'’ where ‘Aux_`xxx'’ is the pragma + argument for any entity referenced in package ‘System’, but not found in + package ‘System’. + + You can use this pragma either to access a predefined ‘System’ extension + supplied with the compiler, for example ‘Aux_DEC’ or you can construct + your own extension unit following the above definition. Note that such + a package is a child of ‘System’ and thus is considered part of the + implementation. To compile it you will have to use the `-gnatg' switch + for compiling System units, as explained in the GNAT User’s Guide. + +  + File: gnat_rm.info, Node: Pragma Extensions_Allowed, Next: Pragma Extensions_Visible, Prev: Pragma Extend_System, Up: Implementation Defined Pragmas + + 2.60 Pragma Extensions_Allowed + ============================== + + Syntax: + + pragma Extensions_Allowed (On | Off); + + This configuration pragma enables or disables the implementation + extension mode (the use of Off as a parameter cancels the effect of the + `-gnatX' command switch). + + In extension mode, the latest version of the Ada language is implemented + (currently Ada 2022), and in addition a number of GNAT specific + extensions are recognized as follows: + + * Constrained attribute for generic objects + + The ‘Constrained’ attribute is permitted for objects of generic + types. The result indicates if the corresponding actual is + constrained. + + * ‘Static’ aspect on intrinsic functions + + The Ada 202x ‘Static’ aspect can be specified on Intrinsic imported + functions and the compiler will evaluate some of these intrinsic + statically, in particular the ‘Shift_Left’ and ‘Shift_Right’ + intrinsics. + + * ‘'Reduce’ attribute + + This attribute part of the Ada 202x language definition is provided + for now under -gnatX to confirm and potentially refine its usage + and syntax. + + * ‘[]’ aggregates + + This new aggregate syntax for arrays and containers is provided + under -gnatX to experiment and confirm this new language syntax. + + * Additional ‘when’ constructs + + In addition to the ‘exit when CONDITION’ control structure, several + additional constructs are allowed following this format. Including + ‘return when CONDITION’, ‘goto when CONDITION’, and ‘raise [with + EXCEPTION_MESSAGE] when CONDITION.’ + + Some examples: + + return Result when Variable > 10; + + raise Program_Error with "Element is null" when Element = null; + + goto End_Of_Subprogram when Variable = -1; + + * Casing on composite values (aka pattern matching) + + The selector for a case statement may be of a composite type, + subject to some restrictions (described below). Aggregate syntax + is used for choices of such a case statement; however, in cases + where a “normal” aggregate would require a discrete value, a + discrete subtype may be used instead; box notation can also be used + to match all values. + + Consider this example: + + type Rec is record + F1, F2 : Integer; + end record; + + procedure Caser_1 (X : Rec) is + begin + case X is + when (F1 => Positive, F2 => Positive) => + Do_This; + when (F1 => Natural, F2 => <>) | (F1 => <>, F2 => Natural) => + Do_That; + when others => + Do_The_Other_Thing; + end case; + end Caser_1; + + If Caser_1 is called and both components of X are positive, then + Do_This will be called; otherwise, if either component is + nonnegative then Do_That will be called; otherwise, + Do_The_Other_Thing will be called. + + If the set of values that match the choice(s) of an earlier + alternative overlaps the corresponding set of a later alternative, + then the first set shall be a proper subset of the second (and the + later alternative will not be executed if the earlier alternative + “matches”). All possible values of the composite type shall be + covered. The composite type of the selector shall be an array or + record type that is neither limited class-wide. + + If a subcomponent’s subtype does not meet certain restrictions, + then the only value that can be specified for that subcomponent in + a case choice expression is a “box” component association (which + matches all possible values for the subcomponent). This + restriction applies if + + - the component subtype is not a record, array, or discrete + type; or + + - the component subtype is subject to a non-static constraint or + has a predicate; or + + - the component type is an enumeration type that is subject to + an enumeration representation clause; or + + - the component type is a multidimensional array type or an + array type with a nonstatic index subtype. + + Support for casing on arrays (and on records that contain arrays) + is currently subject to some restrictions. Non-positional array + aggregates are not supported as (or within) case choices. Likewise + for array type and subtype names. The current implementation + exceeds compile-time capacity limits in some annoyingly common + scenarios; the message generated in such cases is usually “Capacity + exceeded in compiling case statement with composite selector type”. + + In addition, pattern bindings are supported. This is a mechanism + for binding a name to a component of a matching value for use + within an alternative of a case statement. For a component + association that occurs within a case choice, the expression may be + followed by “is ”. In the special case of a “box” + component association, the identifier may instead be provided + within the box. Either of these indicates that the given identifer + denotes (a constant view of) the matching subcomponent of the case + selector. Binding is not yet supported for arrays or subcomponents + thereof. + + Consider this example (which uses type Rec from the previous + example): + + procedure Caser_2 (X : Rec) is + begin + case X is + when (F1 => Positive is Abc, F2 => Positive) => + Do_This (Abc) + when (F1 => Natural is N1, F2 => ) | + (F1 => , F2 => Natural is N1) => + Do_That (Param_1 => N1, Param_2 => N2); + when others => + Do_The_Other_Thing; + end case; + end Caser_2; + + This example is the same as the previous one with respect to + determining whether Do_This, Do_That, or Do_The_Other_Thing will be + called. But for this version, Do_This takes a parameter and + Do_That takes two parameters. If Do_This is called, the actual + parameter in the call will be X.F1. + + If Do_That is called, the situation is more complex because there + are two choices for that alternative. If Do_That is called because + the first choice matched (i.e., because X.F1 is nonnegative and + either X.F1 or X.F2 is zero or negative), then the actual + parameters of the call will be (in order) X.F1 and X.F2. If + Do_That is called because the second choice matched (and the first + one did not), then the actual parameters will be reversed. + + Within the choice list for single alternative, each choice must + define the same set of bindings and the component subtypes for for + a given identifer must all statically match. Currently, the case + of a binding for a nondiscrete component is not implemented. + + * Fixed lower bounds for array types and subtypes + + Unconstrained array types and subtypes can be specified with a + lower bound that is fixed to a certain value, by writing an index + range that uses the syntax “ .. <>”. This + guarantees that all objects of the type or subtype will have the + specified lower bound. + + For example, a matrix type with fixed lower bounds of zero for each + dimension can be declared by the following: + + type Matrix is + array (Natural range 0 .. <>, Natural range 0 .. <>) of Integer; + + Objects of type Matrix declared with an index constraint must have + index ranges starting at zero: + + M1 : Matrix (0 .. 9, 0 .. 19); + M2 : Matrix (2 .. 11, 3 .. 22); -- Warning about bounds; will raise CE + + Similarly, a subtype of String can be declared that specifies the + lower bound of objects of that subtype to be 1: + + subtype String_1 is String (1 .. <>); + + If a string slice is passed to a formal of subtype String_1 in a + call to a subprogram S, the slice’s bounds will “slide” so that the + lower bound is 1. Within S, the lower bound of the formal is known + to be 1, so, unlike a normal unconstrained String formal, there is + no need to worry about accounting for other possible lower-bound + values. Sliding of bounds also occurs in other contexts, such as + for object declarations with an unconstrained subtype with fixed + lower bound, as well as in subtype conversions. + + Use of this feature increases safety by simplifying code, and can + also improve the efficiency of indexing operations, since the + compiler statically knows the lower bound of unconstrained array + formals when the formal’s subtype has index ranges with static + fixed lower bounds. + + * Prefixed-view notation for calls to primitive subprograms of + untagged types + + Since Ada 2005, calls to primitive subprograms of a tagged type + that have a “prefixed view” (see RM 4.1.3(9.2)) have been allowed + to be written using the form of a selected_component, with the + first actual parameter given as the prefix and the name of the + subprogram as a selector. This prefixed-view notation for calls is + extended so as to also allow such syntax for calls to primitive + subprograms of untagged types. The primitives of an untagged type + T that have a prefixed view are those where the first formal + parameter of the subprogram either is of type T or is an anonymous + access parameter whose designated type is T. For a type that has a + component that happens to have the same simple name as one of the + type’s primitive subprograms, where the component is visible at the + point of a selected_component using that name, preference is given + to the component in a selected_component (as is currently the case + for tagged types with such component names). + + * Expression defaults for generic formal functions + + The declaration of a generic formal function is allowed to specify + an expression as a default, using the syntax of an expression + function. + + Here is an example of this feature: + + generic + type T is private; + with function Copy (Item : T) return T is (Item); -- Defaults to Item + package Stacks is + + type Stack is limited private; + + procedure Push (S : in out Stack; X : T); -- Calls Copy on X + + function Pop (S : in out Stack) return T; -- Calls Copy to return item + + private + -- ... + end Stacks; + +  + File: gnat_rm.info, Node: Pragma Extensions_Visible, Next: Pragma External, Prev: Pragma Extensions_Allowed, Up: Implementation Defined Pragmas + + 2.61 Pragma Extensions_Visible + ============================== + + Syntax: + + pragma Extensions_Visible [ (boolean_EXPRESSION) ]; + + For the semantics of this pragma, see the entry for aspect + ‘Extensions_Visible’ in the SPARK 2014 Reference Manual, section 6.1.7. + +  + File: gnat_rm.info, Node: Pragma External, Next: Pragma External_Name_Casing, Prev: Pragma Extensions_Visible, Up: Implementation Defined Pragmas + + 2.62 Pragma External + ==================== + + Syntax: + + pragma External ( + [ Convention =>] convention_IDENTIFIER, + [ Entity =>] LOCAL_NAME + [, [External_Name =>] static_string_EXPRESSION ] + [, [Link_Name =>] static_string_EXPRESSION ]); + + This pragma is identical in syntax and semantics to pragma ‘Export’ as + defined in the Ada Reference Manual. It is provided for compatibility + with some Ada 83 compilers that used this pragma for exactly the same + purposes as pragma ‘Export’ before the latter was standardized. + +  + File: gnat_rm.info, Node: Pragma External_Name_Casing, Next: Pragma Fast_Math, Prev: Pragma External, Up: Implementation Defined Pragmas + + 2.63 Pragma External_Name_Casing + ================================ + + Syntax: + + pragma External_Name_Casing ( + Uppercase | Lowercase + [, Uppercase | Lowercase | As_Is]); + + This pragma provides control over the casing of external names + associated with Import and Export pragmas. There are two cases to + consider: + + * Implicit external names + + Implicit external names are derived from identifiers. The most + common case arises when a standard Ada Import or Export pragma is + used with only two arguments, as in: + + pragma Import (C, C_Routine); + + Since Ada is a case-insensitive language, the spelling of the + identifier in the Ada source program does not provide any + information on the desired casing of the external name, and so a + convention is needed. In GNAT the default treatment is that such + names are converted to all lower case letters. This corresponds to + the normal C style in many environments. The first argument of + pragma ‘External_Name_Casing’ can be used to control this + treatment. If ‘Uppercase’ is specified, then the name will be + forced to all uppercase letters. If ‘Lowercase’ is specified, then + the normal default of all lower case letters will be used. + + This same implicit treatment is also used in the case of extended + DEC Ada 83 compatible Import and Export pragmas where an external + name is explicitly specified using an identifier rather than a + string. + + * Explicit external names + + Explicit external names are given as string literals. The most + common case arises when a standard Ada Import or Export pragma is + used with three arguments, as in: + + pragma Import (C, C_Routine, "C_routine"); + + In this case, the string literal normally provides the exact casing + required for the external name. The second argument of pragma + ‘External_Name_Casing’ may be used to modify this behavior. If + ‘Uppercase’ is specified, then the name will be forced to all + uppercase letters. If ‘Lowercase’ is specified, then the name will + be forced to all lowercase letters. A specification of ‘As_Is’ + provides the normal default behavior in which the casing is taken + from the string provided. + + This pragma may appear anywhere that a pragma is valid. In particular, + it can be used as a configuration pragma in the ‘gnat.adc’ file, in + which case it applies to all subsequent compilations, or it can be used + as a program unit pragma, in which case it only applies to the current + unit, or it can be used more locally to control individual Import/Export + pragmas. + + It was primarily intended for use with OpenVMS systems, where many + compilers convert all symbols to upper case by default. For interfacing + to such compilers (e.g., the DEC C compiler), it may be convenient to + use the pragma: + + pragma External_Name_Casing (Uppercase, Uppercase); + + to enforce the upper casing of all external symbols. + +  + File: gnat_rm.info, Node: Pragma Fast_Math, Next: Pragma Favor_Top_Level, Prev: Pragma External_Name_Casing, Up: Implementation Defined Pragmas + + 2.64 Pragma Fast_Math + ===================== + + Syntax: + + pragma Fast_Math; + + This is a configuration pragma which activates a mode in which speed is + considered more important for floating-point operations than absolutely + accurate adherence to the requirements of the standard. Currently the + following operations are affected: + + `Complex Multiplication' + + The normal simple formula for complex multiplication can result in + intermediate overflows for numbers near the end of the range. The + Ada standard requires that this situation be detected and corrected + by scaling, but in Fast_Math mode such cases will simply result in + overflow. Note that to take advantage of this you must instantiate + your own version of ‘Ada.Numerics.Generic_Complex_Types’ under + control of the pragma, rather than use the preinstantiated + versions. + +  + File: gnat_rm.info, Node: Pragma Favor_Top_Level, Next: Pragma Finalize_Storage_Only, Prev: Pragma Fast_Math, Up: Implementation Defined Pragmas + + 2.65 Pragma Favor_Top_Level + =========================== + + Syntax: + + pragma Favor_Top_Level (type_NAME); + + The argument of pragma ‘Favor_Top_Level’ must be a named + access-to-subprogram type. This pragma is an efficiency hint to the + compiler, regarding the use of ‘'Access’ or ‘'Unrestricted_Access’ on + nested (non-library-level) subprograms. The pragma means that nested + subprograms are not used with this type, or are rare, so that the + generated code should be efficient in the top-level case. When this + pragma is used, dynamically generated trampolines may be used on some + targets for nested subprograms. See restriction + ‘No_Implicit_Dynamic_Code’. + +  + File: gnat_rm.info, Node: Pragma Finalize_Storage_Only, Next: Pragma Float_Representation, Prev: Pragma Favor_Top_Level, Up: Implementation Defined Pragmas + + 2.66 Pragma Finalize_Storage_Only + ================================= + + Syntax: + + pragma Finalize_Storage_Only (first_subtype_LOCAL_NAME); + + The argument of pragma ‘Finalize_Storage_Only’ must denote a local type + which is derived from ‘Ada.Finalization.Controlled’ or + ‘Limited_Controlled’. The pragma suppresses the call to ‘Finalize’ for + declared library-level objects of the argument type. This is mostly + useful for types where finalization is only used to deal with storage + reclamation since in most environments it is not necessary to reclaim + memory just before terminating execution, hence the name. Note that + this pragma does not suppress Finalize calls for library-level + heap-allocated objects (see pragma ‘No_Heap_Finalization’). + +  + File: gnat_rm.info, Node: Pragma Float_Representation, Next: Pragma Ghost, Prev: Pragma Finalize_Storage_Only, Up: Implementation Defined Pragmas + + 2.67 Pragma Float_Representation + ================================ + + Syntax: + + pragma Float_Representation (FLOAT_REP[, float_type_LOCAL_NAME]); + + FLOAT_REP ::= VAX_Float | IEEE_Float + + In the one argument form, this pragma is a configuration pragma which + allows control over the internal representation chosen for the + predefined floating point types declared in the packages ‘Standard’ and + ‘System’. This pragma is only provided for compatibility and has no + effect. + + The two argument form specifies the representation to be used for the + specified floating-point type. The argument must be ‘IEEE_Float’ to + specify the use of IEEE format, as follows: + + * For a digits value of 6, 32-bit IEEE short format will be used. + + * For a digits value of 15, 64-bit IEEE long format will be used. + + * No other value of digits is permitted. + +  + File: gnat_rm.info, Node: Pragma Ghost, Next: Pragma Global, Prev: Pragma Float_Representation, Up: Implementation Defined Pragmas + + 2.68 Pragma Ghost + ================= + + Syntax: + + pragma Ghost [ (boolean_EXPRESSION) ]; + + For the semantics of this pragma, see the entry for aspect ‘Ghost’ in + the SPARK 2014 Reference Manual, section 6.9. + +  + File: gnat_rm.info, Node: Pragma Global, Next: Pragma Ident, Prev: Pragma Ghost, Up: Implementation Defined Pragmas + + 2.69 Pragma Global + ================== + + Syntax: + + pragma Global (GLOBAL_SPECIFICATION); + + GLOBAL_SPECIFICATION ::= + null + | (GLOBAL_LIST) + | (MODED_GLOBAL_LIST {, MODED_GLOBAL_LIST}) + + MODED_GLOBAL_LIST ::= MODE_SELECTOR => GLOBAL_LIST + + MODE_SELECTOR ::= In_Out | Input | Output | Proof_In + GLOBAL_LIST ::= GLOBAL_ITEM | (GLOBAL_ITEM {, GLOBAL_ITEM}) + GLOBAL_ITEM ::= NAME + + For the semantics of this pragma, see the entry for aspect ‘Global’ in + the SPARK 2014 Reference Manual, section 6.1.4. + +  + File: gnat_rm.info, Node: Pragma Ident, Next: Pragma Ignore_Pragma, Prev: Pragma Global, Up: Implementation Defined Pragmas + + 2.70 Pragma Ident + ================= + + Syntax: + + pragma Ident (static_string_EXPRESSION); + + This pragma is identical in effect to pragma ‘Comment’. It is provided + for compatibility with other Ada compilers providing this pragma. + +  + File: gnat_rm.info, Node: Pragma Ignore_Pragma, Next: Pragma Implementation_Defined, Prev: Pragma Ident, Up: Implementation Defined Pragmas + + 2.71 Pragma Ignore_Pragma + ========================= + + Syntax: + + pragma Ignore_Pragma (pragma_IDENTIFIER); + + This is a configuration pragma that takes a single argument that is a + simple identifier. Any subsequent use of a pragma whose pragma + identifier matches this argument will be silently ignored. This may be + useful when legacy code or code intended for compilation with some other + compiler contains pragmas that match the name, but not the exact + implementation, of a GNAT pragma. The use of this pragma allows such + pragmas to be ignored, which may be useful in CodePeer mode, or during + porting of legacy code. + +  + File: gnat_rm.info, Node: Pragma Implementation_Defined, Next: Pragma Implemented, Prev: Pragma Ignore_Pragma, Up: Implementation Defined Pragmas + + 2.72 Pragma Implementation_Defined + ================================== + + Syntax: + + pragma Implementation_Defined (local_NAME); + + This pragma marks a previously declared entity as + implementation-defined. For an overloaded entity, applies to the most + recent homonym. + + pragma Implementation_Defined; + + The form with no arguments appears anywhere within a scope, most + typically a package spec, and indicates that all entities that are + defined within the package spec are Implementation_Defined. + + This pragma is used within the GNAT runtime library to identify + implementation-defined entities introduced in language-defined units, + for the purpose of implementing the No_Implementation_Identifiers + restriction. + +  + File: gnat_rm.info, Node: Pragma Implemented, Next: Pragma Implicit_Packing, Prev: Pragma Implementation_Defined, Up: Implementation Defined Pragmas + + 2.73 Pragma Implemented + ======================= + + Syntax: + + pragma Implemented (procedure_LOCAL_NAME, implementation_kind); + + implementation_kind ::= By_Entry | By_Protected_Procedure | By_Any + + This is an Ada 2012 representation pragma which applies to protected, + task and synchronized interface primitives. The use of pragma + Implemented provides a way to impose a static requirement on the + overriding operation by adhering to one of the three implementation + kinds: entry, protected procedure or any of the above. This pragma is + available in all earlier versions of Ada as an implementation-defined + pragma. + + type Synch_Iface is synchronized interface; + procedure Prim_Op (Obj : in out Iface) is abstract; + pragma Implemented (Prim_Op, By_Protected_Procedure); + + protected type Prot_1 is new Synch_Iface with + procedure Prim_Op; -- Legal + end Prot_1; + + protected type Prot_2 is new Synch_Iface with + entry Prim_Op; -- Illegal + end Prot_2; + + task type Task_Typ is new Synch_Iface with + entry Prim_Op; -- Illegal + end Task_Typ; + + When applied to the procedure_or_entry_NAME of a requeue statement, + pragma Implemented determines the runtime behavior of the requeue. + Implementation kind By_Entry guarantees that the action of requeueing + will proceed from an entry to another entry. Implementation kind + By_Protected_Procedure transforms the requeue into a dispatching call, + thus eliminating the chance of blocking. Kind By_Any shares the + behavior of By_Entry and By_Protected_Procedure depending on the + target’s overriding subprogram kind. + +  + File: gnat_rm.info, Node: Pragma Implicit_Packing, Next: Pragma Import_Function, Prev: Pragma Implemented, Up: Implementation Defined Pragmas + + 2.74 Pragma Implicit_Packing + ============================ + + Syntax: + + pragma Implicit_Packing; + + This is a configuration pragma that requests implicit packing for packed + arrays for which a size clause is given but no explicit pragma Pack or + specification of Component_Size is present. It also applies to records + where no record representation clause is present. Consider this + example: + + type R is array (0 .. 7) of Boolean; + for R'Size use 8; + + In accordance with the recommendation in the RM (RM 13.3(53)), a Size + clause does not change the layout of a composite object. So the Size + clause in the above example is normally rejected, since the default + layout of the array uses 8-bit components, and thus the array requires a + minimum of 64 bits. + + If this declaration is compiled in a region of code covered by an + occurrence of the configuration pragma Implicit_Packing, then the Size + clause in this and similar examples will cause implicit packing and thus + be accepted. For this implicit packing to occur, the type in question + must be an array of small components whose size is known at compile + time, and the Size clause must specify the exact size that corresponds + to the number of elements in the array multiplied by the size in bits of + the component type (both single and multi-dimensioned arrays can be + controlled with this pragma). + + Similarly, the following example shows the use in the record case + + type r is record + a, b, c, d, e, f, g, h : boolean; + chr : character; + end record; + for r'size use 16; + + Without a pragma Pack, each Boolean field requires 8 bits, so the + minimum size is 72 bits, but with a pragma Pack, 16 bits would be + sufficient. The use of pragma Implicit_Packing allows this record + declaration to compile without an explicit pragma Pack. + +  + File: gnat_rm.info, Node: Pragma Import_Function, Next: Pragma Import_Object, Prev: Pragma Implicit_Packing, Up: Implementation Defined Pragmas + + 2.75 Pragma Import_Function + =========================== + + Syntax: + + pragma Import_Function ( + [Internal =>] LOCAL_NAME, + [, [External =>] EXTERNAL_SYMBOL] + [, [Parameter_Types =>] PARAMETER_TYPES] + [, [Result_Type =>] SUBTYPE_MARK] + [, [Mechanism =>] MECHANISM] + [, [Result_Mechanism =>] MECHANISM_NAME]); + + EXTERNAL_SYMBOL ::= + IDENTIFIER + | static_string_EXPRESSION + + PARAMETER_TYPES ::= + null + | TYPE_DESIGNATOR {, TYPE_DESIGNATOR} + + TYPE_DESIGNATOR ::= + subtype_NAME + | subtype_Name ' Access + + MECHANISM ::= + MECHANISM_NAME + | (MECHANISM_ASSOCIATION {, MECHANISM_ASSOCIATION}) + + MECHANISM_ASSOCIATION ::= + [formal_parameter_NAME =>] MECHANISM_NAME + + MECHANISM_NAME ::= + Value + | Reference + + This pragma is used in conjunction with a pragma ‘Import’ to specify + additional information for an imported function. The pragma ‘Import’ + (or equivalent pragma ‘Interface’) must precede the ‘Import_Function’ + pragma and both must appear in the same declarative part as the function + specification. + + The ‘Internal’ argument must uniquely designate the function to which + the pragma applies. If more than one function name exists of this name + in the declarative part you must use the ‘Parameter_Types’ and + ‘Result_Type’ parameters to achieve the required unique designation. + Subtype marks in these parameters must exactly match the subtypes in the + corresponding function specification, using positional notation to match + parameters with subtype marks. The form with an ‘'Access’ attribute can + be used to match an anonymous access parameter. + + You may optionally use the ‘Mechanism’ and ‘Result_Mechanism’ parameters + to specify passing mechanisms for the parameters and result. If you + specify a single mechanism name, it applies to all parameters. + Otherwise you may specify a mechanism on a parameter by parameter basis + using either positional or named notation. If the mechanism is not + specified, the default mechanism is used. + +  + File: gnat_rm.info, Node: Pragma Import_Object, Next: Pragma Import_Procedure, Prev: Pragma Import_Function, Up: Implementation Defined Pragmas + + 2.76 Pragma Import_Object + ========================= + + Syntax: + + pragma Import_Object + [Internal =>] LOCAL_NAME + [, [External =>] EXTERNAL_SYMBOL] + [, [Size =>] EXTERNAL_SYMBOL]); + + EXTERNAL_SYMBOL ::= + IDENTIFIER + | static_string_EXPRESSION + + This pragma designates an object as imported, and apart from the + extended rules for external symbols, is identical in effect to the use + of the normal ‘Import’ pragma applied to an object. Unlike the + subprogram case, you need not use a separate ‘Import’ pragma, although + you may do so (and probably should do so from a portability point of + view). ‘size’ is syntax checked, but otherwise ignored by GNAT. + +  + File: gnat_rm.info, Node: Pragma Import_Procedure, Next: Pragma Import_Valued_Procedure, Prev: Pragma Import_Object, Up: Implementation Defined Pragmas + + 2.77 Pragma Import_Procedure + ============================ + + Syntax: + + pragma Import_Procedure ( + [Internal =>] LOCAL_NAME + [, [External =>] EXTERNAL_SYMBOL] + [, [Parameter_Types =>] PARAMETER_TYPES] + [, [Mechanism =>] MECHANISM]); + + EXTERNAL_SYMBOL ::= + IDENTIFIER + | static_string_EXPRESSION + + PARAMETER_TYPES ::= + null + | TYPE_DESIGNATOR {, TYPE_DESIGNATOR} + + TYPE_DESIGNATOR ::= + subtype_NAME + | subtype_Name ' Access + + MECHANISM ::= + MECHANISM_NAME + | (MECHANISM_ASSOCIATION {, MECHANISM_ASSOCIATION}) + + MECHANISM_ASSOCIATION ::= + [formal_parameter_NAME =>] MECHANISM_NAME + + MECHANISM_NAME ::= Value | Reference + + This pragma is identical to ‘Import_Function’ except that it applies to + a procedure rather than a function and the parameters ‘Result_Type’ and + ‘Result_Mechanism’ are not permitted. + +  + File: gnat_rm.info, Node: Pragma Import_Valued_Procedure, Next: Pragma Independent, Prev: Pragma Import_Procedure, Up: Implementation Defined Pragmas + + 2.78 Pragma Import_Valued_Procedure + =================================== + + Syntax: + + pragma Import_Valued_Procedure ( + [Internal =>] LOCAL_NAME + [, [External =>] EXTERNAL_SYMBOL] + [, [Parameter_Types =>] PARAMETER_TYPES] + [, [Mechanism =>] MECHANISM]); + + EXTERNAL_SYMBOL ::= + IDENTIFIER + | static_string_EXPRESSION + + PARAMETER_TYPES ::= + null + | TYPE_DESIGNATOR {, TYPE_DESIGNATOR} + + TYPE_DESIGNATOR ::= + subtype_NAME + | subtype_Name ' Access + + MECHANISM ::= + MECHANISM_NAME + | (MECHANISM_ASSOCIATION {, MECHANISM_ASSOCIATION}) + + MECHANISM_ASSOCIATION ::= + [formal_parameter_NAME =>] MECHANISM_NAME + + MECHANISM_NAME ::= Value | Reference + + This pragma is identical to ‘Import_Procedure’ except that the first + parameter of ‘LOCAL_NAME’, which must be present, must be of mode ‘out’, + and externally the subprogram is treated as a function with this + parameter as the result of the function. The purpose of this capability + is to allow the use of ‘out’ and ‘in out’ parameters in interfacing to + external functions (which are not permitted in Ada functions). You may + optionally use the ‘Mechanism’ parameters to specify passing mechanisms + for the parameters. If you specify a single mechanism name, it applies + to all parameters. Otherwise you may specify a mechanism on a parameter + by parameter basis using either positional or named notation. If the + mechanism is not specified, the default mechanism is used. + + Note that it is important to use this pragma in conjunction with a + separate pragma Import that specifies the desired convention, since + otherwise the default convention is Ada, which is almost certainly not + what is required. + +  + File: gnat_rm.info, Node: Pragma Independent, Next: Pragma Independent_Components, Prev: Pragma Import_Valued_Procedure, Up: Implementation Defined Pragmas + + 2.79 Pragma Independent + ======================= + + Syntax: + + pragma Independent (Local_NAME); + + This pragma is standard in Ada 2012 mode (which also provides an aspect + of the same name). It is also available as an implementation-defined + pragma in all earlier versions. It specifies that the designated object + or all objects of the designated type must be independently addressable. + This means that separate tasks can safely manipulate such objects. For + example, if two components of a record are independent, then two + separate tasks may access these two components. This may place + constraints on the representation of the object (for instance + prohibiting tight packing). + +  + File: gnat_rm.info, Node: Pragma Independent_Components, Next: Pragma Initial_Condition, Prev: Pragma Independent, Up: Implementation Defined Pragmas + + 2.80 Pragma Independent_Components + ================================== + + Syntax: + + pragma Independent_Components (Local_NAME); + + This pragma is standard in Ada 2012 mode (which also provides an aspect + of the same name). It is also available as an implementation-defined + pragma in all earlier versions. It specifies that the components of the + designated object, or the components of each object of the designated + type, must be independently addressable. This means that separate tasks + can safely manipulate separate components in the composite object. This + may place constraints on the representation of the object (for instance + prohibiting tight packing). + +  + File: gnat_rm.info, Node: Pragma Initial_Condition, Next: Pragma Initialize_Scalars, Prev: Pragma Independent_Components, Up: Implementation Defined Pragmas + + 2.81 Pragma Initial_Condition + ============================= + + Syntax: + + pragma Initial_Condition (boolean_EXPRESSION); + + For the semantics of this pragma, see the entry for aspect + ‘Initial_Condition’ in the SPARK 2014 Reference Manual, section 7.1.6. + +  + File: gnat_rm.info, Node: Pragma Initialize_Scalars, Next: Pragma Initializes, Prev: Pragma Initial_Condition, Up: Implementation Defined Pragmas + + 2.82 Pragma Initialize_Scalars + ============================== + + Syntax: + + pragma Initialize_Scalars + [ ( TYPE_VALUE_PAIR {, TYPE_VALUE_PAIR} ) ]; + + TYPE_VALUE_PAIR ::= + SCALAR_TYPE => static_EXPRESSION + + SCALAR_TYPE := + Short_Float + | Float + | Long_Float + | Long_Long_Flat + | Signed_8 + | Signed_16 + | Signed_32 + | Signed_64 + | Unsigned_8 + | Unsigned_16 + | Unsigned_32 + | Unsigned_64 + + This pragma is similar to ‘Normalize_Scalars’ conceptually but has two + important differences. + + First, there is no requirement for the pragma to be used uniformly in + all units of a partition. In particular, it is fine to use this just + for some or all of the application units of a partition, without needing + to recompile the run-time library. In the case where some units are + compiled with the pragma, and some without, then a declaration of a + variable where the type is defined in package Standard or is locally + declared will always be subject to initialization, as will any + declaration of a scalar variable. For composite variables, whether the + variable is initialized may also depend on whether the package in which + the type of the variable is declared is compiled with the pragma. + + The other important difference is that the programmer can control the + value used for initializing scalar objects. This effect can be achieved + in several different ways: + + * At compile time, the programmer can specify the invalid value for a + particular family of scalar types using the optional arguments of + the pragma. + + The compile-time approach is intended to optimize the generated + code for the pragma, by possibly using fast operations such as + ‘memset’. Note that such optimizations require using values where + the bytes all have the same binary representation. + + * At bind time, the programmer has several options: + + * Initialization with invalid values (similar to + Normalize_Scalars, though for Initialize_Scalars it is not + always possible to determine the invalid values in complex + cases like signed component fields with nonstandard sizes). + + * Initialization with high values. + + * Initialization with low values. + + * Initialization with a specific bit pattern. + + See the GNAT User’s Guide for binder options for specifying these + cases. + + The bind-time approach is intended to provide fast turnaround for + testing with different values, without having to recompile the + program. + + * At execution time, the programmer can specify the invalid values + using an environment variable. See the GNAT User’s Guide for + details. + + The execution-time approach is intended to provide fast turnaround + for testing with different values, without having to recompile and + rebind the program. + + Note that pragma ‘Initialize_Scalars’ is particularly useful in + conjunction with the enhanced validity checking that is now provided in + GNAT, which checks for invalid values under more conditions. Using this + feature (see description of the `-gnatV' flag in the GNAT User’s Guide) + in conjunction with pragma ‘Initialize_Scalars’ provides a powerful new + tool to assist in the detection of problems caused by uninitialized + variables. + + Note: the use of ‘Initialize_Scalars’ has a fairly extensive effect on + the generated code. This may cause your code to be substantially + larger. It may also cause an increase in the amount of stack required, + so it is probably a good idea to turn on stack checking (see description + of stack checking in the GNAT User’s Guide) when using this pragma. + +  + File: gnat_rm.info, Node: Pragma Initializes, Next: Pragma Inline_Always, Prev: Pragma Initialize_Scalars, Up: Implementation Defined Pragmas + + 2.83 Pragma Initializes + ======================= + + Syntax: + + pragma Initializes (INITIALIZATION_LIST); + + INITIALIZATION_LIST ::= + null + | (INITIALIZATION_ITEM {, INITIALIZATION_ITEM}) + + INITIALIZATION_ITEM ::= name [=> INPUT_LIST] + + INPUT_LIST ::= + null + | INPUT + | (INPUT {, INPUT}) + + INPUT ::= name + + For the semantics of this pragma, see the entry for aspect ‘Initializes’ + in the SPARK 2014 Reference Manual, section 7.1.5. + +  + File: gnat_rm.info, Node: Pragma Inline_Always, Next: Pragma Inline_Generic, Prev: Pragma Initializes, Up: Implementation Defined Pragmas + + 2.84 Pragma Inline_Always + ========================= + + Syntax: + + pragma Inline_Always (NAME [, NAME]); + + Similar to pragma ‘Inline’ except that inlining is unconditional. + Inline_Always instructs the compiler to inline every direct call to the + subprogram or else to emit a compilation error, independently of any + option, in particular `-gnatn' or `-gnatN' or the optimization level. + It is an error to take the address or access of ‘NAME’. It is also an + error to apply this pragma to a primitive operation of a tagged type. + Thanks to such restrictions, the compiler is allowed to remove the + out-of-line body of ‘NAME’. + +  + File: gnat_rm.info, Node: Pragma Inline_Generic, Next: Pragma Interface, Prev: Pragma Inline_Always, Up: Implementation Defined Pragmas + + 2.85 Pragma Inline_Generic + ========================== + + Syntax: + + pragma Inline_Generic (GNAME {, GNAME}); + + GNAME ::= generic_unit_NAME | generic_instance_NAME + + This pragma is provided for compatibility with Dec Ada 83. It has no + effect in GNAT (which always inlines generics), other than to check that + the given names are all names of generic units or generic instances. + +  + File: gnat_rm.info, Node: Pragma Interface, Next: Pragma Interface_Name, Prev: Pragma Inline_Generic, Up: Implementation Defined Pragmas + + 2.86 Pragma Interface + ===================== + + Syntax: + + pragma Interface ( + [Convention =>] convention_identifier, + [Entity =>] local_NAME + [, [External_Name =>] static_string_expression] + [, [Link_Name =>] static_string_expression]); + + This pragma is identical in syntax and semantics to the standard Ada + pragma ‘Import’. It is provided for compatibility with Ada 83. The + definition is upwards compatible both with pragma ‘Interface’ as defined + in the Ada 83 Reference Manual, and also with some extended + implementations of this pragma in certain Ada 83 implementations. The + only difference between pragma ‘Interface’ and pragma ‘Import’ is that + there is special circuitry to allow both pragmas to appear for the same + subprogram entity (normally it is illegal to have multiple ‘Import’ + pragmas. This is useful in maintaining Ada 83/Ada 95 compatibility and + is compatible with other Ada 83 compilers. + +  + File: gnat_rm.info, Node: Pragma Interface_Name, Next: Pragma Interrupt_Handler, Prev: Pragma Interface, Up: Implementation Defined Pragmas + + 2.87 Pragma Interface_Name + ========================== + + Syntax: + + pragma Interface_Name ( + [Entity =>] LOCAL_NAME + [, [External_Name =>] static_string_EXPRESSION] + [, [Link_Name =>] static_string_EXPRESSION]); + + This pragma provides an alternative way of specifying the interface name + for an interfaced subprogram, and is provided for compatibility with Ada + 83 compilers that use the pragma for this purpose. You must provide at + least one of ‘External_Name’ or ‘Link_Name’. + +  + File: gnat_rm.info, Node: Pragma Interrupt_Handler, Next: Pragma Interrupt_State, Prev: Pragma Interface_Name, Up: Implementation Defined Pragmas + + 2.88 Pragma Interrupt_Handler + ============================= + + Syntax: + + pragma Interrupt_Handler (procedure_LOCAL_NAME); + + This program unit pragma is supported for parameterless protected + procedures as described in Annex C of the Ada Reference Manual. + +  + File: gnat_rm.info, Node: Pragma Interrupt_State, Next: Pragma Invariant, Prev: Pragma Interrupt_Handler, Up: Implementation Defined Pragmas + + 2.89 Pragma Interrupt_State + =========================== + + Syntax: + + pragma Interrupt_State + ([Name =>] value, + [State =>] SYSTEM | RUNTIME | USER); + + Normally certain interrupts are reserved to the implementation. Any + attempt to attach an interrupt causes Program_Error to be raised, as + described in RM C.3.2(22). A typical example is the ‘SIGINT’ interrupt + used in many systems for an ‘Ctrl-C’ interrupt. Normally this interrupt + is reserved to the implementation, so that ‘Ctrl-C’ can be used to + interrupt execution. Additionally, signals such as ‘SIGSEGV’, + ‘SIGABRT’, ‘SIGFPE’ and ‘SIGILL’ are often mapped to specific Ada + exceptions, or used to implement run-time functions such as the ‘abort’ + statement and stack overflow checking. + + Pragma ‘Interrupt_State’ provides a general mechanism for overriding + such uses of interrupts. It subsumes the functionality of pragma + ‘Unreserve_All_Interrupts’. Pragma ‘Interrupt_State’ is not available + on Windows. On all other platforms than VxWorks, it applies to signals; + on VxWorks, it applies to vectored hardware interrupts and may be used + to mark interrupts required by the board support package as reserved. + + Interrupts can be in one of three states: + + * System + + The interrupt is reserved (no Ada handler can be installed), and + the Ada run-time may not install a handler. As a result you are + guaranteed standard system default action if this interrupt is + raised. This also allows installing a low level handler via C APIs + such as sigaction(), outside of Ada control. + + * Runtime + + The interrupt is reserved (no Ada handler can be installed). The + run time is allowed to install a handler for internal control + purposes, but is not required to do so. + + * User + + The interrupt is unreserved. The user may install an Ada handler + via Ada.Interrupts and pragma Interrupt_Handler or Attach_Handler + to provide some other action. + + These states are the allowed values of the ‘State’ parameter of the + pragma. The ‘Name’ parameter is a value of the type + ‘Ada.Interrupts.Interrupt_ID’. Typically, it is a name declared in + ‘Ada.Interrupts.Names’. + + This is a configuration pragma, and the binder will check that there are + no inconsistencies between different units in a partition in how a given + interrupt is specified. It may appear anywhere a pragma is legal. + + The effect is to move the interrupt to the specified state. + + By declaring interrupts to be SYSTEM, you guarantee the standard system + action, such as a core dump. + + By declaring interrupts to be USER, you guarantee that you can install a + handler. + + Note that certain signals on many operating systems cannot be caught and + handled by applications. In such cases, the pragma is ignored. See the + operating system documentation, or the value of the array ‘Reserved’ + declared in the spec of package ‘System.OS_Interface’. + + Overriding the default state of signals used by the Ada runtime may + interfere with an application’s runtime behavior in the cases of the + synchronous signals, and in the case of the signal used to implement the + ‘abort’ statement. + +  + File: gnat_rm.info, Node: Pragma Invariant, Next: Pragma Keep_Names, Prev: Pragma Interrupt_State, Up: Implementation Defined Pragmas + + 2.90 Pragma Invariant + ===================== + + Syntax: + + pragma Invariant + ([Entity =>] private_type_LOCAL_NAME, + [Check =>] EXPRESSION + [,[Message =>] String_Expression]); + + This pragma provides exactly the same capabilities as the Type_Invariant + aspect defined in AI05-0146-1, and in the Ada 2012 Reference Manual. + The Type_Invariant aspect is fully implemented in Ada 2012 mode, but + since it requires the use of the aspect syntax, which is not available + except in 2012 mode, it is not possible to use the Type_Invariant aspect + in earlier versions of Ada. However the Invariant pragma may be used in + any version of Ada. Also note that the aspect Invariant is a synonym in + GNAT for the aspect Type_Invariant, but there is no pragma + Type_Invariant. + + The pragma must appear within the visible part of the package + specification, after the type to which its Entity argument appears. As + with the Invariant aspect, the Check expression is not analyzed until + the end of the visible part of the package, so it may contain forward + references. The Message argument, if present, provides the exception + message used if the invariant is violated. If no Message parameter is + provided, a default message that identifies the line on which the pragma + appears is used. + + It is permissible to have multiple Invariants for the same type entity, + in which case they are and’ed together. It is permissible to use this + pragma in Ada 2012 mode, but you cannot have both an invariant aspect + and an invariant pragma for the same entity. + + For further details on the use of this pragma, see the Ada 2012 + documentation of the Type_Invariant aspect. + +  + File: gnat_rm.info, Node: Pragma Keep_Names, Next: Pragma License, Prev: Pragma Invariant, Up: Implementation Defined Pragmas + + 2.91 Pragma Keep_Names + ====================== + + Syntax: + + pragma Keep_Names ([On =>] enumeration_first_subtype_LOCAL_NAME); + + The ‘LOCAL_NAME’ argument must refer to an enumeration first subtype in + the current declarative part. The effect is to retain the enumeration + literal names for use by ‘Image’ and ‘Value’ even if a global + ‘Discard_Names’ pragma applies. This is useful when you want to + generally suppress enumeration literal names and for example you + therefore use a ‘Discard_Names’ pragma in the ‘gnat.adc’ file, but you + want to retain the names for specific enumeration types. + +  + File: gnat_rm.info, Node: Pragma License, Next: Pragma Link_With, Prev: Pragma Keep_Names, Up: Implementation Defined Pragmas + + 2.92 Pragma License + =================== + + Syntax: + + pragma License (Unrestricted | GPL | Modified_GPL | Restricted); + + This pragma is provided to allow automated checking for appropriate + license conditions with respect to the standard and modified GPL. A + pragma ‘License’, which is a configuration pragma that typically appears + at the start of a source file or in a separate ‘gnat.adc’ file, + specifies the licensing conditions of a unit as follows: + + * Unrestricted This is used for a unit that can be freely used with + no license restrictions. Examples of such units are public domain + units, and units from the Ada Reference Manual. + + * GPL This is used for a unit that is licensed under the unmodified + GPL, and which therefore cannot be ‘with’ed by a restricted unit. + + * Modified_GPL This is used for a unit licensed under the GNAT + modified GPL that includes a special exception paragraph that + specifically permits the inclusion of the unit in programs without + requiring the entire program to be released under the GPL. + + * Restricted This is used for a unit that is restricted in that it is + not permitted to depend on units that are licensed under the GPL. + Typical examples are proprietary code that is to be released under + more restrictive license conditions. Note that restricted units + are permitted to ‘with’ units which are licensed under the modified + GPL (this is the whole point of the modified GPL). + + Normally a unit with no ‘License’ pragma is considered to have an + unknown license, and no checking is done. However, standard GNAT + headers are recognized, and license information is derived from them as + follows. + + A GNAT license header starts with a line containing 78 hyphens. The + following comment text is searched for the appearance of any of the + following strings. + + If the string ‘GNU General Public License’ is found, then the unit is + assumed to have GPL license, unless the string ‘As a special exception’ + follows, in which case the license is assumed to be modified GPL. + + If one of the strings ‘This specification is adapted from the Ada + Semantic Interface’ or ‘This specification is derived from the Ada + Reference Manual’ is found then the unit is assumed to be unrestricted. + + These default actions means that a program with a restricted license + pragma will automatically get warnings if a GPL unit is inappropriately + ‘with’ed. For example, the program: + + with Sem_Ch3; + with GNAT.Sockets; + procedure Secret_Stuff is + ... + end Secret_Stuff + + if compiled with pragma ‘License’ (‘Restricted’) in a ‘gnat.adc’ file + will generate the warning: + + 1. with Sem_Ch3; + | + >>> license of withed unit "Sem_Ch3" is incompatible + + 2. with GNAT.Sockets; + 3. procedure Secret_Stuff is + + Here we get a warning on ‘Sem_Ch3’ since it is part of the GNAT compiler + and is licensed under the GPL, but no warning for ‘GNAT.Sockets’ which + is part of the GNAT run time, and is therefore licensed under the + modified GPL. + +  + File: gnat_rm.info, Node: Pragma Link_With, Next: Pragma Linker_Alias, Prev: Pragma License, Up: Implementation Defined Pragmas + + 2.93 Pragma Link_With + ===================== + + Syntax: + + pragma Link_With (static_string_EXPRESSION {,static_string_EXPRESSION}); + + This pragma is provided for compatibility with certain Ada 83 compilers. + It has exactly the same effect as pragma ‘Linker_Options’ except that + spaces occurring within one of the string expressions are treated as + separators. For example, in the following case: + + pragma Link_With ("-labc -ldef"); + + results in passing the strings ‘-labc’ and ‘-ldef’ as two separate + arguments to the linker. In addition pragma Link_With allows multiple + arguments, with the same effect as successive pragmas. + +  + File: gnat_rm.info, Node: Pragma Linker_Alias, Next: Pragma Linker_Constructor, Prev: Pragma Link_With, Up: Implementation Defined Pragmas + + 2.94 Pragma Linker_Alias + ======================== + + Syntax: + + pragma Linker_Alias ( + [Entity =>] LOCAL_NAME, + [Target =>] static_string_EXPRESSION); + + ‘LOCAL_NAME’ must refer to an object that is declared at the library + level. This pragma establishes the given entity as a linker alias for + the given target. It is equivalent to ‘__attribute__((alias))’ in GNU C + and causes ‘LOCAL_NAME’ to be emitted as an alias for the symbol + ‘static_string_EXPRESSION’ in the object file, that is to say no space + is reserved for ‘LOCAL_NAME’ by the assembler and it will be resolved to + the same address as ‘static_string_EXPRESSION’ by the linker. + + The actual linker name for the target must be used (e.g., the fully + encoded name with qualification in Ada, or the mangled name in C++), or + it must be declared using the C convention with ‘pragma Import’ or + ‘pragma Export’. + + Not all target machines support this pragma. On some of them it is + accepted only if ‘pragma Weak_External’ has been applied to + ‘LOCAL_NAME’. + + -- Example of the use of pragma Linker_Alias + + package p is + i : Integer := 1; + pragma Export (C, i); + + new_name_for_i : Integer; + pragma Linker_Alias (new_name_for_i, "i"); + end p; + +  + File: gnat_rm.info, Node: Pragma Linker_Constructor, Next: Pragma Linker_Destructor, Prev: Pragma Linker_Alias, Up: Implementation Defined Pragmas + + 2.95 Pragma Linker_Constructor + ============================== + + Syntax: + + pragma Linker_Constructor (procedure_LOCAL_NAME); + + ‘procedure_LOCAL_NAME’ must refer to a parameterless procedure that is + declared at the library level. A procedure to which this pragma is + applied will be treated as an initialization routine by the linker. It + is equivalent to ‘__attribute__((constructor))’ in GNU C and causes + ‘procedure_LOCAL_NAME’ to be invoked before the entry point of the + executable is called (or immediately after the shared library is loaded + if the procedure is linked in a shared library), in particular before + the Ada run-time environment is set up. + + Because of these specific contexts, the set of operations such a + procedure can perform is very limited and the type of objects it can + manipulate is essentially restricted to the elementary types. In + particular, it must only contain code to which pragma Restrictions + (No_Elaboration_Code) applies. + + This pragma is used by GNAT to implement auto-initialization of shared + Stand Alone Libraries, which provides a related capability without the + restrictions listed above. Where possible, the use of Stand Alone + Libraries is preferable to the use of this pragma. + +  + File: gnat_rm.info, Node: Pragma Linker_Destructor, Next: Pragma Linker_Section, Prev: Pragma Linker_Constructor, Up: Implementation Defined Pragmas + + 2.96 Pragma Linker_Destructor + ============================= + + Syntax: + + pragma Linker_Destructor (procedure_LOCAL_NAME); + + ‘procedure_LOCAL_NAME’ must refer to a parameterless procedure that is + declared at the library level. A procedure to which this pragma is + applied will be treated as a finalization routine by the linker. It is + equivalent to ‘__attribute__((destructor))’ in GNU C and causes + ‘procedure_LOCAL_NAME’ to be invoked after the entry point of the + executable has exited (or immediately before the shared library is + unloaded if the procedure is linked in a shared library), in particular + after the Ada run-time environment is shut down. + + See ‘pragma Linker_Constructor’ for the set of restrictions that apply + because of these specific contexts. + +  + File: gnat_rm.info, Node: Pragma Linker_Section, Next: Pragma Lock_Free, Prev: Pragma Linker_Destructor, Up: Implementation Defined Pragmas + + 2.97 Pragma Linker_Section + ========================== + + Syntax: + + pragma Linker_Section ( + [Entity =>] LOCAL_NAME, + [Section =>] static_string_EXPRESSION); + + ‘LOCAL_NAME’ must refer to an object, type, or subprogram that is + declared at the library level. This pragma specifies the name of the + linker section for the given entity. It is equivalent to + ‘__attribute__((section))’ in GNU C and causes ‘LOCAL_NAME’ to be placed + in the ‘static_string_EXPRESSION’ section of the executable (assuming + the linker doesn’t rename the section). GNAT also provides an + implementation defined aspect of the same name. + + In the case of specifying this aspect for a type, the effect is to + specify the corresponding section for all library-level objects of the + type that do not have an explicit linker section set. Note that this + only applies to whole objects, not to components of composite objects. + + In the case of a subprogram, the linker section applies to all + previously declared matching overloaded subprograms in the current + declarative part which do not already have a linker section assigned. + The linker section aspect is useful in this case for specifying + different linker sections for different elements of such an overloaded + set. + + Note that an empty string specifies that no linker section is specified. + This is not quite the same as omitting the pragma or aspect, since it + can be used to specify that one element of an overloaded set of + subprograms has the default linker section, or that one object of a type + for which a linker section is specified should has the default linker + section. + + The compiler normally places library-level entities in standard sections + depending on the class: procedures and functions generally go in the + ‘.text’ section, initialized variables in the ‘.data’ section and + uninitialized variables in the ‘.bss’ section. + + Other, special sections may exist on given target machines to map + special hardware, for example I/O ports or flash memory. This pragma is + a means to defer the final layout of the executable to the linker, thus + fully working at the symbolic level with the compiler. + + Some file formats do not support arbitrary sections so not all target + machines support this pragma. The use of this pragma may cause a + program execution to be erroneous if it is used to place an entity into + an inappropriate section (e.g., a modified variable into the ‘.text’ + section). See also ‘pragma Persistent_BSS’. + + -- Example of the use of pragma Linker_Section + + package IO_Card is + Port_A : Integer; + pragma Volatile (Port_A); + pragma Linker_Section (Port_A, ".bss.port_a"); + + Port_B : Integer; + pragma Volatile (Port_B); + pragma Linker_Section (Port_B, ".bss.port_b"); + + type Port_Type is new Integer with Linker_Section => ".bss"; + PA : Port_Type with Linker_Section => ".bss.PA"; + PB : Port_Type; -- ends up in linker section ".bss" + + procedure Q with Linker_Section => "Qsection"; + end IO_Card; + +  + File: gnat_rm.info, Node: Pragma Lock_Free, Next: Pragma Loop_Invariant, Prev: Pragma Linker_Section, Up: Implementation Defined Pragmas + + 2.98 Pragma Lock_Free + ===================== + + Syntax: This pragma may be specified for protected types or objects. It + specifies that the implementation of protected operations must be + implemented without locks. Compilation fails if the compiler cannot + generate lock-free code for the operations. + + The current conditions required to support this pragma are: + + * Protected type declarations may not contain entries + + * Protected subprogram declarations may not have nonelementary + parameters + + In addition, each protected subprogram body must satisfy: + + * May reference only one protected component + + * May not reference nonconstant entities outside the protected + subprogram scope. + + * May not contain address representation items, allocators, or + quantified expressions. + + * May not contain delay, goto, loop, or procedure-call statements. + + * May not contain exported and imported entities + + * May not dereferenced access values + + * Function calls and attribute references must be static + +  + File: gnat_rm.info, Node: Pragma Loop_Invariant, Next: Pragma Loop_Optimize, Prev: Pragma Lock_Free, Up: Implementation Defined Pragmas + + 2.99 Pragma Loop_Invariant + ========================== + + Syntax: + + pragma Loop_Invariant ( boolean_EXPRESSION ); + + The effect of this pragma is similar to that of pragma ‘Assert’, except + that in an ‘Assertion_Policy’ pragma, the identifier ‘Loop_Invariant’ is + used to control whether it is ignored or checked (or disabled). + + ‘Loop_Invariant’ can only appear as one of the items in the sequence of + statements of a loop body, or nested inside block statements that appear + in the sequence of statements of a loop body. The intention is that it + be used to represent a “loop invariant” assertion, i.e. something that + is true each time through the loop, and which can be used to show that + the loop is achieving its purpose. + + Multiple ‘Loop_Invariant’ and ‘Loop_Variant’ pragmas that apply to the + same loop should be grouped in the same sequence of statements. + + To aid in writing such invariants, the special attribute ‘Loop_Entry’ + may be used to refer to the value of an expression on entry to the loop. + This attribute can only be used within the expression of a + ‘Loop_Invariant’ pragma. For full details, see documentation of + attribute ‘Loop_Entry’. + +  + File: gnat_rm.info, Node: Pragma Loop_Optimize, Next: Pragma Loop_Variant, Prev: Pragma Loop_Invariant, Up: Implementation Defined Pragmas + + 2.100 Pragma Loop_Optimize + ========================== + + Syntax: + + pragma Loop_Optimize (OPTIMIZATION_HINT {, OPTIMIZATION_HINT}); + + OPTIMIZATION_HINT ::= Ivdep | No_Unroll | Unroll | No_Vector | Vector + + This pragma must appear immediately within a loop statement. It allows + the programmer to specify optimization hints for the enclosing loop. + The hints are not mutually exclusive and can be freely mixed, but not + all combinations will yield a sensible outcome. + + There are five supported optimization hints for a loop: + + * Ivdep + + The programmer asserts that there are no loop-carried dependencies + which would prevent consecutive iterations of the loop from being + executed simultaneously. + + * No_Unroll + + The loop must not be unrolled. This is a strong hint: the compiler + will not unroll a loop marked with this hint. + + * Unroll + + The loop should be unrolled. This is a weak hint: the compiler + will try to apply unrolling to this loop preferably to other + optimizations, notably vectorization, but there is no guarantee + that the loop will be unrolled. + + * No_Vector + + The loop must not be vectorized. This is a strong hint: the + compiler will not vectorize a loop marked with this hint. + + * Vector + + The loop should be vectorized. This is a weak hint: the compiler + will try to apply vectorization to this loop preferably to other + optimizations, notably unrolling, but there is no guarantee that + the loop will be vectorized. + + These hints do not remove the need to pass the appropriate switches to + the compiler in order to enable the relevant optimizations, that is to + say `-funroll-loops' for unrolling and `-ftree-vectorize' for + vectorization. + +  + File: gnat_rm.info, Node: Pragma Loop_Variant, Next: Pragma Machine_Attribute, Prev: Pragma Loop_Optimize, Up: Implementation Defined Pragmas + + 2.101 Pragma Loop_Variant + ========================= + + Syntax: + + pragma Loop_Variant ( LOOP_VARIANT_ITEM {, LOOP_VARIANT_ITEM } ); + LOOP_VARIANT_ITEM ::= CHANGE_DIRECTION => discrete_EXPRESSION + CHANGE_DIRECTION ::= Increases | Decreases + + ‘Loop_Variant’ can only appear as one of the items in the sequence of + statements of a loop body, or nested inside block statements that appear + in the sequence of statements of a loop body. It allows the + specification of quantities which must always decrease or increase in + successive iterations of the loop. In its simplest form, just one + expression is specified, whose value must increase or decrease on each + iteration of the loop. + + In a more complex form, multiple arguments can be given which are + intepreted in a nesting lexicographic manner. For example: + + pragma Loop_Variant (Increases => X, Decreases => Y); + + specifies that each time through the loop either X increases, or X stays + the same and Y decreases. A ‘Loop_Variant’ pragma ensures that the loop + is making progress. It can be useful in helping to show informally or + prove formally that the loop always terminates. + + ‘Loop_Variant’ is an assertion whose effect can be controlled using an + ‘Assertion_Policy’ with a check name of ‘Loop_Variant’. The policy can + be ‘Check’ to enable the loop variant check, ‘Ignore’ to ignore the + check (in which case the pragma has no effect on the program), or + ‘Disable’ in which case the pragma is not even checked for correct + syntax. + + Multiple ‘Loop_Invariant’ and ‘Loop_Variant’ pragmas that apply to the + same loop should be grouped in the same sequence of statements. + + The ‘Loop_Entry’ attribute may be used within the expressions of the + ‘Loop_Variant’ pragma to refer to values on entry to the loop. + +  + File: gnat_rm.info, Node: Pragma Machine_Attribute, Next: Pragma Main, Prev: Pragma Loop_Variant, Up: Implementation Defined Pragmas + + 2.102 Pragma Machine_Attribute + ============================== + + Syntax: + + pragma Machine_Attribute ( + [Entity =>] LOCAL_NAME, + [Attribute_Name =>] static_string_EXPRESSION + [, [Info =>] static_EXPRESSION {, static_EXPRESSION}] ); + + Machine-dependent attributes can be specified for types and/or + declarations. This pragma is semantically equivalent to + ‘__attribute__((`attribute_name'))’ (if ‘info’ is not specified) or + ‘__attribute__((`attribute_name(info')))’ or + ‘__attribute__((`attribute_name(info,...')))’ in GNU C, where + `attribute_name' is recognized by the compiler middle-end or the + ‘TARGET_ATTRIBUTE_TABLE’ machine specific macro. Note that a string + literal for the optional parameter ‘info’ or the following ones is + transformed by default into an identifier, which may make this pragma + unusable for some attributes. For further information see ‘GNU Compiler + Collection (GCC) Internals’. + +  + File: gnat_rm.info, Node: Pragma Main, Next: Pragma Main_Storage, Prev: Pragma Machine_Attribute, Up: Implementation Defined Pragmas + + 2.103 Pragma Main + ================= + + Syntax: + + pragma Main + (MAIN_OPTION [, MAIN_OPTION]); + + MAIN_OPTION ::= + [Stack_Size =>] static_integer_EXPRESSION + | [Task_Stack_Size_Default =>] static_integer_EXPRESSION + | [Time_Slicing_Enabled =>] static_boolean_EXPRESSION + + This pragma is provided for compatibility with OpenVMS VAX Systems. It + has no effect in GNAT, other than being syntax checked. + +  + File: gnat_rm.info, Node: Pragma Main_Storage, Next: Pragma Max_Queue_Length, Prev: Pragma Main, Up: Implementation Defined Pragmas + + 2.104 Pragma Main_Storage + ========================= + + Syntax: + + pragma Main_Storage + (MAIN_STORAGE_OPTION [, MAIN_STORAGE_OPTION]); + + MAIN_STORAGE_OPTION ::= + [WORKING_STORAGE =>] static_SIMPLE_EXPRESSION + | [TOP_GUARD =>] static_SIMPLE_EXPRESSION + + This pragma is provided for compatibility with OpenVMS VAX Systems. It + has no effect in GNAT, other than being syntax checked. + +  + File: gnat_rm.info, Node: Pragma Max_Queue_Length, Next: Pragma No_Body, Prev: Pragma Main_Storage, Up: Implementation Defined Pragmas + + 2.105 Pragma Max_Queue_Length + ============================= + + Syntax: + + pragma Max_Entry_Queue (static_integer_EXPRESSION); + + This pragma is used to specify the maximum callers per entry queue for + individual protected entries and entry families. It accepts a single + integer (-1 or more) as a parameter and must appear after the + declaration of an entry. + + A value of -1 represents no additional restriction on queue length. + +  + File: gnat_rm.info, Node: Pragma No_Body, Next: Pragma No_Caching, Prev: Pragma Max_Queue_Length, Up: Implementation Defined Pragmas + + 2.106 Pragma No_Body + ==================== + + Syntax: + + pragma No_Body; + + There are a number of cases in which a package spec does not require a + body, and in fact a body is not permitted. GNAT will not permit the + spec to be compiled if there is a body around. The pragma No_Body + allows you to provide a body file, even in a case where no body is + allowed. The body file must contain only comments and a single No_Body + pragma. This is recognized by the compiler as indicating that no body + is logically present. + + This is particularly useful during maintenance when a package is + modified in such a way that a body needed before is no longer needed. + The provision of a dummy body with a No_Body pragma ensures that there + is no interference from earlier versions of the package body. + +  + File: gnat_rm.info, Node: Pragma No_Caching, Next: Pragma No_Component_Reordering, Prev: Pragma No_Body, Up: Implementation Defined Pragmas + + 2.107 Pragma No_Caching + ======================= + + Syntax: + + pragma No_Caching [ (boolean_EXPRESSION) ]; + + For the semantics of this pragma, see the entry for aspect ‘No_Caching’ + in the SPARK 2014 Reference Manual, section 7.1.2. + +  + File: gnat_rm.info, Node: Pragma No_Component_Reordering, Next: Pragma No_Elaboration_Code_All, Prev: Pragma No_Caching, Up: Implementation Defined Pragmas + + 2.108 Pragma No_Component_Reordering + ==================================== + + Syntax: + + pragma No_Component_Reordering [([Entity =>] type_LOCAL_NAME)]; + + ‘type_LOCAL_NAME’ must refer to a record type declaration in the current + declarative part. The effect is to preclude any reordering of + components for the layout of the record, i.e. the record is laid out by + the compiler in the order in which the components are declared + textually. The form with no argument is a configuration pragma which + applies to all record types declared in units to which the pragma + applies and there is a requirement that this pragma be used consistently + within a partition. + +  + File: gnat_rm.info, Node: Pragma No_Elaboration_Code_All, Next: Pragma No_Heap_Finalization, Prev: Pragma No_Component_Reordering, Up: Implementation Defined Pragmas + + 2.109 Pragma No_Elaboration_Code_All + ==================================== + + Syntax: + + pragma No_Elaboration_Code_All [(program_unit_NAME)]; + + This is a program unit pragma (there is also an equivalent aspect of the + same name) that establishes the restriction ‘No_Elaboration_Code’ for + the current unit and any extended main source units (body and subunits). + It also has the effect of enforcing a transitive application of this + aspect, so that if any unit is implicitly or explicitly with’ed by the + current unit, it must also have the No_Elaboration_Code_All aspect set. + It may be applied to package or subprogram specs or their generic + versions. + +  + File: gnat_rm.info, Node: Pragma No_Heap_Finalization, Next: Pragma No_Inline, Prev: Pragma No_Elaboration_Code_All, Up: Implementation Defined Pragmas + + 2.110 Pragma No_Heap_Finalization + ================================= + + Syntax: + + pragma No_Heap_Finalization [ (first_subtype_LOCAL_NAME) ]; + + Pragma ‘No_Heap_Finalization’ may be used as a configuration pragma or + as a type-specific pragma. + + In its configuration form, the pragma must appear within a configuration + file such as gnat.adc, without an argument. The pragma suppresses the + call to ‘Finalize’ for heap-allocated objects created through + library-level named access-to-object types in cases where the designated + type requires finalization actions. + + In its type-specific form, the argument of the pragma must denote a + library-level named access-to-object type. The pragma suppresses the + call to ‘Finalize’ for heap-allocated objects created through the + specific access type in cases where the designated type requires + finalization actions. + + It is still possible to finalize such heap-allocated objects by + explicitly deallocating them. + + A library-level named access-to-object type declared within a generic + unit will lose its ‘No_Heap_Finalization’ pragma when the corresponding + instance does not appear at the library level. + +  + File: gnat_rm.info, Node: Pragma No_Inline, Next: Pragma No_Return, Prev: Pragma No_Heap_Finalization, Up: Implementation Defined Pragmas + + 2.111 Pragma No_Inline + ====================== + + Syntax: + + pragma No_Inline (NAME {, NAME}); + + This pragma suppresses inlining for the callable entity or the instances + of the generic subprogram designated by ‘NAME’, including inlining that + results from the use of pragma ‘Inline’. This pragma is always active, + in particular it is not subject to the use of option `-gnatn' or + `-gnatN'. It is illegal to specify both pragma ‘No_Inline’ and pragma + ‘Inline_Always’ for the same ‘NAME’. + +  + File: gnat_rm.info, Node: Pragma No_Return, Next: Pragma No_Strict_Aliasing, Prev: Pragma No_Inline, Up: Implementation Defined Pragmas + + 2.112 Pragma No_Return + ====================== + + Syntax: + + pragma No_Return (procedure_LOCAL_NAME {, procedure_LOCAL_NAME}); + + Each ‘procedure_LOCAL_NAME’ argument must refer to one or more procedure + declarations in the current declarative part. A procedure to which this + pragma is applied may not contain any explicit ‘return’ statements. In + addition, if the procedure contains any implicit returns from falling + off the end of a statement sequence, then execution of that implicit + return will cause Program_Error to be raised. + + One use of this pragma is to identify procedures whose only purpose is + to raise an exception. Another use of this pragma is to suppress + incorrect warnings about missing returns in functions, where the last + statement of a function statement sequence is a call to such a + procedure. + + Note that in Ada 2005 mode, this pragma is part of the language. It is + available in all earlier versions of Ada as an implementation-defined + pragma. + +  + File: gnat_rm.info, Node: Pragma No_Strict_Aliasing, Next: Pragma No_Tagged_Streams, Prev: Pragma No_Return, Up: Implementation Defined Pragmas + + 2.113 Pragma No_Strict_Aliasing + =============================== + + Syntax: + + pragma No_Strict_Aliasing [([Entity =>] type_LOCAL_NAME)]; + + ‘type_LOCAL_NAME’ must refer to an access type declaration in the + current declarative part. The effect is to inhibit strict aliasing + optimization for the given type. The form with no arguments is a + configuration pragma which applies to all access types declared in units + to which the pragma applies. For a detailed description of the strict + aliasing optimization, and the situations in which it must be + suppressed, see the section on Optimization and Strict Aliasing in the + ‘GNAT User’s Guide’. + + This pragma currently has no effects on access to unconstrained array + types. + +  + File: gnat_rm.info, Node: Pragma No_Tagged_Streams, Next: Pragma Normalize_Scalars, Prev: Pragma No_Strict_Aliasing, Up: Implementation Defined Pragmas + + 2.114 Pragma No_Tagged_Streams + ============================== + + Syntax: + + pragma No_Tagged_Streams [([Entity =>] tagged_type_LOCAL_NAME)]; + + Normally when a tagged type is introduced using a full type declaration, + part of the processing includes generating stream access routines to be + used by stream attributes referencing the type (or one of its subtypes + or derived types). This can involve the generation of significant + amounts of code which is wasted space if stream routines are not needed + for the type in question. + + The ‘No_Tagged_Streams’ pragma causes the generation of these stream + routines to be skipped, and any attempt to use stream operations on + types subject to this pragma will be statically rejected as illegal. + + There are two forms of the pragma. The form with no arguments must + appear in a declarative sequence or in the declarations of a package + spec. This pragma affects all subsequent root tagged types declared in + the declaration sequence, and specifies that no stream routines be + generated. The form with an argument (for which there is also a + corresponding aspect) specifies a single root tagged type for which + stream routines are not to be generated. + + Once the pragma has been given for a particular root tagged type, all + subtypes and derived types of this type inherit the pragma + automatically, so the effect applies to a complete hierarchy (this is + necessary to deal with the class-wide dispatching versions of the stream + routines). + + When pragmas ‘Discard_Names’ and ‘No_Tagged_Streams’ are simultaneously + applied to a tagged type its Expanded_Name and External_Tag are + initialized with empty strings. This is useful to avoid exposing entity + names at binary level but has a negative impact on the debuggability of + tagged types. + +  + File: gnat_rm.info, Node: Pragma Normalize_Scalars, Next: Pragma Obsolescent, Prev: Pragma No_Tagged_Streams, Up: Implementation Defined Pragmas + + 2.115 Pragma Normalize_Scalars + ============================== + + Syntax: + + pragma Normalize_Scalars; + + This is a language defined pragma which is fully implemented in GNAT. + The effect is to cause all scalar objects that are not otherwise + initialized to be initialized. The initial values are implementation + dependent and are as follows: + + `Standard.Character' + + Objects whose root type is Standard.Character are initialized to + Character’Last unless the subtype range excludes NUL (in which case + NUL is used). This choice will always generate an invalid value if + one exists. + + `Standard.Wide_Character' + + Objects whose root type is Standard.Wide_Character are initialized + to Wide_Character’Last unless the subtype range excludes NUL (in + which case NUL is used). This choice will always generate an + invalid value if one exists. + + `Standard.Wide_Wide_Character' + + Objects whose root type is Standard.Wide_Wide_Character are + initialized to the invalid value 16#FFFF_FFFF# unless the subtype + range excludes NUL (in which case NUL is used). This choice will + always generate an invalid value if one exists. + + `Integer types' + + Objects of an integer type are treated differently depending on + whether negative values are present in the subtype. If no negative + values are present, then all one bits is used as the initial value + except in the special case where zero is excluded from the subtype, + in which case all zero bits are used. This choice will always + generate an invalid value if one exists. + + For subtypes with negative values present, the largest negative + number is used, except in the unusual case where this largest + negative number is in the subtype, and the largest positive number + is not, in which case the largest positive value is used. This + choice will always generate an invalid value if one exists. + + `Floating-Point Types' + + Objects of all floating-point types are initialized to all 1-bits. + For standard IEEE format, this corresponds to a NaN (not a number) + which is indeed an invalid value. + + `Fixed-Point Types' + + Objects of all fixed-point types are treated as described above for + integers, with the rules applying to the underlying integer value + used to represent the fixed-point value. + + `Modular types' + + Objects of a modular type are initialized to all one bits, except + in the special case where zero is excluded from the subtype, in + which case all zero bits are used. This choice will always + generate an invalid value if one exists. + + `Enumeration types' + + Objects of an enumeration type are initialized to all one-bits, + i.e., to the value ‘2 ** typ'Size - 1’ unless the subtype excludes + the literal whose Pos value is zero, in which case a code of zero + is used. This choice will always generate an invalid value if one + exists. + +  + File: gnat_rm.info, Node: Pragma Obsolescent, Next: Pragma Optimize_Alignment, Prev: Pragma Normalize_Scalars, Up: Implementation Defined Pragmas + + 2.116 Pragma Obsolescent + ======================== + + Syntax: + + pragma Obsolescent; + + pragma Obsolescent ( + [Message =>] static_string_EXPRESSION + [,[Version =>] Ada_05]]); + + pragma Obsolescent ( + [Entity =>] NAME + [,[Message =>] static_string_EXPRESSION + [,[Version =>] Ada_05]] ); + + This pragma can occur immediately following a declaration of an entity, + including the case of a record component. If no Entity argument is + present, then this declaration is the one to which the pragma applies. + If an Entity parameter is present, it must either match the name of the + entity in this declaration, or alternatively, the pragma can immediately + follow an enumeration type declaration, where the Entity argument names + one of the enumeration literals. + + This pragma is used to indicate that the named entity is considered + obsolescent and should not be used. Typically this is used when an API + must be modified by eventually removing or modifying existing + subprograms or other entities. The pragma can be used at an + intermediate stage when the entity is still present, but will be removed + later. + + The effect of this pragma is to output a warning message on a reference + to an entity thus marked that the subprogram is obsolescent if the + appropriate warning option in the compiler is activated. If the + ‘Message’ parameter is present, then a second warning message is given + containing this text. In addition, a reference to the entity is + considered to be a violation of pragma ‘Restrictions + (No_Obsolescent_Features)’. + + This pragma can also be used as a program unit pragma for a package, in + which case the entity name is the name of the package, and the pragma + indicates that the entire package is considered obsolescent. In this + case a client ‘with’ing such a package violates the restriction, and the + ‘with’ clause is flagged with warnings if the warning option is set. + + If the ‘Version’ parameter is present (which must be exactly the + identifier ‘Ada_05’, no other argument is allowed), then the indication + of obsolescence applies only when compiling in Ada 2005 mode. This is + primarily intended for dealing with the situations in the predefined + library where subprograms or packages have become defined as obsolescent + in Ada 2005 (e.g., in ‘Ada.Characters.Handling’), but may be used + anywhere. + + The following examples show typical uses of this pragma: + + package p is + pragma Obsolescent (p, Message => "use pp instead of p"); + end p; + + package q is + procedure q2; + pragma Obsolescent ("use q2new instead"); + + type R is new integer; + pragma Obsolescent + (Entity => R, + Message => "use RR in Ada 2005", + Version => Ada_05); + + type M is record + F1 : Integer; + F2 : Integer; + pragma Obsolescent; + F3 : Integer; + end record; + + type E is (a, bc, 'd', quack); + pragma Obsolescent (Entity => bc) + pragma Obsolescent (Entity => 'd') + + function "+" + (a, b : character) return character; + pragma Obsolescent (Entity => "+"); + end; + + Note that, as for all pragmas, if you use a pragma argument identifier, + then all subsequent parameters must also use a pragma argument + identifier. So if you specify ‘Entity =>’ for the ‘Entity’ argument, + and a ‘Message’ argument is present, it must be preceded by ‘Message + =>’. + +  + File: gnat_rm.info, Node: Pragma Optimize_Alignment, Next: Pragma Ordered, Prev: Pragma Obsolescent, Up: Implementation Defined Pragmas + + 2.117 Pragma Optimize_Alignment + =============================== + + Syntax: + + pragma Optimize_Alignment (TIME | SPACE | OFF); + + This is a configuration pragma which affects the choice of default + alignments for types and objects where no alignment is explicitly + specified. There is a time/space trade-off in the selection of these + values. Large alignments result in more efficient code, at the expense + of larger data space, since sizes have to be increased to match these + alignments. Smaller alignments save space, but the access code is + slower. The normal choice of default alignments for types and + individual alignment promotions for objects (which is what you get if + you do not use this pragma, or if you use an argument of OFF), tries to + balance these two requirements. + + Specifying SPACE causes smaller default alignments to be chosen in two + cases. First any packed record is given an alignment of 1. Second, if + a size is given for the type, then the alignment is chosen to avoid + increasing this size. For example, consider: + + type R is record + X : Integer; + Y : Character; + end record; + + for R'Size use 5*8; + + In the default mode, this type gets an alignment of 4, so that access to + the Integer field X are efficient. But this means that objects of the + type end up with a size of 8 bytes. This is a valid choice, since sizes + of objects are allowed to be bigger than the size of the type, but it + can waste space if for example fields of type R appear in an enclosing + record. If the above type is compiled in ‘Optimize_Alignment (Space)’ + mode, the alignment is set to 1. + + However, there is one case in which SPACE is ignored. If a variable + length record (that is a discriminated record with a component which is + an array whose length depends on a discriminant), has a pragma Pack, + then it is not in general possible to set the alignment of such a record + to one, so the pragma is ignored in this case (with a warning). + + Specifying SPACE also disables alignment promotions for standalone + objects, which occur when the compiler increases the alignment of a + specific object without changing the alignment of its type. + + Specifying SPACE also disables component reordering in unpacked record + types, which can result in larger sizes in order to meet alignment + requirements. + + Specifying TIME causes larger default alignments to be chosen in the + case of small types with sizes that are not a power of 2. For example, + consider: + + type R is record + A : Character; + B : Character; + C : Boolean; + end record; + + pragma Pack (R); + for R'Size use 17; + + The default alignment for this record is normally 1, but if this type is + compiled in ‘Optimize_Alignment (Time)’ mode, then the alignment is set + to 4, which wastes space for objects of the type, since they are now 4 + bytes long, but results in more efficient access when the whole record + is referenced. + + As noted above, this is a configuration pragma, and there is a + requirement that all units in a partition be compiled with a consistent + setting of the optimization setting. This would normally be achieved by + use of a configuration pragma file containing the appropriate setting. + The exception to this rule is that units with an explicit configuration + pragma in the same file as the source unit are excluded from the + consistency check, as are all predefined units. The latter are compiled + by default in pragma Optimize_Alignment (Off) mode if no pragma appears + at the start of the file. + +  + File: gnat_rm.info, Node: Pragma Ordered, Next: Pragma Overflow_Mode, Prev: Pragma Optimize_Alignment, Up: Implementation Defined Pragmas + + 2.118 Pragma Ordered + ==================== + + Syntax: + + pragma Ordered (enumeration_first_subtype_LOCAL_NAME); + + Most enumeration types are from a conceptual point of view unordered. + For example, consider: + + type Color is (Red, Blue, Green, Yellow); + + By Ada semantics ‘Blue > Red’ and ‘Green > Blue’, but really these + relations make no sense; the enumeration type merely specifies a set of + possible colors, and the order is unimportant. + + For unordered enumeration types, it is generally a good idea if clients + avoid comparisons (other than equality or inequality) and explicit + ranges. (A `client' is a unit where the type is referenced, other than + the unit where the type is declared, its body, and its subunits.) For + example, if code buried in some client says: + + if Current_Color < Yellow then ... + if Current_Color in Blue .. Green then ... + + then the client code is relying on the order, which is undesirable. It + makes the code hard to read and creates maintenance difficulties if + entries have to be added to the enumeration type. Instead, the code in + the client should list the possibilities, or an appropriate subtype + should be declared in the unit that declares the original enumeration + type. E.g., the following subtype could be declared along with the type + ‘Color’: + + subtype RBG is Color range Red .. Green; + + and then the client could write: + + if Current_Color in RBG then ... + if Current_Color = Blue or Current_Color = Green then ... + + However, some enumeration types are legitimately ordered from a + conceptual point of view. For example, if you declare: + + type Day is (Mon, Tue, Wed, Thu, Fri, Sat, Sun); + + then the ordering imposed by the language is reasonable, and clients can + depend on it, writing for example: + + if D in Mon .. Fri then ... + if D < Wed then ... + + The pragma `Ordered' is provided to mark enumeration types that are + conceptually ordered, alerting the reader that clients may depend on the + ordering. GNAT provides a pragma to mark enumerations as ordered rather + than one to mark them as unordered, since in our experience, the great + majority of enumeration types are conceptually unordered. + + The types ‘Boolean’, ‘Character’, ‘Wide_Character’, and + ‘Wide_Wide_Character’ are considered to be ordered types, so each is + declared with a pragma ‘Ordered’ in package ‘Standard’. + + Normally pragma ‘Ordered’ serves only as documentation and a guide for + coding standards, but GNAT provides a warning switch `-gnatw.u' that + requests warnings for inappropriate uses (comparisons and explicit + subranges) for unordered types. If this switch is used, then any + enumeration type not marked with pragma ‘Ordered’ will be considered as + unordered, and will generate warnings for inappropriate uses. + + Note that generic types are not considered ordered or unordered (since + the template can be instantiated for both cases), so we never generate + warnings for the case of generic enumerated types. + + For additional information please refer to the description of the + `-gnatw.u' switch in the GNAT User’s Guide. + +  + File: gnat_rm.info, Node: Pragma Overflow_Mode, Next: Pragma Overriding_Renamings, Prev: Pragma Ordered, Up: Implementation Defined Pragmas + + 2.119 Pragma Overflow_Mode + ========================== + + Syntax: + + pragma Overflow_Mode + ( [General =>] MODE + [,[Assertions =>] MODE]); + + MODE ::= STRICT | MINIMIZED | ELIMINATED + + This pragma sets the current overflow mode to the given setting. For + details of the meaning of these modes, please refer to the ‘Overflow + Check Handling in GNAT’ appendix in the GNAT User’s Guide. If only the + ‘General’ parameter is present, the given mode applies to all + expressions. If both parameters are present, the ‘General’ mode applies + to expressions outside assertions, and the ‘Eliminated’ mode applies to + expressions within assertions. + + The case of the ‘MODE’ parameter is ignored, so ‘MINIMIZED’, ‘Minimized’ + and ‘minimized’ all have the same effect. + + The ‘Overflow_Mode’ pragma has the same scoping and placement rules as + pragma ‘Suppress’, so it can occur either as a configuration pragma, + specifying a default for the whole program, or in a declarative scope, + where it applies to the remaining declarations and statements in that + scope. + + The pragma ‘Suppress (Overflow_Check)’ suppresses overflow checking, but + does not affect the overflow mode. + + The pragma ‘Unsuppress (Overflow_Check)’ unsuppresses (enables) overflow + checking, but does not affect the overflow mode. + +  + File: gnat_rm.info, Node: Pragma Overriding_Renamings, Next: Pragma Partition_Elaboration_Policy, Prev: Pragma Overflow_Mode, Up: Implementation Defined Pragmas + + 2.120 Pragma Overriding_Renamings + ================================= + + Syntax: + + pragma Overriding_Renamings; + + This is a GNAT configuration pragma to simplify porting legacy code + accepted by the Rational Ada compiler. In the presence of this pragma, + a renaming declaration that renames an inherited operation declared in + the same scope is legal if selected notation is used as in: + + pragma Overriding_Renamings; + ... + package R is + function F (..); + ... + function F (..) renames R.F; + end R; + + even though RM 8.3 (15) stipulates that an overridden operation is not + visible within the declaration of the overriding operation. + +  + File: gnat_rm.info, Node: Pragma Partition_Elaboration_Policy, Next: Pragma Part_Of, Prev: Pragma Overriding_Renamings, Up: Implementation Defined Pragmas + + 2.121 Pragma Partition_Elaboration_Policy + ========================================= + + Syntax: + + pragma Partition_Elaboration_Policy (POLICY_IDENTIFIER); + + POLICY_IDENTIFIER ::= Concurrent | Sequential + + This pragma is standard in Ada 2005, but is available in all earlier + versions of Ada as an implementation-defined pragma. See Ada 2012 + Reference Manual for details. + +  + File: gnat_rm.info, Node: Pragma Part_Of, Next: Pragma Passive, Prev: Pragma Partition_Elaboration_Policy, Up: Implementation Defined Pragmas + + 2.122 Pragma Part_Of + ==================== + + Syntax: + + pragma Part_Of (ABSTRACT_STATE); + + ABSTRACT_STATE ::= NAME + + For the semantics of this pragma, see the entry for aspect ‘Part_Of’ in + the SPARK 2014 Reference Manual, section 7.2.6. + +  + File: gnat_rm.info, Node: Pragma Passive, Next: Pragma Persistent_BSS, Prev: Pragma Part_Of, Up: Implementation Defined Pragmas + + 2.123 Pragma Passive + ==================== + + Syntax: + + pragma Passive [(Semaphore | No)]; + + Syntax checked, but otherwise ignored by GNAT. This is recognized for + compatibility with DEC Ada 83 implementations, where it is used within a + task definition to request that a task be made passive. If the argument + ‘Semaphore’ is present, or the argument is omitted, then DEC Ada 83 + treats the pragma as an assertion that the containing task is passive + and that optimization of context switch with this task is permitted and + desired. If the argument ‘No’ is present, the task must not be + optimized. GNAT does not attempt to optimize any tasks in this manner + (since protected objects are available in place of passive tasks). + + For more information on the subject of passive tasks, see the section + ‘Passive Task Optimization’ in the GNAT Users Guide. + +  + File: gnat_rm.info, Node: Pragma Persistent_BSS, Next: Pragma Post, Prev: Pragma Passive, Up: Implementation Defined Pragmas + + 2.124 Pragma Persistent_BSS + =========================== + + Syntax: + + pragma Persistent_BSS [(LOCAL_NAME)] + + This pragma allows selected objects to be placed in the + ‘.persistent_bss’ section. On some targets the linker and loader + provide for special treatment of this section, allowing a program to be + reloaded without affecting the contents of this data (hence the name + persistent). + + There are two forms of usage. If an argument is given, it must be the + local name of a library-level object, with no explicit initialization + and whose type is potentially persistent. If no argument is given, then + the pragma is a configuration pragma, and applies to all library-level + objects with no explicit initialization of potentially persistent types. + + A potentially persistent type is a scalar type, or an untagged, + non-discriminated record, all of whose components have no explicit + initialization and are themselves of a potentially persistent type, or + an array, all of whose constraints are static, and whose component type + is potentially persistent. + + If this pragma is used on a target where this feature is not supported, + then the pragma will be ignored. See also ‘pragma Linker_Section’. + +  + File: gnat_rm.info, Node: Pragma Post, Next: Pragma Postcondition, Prev: Pragma Persistent_BSS, Up: Implementation Defined Pragmas + + 2.125 Pragma Post + ================= + + Syntax: + + pragma Post (Boolean_Expression); + + The ‘Post’ pragma is intended to be an exact replacement for the + language-defined ‘Post’ aspect, and shares its restrictions and + semantics. It must appear either immediately following the + corresponding subprogram declaration (only other pragmas may intervene), + or if there is no separate subprogram declaration, then it can appear at + the start of the declarations in a subprogram body (preceded only by + other pragmas). + +  + File: gnat_rm.info, Node: Pragma Postcondition, Next: Pragma Post_Class, Prev: Pragma Post, Up: Implementation Defined Pragmas + + 2.126 Pragma Postcondition + ========================== + + Syntax: + + pragma Postcondition ( + [Check =>] Boolean_Expression + [,[Message =>] String_Expression]); + + The ‘Postcondition’ pragma allows specification of automatic + postcondition checks for subprograms. These checks are similar to + assertions, but are automatically inserted just prior to the return + statements of the subprogram with which they are associated (including + implicit returns at the end of procedure bodies and associated exception + handlers). + + In addition, the boolean expression which is the condition which must be + true may contain references to function’Result in the case of a function + to refer to the returned value. + + ‘Postcondition’ pragmas may appear either immediately following the + (separate) declaration of a subprogram, or at the start of the + declarations of a subprogram body. Only other pragmas may intervene + (that is appear between the subprogram declaration and its + postconditions, or appear before the postcondition in the declaration + sequence in a subprogram body). In the case of a postcondition + appearing after a subprogram declaration, the formal arguments of the + subprogram are visible, and can be referenced in the postcondition + expressions. + + The postconditions are collected and automatically tested just before + any return (implicit or explicit) in the subprogram body. A + postcondition is only recognized if postconditions are active at the + time the pragma is encountered. The compiler switch `gnata' turns on + all postconditions by default, and pragma ‘Check_Policy’ with an + identifier of ‘Postcondition’ can also be used to control whether + postconditions are active. + + The general approach is that postconditions are placed in the spec if + they represent functional aspects which make sense to the client. For + example we might have: + + function Direction return Integer; + pragma Postcondition + (Direction'Result = +1 + or else + Direction'Result = -1); + + which serves to document that the result must be +1 or -1, and will test + that this is the case at run time if postcondition checking is active. + + Postconditions within the subprogram body can be used to check that some + internal aspect of the implementation, not visible to the client, is + operating as expected. For instance if a square root routine keeps an + internal counter of the number of times it is called, then we might have + the following postcondition: + + Sqrt_Calls : Natural := 0; + + function Sqrt (Arg : Float) return Float is + pragma Postcondition + (Sqrt_Calls = Sqrt_Calls'Old + 1); + ... + end Sqrt + + As this example, shows, the use of the ‘Old’ attribute is often useful + in postconditions to refer to the state on entry to the subprogram. + + Note that postconditions are only checked on normal returns from the + subprogram. If an abnormal return results from raising an exception, + then the postconditions are not checked. + + If a postcondition fails, then the exception + ‘System.Assertions.Assert_Failure’ is raised. If a message argument was + supplied, then the given string will be used as the exception message. + If no message argument was supplied, then the default message has the + form “Postcondition failed at file_name:line”. The exception is raised + in the context of the subprogram body, so it is possible to catch + postcondition failures within the subprogram body itself. + + Within a package spec, normal visibility rules in Ada would prevent + forward references within a postcondition pragma to functions defined + later in the same package. This would introduce undesirable ordering + constraints. To avoid this problem, all postcondition pragmas are + analyzed at the end of the package spec, allowing forward references. + + The following example shows that this even allows mutually recursive + postconditions as in: + + package Parity_Functions is + function Odd (X : Natural) return Boolean; + pragma Postcondition + (Odd'Result = + (x = 1 + or else + (x /= 0 and then Even (X - 1)))); + + function Even (X : Natural) return Boolean; + pragma Postcondition + (Even'Result = + (x = 0 + or else + (x /= 1 and then Odd (X - 1)))); + + end Parity_Functions; + + There are no restrictions on the complexity or form of conditions used + within ‘Postcondition’ pragmas. The following example shows that it is + even possible to verify performance behavior. + + package Sort is + + Performance : constant Float; + -- Performance constant set by implementation + -- to match target architecture behavior. + + procedure Treesort (Arg : String); + -- Sorts characters of argument using N*logN sort + pragma Postcondition + (Float (Clock - Clock'Old) <= + Float (Arg'Length) * + log (Float (Arg'Length)) * + Performance); + end Sort; + + Note: postcondition pragmas associated with subprograms that are marked + as Inline_Always, or those marked as Inline with front-end inlining + (-gnatN option set) are accepted and legality-checked by the compiler, + but are ignored at run-time even if postcondition checking is enabled. + + Note that pragma ‘Postcondition’ differs from the language-defined + ‘Post’ aspect (and corresponding ‘Post’ pragma) in allowing multiple + occurrences, allowing occurences in the body even if there is a separate + spec, and allowing a second string parameter, and the use of the pragma + identifier ‘Check’. Historically, pragma ‘Postcondition’ was + implemented prior to the development of Ada 2012, and has been retained + in its original form for compatibility purposes. + +  + File: gnat_rm.info, Node: Pragma Post_Class, Next: Pragma Pre, Prev: Pragma Postcondition, Up: Implementation Defined Pragmas + + 2.127 Pragma Post_Class + ======================= + + Syntax: + + pragma Post_Class (Boolean_Expression); + + The ‘Post_Class’ pragma is intended to be an exact replacement for the + language-defined ‘Post'Class’ aspect, and shares its restrictions and + semantics. It must appear either immediately following the + corresponding subprogram declaration (only other pragmas may intervene), + or if there is no separate subprogram declaration, then it can appear at + the start of the declarations in a subprogram body (preceded only by + other pragmas). + + Note: This pragma is called ‘Post_Class’ rather than ‘Post'Class’ + because the latter would not be strictly conforming to the allowed + syntax for pragmas. The motivation for provinding pragmas equivalent to + the aspects is to allow a program to be written using the pragmas, and + then compiled if necessary using an Ada compiler that does not recognize + the pragmas or aspects, but is prepared to ignore the pragmas. The + assertion policy that controls this pragma is ‘Post'Class’, not + ‘Post_Class’. + +  + File: gnat_rm.info, Node: Pragma Pre, Next: Pragma Precondition, Prev: Pragma Post_Class, Up: Implementation Defined Pragmas + + 2.128 Pragma Pre + ================ + + Syntax: + + pragma Pre (Boolean_Expression); + + The ‘Pre’ pragma is intended to be an exact replacement for the + language-defined ‘Pre’ aspect, and shares its restrictions and + semantics. It must appear either immediately following the + corresponding subprogram declaration (only other pragmas may intervene), + or if there is no separate subprogram declaration, then it can appear at + the start of the declarations in a subprogram body (preceded only by + other pragmas). + +  + File: gnat_rm.info, Node: Pragma Precondition, Next: Pragma Predicate, Prev: Pragma Pre, Up: Implementation Defined Pragmas + + 2.129 Pragma Precondition + ========================= + + Syntax: + + pragma Precondition ( + [Check =>] Boolean_Expression + [,[Message =>] String_Expression]); + + The ‘Precondition’ pragma is similar to ‘Postcondition’ except that the + corresponding checks take place immediately upon entry to the + subprogram, and if a precondition fails, the exception is raised in the + context of the caller, and the attribute ‘Result cannot be used within + the precondition expression. + + Otherwise, the placement and visibility rules are identical to those + described for postconditions. The following is an example of use within + a package spec: + + package Math_Functions is + ... + function Sqrt (Arg : Float) return Float; + pragma Precondition (Arg >= 0.0) + ... + end Math_Functions; + + ‘Precondition’ pragmas may appear either immediately following the + (separate) declaration of a subprogram, or at the start of the + declarations of a subprogram body. Only other pragmas may intervene + (that is appear between the subprogram declaration and its + postconditions, or appear before the postcondition in the declaration + sequence in a subprogram body). + + Note: precondition pragmas associated with subprograms that are marked + as Inline_Always, or those marked as Inline with front-end inlining + (-gnatN option set) are accepted and legality-checked by the compiler, + but are ignored at run-time even if precondition checking is enabled. + + Note that pragma ‘Precondition’ differs from the language-defined ‘Pre’ + aspect (and corresponding ‘Pre’ pragma) in allowing multiple + occurrences, allowing occurences in the body even if there is a separate + spec, and allowing a second string parameter, and the use of the pragma + identifier ‘Check’. Historically, pragma ‘Precondition’ was implemented + prior to the development of Ada 2012, and has been retained in its + original form for compatibility purposes. + +  + File: gnat_rm.info, Node: Pragma Predicate, Next: Pragma Predicate_Failure, Prev: Pragma Precondition, Up: Implementation Defined Pragmas + + 2.130 Pragma Predicate + ====================== + + Syntax: + + pragma Predicate + ([Entity =>] type_LOCAL_NAME, + [Check =>] EXPRESSION); + + This pragma (available in all versions of Ada in GNAT) encompasses both + the ‘Static_Predicate’ and ‘Dynamic_Predicate’ aspects in Ada 2012. A + predicate is regarded as static if it has an allowed form for + ‘Static_Predicate’ and is otherwise treated as a ‘Dynamic_Predicate’. + Otherwise, predicates specified by this pragma behave exactly as + described in the Ada 2012 reference manual. For example, if we have + + type R is range 1 .. 10; + subtype S is R; + pragma Predicate (Entity => S, Check => S not in 4 .. 6); + subtype Q is R + pragma Predicate (Entity => Q, Check => F(Q) or G(Q)); + + the effect is identical to the following Ada 2012 code: + + type R is range 1 .. 10; + subtype S is R with + Static_Predicate => S not in 4 .. 6; + subtype Q is R with + Dynamic_Predicate => F(Q) or G(Q); + + Note that there are no pragmas ‘Dynamic_Predicate’ or + ‘Static_Predicate’. That is because these pragmas would affect legality + and semantics of the program and thus do not have a neutral effect if + ignored. The motivation behind providing pragmas equivalent to + corresponding aspects is to allow a program to be written using the + pragmas, and then compiled with a compiler that will ignore the pragmas. + That doesn’t work in the case of static and dynamic predicates, since if + the corresponding pragmas are ignored, then the behavior of the program + is fundamentally changed (for example a membership test ‘A in B’ would + not take into account a predicate defined for subtype B). When following + this approach, the use of predicates should be avoided. + +  + File: gnat_rm.info, Node: Pragma Predicate_Failure, Next: Pragma Preelaborable_Initialization, Prev: Pragma Predicate, Up: Implementation Defined Pragmas + + 2.131 Pragma Predicate_Failure + ============================== + + Syntax: + + pragma Predicate_Failure + ([Entity =>] type_LOCAL_NAME, + [Message =>] String_Expression); + + The ‘Predicate_Failure’ pragma is intended to be an exact replacement + for the language-defined ‘Predicate_Failure’ aspect, and shares its + restrictions and semantics. + +  + File: gnat_rm.info, Node: Pragma Preelaborable_Initialization, Next: Pragma Prefix_Exception_Messages, Prev: Pragma Predicate_Failure, Up: Implementation Defined Pragmas + + 2.132 Pragma Preelaborable_Initialization + ========================================= + + Syntax: + + pragma Preelaborable_Initialization (DIRECT_NAME); + + This pragma is standard in Ada 2005, but is available in all earlier + versions of Ada as an implementation-defined pragma. See Ada 2012 + Reference Manual for details. + +  + File: gnat_rm.info, Node: Pragma Prefix_Exception_Messages, Next: Pragma Pre_Class, Prev: Pragma Preelaborable_Initialization, Up: Implementation Defined Pragmas + + 2.133 Pragma Prefix_Exception_Messages + ====================================== + + Syntax: + + pragma Prefix_Exception_Messages; + + This is an implementation-defined configuration pragma that affects the + behavior of raise statements with a message given as a static string + constant (typically a string literal). In such cases, the string will + be automatically prefixed by the name of the enclosing entity (giving + the package and subprogram containing the raise statement). This helps + to identify where messages are coming from, and this mode is automatic + for the run-time library. + + The pragma has no effect if the message is computed with an expression + other than a static string constant, since the assumption in this case + is that the program computes exactly the string it wants. If you still + want the prefixing in this case, you can always call + ‘GNAT.Source_Info.Enclosing_Entity’ and prepend the string manually. + +  + File: gnat_rm.info, Node: Pragma Pre_Class, Next: Pragma Priority_Specific_Dispatching, Prev: Pragma Prefix_Exception_Messages, Up: Implementation Defined Pragmas + + 2.134 Pragma Pre_Class + ====================== + + Syntax: + + pragma Pre_Class (Boolean_Expression); + + The ‘Pre_Class’ pragma is intended to be an exact replacement for the + language-defined ‘Pre'Class’ aspect, and shares its restrictions and + semantics. It must appear either immediately following the + corresponding subprogram declaration (only other pragmas may intervene), + or if there is no separate subprogram declaration, then it can appear at + the start of the declarations in a subprogram body (preceded only by + other pragmas). + + Note: This pragma is called ‘Pre_Class’ rather than ‘Pre'Class’ because + the latter would not be strictly conforming to the allowed syntax for + pragmas. The motivation for providing pragmas equivalent to the aspects + is to allow a program to be written using the pragmas, and then compiled + if necessary using an Ada compiler that does not recognize the pragmas + or aspects, but is prepared to ignore the pragmas. The assertion policy + that controls this pragma is ‘Pre'Class’, not ‘Pre_Class’. + +  + File: gnat_rm.info, Node: Pragma Priority_Specific_Dispatching, Next: Pragma Profile, Prev: Pragma Pre_Class, Up: Implementation Defined Pragmas + + 2.135 Pragma Priority_Specific_Dispatching + ========================================== + + Syntax: + + pragma Priority_Specific_Dispatching ( + POLICY_IDENTIFIER, + first_priority_EXPRESSION, + last_priority_EXPRESSION) + + POLICY_IDENTIFIER ::= + EDF_Across_Priorities | + FIFO_Within_Priorities | + Non_Preemptive_Within_Priorities | + Round_Robin_Within_Priorities + + This pragma is standard in Ada 2005, but is available in all earlier + versions of Ada as an implementation-defined pragma. See Ada 2012 + Reference Manual for details. + +  + File: gnat_rm.info, Node: Pragma Profile, Next: Pragma Profile_Warnings, Prev: Pragma Priority_Specific_Dispatching, Up: Implementation Defined Pragmas + + 2.136 Pragma Profile + ==================== + + Syntax: + + pragma Profile (Ravenscar | Restricted | Rational | Jorvik | + GNAT_Extended_Ravenscar | GNAT_Ravenscar_EDF ); + + This pragma is standard in Ada 2005, but is available in all earlier + versions of Ada as an implementation-defined pragma. This is a + configuration pragma that establishes a set of configuration pragmas + that depend on the argument. ‘Ravenscar’ is standard in Ada 2005. + ‘Jorvik’ is standard in Ada 202x. The other possibilities + (‘Restricted’, ‘Rational’, ‘GNAT_Extended_Ravenscar’, + ‘GNAT_Ravenscar_EDF’) are implementation-defined. + ‘GNAT_Extended_Ravenscar’ is an alias for ‘Jorvik’. + + The set of configuration pragmas is defined in the following sections. + + * Pragma Profile (Ravenscar) + + The ‘Ravenscar’ profile is standard in Ada 2005, but is available + in all earlier versions of Ada as an implementation-defined pragma. + This profile establishes the following set of configuration + pragmas: + + * ‘Task_Dispatching_Policy (FIFO_Within_Priorities)’ + + [RM D.2.2] Tasks are dispatched following a preemptive + priority-ordered scheduling policy. + + * ‘Locking_Policy (Ceiling_Locking)’ + + [RM D.3] While tasks and interrupts execute a protected + action, they inherit the ceiling priority of the corresponding + protected object. + + * ‘Detect_Blocking’ + + This pragma forces the detection of potentially blocking + operations within a protected operation, and to raise + Program_Error if that happens. + + plus the following set of restrictions: + + * ‘Max_Entry_Queue_Length => 1’ + + No task can be queued on a protected entry. + + * ‘Max_Protected_Entries => 1’ + + * ‘Max_Task_Entries => 0’ + + No rendezvous statements are allowed. + + * ‘No_Abort_Statements’ + + * ‘No_Dynamic_Attachment’ + + * ‘No_Dynamic_Priorities’ + + * ‘No_Implicit_Heap_Allocations’ + + * ‘No_Local_Protected_Objects’ + + * ‘No_Local_Timing_Events’ + + * ‘No_Protected_Type_Allocators’ + + * ‘No_Relative_Delay’ + + * ‘No_Requeue_Statements’ + + * ‘No_Select_Statements’ + + * ‘No_Specific_Termination_Handlers’ + + * ‘No_Task_Allocators’ + + * ‘No_Task_Hierarchy’ + + * ‘No_Task_Termination’ + + * ‘Simple_Barriers’ + + The Ravenscar profile also includes the following restrictions that + specify that there are no semantic dependencies on the + corresponding predefined packages: + + * ‘No_Dependence => Ada.Asynchronous_Task_Control’ + + * ‘No_Dependence => Ada.Calendar’ + + * ‘No_Dependence => Ada.Execution_Time.Group_Budget’ + + * ‘No_Dependence => Ada.Execution_Time.Timers’ + + * ‘No_Dependence => Ada.Task_Attributes’ + + * ‘No_Dependence => System.Multiprocessors.Dispatching_Domains’ + + This set of configuration pragmas and restrictions correspond to + the definition of the ‘Ravenscar Profile’ for limited tasking, + devised and published by the ‘International Real-Time Ada Workshop, + 1997’. A description is also available at + ‘http://www-users.cs.york.ac.uk/~burns/ravenscar.ps’. + + The original definition of the profile was revised at subsequent + IRTAW meetings. It has been included in the ISO ‘Guide for the Use + of the Ada Programming Language in High Integrity Systems’, and was + made part of the Ada 2005 standard. The formal definition given by + the Ada Rapporteur Group (ARG) can be found in two Ada Issues + (AI-249 and AI-305) available at + ‘http://www.ada-auth.org/cgi-bin/cvsweb.cgi/ais/ai-00249.txt’ and + ‘http://www.ada-auth.org/cgi-bin/cvsweb.cgi/ais/ai-00305.txt’. + + The above set is a superset of the restrictions provided by pragma + ‘Profile (Restricted)’, it includes six additional restrictions + (‘Simple_Barriers’, ‘No_Select_Statements’, ‘No_Calendar’, + ‘No_Implicit_Heap_Allocations’, ‘No_Relative_Delay’ and + ‘No_Task_Termination’). This means that pragma ‘Profile + (Ravenscar)’, like the pragma ‘Profile (Restricted)’, automatically + causes the use of a simplified, more efficient version of the + tasking run-time library. + + * Pragma Profile (Jorvik) + + ‘Jorvik’ is the new profile added to the Ada 202x draft standard, + previously implemented under the name ‘GNAT_Extended_Ravenscar’. + + The ‘No_Implicit_Heap_Allocations’ restriction has been replaced by + ‘No_Implicit_Task_Allocations’ and + ‘No_Implicit_Protected_Object_Allocations’. + + The ‘Simple_Barriers’ restriction has been replaced by + ‘Pure_Barriers’. + + The ‘Max_Protected_Entries’, ‘Max_Entry_Queue_Length’, and + ‘No_Relative_Delay’ restrictions have been removed. + + Details on the rationale for ‘Jorvik’ and implications for use may + be found in ‘A New Ravenscar-Based Profile’ by P. Rogers, J. Ruiz, + T. Gingold and P. Bernardi, in ‘Reliable Software Technologies – + Ada Europe 2017’, Springer-Verlag Lecture Notes in Computer + Science, Number 10300. + + * Pragma Profile (GNAT_Ravenscar_EDF) + + This profile corresponds to the Ravenscar profile but using + EDF_Across_Priority as the Task_Scheduling_Policy. + + * Pragma Profile (Restricted) + + This profile corresponds to the GNAT restricted run time. It + establishes the following set of restrictions: + + * ‘No_Abort_Statements’ + + * ‘No_Entry_Queue’ + + * ‘No_Task_Hierarchy’ + + * ‘No_Task_Allocators’ + + * ‘No_Dynamic_Priorities’ + + * ‘No_Terminate_Alternatives’ + + * ‘No_Dynamic_Attachment’ + + * ‘No_Protected_Type_Allocators’ + + * ‘No_Local_Protected_Objects’ + + * ‘No_Requeue_Statements’ + + * ‘No_Task_Attributes_Package’ + + * ‘Max_Asynchronous_Select_Nesting = 0’ + + * ‘Max_Task_Entries = 0’ + + * ‘Max_Protected_Entries = 1’ + + * ‘Max_Select_Alternatives = 0’ + + This set of restrictions causes the automatic selection of a + simplified version of the run time that provides improved + performance for the limited set of tasking functionality permitted + by this set of restrictions. + + * Pragma Profile (Rational) + + The Rational profile is intended to facilitate porting legacy code + that compiles with the Rational APEX compiler, even when the code + includes non- conforming Ada constructs. The profile enables the + following three pragmas: + + * ‘pragma Implicit_Packing’ + + * ‘pragma Overriding_Renamings’ + + * ‘pragma Use_VADS_Size’ + +  + File: gnat_rm.info, Node: Pragma Profile_Warnings, Next: Pragma Propagate_Exceptions, Prev: Pragma Profile, Up: Implementation Defined Pragmas + + 2.137 Pragma Profile_Warnings + ============================= + + Syntax: + + pragma Profile_Warnings (Ravenscar | Restricted | Rational); + + This is an implementation-defined pragma that is similar in effect to + ‘pragma Profile’ except that instead of generating ‘Restrictions’ + pragmas, it generates ‘Restriction_Warnings’ pragmas. The result is + that violations of the profile generate warning messages instead of + error messages. + +  + File: gnat_rm.info, Node: Pragma Propagate_Exceptions, Next: Pragma Provide_Shift_Operators, Prev: Pragma Profile_Warnings, Up: Implementation Defined Pragmas + + 2.138 Pragma Propagate_Exceptions + ================================= + + Syntax: + + pragma Propagate_Exceptions; + + This pragma is now obsolete and, other than generating a warning if + warnings on obsolescent features are enabled, is ignored. It is + retained for compatibility purposes. It used to be used in connection + with optimization of a now-obsolete mechanism for implementation of + exceptions. + +  + File: gnat_rm.info, Node: Pragma Provide_Shift_Operators, Next: Pragma Psect_Object, Prev: Pragma Propagate_Exceptions, Up: Implementation Defined Pragmas + + 2.139 Pragma Provide_Shift_Operators + ==================================== + + Syntax: + + pragma Provide_Shift_Operators (integer_first_subtype_LOCAL_NAME); + + This pragma can be applied to a first subtype local name that specifies + either an unsigned or signed type. It has the effect of providing the + five shift operators (Shift_Left, Shift_Right, Shift_Right_Arithmetic, + Rotate_Left and Rotate_Right) for the given type. It is similar to + including the function declarations for these five operators, together + with the pragma Import (Intrinsic, …) statements. + +  + File: gnat_rm.info, Node: Pragma Psect_Object, Next: Pragma Pure_Function, Prev: Pragma Provide_Shift_Operators, Up: Implementation Defined Pragmas + + 2.140 Pragma Psect_Object + ========================= + + Syntax: + + pragma Psect_Object ( + [Internal =>] LOCAL_NAME, + [, [External =>] EXTERNAL_SYMBOL] + [, [Size =>] EXTERNAL_SYMBOL]); + + EXTERNAL_SYMBOL ::= + IDENTIFIER + | static_string_EXPRESSION + + This pragma is identical in effect to pragma ‘Common_Object’. + +  + File: gnat_rm.info, Node: Pragma Pure_Function, Next: Pragma Rational, Prev: Pragma Psect_Object, Up: Implementation Defined Pragmas + + 2.141 Pragma Pure_Function + ========================== + + Syntax: + + pragma Pure_Function ([Entity =>] function_LOCAL_NAME); + + This pragma appears in the same declarative part as a function + declaration (or a set of function declarations if more than one + overloaded declaration exists, in which case the pragma applies to all + entities). It specifies that the function ‘Entity’ is to be considered + pure for the purposes of code generation. This means that the compiler + can assume that there are no side effects, and in particular that two + calls with identical arguments produce the same result. It also means + that the function can be used in an address clause. + + Note that, quite deliberately, there are no static checks to try to + ensure that this promise is met, so ‘Pure_Function’ can be used with + functions that are conceptually pure, even if they do modify global + variables. For example, a square root function that is instrumented to + count the number of times it is called is still conceptually pure, and + can still be optimized, even though it modifies a global variable (the + count). Memo functions are another example (where a table of previous + calls is kept and consulted to avoid re-computation). + + Note also that the normal rules excluding optimization of subprograms in + pure units (when parameter types are descended from System.Address, or + when the full view of a parameter type is limited), do not apply for the + Pure_Function case. If you explicitly specify Pure_Function, the + compiler may optimize away calls with identical arguments, and if that + results in unexpected behavior, the proper action is not to use the + pragma for subprograms that are not (conceptually) pure. + + Note: Most functions in a ‘Pure’ package are automatically pure, and + there is no need to use pragma ‘Pure_Function’ for such functions. One + exception is any function that has at least one formal of type + ‘System.Address’ or a type derived from it. Such functions are not + considered pure by default, since the compiler assumes that the + ‘Address’ parameter may be functioning as a pointer and that the + referenced data may change even if the address value does not. + Similarly, imported functions are not considered to be pure by default, + since there is no way of checking that they are in fact pure. The use + of pragma ‘Pure_Function’ for such a function will override these + default assumption, and cause the compiler to treat a designated + subprogram as pure in these cases. + + Note: If pragma ‘Pure_Function’ is applied to a renamed function, it + applies to the underlying renamed function. This can be used to + disambiguate cases of overloading where some but not all functions in a + set of overloaded functions are to be designated as pure. + + If pragma ‘Pure_Function’ is applied to a library-level function, the + function is also considered pure from an optimization point of view, but + the unit is not a Pure unit in the categorization sense. So for + example, a function thus marked is free to ‘with’ non-pure units. + +  + File: gnat_rm.info, Node: Pragma Rational, Next: Pragma Ravenscar, Prev: Pragma Pure_Function, Up: Implementation Defined Pragmas + + 2.142 Pragma Rational + ===================== + + Syntax: + + pragma Rational; + + This pragma is considered obsolescent, but is retained for compatibility + purposes. It is equivalent to: + + pragma Profile (Rational); + +  + File: gnat_rm.info, Node: Pragma Ravenscar, Next: Pragma Refined_Depends, Prev: Pragma Rational, Up: Implementation Defined Pragmas + + 2.143 Pragma Ravenscar + ====================== + + Syntax: + + pragma Ravenscar; + + This pragma is considered obsolescent, but is retained for compatibility + purposes. It is equivalent to: + + pragma Profile (Ravenscar); + + which is the preferred method of setting the ‘Ravenscar’ profile. + +  + File: gnat_rm.info, Node: Pragma Refined_Depends, Next: Pragma Refined_Global, Prev: Pragma Ravenscar, Up: Implementation Defined Pragmas + + 2.144 Pragma Refined_Depends + ============================ + + Syntax: + + pragma Refined_Depends (DEPENDENCY_RELATION); + + DEPENDENCY_RELATION ::= + null + | (DEPENDENCY_CLAUSE {, DEPENDENCY_CLAUSE}) + + DEPENDENCY_CLAUSE ::= + OUTPUT_LIST =>[+] INPUT_LIST + | NULL_DEPENDENCY_CLAUSE + + NULL_DEPENDENCY_CLAUSE ::= null => INPUT_LIST + + OUTPUT_LIST ::= OUTPUT | (OUTPUT {, OUTPUT}) + + INPUT_LIST ::= null | INPUT | (INPUT {, INPUT}) + + OUTPUT ::= NAME | FUNCTION_RESULT + INPUT ::= NAME + + where FUNCTION_RESULT is a function Result attribute_reference + + For the semantics of this pragma, see the entry for aspect + ‘Refined_Depends’ in the SPARK 2014 Reference Manual, section 6.1.5. + +  + File: gnat_rm.info, Node: Pragma Refined_Global, Next: Pragma Refined_Post, Prev: Pragma Refined_Depends, Up: Implementation Defined Pragmas + + 2.145 Pragma Refined_Global + =========================== + + Syntax: + + pragma Refined_Global (GLOBAL_SPECIFICATION); + + GLOBAL_SPECIFICATION ::= + null + | (GLOBAL_LIST) + | (MODED_GLOBAL_LIST {, MODED_GLOBAL_LIST}) + + MODED_GLOBAL_LIST ::= MODE_SELECTOR => GLOBAL_LIST + + MODE_SELECTOR ::= In_Out | Input | Output | Proof_In + GLOBAL_LIST ::= GLOBAL_ITEM | (GLOBAL_ITEM {, GLOBAL_ITEM}) + GLOBAL_ITEM ::= NAME + + For the semantics of this pragma, see the entry for aspect + ‘Refined_Global’ in the SPARK 2014 Reference Manual, section 6.1.4. + +  + File: gnat_rm.info, Node: Pragma Refined_Post, Next: Pragma Refined_State, Prev: Pragma Refined_Global, Up: Implementation Defined Pragmas + + 2.146 Pragma Refined_Post + ========================= + + Syntax: + + pragma Refined_Post (boolean_EXPRESSION); + + For the semantics of this pragma, see the entry for aspect + ‘Refined_Post’ in the SPARK 2014 Reference Manual, section 7.2.7. + +  + File: gnat_rm.info, Node: Pragma Refined_State, Next: Pragma Relative_Deadline, Prev: Pragma Refined_Post, Up: Implementation Defined Pragmas + + 2.147 Pragma Refined_State + ========================== + + Syntax: + + pragma Refined_State (REFINEMENT_LIST); + + REFINEMENT_LIST ::= + (REFINEMENT_CLAUSE {, REFINEMENT_CLAUSE}) + + REFINEMENT_CLAUSE ::= state_NAME => CONSTITUENT_LIST + + CONSTITUENT_LIST ::= + null + | CONSTITUENT + | (CONSTITUENT {, CONSTITUENT}) + + CONSTITUENT ::= object_NAME | state_NAME + + For the semantics of this pragma, see the entry for aspect + ‘Refined_State’ in the SPARK 2014 Reference Manual, section 7.2.2. + +  + File: gnat_rm.info, Node: Pragma Relative_Deadline, Next: Pragma Remote_Access_Type, Prev: Pragma Refined_State, Up: Implementation Defined Pragmas + + 2.148 Pragma Relative_Deadline + ============================== + + Syntax: + + pragma Relative_Deadline (time_span_EXPRESSION); + + This pragma is standard in Ada 2005, but is available in all earlier + versions of Ada as an implementation-defined pragma. See Ada 2012 + Reference Manual for details. + +  + File: gnat_rm.info, Node: Pragma Remote_Access_Type, Next: Pragma Rename_Pragma, Prev: Pragma Relative_Deadline, Up: Implementation Defined Pragmas + + 2.149 Pragma Remote_Access_Type + =============================== + + Syntax: + + pragma Remote_Access_Type ([Entity =>] formal_access_type_LOCAL_NAME); + + This pragma appears in the formal part of a generic declaration. It + specifies an exception to the RM rule from E.2.2(17/2), which forbids + the use of a remote access to class-wide type as actual for a formal + access type. + + When this pragma applies to a formal access type ‘Entity’, that type is + treated as a remote access to class-wide type in the generic. It must + be a formal general access type, and its designated type must be the + class-wide type of a formal tagged limited private type from the same + generic declaration. + + In the generic unit, the formal type is subject to all restrictions + pertaining to remote access to class-wide types. At instantiation, the + actual type must be a remote access to class-wide type. + +  + File: gnat_rm.info, Node: Pragma Rename_Pragma, Next: Pragma Restricted_Run_Time, Prev: Pragma Remote_Access_Type, Up: Implementation Defined Pragmas + + 2.150 Pragma Rename_Pragma + ========================== + + Syntax: + + pragma Rename_Pragma ( + [New_Name =>] IDENTIFIER, + [Renamed =>] pragma_IDENTIFIER); + + This pragma provides a mechanism for supplying new names for existing + pragmas. The ‘New_Name’ identifier can subsequently be used as a + synonym for the Renamed pragma. For example, suppose you have code that + was originally developed on a compiler that supports Inline_Only as an + implementation defined pragma. And suppose the semantics of pragma + Inline_Only are identical to (or at least very similar to) the GNAT + implementation defined pragma Inline_Always. You could globally replace + Inline_Only with Inline_Always. + + However, to avoid that source modification, you could instead add a + configuration pragma: + + pragma Rename_Pragma ( + New_Name => Inline_Only, + Renamed => Inline_Always); + + Then GNAT will treat “pragma Inline_Only …” as if you had written + “pragma Inline_Always …”. + + Pragma Inline_Only will not necessarily mean the same thing as the other + Ada compiler; it’s up to you to make sure the semantics are close + enough. + +  + File: gnat_rm.info, Node: Pragma Restricted_Run_Time, Next: Pragma Restriction_Warnings, Prev: Pragma Rename_Pragma, Up: Implementation Defined Pragmas + + 2.151 Pragma Restricted_Run_Time + ================================ + + Syntax: + + pragma Restricted_Run_Time; + + This pragma is considered obsolescent, but is retained for compatibility + purposes. It is equivalent to: + + pragma Profile (Restricted); + + which is the preferred method of setting the restricted run time + profile. + +  + File: gnat_rm.info, Node: Pragma Restriction_Warnings, Next: Pragma Reviewable, Prev: Pragma Restricted_Run_Time, Up: Implementation Defined Pragmas + + 2.152 Pragma Restriction_Warnings + ================================= + + Syntax: + + pragma Restriction_Warnings + (restriction_IDENTIFIER {, restriction_IDENTIFIER}); + + This pragma allows a series of restriction identifiers to be specified + (the list of allowed identifiers is the same as for pragma + ‘Restrictions’). For each of these identifiers the compiler checks for + violations of the restriction, but generates a warning message rather + than an error message if the restriction is violated. + + One use of this is in situations where you want to know about violations + of a restriction, but you want to ignore some of these violations. + Consider this example, where you want to set Ada_95 mode and enable + style checks, but you want to know about any other use of implementation + pragmas: + + pragma Restriction_Warnings (No_Implementation_Pragmas); + pragma Warnings (Off, "violation of No_Implementation_Pragmas"); + pragma Ada_95; + pragma Style_Checks ("2bfhkM160"); + pragma Warnings (On, "violation of No_Implementation_Pragmas"); + + By including the above lines in a configuration pragmas file, the Ada_95 + and Style_Checks pragmas are accepted without generating a warning, but + any other use of implementation defined pragmas will cause a warning to + be generated. + +  + File: gnat_rm.info, Node: Pragma Reviewable, Next: Pragma Secondary_Stack_Size, Prev: Pragma Restriction_Warnings, Up: Implementation Defined Pragmas + + 2.153 Pragma Reviewable + ======================= + + Syntax: + + pragma Reviewable; + + This pragma is an RM-defined standard pragma, but has no effect on the + program being compiled, or on the code generated for the program. + + To obtain the required output specified in RM H.3.1, the compiler must + be run with various special switches as follows: + + * `Where compiler-generated run-time checks remain' + + The switch `-gnatGL' may be used to list the expanded code in + pseudo-Ada form. Runtime checks show up in the listing either as + explicit checks or operators marked with {} to indicate a check is + present. + + * `An identification of known exceptions at compile time' + + If the program is compiled with `-gnatwa', the compiler warning + messages will indicate all cases where the compiler detects that an + exception is certain to occur at run time. + + * `Possible reads of uninitialized variables' + + The compiler warns of many such cases, but its output is + incomplete. + + A supplemental static analysis tool may be used to obtain a + comprehensive list of all possible points at which uninitialized data + may be read. + + * `Where run-time support routines are implicitly invoked' + + In the output from `-gnatGL', run-time calls are explicitly listed + as calls to the relevant run-time routine. + + * `Object code listing' + + This may be obtained either by using the `-S' switch, or the + objdump utility. + + * `Constructs known to be erroneous at compile time' + + These are identified by warnings issued by the compiler (use + `-gnatwa'). + + * `Stack usage information' + + Static stack usage data (maximum per-subprogram) can be obtained + via the `-fstack-usage' switch to the compiler. Dynamic stack + usage data (per task) can be obtained via the `-u' switch to + gnatbind + + * `Object code listing of entire partition' + + This can be obtained by compiling the partition with `-S', or by + applying objdump to all the object files that are part of the + partition. + + * `A description of the run-time model' + + The full sources of the run-time are available, and the + documentation of these routines describes how these run-time + routines interface to the underlying operating system facilities. + + * `Control and data-flow information' + + A supplemental static analysis tool may be used to obtain complete + control and data-flow information, as well as comprehensive messages + identifying possible problems based on this information. + +  + File: gnat_rm.info, Node: Pragma Secondary_Stack_Size, Next: Pragma Share_Generic, Prev: Pragma Reviewable, Up: Implementation Defined Pragmas + + 2.154 Pragma Secondary_Stack_Size + ================================= + + Syntax: + + pragma Secondary_Stack_Size (integer_EXPRESSION); + + This pragma appears within the task definition of a single task + declaration or a task type declaration (like pragma ‘Storage_Size’) and + applies to all task objects of that type. The argument specifies the + size of the secondary stack to be used by these task objects, and must + be of an integer type. The secondary stack is used to handle functions + that return a variable-sized result, for example a function returning an + unconstrained String. + + Note this pragma only applies to targets using fixed secondary stacks, + like VxWorks 653 and bare board targets, where a fixed block for the + secondary stack is allocated from the primary stack of the task. By + default, these targets assign a percentage of the primary stack for the + secondary stack, as defined by ‘System.Parameter.Sec_Stack_Percentage’. + With this pragma, an ‘integer_EXPRESSION’ of bytes is assigned from the + primary stack instead. + + For most targets, the pragma does not apply as the secondary stack grows + on demand: allocated as a chain of blocks in the heap. The default size + of these blocks can be modified via the ‘-D’ binder option as described + in ‘GNAT User’s Guide’. + + Note that no check is made to see if the secondary stack can fit inside + the primary stack. + + Note the pragma cannot appear when the restriction ‘No_Secondary_Stack’ + is in effect. + +  + File: gnat_rm.info, Node: Pragma Share_Generic, Next: Pragma Shared, Prev: Pragma Secondary_Stack_Size, Up: Implementation Defined Pragmas + + 2.155 Pragma Share_Generic + ========================== + + Syntax: + + pragma Share_Generic (GNAME {, GNAME}); + + GNAME ::= generic_unit_NAME | generic_instance_NAME + + This pragma is provided for compatibility with Dec Ada 83. It has no + effect in GNAT (which does not implement shared generics), other than to + check that the given names are all names of generic units or generic + instances. + +  + File: gnat_rm.info, Node: Pragma Shared, Next: Pragma Short_Circuit_And_Or, Prev: Pragma Share_Generic, Up: Implementation Defined Pragmas + + 2.156 Pragma Shared + =================== + + This pragma is provided for compatibility with Ada 83. The syntax and + semantics are identical to pragma Atomic. + +  + File: gnat_rm.info, Node: Pragma Short_Circuit_And_Or, Next: Pragma Short_Descriptors, Prev: Pragma Shared, Up: Implementation Defined Pragmas + + 2.157 Pragma Short_Circuit_And_Or + ================================= + + Syntax: + + pragma Short_Circuit_And_Or; + + This configuration pragma causes any occurrence of the AND operator + applied to operands of type Standard.Boolean to be short-circuited (i.e. + the AND operator is treated as if it were AND THEN). Or is similarly + treated as OR ELSE. This may be useful in the context of certification + protocols requiring the use of short-circuited logical operators. If + this configuration pragma occurs locally within the file being compiled, + it applies only to the file being compiled. There is no requirement + that all units in a partition use this option. + +  + File: gnat_rm.info, Node: Pragma Short_Descriptors, Next: Pragma Simple_Storage_Pool_Type, Prev: Pragma Short_Circuit_And_Or, Up: Implementation Defined Pragmas + + 2.158 Pragma Short_Descriptors + ============================== + + Syntax: + + pragma Short_Descriptors + + This pragma is provided for compatibility with other Ada + implementations. It is recognized but ignored by all current versions + of GNAT. + +  + File: gnat_rm.info, Node: Pragma Simple_Storage_Pool_Type, Next: Pragma Source_File_Name, Prev: Pragma Short_Descriptors, Up: Implementation Defined Pragmas + + 2.159 Pragma Simple_Storage_Pool_Type + ===================================== + + Syntax: + + pragma Simple_Storage_Pool_Type (type_LOCAL_NAME); + + A type can be established as a ‘simple storage pool type’ by applying + the representation pragma ‘Simple_Storage_Pool_Type’ to the type. A + type named in the pragma must be a library-level immutably limited + record type or limited tagged type declared immediately within a package + declaration. The type can also be a limited private type whose full + type is allowed as a simple storage pool type. + + For a simple storage pool type ‘SSP’, nonabstract primitive subprograms + ‘Allocate’, ‘Deallocate’, and ‘Storage_Size’ can be declared that are + subtype conformant with the following subprogram declarations: + + procedure Allocate + (Pool : in out SSP; + Storage_Address : out System.Address; + Size_In_Storage_Elements : System.Storage_Elements.Storage_Count; + Alignment : System.Storage_Elements.Storage_Count); + + procedure Deallocate + (Pool : in out SSP; + Storage_Address : System.Address; + Size_In_Storage_Elements : System.Storage_Elements.Storage_Count; + Alignment : System.Storage_Elements.Storage_Count); + + function Storage_Size (Pool : SSP) + return System.Storage_Elements.Storage_Count; + + Procedure ‘Allocate’ must be declared, whereas ‘Deallocate’ and + ‘Storage_Size’ are optional. If ‘Deallocate’ is not declared, then + applying an unchecked deallocation has no effect other than to set its + actual parameter to null. If ‘Storage_Size’ is not declared, then the + ‘Storage_Size’ attribute applied to an access type associated with a + pool object of type SSP returns zero. Additional operations can be + declared for a simple storage pool type (such as for supporting a + mark/release storage-management discipline). + + An object of a simple storage pool type can be associated with an access + type by specifying the attribute *note Simple_Storage_Pool: e3. For + example: + + My_Pool : My_Simple_Storage_Pool_Type; + + type Acc is access My_Data_Type; + + for Acc'Simple_Storage_Pool use My_Pool; + + See attribute *note Simple_Storage_Pool: e3. for further details. + +  + File: gnat_rm.info, Node: Pragma Source_File_Name, Next: Pragma Source_File_Name_Project, Prev: Pragma Simple_Storage_Pool_Type, Up: Implementation Defined Pragmas + + 2.160 Pragma Source_File_Name + ============================= + + Syntax: + + pragma Source_File_Name ( + [Unit_Name =>] unit_NAME, + Spec_File_Name => STRING_LITERAL, + [Index => INTEGER_LITERAL]); + + pragma Source_File_Name ( + [Unit_Name =>] unit_NAME, + Body_File_Name => STRING_LITERAL, + [Index => INTEGER_LITERAL]); + + Use this to override the normal naming convention. It is a + configuration pragma, and so has the usual applicability of + configuration pragmas (i.e., it applies to either an entire partition, + or to all units in a compilation, or to a single unit, depending on how + it is used. ‘unit_name’ is mapped to ‘file_name_literal’. The + identifier for the second argument is required, and indicates whether + this is the file name for the spec or for the body. + + The optional Index argument should be used when a file contains multiple + units, and when you do not want to use ‘gnatchop’ to separate then into + multiple files (which is the recommended procedure to limit the number + of recompilations that are needed when some sources change). For + instance, if the source file ‘source.ada’ contains + + package B is + ... + end B; + + with B; + procedure A is + begin + .. + end A; + + you could use the following configuration pragmas: + + pragma Source_File_Name + (B, Spec_File_Name => "source.ada", Index => 1); + pragma Source_File_Name + (A, Body_File_Name => "source.ada", Index => 2); + + Note that the ‘gnatname’ utility can also be used to generate those + configuration pragmas. + + Another form of the ‘Source_File_Name’ pragma allows the specification + of patterns defining alternative file naming schemes to apply to all + files. + + pragma Source_File_Name + ( [Spec_File_Name =>] STRING_LITERAL + [,[Casing =>] CASING_SPEC] + [,[Dot_Replacement =>] STRING_LITERAL]); + + pragma Source_File_Name + ( [Body_File_Name =>] STRING_LITERAL + [,[Casing =>] CASING_SPEC] + [,[Dot_Replacement =>] STRING_LITERAL]); + + pragma Source_File_Name + ( [Subunit_File_Name =>] STRING_LITERAL + [,[Casing =>] CASING_SPEC] + [,[Dot_Replacement =>] STRING_LITERAL]); + + CASING_SPEC ::= Lowercase | Uppercase | Mixedcase + + The first argument is a pattern that contains a single asterisk + indicating the point at which the unit name is to be inserted in the + pattern string to form the file name. The second argument is optional. + If present it specifies the casing of the unit name in the resulting + file name string. The default is lower case. Finally the third + argument allows for systematic replacement of any dots in the unit name + by the specified string literal. + + Note that Source_File_Name pragmas should not be used if you are using + project files. The reason for this rule is that the project manager is + not aware of these pragmas, and so other tools that use the projet file + would not be aware of the intended naming conventions. If you are using + project files, file naming is controlled by Source_File_Name_Project + pragmas, which are usually supplied automatically by the project + manager. A pragma Source_File_Name cannot appear after a *note Pragma + Source_File_Name_Project: e6. + + For more details on the use of the ‘Source_File_Name’ pragma, see the + sections on ‘Using Other File Names’ and ‘Alternative File Naming + Schemes’ in the ‘GNAT User’s Guide’. + +  + File: gnat_rm.info, Node: Pragma Source_File_Name_Project, Next: Pragma Source_Reference, Prev: Pragma Source_File_Name, Up: Implementation Defined Pragmas + + 2.161 Pragma Source_File_Name_Project + ===================================== + + This pragma has the same syntax and semantics as pragma + Source_File_Name. It is only allowed as a stand-alone configuration + pragma. It cannot appear after a *note Pragma Source_File_Name: e5, and + most importantly, once pragma Source_File_Name_Project appears, no + further Source_File_Name pragmas are allowed. + + The intention is that Source_File_Name_Project pragmas are always + generated by the Project Manager in a manner consistent with the naming + specified in a project file, and when naming is controlled in this + manner, it is not permissible to attempt to modify this naming scheme + using Source_File_Name or Source_File_Name_Project pragmas (which would + not be known to the project manager). + +  + File: gnat_rm.info, Node: Pragma Source_Reference, Next: Pragma SPARK_Mode, Prev: Pragma Source_File_Name_Project, Up: Implementation Defined Pragmas + + 2.162 Pragma Source_Reference + ============================= + + Syntax: + + pragma Source_Reference (INTEGER_LITERAL, STRING_LITERAL); + + This pragma must appear as the first line of a source file. + ‘integer_literal’ is the logical line number of the line following the + pragma line (for use in error messages and debugging information). + ‘string_literal’ is a static string constant that specifies the file + name to be used in error messages and debugging information. This is + most notably used for the output of ‘gnatchop’ with the `-r' switch, to + make sure that the original unchopped source file is the one referred + to. + + The second argument must be a string literal, it cannot be a static + string expression other than a string literal. This is because its + value is needed for error messages issued by all phases of the compiler. + +  + File: gnat_rm.info, Node: Pragma SPARK_Mode, Next: Pragma Static_Elaboration_Desired, Prev: Pragma Source_Reference, Up: Implementation Defined Pragmas + + 2.163 Pragma SPARK_Mode + ======================= + + Syntax: + + pragma SPARK_Mode [(On | Off)] ; + + In general a program can have some parts that are in SPARK 2014 (and + follow all the rules in the SPARK Reference Manual), and some parts that + are full Ada 2012. + + The SPARK_Mode pragma is used to identify which parts are in SPARK 2014 + (by default programs are in full Ada). The SPARK_Mode pragma can be + used in the following places: + + * As a configuration pragma, in which case it sets the default mode + for all units compiled with this pragma. + + * Immediately following a library-level subprogram spec + + * Immediately within a library-level package body + + * Immediately following the ‘private’ keyword of a library-level + package spec + + * Immediately following the ‘begin’ keyword of a library-level + package body + + * Immediately within a library-level subprogram body + + Normally a subprogram or package spec/body inherits the current mode + that is active at the point it is declared. But this can be overridden + by pragma within the spec or body as above. + + The basic consistency rule is that you can’t turn SPARK_Mode back ‘On’, + once you have explicitly (with a pragma) turned if ‘Off’. So the + following rules apply: + + If a subprogram spec has SPARK_Mode ‘Off’, then the body must also have + SPARK_Mode ‘Off’. + + For a package, we have four parts: + + * the package public declarations + + * the package private part + + * the body of the package + + * the elaboration code after ‘begin’ + + For a package, the rule is that if you explicitly turn SPARK_Mode ‘Off’ + for any part, then all the following parts must have SPARK_Mode ‘Off’. + Note that this may require repeating a pragma SPARK_Mode (‘Off’) in the + body. For example, if we have a configuration pragma SPARK_Mode (‘On’) + that turns the mode on by default everywhere, and one particular package + spec has pragma SPARK_Mode (‘Off’), then that pragma will need to be + repeated in the package body. + +  + File: gnat_rm.info, Node: Pragma Static_Elaboration_Desired, Next: Pragma Stream_Convert, Prev: Pragma SPARK_Mode, Up: Implementation Defined Pragmas + + 2.164 Pragma Static_Elaboration_Desired + ======================================= + + Syntax: + + pragma Static_Elaboration_Desired; + + This pragma is used to indicate that the compiler should attempt to + initialize statically the objects declared in the library unit to which + the pragma applies, when these objects are initialized (explicitly or + implicitly) by an aggregate. In the absence of this pragma, aggregates + in object declarations are expanded into assignments and loops, even + when the aggregate components are static constants. When the aggregate + is present the compiler builds a static expression that requires no + run-time code, so that the initialized object can be placed in read-only + data space. If the components are not static, or the aggregate has more + that 100 components, the compiler emits a warning that the pragma cannot + be obeyed. (See also the restriction No_Implicit_Loops, which supports + static construction of larger aggregates with static components that + include an others choice.) + +  + File: gnat_rm.info, Node: Pragma Stream_Convert, Next: Pragma Style_Checks, Prev: Pragma Static_Elaboration_Desired, Up: Implementation Defined Pragmas + + 2.165 Pragma Stream_Convert + =========================== + + Syntax: + + pragma Stream_Convert ( + [Entity =>] type_LOCAL_NAME, + [Read =>] function_NAME, + [Write =>] function_NAME); + + This pragma provides an efficient way of providing user-defined stream + attributes. Not only is it simpler to use than specifying the + attributes directly, but more importantly, it allows the specification + to be made in such a way that the predefined unit Ada.Streams is not + loaded unless it is actually needed (i.e. unless the stream attributes + are actually used); the use of the Stream_Convert pragma adds no + overhead at all, unless the stream attributes are actually used on the + designated type. + + The first argument specifies the type for which stream functions are + provided. The second parameter provides a function used to read values + of this type. It must name a function whose argument type may be any + subtype, and whose returned type must be the type given as the first + argument to the pragma. + + The meaning of the ‘Read’ parameter is that if a stream attribute + directly or indirectly specifies reading of the type given as the first + parameter, then a value of the type given as the argument to the Read + function is read from the stream, and then the Read function is used to + convert this to the required target type. + + Similarly the ‘Write’ parameter specifies how to treat write attributes + that directly or indirectly apply to the type given as the first + parameter. It must have an input parameter of the type specified by the + first parameter, and the return type must be the same as the input type + of the Read function. The effect is to first call the Write function to + convert to the given stream type, and then write the result type to the + stream. + + The Read and Write functions must not be overloaded subprograms. If + necessary renamings can be supplied to meet this requirement. The usage + of this attribute is best illustrated by a simple example, taken from + the GNAT implementation of package Ada.Strings.Unbounded: + + function To_Unbounded (S : String) return Unbounded_String + renames To_Unbounded_String; + + pragma Stream_Convert + (Unbounded_String, To_Unbounded, To_String); + + The specifications of the referenced functions, as given in the Ada + Reference Manual are: + + function To_Unbounded_String (Source : String) + return Unbounded_String; + + function To_String (Source : Unbounded_String) + return String; + + The effect is that if the value of an unbounded string is written to a + stream, then the representation of the item in the stream is in the same + format that would be used for ‘Standard.String'Output’, and this same + representation is expected when a value of this type is read from the + stream. Note that the value written always includes the bounds, even + for Unbounded_String’Write, since Unbounded_String is not an array type. + + Note that the ‘Stream_Convert’ pragma is not effective in the case of a + derived type of a non-limited tagged type. If such a type is specified + then the pragma is silently ignored, and the default implementation of + the stream attributes is used instead. + +  + File: gnat_rm.info, Node: Pragma Style_Checks, Next: Pragma Subtitle, Prev: Pragma Stream_Convert, Up: Implementation Defined Pragmas + + 2.166 Pragma Style_Checks + ========================= + + Syntax: + + pragma Style_Checks (string_LITERAL | ALL_CHECKS | + On | Off [, LOCAL_NAME]); + + This pragma is used in conjunction with compiler switches to control the + built in style checking provided by GNAT. The compiler switches, if set, + provide an initial setting for the switches, and this pragma may be used + to modify these settings, or the settings may be provided entirely by + the use of the pragma. This pragma can be used anywhere that a pragma + is legal, including use as a configuration pragma (including use in the + ‘gnat.adc’ file). + + The form with a string literal specifies which style options are to be + activated. These are additive, so they apply in addition to any + previously set style check options. The codes for the options are the + same as those used in the `-gnaty' switch to `gcc' or `gnatmake'. For + example the following two methods can be used to enable layout checking: + + * pragma Style_Checks ("l"); + + * gcc -c -gnatyl ... + + The form ‘ALL_CHECKS’ activates all standard checks (its use is + equivalent to the use of the ‘gnaty’ switch with no options. See the + ‘GNAT User’s Guide’ for details.) + + Note: the behavior is slightly different in GNAT mode (‘-gnatg’ used). + In this case, ‘ALL_CHECKS’ implies the standard set of GNAT mode style + check options (i.e. equivalent to ‘-gnatyg’). + + The forms with ‘Off’ and ‘On’ can be used to temporarily disable style + checks as shown in the following example: + + pragma Style_Checks ("k"); -- requires keywords in lower case + pragma Style_Checks (Off); -- turn off style checks + NULL; -- this will not generate an error message + pragma Style_Checks (On); -- turn style checks back on + NULL; -- this will generate an error message + + Finally the two argument form is allowed only if the first argument is + ‘On’ or ‘Off’. The effect is to turn of semantic style checks for the + specified entity, as shown in the following example: + + pragma Style_Checks ("r"); -- require consistency of identifier casing + Arg : Integer; + Rf1 : Integer := ARG; -- incorrect, wrong case + pragma Style_Checks (Off, Arg); + Rf2 : Integer := ARG; -- OK, no error + +  + File: gnat_rm.info, Node: Pragma Subtitle, Next: Pragma Suppress, Prev: Pragma Style_Checks, Up: Implementation Defined Pragmas + + 2.167 Pragma Subtitle + ===================== + + Syntax: + + pragma Subtitle ([Subtitle =>] STRING_LITERAL); + + This pragma is recognized for compatibility with other Ada compilers but + is ignored by GNAT. + +  + File: gnat_rm.info, Node: Pragma Suppress, Next: Pragma Suppress_All, Prev: Pragma Subtitle, Up: Implementation Defined Pragmas + + 2.168 Pragma Suppress + ===================== + + Syntax: + + pragma Suppress (Identifier [, [On =>] Name]); + + This is a standard pragma, and supports all the check names required in + the RM. It is included here because GNAT recognizes some additional + check names that are implementation defined (as permitted by the RM): + + * ‘Alignment_Check’ can be used to suppress alignment checks on + addresses used in address clauses. Such checks can also be + suppressed by suppressing range checks, but the specific use of + ‘Alignment_Check’ allows suppression of alignment checks without + suppressing other range checks. Note that ‘Alignment_Check’ is + suppressed by default on machines (such as the x86) with non-strict + alignment. + + * ‘Atomic_Synchronization’ can be used to suppress the special memory + synchronization instructions that are normally generated for access + to ‘Atomic’ variables to ensure correct synchronization between + tasks that use such variables for synchronization purposes. + + * ‘Duplicated_Tag_Check’ Can be used to suppress the check that is + generated for a duplicated tag value when a tagged type is + declared. + + * ‘Container_Checks’ Can be used to suppress all checks within + Ada.Containers and instances of its children, including + Tampering_Check. + + * ‘Tampering_Check’ Can be used to suppress tampering check in the + containers. + + * ‘Predicate_Check’ can be used to control whether predicate checks + are active. It is applicable only to predicates for which the + policy is ‘Check’. Unlike ‘Assertion_Policy’, which determines if + a given predicate is ignored or checked for the whole program, the + use of ‘Suppress’ and ‘Unsuppress’ with this check name allows a + given predicate to be turned on and off at specific points in the + program. + + * ‘Validity_Check’ can be used specifically to control validity + checks. If ‘Suppress’ is used to suppress validity checks, then no + validity checks are performed, including those specified by the + appropriate compiler switch or the ‘Validity_Checks’ pragma. + + * Additional check names previously introduced by use of the + ‘Check_Name’ pragma are also allowed. + + Note that pragma Suppress gives the compiler permission to omit checks, + but does not require the compiler to omit checks. The compiler will + generate checks if they are essentially free, even when they are + suppressed. In particular, if the compiler can prove that a certain + check will necessarily fail, it will generate code to do an + unconditional ‘raise’, even if checks are suppressed. The compiler + warns in this case. + + Of course, run-time checks are omitted whenever the compiler can prove + that they will not fail, whether or not checks are suppressed. + +  + File: gnat_rm.info, Node: Pragma Suppress_All, Next: Pragma Suppress_Debug_Info, Prev: Pragma Suppress, Up: Implementation Defined Pragmas + + 2.169 Pragma Suppress_All + ========================= + + Syntax: + + pragma Suppress_All; + + This pragma can appear anywhere within a unit. The effect is to apply + ‘Suppress (All_Checks)’ to the unit in which it appears. This pragma is + implemented for compatibility with DEC Ada 83 usage where it appears at + the end of a unit, and for compatibility with Rational Ada, where it + appears as a program unit pragma. The use of the standard Ada pragma + ‘Suppress (All_Checks)’ as a normal configuration pragma is the + preferred usage in GNAT. + +  + File: gnat_rm.info, Node: Pragma Suppress_Debug_Info, Next: Pragma Suppress_Exception_Locations, Prev: Pragma Suppress_All, Up: Implementation Defined Pragmas + + 2.170 Pragma Suppress_Debug_Info + ================================ + + Syntax: + + pragma Suppress_Debug_Info ([Entity =>] LOCAL_NAME); + + This pragma can be used to suppress generation of debug information for + the specified entity. It is intended primarily for use in debugging the + debugger, and navigating around debugger problems. + +  + File: gnat_rm.info, Node: Pragma Suppress_Exception_Locations, Next: Pragma Suppress_Initialization, Prev: Pragma Suppress_Debug_Info, Up: Implementation Defined Pragmas + + 2.171 Pragma Suppress_Exception_Locations + ========================================= + + Syntax: + + pragma Suppress_Exception_Locations; + + In normal mode, a raise statement for an exception by default generates + an exception message giving the file name and line number for the + location of the raise. This is useful for debugging and logging + purposes, but this entails extra space for the strings for the messages. + The configuration pragma ‘Suppress_Exception_Locations’ can be used to + suppress the generation of these strings, with the result that space is + saved, but the exception message for such raises is null. This + configuration pragma may appear in a global configuration pragma file, + or in a specific unit as usual. It is not required that this pragma be + used consistently within a partition, so it is fine to have some units + within a partition compiled with this pragma and others compiled in + normal mode without it. + +  + File: gnat_rm.info, Node: Pragma Suppress_Initialization, Next: Pragma Task_Name, Prev: Pragma Suppress_Exception_Locations, Up: Implementation Defined Pragmas + + 2.172 Pragma Suppress_Initialization + ==================================== + + Syntax: + + pragma Suppress_Initialization ([Entity =>] variable_or_subtype_Name); + + Here variable_or_subtype_Name is the name introduced by a type + declaration or subtype declaration or the name of a variable introduced + by an object declaration. + + In the case of a type or subtype this pragma suppresses any implicit or + explicit initialization for all variables of the given type or subtype, + including initialization resulting from the use of pragmas + Normalize_Scalars or Initialize_Scalars. + + This is considered a representation item, so it cannot be given after + the type is frozen. It applies to all subsequent object declarations, + and also any allocator that creates objects of the type. + + If the pragma is given for the first subtype, then it is considered to + apply to the base type and all its subtypes. If the pragma is given for + other than a first subtype, then it applies only to the given subtype. + The pragma may not be given after the type is frozen. + + Note that this includes eliminating initialization of discriminants for + discriminated types, and tags for tagged types. In these cases, you + will have to use some non-portable mechanism (e.g. address overlays or + unchecked conversion) to achieve required initialization of these fields + before accessing any object of the corresponding type. + + For the variable case, implicit initialization for the named variable is + suppressed, just as though its subtype had been given in a pragma + Suppress_Initialization, as described above. + +  + File: gnat_rm.info, Node: Pragma Task_Name, Next: Pragma Task_Storage, Prev: Pragma Suppress_Initialization, Up: Implementation Defined Pragmas + + 2.173 Pragma Task_Name + ====================== + + Syntax + + pragma Task_Name (string_EXPRESSION); + + This pragma appears within a task definition (like pragma ‘Priority’) + and applies to the task in which it appears. The argument must be of + type String, and provides a name to be used for the task instance when + the task is created. Note that this expression is not required to be + static, and in particular, it can contain references to task + discriminants. This facility can be used to provide different names for + different tasks as they are created, as illustrated in the example + below. + + The task name is recorded internally in the run-time structures and is + accessible to tools like the debugger. In addition the routine + ‘Ada.Task_Identification.Image’ will return this string, with a unique + task address appended. + + -- Example of the use of pragma Task_Name + + with Ada.Task_Identification; + use Ada.Task_Identification; + with Text_IO; use Text_IO; + procedure t3 is + + type Astring is access String; + + task type Task_Typ (Name : access String) is + pragma Task_Name (Name.all); + end Task_Typ; + + task body Task_Typ is + Nam : constant String := Image (Current_Task); + begin + Put_Line ("-->" & Nam (1 .. 14) & "<--"); + end Task_Typ; + + type Ptr_Task is access Task_Typ; + Task_Var : Ptr_Task; + + begin + Task_Var := + new Task_Typ (new String'("This is task 1")); + Task_Var := + new Task_Typ (new String'("This is task 2")); + end; + +  + File: gnat_rm.info, Node: Pragma Task_Storage, Next: Pragma Test_Case, Prev: Pragma Task_Name, Up: Implementation Defined Pragmas + + 2.174 Pragma Task_Storage + ========================= + + Syntax: + + pragma Task_Storage ( + [Task_Type =>] LOCAL_NAME, + [Top_Guard =>] static_integer_EXPRESSION); + + This pragma specifies the length of the guard area for tasks. The guard + area is an additional storage area allocated to a task. A value of zero + means that either no guard area is created or a minimal guard area is + created, depending on the target. This pragma can appear anywhere a + ‘Storage_Size’ attribute definition clause is allowed for a task type. + +  + File: gnat_rm.info, Node: Pragma Test_Case, Next: Pragma Thread_Local_Storage, Prev: Pragma Task_Storage, Up: Implementation Defined Pragmas + + 2.175 Pragma Test_Case + ====================== + + Syntax: + + pragma Test_Case ( + [Name =>] static_string_Expression + ,[Mode =>] (Nominal | Robustness) + [, Requires => Boolean_Expression] + [, Ensures => Boolean_Expression]); + + The ‘Test_Case’ pragma allows defining fine-grain specifications for use + by testing tools. The compiler checks the validity of the ‘Test_Case’ + pragma, but its presence does not lead to any modification of the code + generated by the compiler. + + ‘Test_Case’ pragmas may only appear immediately following the (separate) + declaration of a subprogram in a package declaration, inside a package + spec unit. Only other pragmas may intervene (that is appear between the + subprogram declaration and a test case). + + The compiler checks that boolean expressions given in ‘Requires’ and + ‘Ensures’ are valid, where the rules for ‘Requires’ are the same as the + rule for an expression in ‘Precondition’ and the rules for ‘Ensures’ are + the same as the rule for an expression in ‘Postcondition’. In + particular, attributes ‘'Old’ and ‘'Result’ can only be used within the + ‘Ensures’ expression. The following is an example of use within a + package spec: + + package Math_Functions is + ... + function Sqrt (Arg : Float) return Float; + pragma Test_Case (Name => "Test 1", + Mode => Nominal, + Requires => Arg < 10000.0, + Ensures => Sqrt'Result < 10.0); + ... + end Math_Functions; + + The meaning of a test case is that there is at least one context where + ‘Requires’ holds such that, if the associated subprogram is executed in + that context, then ‘Ensures’ holds when the subprogram returns. Mode + ‘Nominal’ indicates that the input context should also satisfy the + precondition of the subprogram, and the output context should also + satisfy its postcondition. Mode ‘Robustness’ indicates that the + precondition and postcondition of the subprogram should be ignored for + this test case. + +  + File: gnat_rm.info, Node: Pragma Thread_Local_Storage, Next: Pragma Time_Slice, Prev: Pragma Test_Case, Up: Implementation Defined Pragmas + + 2.176 Pragma Thread_Local_Storage + ================================= + + Syntax: + + pragma Thread_Local_Storage ([Entity =>] LOCAL_NAME); + + This pragma specifies that the specified entity, which must be a + variable declared in a library-level package, is to be marked as “Thread + Local Storage” (‘TLS’). On systems supporting this (which include + Windows, Solaris, GNU/Linux, and VxWorks 6), this causes each thread + (and hence each Ada task) to see a distinct copy of the variable. + + The variable must not have default initialization, and if there is an + explicit initialization, it must be either ‘null’ for an access + variable, a static expression for a scalar variable, or a fully static + aggregate for a composite type, that is to say, an aggregate all of + whose components are static, and which does not include packed or + discriminated components. + + This provides a low-level mechanism similar to that provided by the + ‘Ada.Task_Attributes’ package, but much more efficient and is also + useful in writing interface code that will interact with foreign + threads. + + If this pragma is used on a system where ‘TLS’ is not supported, then an + error message will be generated and the program will be rejected. + +  + File: gnat_rm.info, Node: Pragma Time_Slice, Next: Pragma Title, Prev: Pragma Thread_Local_Storage, Up: Implementation Defined Pragmas + + 2.177 Pragma Time_Slice + ======================= + + Syntax: + + pragma Time_Slice (static_duration_EXPRESSION); + + For implementations of GNAT on operating systems where it is possible to + supply a time slice value, this pragma may be used for this purpose. It + is ignored if it is used in a system that does not allow this control, + or if it appears in other than the main program unit. + +  + File: gnat_rm.info, Node: Pragma Title, Next: Pragma Type_Invariant, Prev: Pragma Time_Slice, Up: Implementation Defined Pragmas + + 2.178 Pragma Title + ================== + + Syntax: + + pragma Title (TITLING_OPTION [, TITLING OPTION]); + + TITLING_OPTION ::= + [Title =>] STRING_LITERAL, + | [Subtitle =>] STRING_LITERAL + + Syntax checked but otherwise ignored by GNAT. This is a listing control + pragma used in DEC Ada 83 implementations to provide a title and/or + subtitle for the program listing. The program listing generated by GNAT + does not have titles or subtitles. + + Unlike other pragmas, the full flexibility of named notation is allowed + for this pragma, i.e., the parameters may be given in any order if named + notation is used, and named and positional notation can be mixed + following the normal rules for procedure calls in Ada. + +  + File: gnat_rm.info, Node: Pragma Type_Invariant, Next: Pragma Type_Invariant_Class, Prev: Pragma Title, Up: Implementation Defined Pragmas + + 2.179 Pragma Type_Invariant + =========================== + + Syntax: + + pragma Type_Invariant + ([Entity =>] type_LOCAL_NAME, + [Check =>] EXPRESSION); + + The ‘Type_Invariant’ pragma is intended to be an exact replacement for + the language-defined ‘Type_Invariant’ aspect, and shares its + restrictions and semantics. It differs from the language defined + ‘Invariant’ pragma in that it does not permit a string parameter, and it + is controlled by the assertion identifier ‘Type_Invariant’ rather than + ‘Invariant’. + +  + File: gnat_rm.info, Node: Pragma Type_Invariant_Class, Next: Pragma Unchecked_Union, Prev: Pragma Type_Invariant, Up: Implementation Defined Pragmas + + 2.180 Pragma Type_Invariant_Class + ================================= + + Syntax: + + pragma Type_Invariant_Class + ([Entity =>] type_LOCAL_NAME, + [Check =>] EXPRESSION); + + The ‘Type_Invariant_Class’ pragma is intended to be an exact replacement + for the language-defined ‘Type_Invariant'Class’ aspect, and shares its + restrictions and semantics. + + Note: This pragma is called ‘Type_Invariant_Class’ rather than + ‘Type_Invariant'Class’ because the latter would not be strictly + conforming to the allowed syntax for pragmas. The motivation for + providing pragmas equivalent to the aspects is to allow a program to be + written using the pragmas, and then compiled if necessary using an Ada + compiler that does not recognize the pragmas or aspects, but is prepared + to ignore the pragmas. The assertion policy that controls this pragma + is ‘Type_Invariant'Class’, not ‘Type_Invariant_Class’. + +  + File: gnat_rm.info, Node: Pragma Unchecked_Union, Next: Pragma Unevaluated_Use_Of_Old, Prev: Pragma Type_Invariant_Class, Up: Implementation Defined Pragmas + + 2.181 Pragma Unchecked_Union + ============================ + + Syntax: + + pragma Unchecked_Union (first_subtype_LOCAL_NAME); + + This pragma is used to specify a representation of a record type that is + equivalent to a C union. It was introduced as a GNAT implementation + defined pragma in the GNAT Ada 95 mode. Ada 2005 includes an extended + version of this pragma, making it language defined, and GNAT fully + implements this extended version in all language modes (Ada 83, Ada 95, + and Ada 2005). For full details, consult the Ada 2012 Reference Manual, + section B.3.3. + +  + File: gnat_rm.info, Node: Pragma Unevaluated_Use_Of_Old, Next: Pragma Unimplemented_Unit, Prev: Pragma Unchecked_Union, Up: Implementation Defined Pragmas + + 2.182 Pragma Unevaluated_Use_Of_Old + =================================== + + Syntax: + + pragma Unevaluated_Use_Of_Old (Error | Warn | Allow); + + This pragma controls the processing of attributes Old and Loop_Entry. + If either of these attributes is used in a potentially unevaluated + expression (e.g. the then or else parts of an if expression), then + normally this usage is considered illegal if the prefix of the attribute + is other than an entity name. The language requires this behavior for + Old, and GNAT copies the same rule for Loop_Entry. + + The reason for this rule is that otherwise, we can have a situation + where we save the Old value, and this results in an exception, even + though we might not evaluate the attribute. Consider this example: + + package UnevalOld is + K : Character; + procedure U (A : String; C : Boolean) -- ERROR + with Post => (if C then A(1)'Old = K else True); + end; + + If procedure U is called with a string with a lower bound of 2, and C + false, then an exception would be raised trying to evaluate A(1) on + entry even though the value would not be actually used. + + Although the rule guarantees against this possibility, it is sometimes + too restrictive. For example if we know that the string has a lower + bound of 1, then we will never raise an exception. The pragma + ‘Unevaluated_Use_Of_Old’ can be used to modify this behavior. If the + argument is ‘Error’ then an error is given (this is the default RM + behavior). If the argument is ‘Warn’ then the usage is allowed as legal + but with a warning that an exception might be raised. If the argument + is ‘Allow’ then the usage is allowed as legal without generating a + warning. + + This pragma may appear as a configuration pragma, or in a declarative + part or package specification. In the latter case it applies to uses up + to the end of the corresponding statement sequence or sequence of + package declarations. + +  + File: gnat_rm.info, Node: Pragma Unimplemented_Unit, Next: Pragma Universal_Aliasing, Prev: Pragma Unevaluated_Use_Of_Old, Up: Implementation Defined Pragmas + + 2.183 Pragma Unimplemented_Unit + =============================== + + Syntax: + + pragma Unimplemented_Unit; + + If this pragma occurs in a unit that is processed by the compiler, GNAT + aborts with the message ‘xxx not implemented’, where ‘xxx’ is the name + of the current compilation unit. This pragma is intended to allow the + compiler to handle unimplemented library units in a clean manner. + + The abort only happens if code is being generated. Thus you can use + specs of unimplemented packages in syntax or semantic checking mode. + +  + File: gnat_rm.info, Node: Pragma Universal_Aliasing, Next: Pragma Unmodified, Prev: Pragma Unimplemented_Unit, Up: Implementation Defined Pragmas + + 2.184 Pragma Universal_Aliasing + =============================== + + Syntax: + + pragma Universal_Aliasing [([Entity =>] type_LOCAL_NAME)]; + + ‘type_LOCAL_NAME’ must refer to a type declaration in the current + declarative part. The effect is to inhibit strict type-based aliasing + optimization for the given type. In other words, the effect is as + though access types designating this type were subject to pragma + No_Strict_Aliasing. For a detailed description of the strict aliasing + optimization, and the situations in which it must be suppressed, see the + section on ‘Optimization and Strict Aliasing’ in the ‘GNAT User’s + Guide’. + +  + File: gnat_rm.info, Node: Pragma Unmodified, Next: Pragma Unreferenced, Prev: Pragma Universal_Aliasing, Up: Implementation Defined Pragmas + + 2.185 Pragma Unmodified + ======================= + + Syntax: + + pragma Unmodified (LOCAL_NAME {, LOCAL_NAME}); + + This pragma signals that the assignable entities (variables, ‘out’ + parameters, ‘in out’ parameters) whose names are listed are deliberately + not assigned in the current source unit. This suppresses warnings about + the entities being referenced but not assigned, and in addition a + warning will be generated if one of these entities is in fact assigned + in the same unit as the pragma (or in the corresponding body, or one of + its subunits). + + This is particularly useful for clearly signaling that a particular + parameter is not modified, even though the spec suggests that it might + be. + + For the variable case, warnings are never given for unreferenced + variables whose name contains one of the substrings ‘DISCARD, DUMMY, + IGNORE, JUNK, UNUSED’ in any casing. Such names are typically to be + used in cases where such warnings are expected. Thus it is never + necessary to use ‘pragma Unmodified’ for such variables, though it is + harmless to do so. + +  + File: gnat_rm.info, Node: Pragma Unreferenced, Next: Pragma Unreferenced_Objects, Prev: Pragma Unmodified, Up: Implementation Defined Pragmas + + 2.186 Pragma Unreferenced + ========================= + + Syntax: + + pragma Unreferenced (LOCAL_NAME {, LOCAL_NAME}); + pragma Unreferenced (library_unit_NAME {, library_unit_NAME}); + + This pragma signals that the entities whose names are listed are + deliberately not referenced in the current source unit after the + occurrence of the pragma. This suppresses warnings about the entities + being unreferenced, and in addition a warning will be generated if one + of these entities is in fact subsequently referenced in the same unit as + the pragma (or in the corresponding body, or one of its subunits). + + This is particularly useful for clearly signaling that a particular + parameter is not referenced in some particular subprogram implementation + and that this is deliberate. It can also be useful in the case of + objects declared only for their initialization or finalization side + effects. + + If ‘LOCAL_NAME’ identifies more than one matching homonym in the current + scope, then the entity most recently declared is the one to which the + pragma applies. Note that in the case of accept formals, the pragma + Unreferenced may appear immediately after the keyword ‘do’ which allows + the indication of whether or not accept formals are referenced or not to + be given individually for each accept statement. + + The left hand side of an assignment does not count as a reference for + the purpose of this pragma. Thus it is fine to assign to an entity for + which pragma Unreferenced is given. However, use of an entity as an + actual for an out parameter does count as a reference unless warnings + for unread output parameters are enabled via ‘-gnatw.o’. + + Note that if a warning is desired for all calls to a given subprogram, + regardless of whether they occur in the same unit as the subprogram + declaration, then this pragma should not be used (calls from another + unit would not be flagged); pragma Obsolescent can be used instead for + this purpose, see *note Pragma Obsolescent: ab. + + The second form of pragma ‘Unreferenced’ is used within a context + clause. In this case the arguments must be unit names of units + previously mentioned in ‘with’ clauses (similar to the usage of pragma + ‘Elaborate_All’. The effect is to suppress warnings about unreferenced + units and unreferenced entities within these units. + + For the variable case, warnings are never given for unreferenced + variables whose name contains one of the substrings ‘DISCARD, DUMMY, + IGNORE, JUNK, UNUSED’ in any casing. Such names are typically to be + used in cases where such warnings are expected. Thus it is never + necessary to use ‘pragma Unreferenced’ for such variables, though it is + harmless to do so. + +  + File: gnat_rm.info, Node: Pragma Unreferenced_Objects, Next: Pragma Unreserve_All_Interrupts, Prev: Pragma Unreferenced, Up: Implementation Defined Pragmas + + 2.187 Pragma Unreferenced_Objects + ================================= + + Syntax: + + pragma Unreferenced_Objects (local_subtype_NAME {, local_subtype_NAME}); + + This pragma signals that for the types or subtypes whose names are + listed, objects which are declared with one of these types or subtypes + may not be referenced, and if no references appear, no warnings are + given. + + This is particularly useful for objects which are declared solely for + their initialization and finalization effect. Such variables are + sometimes referred to as RAII variables (Resource Acquisition Is + Initialization). Using this pragma on the relevant type (most typically + a limited controlled type), the compiler will automatically suppress + unwanted warnings about these variables not being referenced. + +  + File: gnat_rm.info, Node: Pragma Unreserve_All_Interrupts, Next: Pragma Unsuppress, Prev: Pragma Unreferenced_Objects, Up: Implementation Defined Pragmas + + 2.188 Pragma Unreserve_All_Interrupts + ===================================== + + Syntax: + + pragma Unreserve_All_Interrupts; + + Normally certain interrupts are reserved to the implementation. Any + attempt to attach an interrupt causes Program_Error to be raised, as + described in RM C.3.2(22). A typical example is the ‘SIGINT’ interrupt + used in many systems for a ‘Ctrl-C’ interrupt. Normally this interrupt + is reserved to the implementation, so that ‘Ctrl-C’ can be used to + interrupt execution. + + If the pragma ‘Unreserve_All_Interrupts’ appears anywhere in any unit in + a program, then all such interrupts are unreserved. This allows the + program to handle these interrupts, but disables their standard + functions. For example, if this pragma is used, then pressing ‘Ctrl-C’ + will not automatically interrupt execution. However, a program can then + handle the ‘SIGINT’ interrupt as it chooses. + + For a full list of the interrupts handled in a specific implementation, + see the source code for the spec of ‘Ada.Interrupts.Names’ in file + ‘a-intnam.ads’. This is a target dependent file that contains the list + of interrupts recognized for a given target. The documentation in this + file also specifies what interrupts are affected by the use of the + ‘Unreserve_All_Interrupts’ pragma. + + For a more general facility for controlling what interrupts can be + handled, see pragma ‘Interrupt_State’, which subsumes the functionality + of the ‘Unreserve_All_Interrupts’ pragma. + +  + File: gnat_rm.info, Node: Pragma Unsuppress, Next: Pragma Use_VADS_Size, Prev: Pragma Unreserve_All_Interrupts, Up: Implementation Defined Pragmas + + 2.189 Pragma Unsuppress + ======================= + + Syntax: + + pragma Unsuppress (IDENTIFIER [, [On =>] NAME]); + + This pragma undoes the effect of a previous pragma ‘Suppress’. If there + is no corresponding pragma ‘Suppress’ in effect, it has no effect. The + range of the effect is the same as for pragma ‘Suppress’. The meaning + of the arguments is identical to that used in pragma ‘Suppress’. + + One important application is to ensure that checks are on in cases where + code depends on the checks for its correct functioning, so that the code + will compile correctly even if the compiler switches are set to suppress + checks. For example, in a program that depends on external names of + tagged types and wants to ensure that the duplicated tag check occurs + even if all run-time checks are suppressed by a compiler switch, the + following configuration pragma will ensure this test is not suppressed: + + pragma Unsuppress (Duplicated_Tag_Check); + + This pragma is standard in Ada 2005. It is available in all earlier + versions of Ada as an implementation-defined pragma. + + Note that in addition to the checks defined in the Ada RM, GNAT + recogizes a number of implementation-defined check names. See the + description of pragma ‘Suppress’ for full details. + +  + File: gnat_rm.info, Node: Pragma Use_VADS_Size, Next: Pragma Unused, Prev: Pragma Unsuppress, Up: Implementation Defined Pragmas + + 2.190 Pragma Use_VADS_Size + ========================== + + Syntax: + + pragma Use_VADS_Size; + + This is a configuration pragma. In a unit to which it applies, any use + of the ‘Size attribute is automatically interpreted as a use of the + ‘VADS_Size attribute. Note that this may result in incorrect semantic + processing of valid Ada 95 or Ada 2005 programs. This is intended to + aid in the handling of existing code which depends on the interpretation + of Size as implemented in the VADS compiler. See description of the + VADS_Size attribute for further details. + +  + File: gnat_rm.info, Node: Pragma Unused, Next: Pragma Validity_Checks, Prev: Pragma Use_VADS_Size, Up: Implementation Defined Pragmas + + 2.191 Pragma Unused + =================== + + Syntax: + + pragma Unused (LOCAL_NAME {, LOCAL_NAME}); + + This pragma signals that the assignable entities (variables, ‘out’ + parameters, and ‘in out’ parameters) whose names are listed deliberately + do not get assigned or referenced in the current source unit after the + occurrence of the pragma in the current source unit. This suppresses + warnings about the entities that are unreferenced and/or not assigned, + and, in addition, a warning will be generated if one of these entities + gets assigned or subsequently referenced in the same unit as the pragma + (in the corresponding body or one of its subunits). + + This is particularly useful for clearly signaling that a particular + parameter is not modified or referenced, even though the spec suggests + that it might be. + + For the variable case, warnings are never given for unreferenced + variables whose name contains one of the substrings ‘DISCARD, DUMMY, + IGNORE, JUNK, UNUSED’ in any casing. Such names are typically to be + used in cases where such warnings are expected. Thus it is never + necessary to use ‘pragma Unmodified’ for such variables, though it is + harmless to do so. + +  + File: gnat_rm.info, Node: Pragma Validity_Checks, Next: Pragma Volatile, Prev: Pragma Unused, Up: Implementation Defined Pragmas + + 2.192 Pragma Validity_Checks + ============================ + + Syntax: + + pragma Validity_Checks (string_LITERAL | ALL_CHECKS | On | Off); + + This pragma is used in conjunction with compiler switches to control the + built-in validity checking provided by GNAT. The compiler switches, if + set provide an initial setting for the switches, and this pragma may be + used to modify these settings, or the settings may be provided entirely + by the use of the pragma. This pragma can be used anywhere that a + pragma is legal, including use as a configuration pragma (including use + in the ‘gnat.adc’ file). + + The form with a string literal specifies which validity options are to + be activated. The validity checks are first set to include only the + default reference manual settings, and then a string of letters in the + string specifies the exact set of options required. The form of this + string is exactly as described for the `-gnatVx' compiler switch (see + the GNAT User’s Guide for details). For example the following two + methods can be used to enable validity checking for mode ‘in’ and ‘in + out’ subprogram parameters: + + * pragma Validity_Checks ("im"); + + * $ gcc -c -gnatVim ... + + The form ALL_CHECKS activates all standard checks (its use is equivalent + to the use of the ‘gnatVa’ switch). + + The forms with ‘Off’ and ‘On’ can be used to temporarily disable + validity checks as shown in the following example: + + pragma Validity_Checks ("c"); -- validity checks for copies + pragma Validity_Checks (Off); -- turn off validity checks + A := B; -- B will not be validity checked + pragma Validity_Checks (On); -- turn validity checks back on + A := C; -- C will be validity checked + +  + File: gnat_rm.info, Node: Pragma Volatile, Next: Pragma Volatile_Full_Access, Prev: Pragma Validity_Checks, Up: Implementation Defined Pragmas + + 2.193 Pragma Volatile + ===================== + + Syntax: + + pragma Volatile (LOCAL_NAME); + + This pragma is defined by the Ada Reference Manual, and the GNAT + implementation is fully conformant with this definition. The reason it + is mentioned in this section is that a pragma of the same name was + supplied in some Ada 83 compilers, including DEC Ada 83. The Ada 95 / + Ada 2005 implementation of pragma Volatile is upwards compatible with + the implementation in DEC Ada 83. + +  + File: gnat_rm.info, Node: Pragma Volatile_Full_Access, Next: Pragma Volatile_Function, Prev: Pragma Volatile, Up: Implementation Defined Pragmas + + 2.194 Pragma Volatile_Full_Access + ================================= + + Syntax: + + pragma Volatile_Full_Access (LOCAL_NAME); + + This is similar in effect to pragma Volatile, except that any reference + to the object is guaranteed to be done only with instructions that read + or write all the bits of the object. Furthermore, if the object is of a + composite type, then any reference to a subcomponent of the object is + guaranteed to read and/or write all the bits of the object. + + The intention is that this be suitable for use with memory-mapped I/O + devices on some machines. Note that there are two important respects in + which this is different from ‘pragma Atomic’. First a reference to a + ‘Volatile_Full_Access’ object is not a sequential action in the RM 9.10 + sense and, therefore, does not create a synchronization point. Second, + in the case of ‘pragma Atomic’, there is no guarantee that all the bits + will be accessed if the reference is not to the whole object; the + compiler is allowed (and generally will) access only part of the object + in this case. + +  + File: gnat_rm.info, Node: Pragma Volatile_Function, Next: Pragma Warning_As_Error, Prev: Pragma Volatile_Full_Access, Up: Implementation Defined Pragmas + + 2.195 Pragma Volatile_Function + ============================== + + Syntax: + + pragma Volatile_Function [ (boolean_EXPRESSION) ]; + + For the semantics of this pragma, see the entry for aspect + ‘Volatile_Function’ in the SPARK 2014 Reference Manual, section 7.1.2. + +  + File: gnat_rm.info, Node: Pragma Warning_As_Error, Next: Pragma Warnings, Prev: Pragma Volatile_Function, Up: Implementation Defined Pragmas + + 2.196 Pragma Warning_As_Error + ============================= + + Syntax: + + pragma Warning_As_Error (static_string_EXPRESSION); + + This configuration pragma allows the programmer to specify a set of + warnings that will be treated as errors. Any warning that matches the + pattern given by the pragma argument will be treated as an error. This + gives more precise control than -gnatwe, which treats warnings as + errors. + + This pragma can apply to regular warnings (messages enabled by -gnatw) + and to style warnings (messages that start with “(style)”, enabled by + -gnaty). + + The pattern may contain asterisks, which match zero or more characters + in the message. For example, you can use ‘pragma Warning_As_Error + ("bits of*unused")’ to treat the warning message ‘warning: 960 bits of + "a" unused’ as an error. All characters other than asterisk are treated + as literal characters in the match. The match is case insensitive; for + example XYZ matches xyz. + + Note that the pattern matches if it occurs anywhere within the warning + message string (it is not necessary to put an asterisk at the start and + the end of the message, since this is implied). + + Another possibility for the static_string_EXPRESSION which works whether + or not error tags are enabled (`-gnatw.d') is to use a single `-gnatw' + tag string, enclosed in brackets, as shown in the example below, to + treat one category of warnings as errors. Note that if you want to + treat multiple categories of warnings as errors, you can use multiple + pragma Warning_As_Error. + + The above use of patterns to match the message applies only to warning + messages generated by the front end. This pragma can also be applied to + warnings provided by the back end and mentioned in *note Pragma + Warnings: 119. By using a single full `-Wxxx' switch in the pragma, + such warnings can also be treated as errors. + + The pragma can appear either in a global configuration pragma file (e.g. + ‘gnat.adc’), or at the start of a file. Given a global configuration + pragma file containing: + + pragma Warning_As_Error ("[-gnatwj]"); + + which will treat all obsolescent feature warnings as errors, the + following program compiles as shown (compile options here are `-gnatwa.d + -gnatl -gnatj55'). + + 1. pragma Warning_As_Error ("*never assigned*"); + 2. function Warnerr return String is + 3. X : Integer; + | + >>> error: variable "X" is never read and + never assigned [-gnatwv] [warning-as-error] + + 4. Y : Integer; + | + >>> warning: variable "Y" is assigned but + never read [-gnatwu] + + 5. begin + 6. Y := 0; + 7. return %ABC%; + | + >>> error: use of "%" is an obsolescent + feature (RM J.2(4)), use """ instead + [-gnatwj] [warning-as-error] + + 8. end; + + 8 lines: No errors, 3 warnings (2 treated as errors) + + Note that this pragma does not affect the set of warnings issued in any + way, it merely changes the effect of a matching warning if one is + produced as a result of other warnings options. As shown in this + example, if the pragma results in a warning being treated as an error, + the tag is changed from “warning:” to “error:” and the string + “[warning-as-error]” is appended to the end of the message. + +  + File: gnat_rm.info, Node: Pragma Warnings, Next: Pragma Weak_External, Prev: Pragma Warning_As_Error, Up: Implementation Defined Pragmas + + 2.197 Pragma Warnings + ===================== + + Syntax: + + pragma Warnings ([TOOL_NAME,] DETAILS [, REASON]); + + DETAILS ::= On | Off + DETAILS ::= On | Off, local_NAME + DETAILS ::= static_string_EXPRESSION + DETAILS ::= On | Off, static_string_EXPRESSION + + TOOL_NAME ::= GNAT | GNATprove + + REASON ::= Reason => STRING_LITERAL {& STRING_LITERAL} + + Note: in Ada 83 mode, a string literal may be used in place of a static + string expression (which does not exist in Ada 83). + + Note if the second argument of ‘DETAILS’ is a ‘local_NAME’ then the + second form is always understood. If the intention is to use the fourth + form, then you can write ‘NAME & ""’ to force the intepretation as a + `static_string_EXPRESSION'. + + Note: if the first argument is a valid ‘TOOL_NAME’, it will be + interpreted that way. The use of the ‘TOOL_NAME’ argument is relevant + only to users of SPARK and GNATprove, see last part of this section for + details. + + Normally warnings are enabled, with the output being controlled by the + command line switch. Warnings (‘Off’) turns off generation of warnings + until a Warnings (‘On’) is encountered or the end of the current unit. + If generation of warnings is turned off using this pragma, then some or + all of the warning messages are suppressed, regardless of the setting of + the command line switches. + + The ‘Reason’ parameter may optionally appear as the last argument in any + of the forms of this pragma. It is intended purely for the purposes of + documenting the reason for the ‘Warnings’ pragma. The compiler will + check that the argument is a static string but otherwise ignore this + argument. Other tools may provide specialized processing for this + string. + + The form with a single argument (or two arguments if Reason present), + where the first argument is ‘ON’ or ‘OFF’ may be used as a configuration + pragma. + + If the ‘LOCAL_NAME’ parameter is present, warnings are suppressed for + the specified entity. This suppression is effective from the point + where it occurs till the end of the extended scope of the variable + (similar to the scope of ‘Suppress’). This form cannot be used as a + configuration pragma. + + In the case where the first argument is other than ‘ON’ or ‘OFF’, the + third form with a single static_string_EXPRESSION argument (and possible + reason) provides more precise control over which warnings are active. + The string is a list of letters specifying which warnings are to be + activated and which deactivated. The code for these letters is the same + as the string used in the command line switch controlling warnings. For + a brief summary, use the gnatmake command with no arguments, which will + generate usage information containing the list of warnings switches + supported. For full details see the section on ‘Warning Message + Control’ in the ‘GNAT User’s Guide’. This form can also be used as a + configuration pragma. + + The warnings controlled by the ‘-gnatw’ switch are generated by the + front end of the compiler. The GCC back end can provide additional + warnings and they are controlled by the ‘-W’ switch. Such warnings can + be identified by the appearance of a string of the form ‘[-W{xxx}]’ in + the message which designates the ‘-W`xxx'’ switch that controls the + message. The form with a single `static_string_EXPRESSION' argument + also works for these warnings, but the string must be a single full + ‘-W`xxx'’ switch in this case. The above reference lists a few examples + of these additional warnings. + + The specified warnings will be in effect until the end of the program or + another pragma ‘Warnings’ is encountered. The effect of the pragma is + cumulative. Initially the set of warnings is the standard default set + as possibly modified by compiler switches. Then each pragma Warning + modifies this set of warnings as specified. This form of the pragma may + also be used as a configuration pragma. + + The fourth form, with an ‘On|Off’ parameter and a string, is used to + control individual messages, based on their text. The string argument + is a pattern that is used to match against the text of individual + warning messages (not including the initial “warning: ” tag). + + The pattern may contain asterisks, which match zero or more characters + in the message. For example, you can use ‘pragma Warnings (Off, "bits + of*unused")’ to suppress the warning message ‘warning: 960 bits of "a" + unused’. No other regular expression notations are permitted. All + characters other than asterisk in these three specific cases are treated + as literal characters in the match. The match is case insensitive, for + example XYZ matches xyz. + + Note that the pattern matches if it occurs anywhere within the warning + message string (it is not necessary to put an asterisk at the start and + the end of the message, since this is implied). + + The above use of patterns to match the message applies only to warning + messages generated by the front end. This form of the pragma with a + string argument can also be used to control warnings provided by the + back end and mentioned above. By using a single full ‘-W`xxx'’ switch + in the pragma, such warnings can be turned on and off. + + There are two ways to use the pragma in this form. The OFF form can be + used as a configuration pragma. The effect is to suppress all warnings + (if any) that match the pattern string throughout the compilation (or + match the -W switch in the back end case). + + The second usage is to suppress a warning locally, and in this case, two + pragmas must appear in sequence: + + pragma Warnings (Off, Pattern); + ... code where given warning is to be suppressed + pragma Warnings (On, Pattern); + + In this usage, the pattern string must match in the Off and On pragmas, + and (if `-gnatw.w' is given) at least one matching warning must be + suppressed. + + Note: if the ON form is not found, then the effect of the OFF form + extends until the end of the file (pragma Warnings is purely textual, so + its effect does not stop at the end of the enclosing scope). + + Note: to write a string that will match any warning, use the string + ‘"***"’. It will not work to use a single asterisk or two asterisks + since this looks like an operator name. This form with three asterisks + is similar in effect to specifying ‘pragma Warnings (Off)’ except (if + ‘-gnatw.w’ is given) that a matching ‘pragma Warnings (On, "***")’ will + be required. This can be helpful in avoiding forgetting to turn + warnings back on. + + Note: the debug flag ‘-gnatd.i’ can be used to cause the compiler to + entirely ignore all WARNINGS pragmas. This can be useful in checking + whether obsolete pragmas in existing programs are hiding real problems. + + Note: pragma Warnings does not affect the processing of style messages. + See separate entry for pragma Style_Checks for control of style + messages. + + Users of the formal verification tool GNATprove for the SPARK subset of + Ada may use the version of the pragma with a ‘TOOL_NAME’ parameter. + + If present, ‘TOOL_NAME’ is the name of a tool, currently either ‘GNAT’ + for the compiler or ‘GNATprove’ for the formal verification tool. A + given tool only takes into account pragma Warnings that do not specify a + tool name, or that specify the matching tool name. This makes it + possible to disable warnings selectively for each tool, and as a + consequence to detect useless pragma Warnings with switch ‘-gnatw.w’. + +  + File: gnat_rm.info, Node: Pragma Weak_External, Next: Pragma Wide_Character_Encoding, Prev: Pragma Warnings, Up: Implementation Defined Pragmas + + 2.198 Pragma Weak_External + ========================== + + Syntax: + + pragma Weak_External ([Entity =>] LOCAL_NAME); + + ‘LOCAL_NAME’ must refer to an object that is declared at the library + level. This pragma specifies that the given entity should be marked as + a weak symbol for the linker. It is equivalent to + ‘__attribute__((weak))’ in GNU C and causes ‘LOCAL_NAME’ to be emitted + as a weak symbol instead of a regular symbol, that is to say a symbol + that does not have to be resolved by the linker if used in conjunction + with a pragma Import. + + When a weak symbol is not resolved by the linker, its address is set to + zero. This is useful in writing interfaces to external modules that may + or may not be linked in the final executable, for example depending on + configuration settings. + + If a program references at run time an entity to which this pragma has + been applied, and the corresponding symbol was not resolved at link + time, then the execution of the program is erroneous. It is not + erroneous to take the Address of such an entity, for example to guard + potential references, as shown in the example below. + + Some file formats do not support weak symbols so not all target machines + support this pragma. + + -- Example of the use of pragma Weak_External + + package External_Module is + key : Integer; + pragma Import (C, key); + pragma Weak_External (key); + function Present return boolean; + end External_Module; + + with System; use System; + package body External_Module is + function Present return boolean is + begin + return key'Address /= System.Null_Address; + end Present; + end External_Module; + +  + File: gnat_rm.info, Node: Pragma Wide_Character_Encoding, Prev: Pragma Weak_External, Up: Implementation Defined Pragmas + + 2.199 Pragma Wide_Character_Encoding + ==================================== + + Syntax: + + pragma Wide_Character_Encoding (IDENTIFIER | CHARACTER_LITERAL); + + This pragma specifies the wide character encoding to be used in program + source text appearing subsequently. It is a configuration pragma, but + may also be used at any point that a pragma is allowed, and it is + permissible to have more than one such pragma in a file, allowing + multiple encodings to appear within the same file. + + However, note that the pragma cannot immediately precede the relevant + wide character, because then the previous encoding will still be in + effect, causing “illegal character” errors. + + The argument can be an identifier or a character literal. In the + identifier case, it is one of ‘HEX’, ‘UPPER’, ‘SHIFT_JIS’, ‘EUC’, + ‘UTF8’, or ‘BRACKETS’. In the character literal case it is + correspondingly one of the characters ‘h’, ‘u’, ‘s’, ‘e’, ‘8’, or ‘b’. + + Note that when the pragma is used within a file, it affects only the + encoding within that file, and does not affect withed units, specs, or + subunits. + +  + File: gnat_rm.info, Node: Implementation Defined Aspects, Next: Implementation Defined Attributes, Prev: Implementation Defined Pragmas, Up: Top + + 3 Implementation Defined Aspects + ******************************** + + Ada defines (throughout the Ada 2012 reference manual, summarized in + Annex K) a set of aspects that can be specified for certain entities. + These language defined aspects are implemented in GNAT in Ada 2012 mode + and work as described in the Ada 2012 Reference Manual. + + In addition, Ada 2012 allows implementations to define additional + aspects whose meaning is defined by the implementation. GNAT provides a + number of these implementation-defined aspects which can be used to + extend and enhance the functionality of the compiler. This section of + the GNAT reference manual describes these additional aspects. + + Note that any program using these aspects may not be portable to other + compilers (although GNAT implements this set of aspects on all + platforms). Therefore if portability to other compilers is an important + consideration, you should minimize the use of these aspects. + + Note that for many of these aspects, the effect is essentially similar + to the use of a pragma or attribute specification with the same name + applied to the entity. For example, if we write: + + type R is range 1 .. 100 + with Value_Size => 10; + + then the effect is the same as: + + type R is range 1 .. 100; + for R'Value_Size use 10; + + and if we write: + + type R is new Integer + with Shared => True; + + then the effect is the same as: + + type R is new Integer; + pragma Shared (R); + + In the documentation below, such cases are simply marked as being + boolean aspects equivalent to the corresponding pragma or attribute + definition clause. + + * Menu: + + * Aspect Abstract_State:: + * Aspect Annotate:: + * Aspect Async_Readers:: + * Aspect Async_Writers:: + * Aspect Constant_After_Elaboration:: + * Aspect Contract_Cases:: + * Aspect Depends:: + * Aspect Default_Initial_Condition:: + * Aspect Dimension:: + * Aspect Dimension_System:: + * Aspect Disable_Controlled:: + * Aspect Effective_Reads:: + * Aspect Effective_Writes:: + * Aspect Extensions_Visible:: + * Aspect Favor_Top_Level:: + * Aspect Ghost:: + * Aspect Global:: + * Aspect Initial_Condition:: + * Aspect Initializes:: + * Aspect Inline_Always:: + * Aspect Invariant:: + * Aspect Invariant’Class:: + * Aspect Iterable:: + * Aspect Linker_Section:: + * Aspect Lock_Free:: + * Aspect Max_Queue_Length:: + * Aspect No_Caching:: + * Aspect No_Elaboration_Code_All:: + * Aspect No_Inline:: + * Aspect No_Tagged_Streams:: + * Aspect No_Task_Parts:: + * Aspect Object_Size:: + * Aspect Obsolescent:: + * Aspect Part_Of:: + * Aspect Persistent_BSS:: + * Aspect Predicate:: + * Aspect Pure_Function:: + * Aspect Refined_Depends:: + * Aspect Refined_Global:: + * Aspect Refined_Post:: + * Aspect Refined_State:: + * Aspect Relaxed_Initialization:: + * Aspect Remote_Access_Type:: + * Aspect Secondary_Stack_Size:: + * Aspect Scalar_Storage_Order:: + * Aspect Shared:: + * Aspect Simple_Storage_Pool:: + * Aspect Simple_Storage_Pool_Type:: + * Aspect SPARK_Mode:: + * Aspect Suppress_Debug_Info:: + * Aspect Suppress_Initialization:: + * Aspect Test_Case:: + * Aspect Thread_Local_Storage:: + * Aspect Universal_Aliasing:: + * Aspect Unmodified:: + * Aspect Unreferenced:: + * Aspect Unreferenced_Objects:: + * Aspect Value_Size:: + * Aspect Volatile_Full_Access:: + * Aspect Volatile_Function:: + * Aspect Warnings:: + +  + File: gnat_rm.info, Node: Aspect Abstract_State, Next: Aspect Annotate, Up: Implementation Defined Aspects + + 3.1 Aspect Abstract_State + ========================= + + This aspect is equivalent to *note pragma Abstract_State: 1e. + +  + File: gnat_rm.info, Node: Aspect Annotate, Next: Aspect Async_Readers, Prev: Aspect Abstract_State, Up: Implementation Defined Aspects + + 3.2 Aspect Annotate + =================== + + There are three forms of this aspect (where ID is an identifier, and ARG + is a general expression), corresponding to *note pragma Annotate: 28. + + `Annotate => ID' + + Equivalent to ‘pragma Annotate (ID, Entity => Name);’ + + `Annotate => (ID)' + + Equivalent to ‘pragma Annotate (ID, Entity => Name);’ + + `Annotate => (ID ,ID {, ARG})' + + Equivalent to ‘pragma Annotate (ID, ID {, ARG}, Entity => Name);’ + +  + File: gnat_rm.info, Node: Aspect Async_Readers, Next: Aspect Async_Writers, Prev: Aspect Annotate, Up: Implementation Defined Aspects + + 3.3 Aspect Async_Readers + ======================== + + This boolean aspect is equivalent to *note pragma Async_Readers: 2f. + +  + File: gnat_rm.info, Node: Aspect Async_Writers, Next: Aspect Constant_After_Elaboration, Prev: Aspect Async_Readers, Up: Implementation Defined Aspects + + 3.4 Aspect Async_Writers + ======================== + + This boolean aspect is equivalent to *note pragma Async_Writers: 31. + +  + File: gnat_rm.info, Node: Aspect Constant_After_Elaboration, Next: Aspect Contract_Cases, Prev: Aspect Async_Writers, Up: Implementation Defined Aspects + + 3.5 Aspect Constant_After_Elaboration + ===================================== + + This aspect is equivalent to *note pragma Constant_After_Elaboration: + 41. + +  + File: gnat_rm.info, Node: Aspect Contract_Cases, Next: Aspect Depends, Prev: Aspect Constant_After_Elaboration, Up: Implementation Defined Aspects + + 3.6 Aspect Contract_Cases + ========================= + + This aspect is equivalent to *note pragma Contract_Cases: 43, the + sequence of clauses being enclosed in parentheses so that syntactically + it is an aggregate. + +  + File: gnat_rm.info, Node: Aspect Depends, Next: Aspect Default_Initial_Condition, Prev: Aspect Contract_Cases, Up: Implementation Defined Aspects + + 3.7 Aspect Depends + ================== + + This aspect is equivalent to *note pragma Depends: 53. + +  + File: gnat_rm.info, Node: Aspect Default_Initial_Condition, Next: Aspect Dimension, Prev: Aspect Depends, Up: Implementation Defined Aspects + + 3.8 Aspect Default_Initial_Condition + ==================================== + + This aspect is equivalent to *note pragma Default_Initial_Condition: 4d. + +  + File: gnat_rm.info, Node: Aspect Dimension, Next: Aspect Dimension_System, Prev: Aspect Default_Initial_Condition, Up: Implementation Defined Aspects + + 3.9 Aspect Dimension + ==================== + + The ‘Dimension’ aspect is used to specify the dimensions of a given + subtype of a dimensioned numeric type. The aspect also specifies a + symbol used when doing formatted output of dimensioned quantities. The + syntax is: + + with Dimension => + ([Symbol =>] SYMBOL, DIMENSION_VALUE {, DIMENSION_Value}) + + SYMBOL ::= STRING_LITERAL | CHARACTER_LITERAL + + DIMENSION_VALUE ::= + RATIONAL + | others => RATIONAL + | DISCRETE_CHOICE_LIST => RATIONAL + + RATIONAL ::= [-] NUMERIC_LITERAL [/ NUMERIC_LITERAL] + + This aspect can only be applied to a subtype whose parent type has a + ‘Dimension_System’ aspect. The aspect must specify values for all + dimensions of the system. The rational values are the powers of the + corresponding dimensions that are used by the compiler to verify that + physical (numeric) computations are dimensionally consistent. For + example, the computation of a force must result in dimensions (L => 1, M + => 1, T => -2). For further examples of the usage of this aspect, see + package ‘System.Dim.Mks’. Note that when the dimensioned type is an + integer type, then any dimension value must be an integer literal. + +  + File: gnat_rm.info, Node: Aspect Dimension_System, Next: Aspect Disable_Controlled, Prev: Aspect Dimension, Up: Implementation Defined Aspects + + 3.10 Aspect Dimension_System + ============================ + + The ‘Dimension_System’ aspect is used to define a system of dimensions + that will be used in subsequent subtype declarations with ‘Dimension’ + aspects that reference this system. The syntax is: + + with Dimension_System => (DIMENSION {, DIMENSION}); + + DIMENSION ::= ([Unit_Name =>] IDENTIFIER, + [Unit_Symbol =>] SYMBOL, + [Dim_Symbol =>] SYMBOL) + + SYMBOL ::= CHARACTER_LITERAL | STRING_LITERAL + + This aspect is applied to a type, which must be a numeric derived type + (typically a floating-point type), that will represent values within the + dimension system. Each ‘DIMENSION’ corresponds to one particular + dimension. A maximum of 7 dimensions may be specified. ‘Unit_Name’ is + the name of the dimension (for example ‘Meter’). ‘Unit_Symbol’ is the + shorthand used for quantities of this dimension (for example ‘m’ for + ‘Meter’). ‘Dim_Symbol’ gives the identification within the dimension + system (typically this is a single letter, e.g. ‘L’ standing for length + for unit name ‘Meter’). The ‘Unit_Symbol’ is used in formatted output + of dimensioned quantities. The ‘Dim_Symbol’ is used in error messages + when numeric operations have inconsistent dimensions. + + GNAT provides the standard definition of the International MKS system in + the run-time package ‘System.Dim.Mks’. You can easily define similar + packages for cgs units or British units, and define conversion factors + between values in different systems. The MKS system is characterized by + the following aspect: + + type Mks_Type is new Long_Long_Float with + Dimension_System => ( + (Unit_Name => Meter, Unit_Symbol => 'm', Dim_Symbol => 'L'), + (Unit_Name => Kilogram, Unit_Symbol => "kg", Dim_Symbol => 'M'), + (Unit_Name => Second, Unit_Symbol => 's', Dim_Symbol => 'T'), + (Unit_Name => Ampere, Unit_Symbol => 'A', Dim_Symbol => 'I'), + (Unit_Name => Kelvin, Unit_Symbol => 'K', Dim_Symbol => '@'), + (Unit_Name => Mole, Unit_Symbol => "mol", Dim_Symbol => 'N'), + (Unit_Name => Candela, Unit_Symbol => "cd", Dim_Symbol => 'J')); + + Note that in the above type definition, we use the ‘at’ symbol (‘@’) to + represent a theta character (avoiding the use of extended Latin-1 + characters in this context). + + See section ‘Performing Dimensionality Analysis in GNAT’ in the GNAT + Users Guide for detailed examples of use of the dimension system. + +  + File: gnat_rm.info, Node: Aspect Disable_Controlled, Next: Aspect Effective_Reads, Prev: Aspect Dimension_System, Up: Implementation Defined Aspects + + 3.11 Aspect Disable_Controlled + ============================== + + The aspect ‘Disable_Controlled’ is defined for controlled record types. + If active, this aspect causes suppression of all related calls to + ‘Initialize’, ‘Adjust’, and ‘Finalize’. The intended use is for + conditional compilation, where for example you might want a record to be + controlled or not depending on whether some run-time check is enabled or + suppressed. + +  + File: gnat_rm.info, Node: Aspect Effective_Reads, Next: Aspect Effective_Writes, Prev: Aspect Disable_Controlled, Up: Implementation Defined Aspects + + 3.12 Aspect Effective_Reads + =========================== + + This aspect is equivalent to *note pragma Effective_Reads: 58. + +  + File: gnat_rm.info, Node: Aspect Effective_Writes, Next: Aspect Extensions_Visible, Prev: Aspect Effective_Reads, Up: Implementation Defined Aspects + + 3.13 Aspect Effective_Writes + ============================ + + This aspect is equivalent to *note pragma Effective_Writes: 5a. + +  + File: gnat_rm.info, Node: Aspect Extensions_Visible, Next: Aspect Favor_Top_Level, Prev: Aspect Effective_Writes, Up: Implementation Defined Aspects + + 3.14 Aspect Extensions_Visible + ============================== + + This aspect is equivalent to *note pragma Extensions_Visible: 65. + +  + File: gnat_rm.info, Node: Aspect Favor_Top_Level, Next: Aspect Ghost, Prev: Aspect Extensions_Visible, Up: Implementation Defined Aspects + + 3.15 Aspect Favor_Top_Level + =========================== + + This boolean aspect is equivalent to *note pragma Favor_Top_Level: 6a. + +  + File: gnat_rm.info, Node: Aspect Ghost, Next: Aspect Global, Prev: Aspect Favor_Top_Level, Up: Implementation Defined Aspects + + 3.16 Aspect Ghost + ================= + + This aspect is equivalent to *note pragma Ghost: 6e. + +  + File: gnat_rm.info, Node: Aspect Global, Next: Aspect Initial_Condition, Prev: Aspect Ghost, Up: Implementation Defined Aspects + + 3.17 Aspect Global + ================== + + This aspect is equivalent to *note pragma Global: 70. + +  + File: gnat_rm.info, Node: Aspect Initial_Condition, Next: Aspect Initializes, Prev: Aspect Global, Up: Implementation Defined Aspects + + 3.18 Aspect Initial_Condition + ============================= + + This aspect is equivalent to *note pragma Initial_Condition: 7d. + +  + File: gnat_rm.info, Node: Aspect Initializes, Next: Aspect Inline_Always, Prev: Aspect Initial_Condition, Up: Implementation Defined Aspects + + 3.19 Aspect Initializes + ======================= + + This aspect is equivalent to *note pragma Initializes: 80. + +  + File: gnat_rm.info, Node: Aspect Inline_Always, Next: Aspect Invariant, Prev: Aspect Initializes, Up: Implementation Defined Aspects + + 3.20 Aspect Inline_Always + ========================= + + This boolean aspect is equivalent to *note pragma Inline_Always: 82. + +  + File: gnat_rm.info, Node: Aspect Invariant, Next: Aspect Invariant’Class, Prev: Aspect Inline_Always, Up: Implementation Defined Aspects + + 3.21 Aspect Invariant + ===================== + + This aspect is equivalent to *note pragma Invariant: 89. It is a + synonym for the language defined aspect ‘Type_Invariant’ except that it + is separately controllable using pragma ‘Assertion_Policy’. + +  + File: gnat_rm.info, Node: Aspect Invariant’Class, Next: Aspect Iterable, Prev: Aspect Invariant, Up: Implementation Defined Aspects + + 3.22 Aspect Invariant’Class + =========================== + + This aspect is equivalent to *note pragma Type_Invariant_Class: 100. It + is a synonym for the language defined aspect ‘Type_Invariant'Class’ + except that it is separately controllable using pragma + ‘Assertion_Policy’. + +  + File: gnat_rm.info, Node: Aspect Iterable, Next: Aspect Linker_Section, Prev: Aspect Invariant’Class, Up: Implementation Defined Aspects + + 3.23 Aspect Iterable + ==================== + + This aspect provides a light-weight mechanism for loops and quantified + expressions over container types, without the overhead imposed by the + tampering checks of standard Ada 2012 iterators. The value of the + aspect is an aggregate with six named components, of which the last + three are optional: ‘First’, ‘Next’, ‘Has_Element’, ‘Element’, ‘Last’, + and ‘Previous’. When only the first three components are specified, + only the ‘for .. in’ form of iteration over cursors is available. When + ‘Element’ is specified, both this form and the ‘for .. of’ form of + iteration over elements are available. If the last two components are + specified, reverse iterations over the container can be specified + (analogous to what can be done over predefined containers that support + the ‘Reverse_Iterator’ interface). The following is a typical example + of use: + + type List is private with + Iterable => (First => First_Cursor, + Next => Advance, + Has_Element => Cursor_Has_Element, + [Element => Get_Element]); + + * The value denoted by ‘First’ must denote a primitive operation of + the container type that returns a ‘Cursor’, which must a be a type + declared in the container package or visible from it. For example: + + function First_Cursor (Cont : Container) return Cursor; + + * The value of ‘Next’ is a primitive operation of the container type + that takes both a container and a cursor and yields a cursor. For + example: + + function Advance (Cont : Container; Position : Cursor) return Cursor; + + * The value of ‘Has_Element’ is a primitive operation of the + container type that takes both a container and a cursor and yields + a boolean. For example: + + function Cursor_Has_Element (Cont : Container; Position : Cursor) return Boolean; + + * The value of ‘Element’ is a primitive operation of the container + type that takes both a container and a cursor and yields an + ‘Element_Type’, which must be a type declared in the container + package or visible from it. For example: + + function Get_Element (Cont : Container; Position : Cursor) return Element_Type; + + This aspect is used in the GNAT-defined formal container packages. + +  + File: gnat_rm.info, Node: Aspect Linker_Section, Next: Aspect Lock_Free, Prev: Aspect Iterable, Up: Implementation Defined Aspects + + 3.24 Aspect Linker_Section + ========================== + + This aspect is equivalent to *note pragma Linker_Section: 91. + +  + File: gnat_rm.info, Node: Aspect Lock_Free, Next: Aspect Max_Queue_Length, Prev: Aspect Linker_Section, Up: Implementation Defined Aspects + + 3.25 Aspect Lock_Free + ===================== + + This boolean aspect is equivalent to *note pragma Lock_Free: 93. + +  + File: gnat_rm.info, Node: Aspect Max_Queue_Length, Next: Aspect No_Caching, Prev: Aspect Lock_Free, Up: Implementation Defined Aspects + + 3.26 Aspect Max_Queue_Length + ============================ + + This aspect is equivalent to *note pragma Max_Queue_Length: 9b. + +  + File: gnat_rm.info, Node: Aspect No_Caching, Next: Aspect No_Elaboration_Code_All, Prev: Aspect Max_Queue_Length, Up: Implementation Defined Aspects + + 3.27 Aspect No_Caching + ====================== + + This boolean aspect is equivalent to *note pragma No_Caching: 9e. + +  + File: gnat_rm.info, Node: Aspect No_Elaboration_Code_All, Next: Aspect No_Inline, Prev: Aspect No_Caching, Up: Implementation Defined Aspects + + 3.28 Aspect No_Elaboration_Code_All + =================================== + + This aspect is equivalent to *note pragma No_Elaboration_Code_All: a1. + for a program unit. + +  + File: gnat_rm.info, Node: Aspect No_Inline, Next: Aspect No_Tagged_Streams, Prev: Aspect No_Elaboration_Code_All, Up: Implementation Defined Aspects + + 3.29 Aspect No_Inline + ===================== + + This boolean aspect is equivalent to *note pragma No_Inline: a4. + +  + File: gnat_rm.info, Node: Aspect No_Tagged_Streams, Next: Aspect No_Task_Parts, Prev: Aspect No_Inline, Up: Implementation Defined Aspects + + 3.30 Aspect No_Tagged_Streams + ============================= + + This aspect is equivalent to *note pragma No_Tagged_Streams: a8. with an + argument specifying a root tagged type (thus this aspect can only be + applied to such a type). + +  + File: gnat_rm.info, Node: Aspect No_Task_Parts, Next: Aspect Object_Size, Prev: Aspect No_Tagged_Streams, Up: Implementation Defined Aspects + + 3.31 Aspect No_Task_Parts + ========================= + + Applies to a type. If True, requires that the type and any descendants + do not have any task parts. The rules for this aspect are the same as + for the language-defined No_Controlled_Parts aspect (see RM-H.4.1), + replacing “controlled” with “task”. + + If No_Task_Parts is True for a type T, then the compiler can optimize + away certain tasking-related code that would otherwise be needed for + T’Class, because descendants of T might contain tasks. + +  + File: gnat_rm.info, Node: Aspect Object_Size, Next: Aspect Obsolescent, Prev: Aspect No_Task_Parts, Up: Implementation Defined Aspects + + 3.32 Aspect Object_Size + ======================= + + This aspect is equivalent to *note attribute Object_Size: 140. + +  + File: gnat_rm.info, Node: Aspect Obsolescent, Next: Aspect Part_Of, Prev: Aspect Object_Size, Up: Implementation Defined Aspects + + 3.33 Aspect Obsolescent + ======================= + + This aspect is equivalent to *note pragma Obsolescent: ab. Note that + the evaluation of this aspect happens at the point of occurrence, it is + not delayed until the freeze point. + +  + File: gnat_rm.info, Node: Aspect Part_Of, Next: Aspect Persistent_BSS, Prev: Aspect Obsolescent, Up: Implementation Defined Aspects + + 3.34 Aspect Part_Of + =================== + + This aspect is equivalent to *note pragma Part_Of: b2. + +  + File: gnat_rm.info, Node: Aspect Persistent_BSS, Next: Aspect Predicate, Prev: Aspect Part_Of, Up: Implementation Defined Aspects + + 3.35 Aspect Persistent_BSS + ========================== + + This boolean aspect is equivalent to *note pragma Persistent_BSS: b5. + +  + File: gnat_rm.info, Node: Aspect Predicate, Next: Aspect Pure_Function, Prev: Aspect Persistent_BSS, Up: Implementation Defined Aspects + + 3.36 Aspect Predicate + ===================== + + This aspect is equivalent to *note pragma Predicate: bc. It is thus + similar to the language defined aspects ‘Dynamic_Predicate’ and + ‘Static_Predicate’ except that whether the resulting predicate is static + or dynamic is controlled by the form of the expression. It is also + separately controllable using pragma ‘Assertion_Policy’. + +  + File: gnat_rm.info, Node: Aspect Pure_Function, Next: Aspect Refined_Depends, Prev: Aspect Predicate, Up: Implementation Defined Aspects + + 3.37 Aspect Pure_Function + ========================= + + This boolean aspect is equivalent to *note pragma Pure_Function: c8. + +  + File: gnat_rm.info, Node: Aspect Refined_Depends, Next: Aspect Refined_Global, Prev: Aspect Pure_Function, Up: Implementation Defined Aspects + + 3.38 Aspect Refined_Depends + =========================== + + This aspect is equivalent to *note pragma Refined_Depends: cc. + +  + File: gnat_rm.info, Node: Aspect Refined_Global, Next: Aspect Refined_Post, Prev: Aspect Refined_Depends, Up: Implementation Defined Aspects + + 3.39 Aspect Refined_Global + ========================== + + This aspect is equivalent to *note pragma Refined_Global: ce. + +  + File: gnat_rm.info, Node: Aspect Refined_Post, Next: Aspect Refined_State, Prev: Aspect Refined_Global, Up: Implementation Defined Aspects + + 3.40 Aspect Refined_Post + ======================== + + This aspect is equivalent to *note pragma Refined_Post: d0. + +  + File: gnat_rm.info, Node: Aspect Refined_State, Next: Aspect Relaxed_Initialization, Prev: Aspect Refined_Post, Up: Implementation Defined Aspects + + 3.41 Aspect Refined_State + ========================= + + This aspect is equivalent to *note pragma Refined_State: d2. + +  + File: gnat_rm.info, Node: Aspect Relaxed_Initialization, Next: Aspect Remote_Access_Type, Prev: Aspect Refined_State, Up: Implementation Defined Aspects + + 3.42 Aspect Relaxed_Initialization + ================================== + + For the syntax and semantics of this aspect, see the SPARK 2014 + Reference Manual, section 6.10. + +  + File: gnat_rm.info, Node: Aspect Remote_Access_Type, Next: Aspect Secondary_Stack_Size, Prev: Aspect Relaxed_Initialization, Up: Implementation Defined Aspects + + 3.43 Aspect Remote_Access_Type + ============================== + + This aspect is equivalent to *note pragma Remote_Access_Type: d5. + +  + File: gnat_rm.info, Node: Aspect Secondary_Stack_Size, Next: Aspect Scalar_Storage_Order, Prev: Aspect Remote_Access_Type, Up: Implementation Defined Aspects + + 3.44 Aspect Secondary_Stack_Size + ================================ + + This aspect is equivalent to *note pragma Secondary_Stack_Size: db. + +  + File: gnat_rm.info, Node: Aspect Scalar_Storage_Order, Next: Aspect Shared, Prev: Aspect Secondary_Stack_Size, Up: Implementation Defined Aspects + + 3.45 Aspect Scalar_Storage_Order + ================================ + + This aspect is equivalent to a *note attribute Scalar_Storage_Order: + 14e. + +  + File: gnat_rm.info, Node: Aspect Shared, Next: Aspect Simple_Storage_Pool, Prev: Aspect Scalar_Storage_Order, Up: Implementation Defined Aspects + + 3.46 Aspect Shared + ================== + + This boolean aspect is equivalent to *note pragma Shared: de. and is + thus a synonym for aspect ‘Atomic’. + +  + File: gnat_rm.info, Node: Aspect Simple_Storage_Pool, Next: Aspect Simple_Storage_Pool_Type, Prev: Aspect Shared, Up: Implementation Defined Aspects + + 3.47 Aspect Simple_Storage_Pool + =============================== + + This aspect is equivalent to *note attribute Simple_Storage_Pool: e3. + +  + File: gnat_rm.info, Node: Aspect Simple_Storage_Pool_Type, Next: Aspect SPARK_Mode, Prev: Aspect Simple_Storage_Pool, Up: Implementation Defined Aspects + + 3.48 Aspect Simple_Storage_Pool_Type + ==================================== + + This boolean aspect is equivalent to *note pragma + Simple_Storage_Pool_Type: e2. + +  + File: gnat_rm.info, Node: Aspect SPARK_Mode, Next: Aspect Suppress_Debug_Info, Prev: Aspect Simple_Storage_Pool_Type, Up: Implementation Defined Aspects + + 3.49 Aspect SPARK_Mode + ====================== + + This aspect is equivalent to *note pragma SPARK_Mode: ea. and may be + specified for either or both of the specification and body of a + subprogram or package. + +  + File: gnat_rm.info, Node: Aspect Suppress_Debug_Info, Next: Aspect Suppress_Initialization, Prev: Aspect SPARK_Mode, Up: Implementation Defined Aspects + + 3.50 Aspect Suppress_Debug_Info + =============================== + + This boolean aspect is equivalent to *note pragma Suppress_Debug_Info: + f2. + +  + File: gnat_rm.info, Node: Aspect Suppress_Initialization, Next: Aspect Test_Case, Prev: Aspect Suppress_Debug_Info, Up: Implementation Defined Aspects + + 3.51 Aspect Suppress_Initialization + =================================== + + This boolean aspect is equivalent to *note pragma + Suppress_Initialization: f5. + +  + File: gnat_rm.info, Node: Aspect Test_Case, Next: Aspect Thread_Local_Storage, Prev: Aspect Suppress_Initialization, Up: Implementation Defined Aspects + + 3.52 Aspect Test_Case + ===================== + + This aspect is equivalent to *note pragma Test_Case: f9. + +  + File: gnat_rm.info, Node: Aspect Thread_Local_Storage, Next: Aspect Universal_Aliasing, Prev: Aspect Test_Case, Up: Implementation Defined Aspects + + 3.53 Aspect Thread_Local_Storage + ================================ + + This boolean aspect is equivalent to *note pragma Thread_Local_Storage: + fb. + +  + File: gnat_rm.info, Node: Aspect Universal_Aliasing, Next: Aspect Unmodified, Prev: Aspect Thread_Local_Storage, Up: Implementation Defined Aspects + + 3.54 Aspect Universal_Aliasing + ============================== + + This boolean aspect is equivalent to *note pragma Universal_Aliasing: + 105. + +  + File: gnat_rm.info, Node: Aspect Unmodified, Next: Aspect Unreferenced, Prev: Aspect Universal_Aliasing, Up: Implementation Defined Aspects + + 3.55 Aspect Unmodified + ====================== + + This boolean aspect is equivalent to *note pragma Unmodified: 107. + +  + File: gnat_rm.info, Node: Aspect Unreferenced, Next: Aspect Unreferenced_Objects, Prev: Aspect Unmodified, Up: Implementation Defined Aspects + + 3.56 Aspect Unreferenced + ======================== + + This boolean aspect is equivalent to *note pragma Unreferenced: 109. + + When using the ‘-gnat2022’ switch, this aspect is also supported on + formal parameters, which is in particular the only form possible for + expression functions. + +  + File: gnat_rm.info, Node: Aspect Unreferenced_Objects, Next: Aspect Value_Size, Prev: Aspect Unreferenced, Up: Implementation Defined Aspects + + 3.57 Aspect Unreferenced_Objects + ================================ + + This boolean aspect is equivalent to *note pragma Unreferenced_Objects: + 10b. + +  + File: gnat_rm.info, Node: Aspect Value_Size, Next: Aspect Volatile_Full_Access, Prev: Aspect Unreferenced_Objects, Up: Implementation Defined Aspects + + 3.58 Aspect Value_Size + ====================== + + This aspect is equivalent to *note attribute Value_Size: 15c. + +  + File: gnat_rm.info, Node: Aspect Volatile_Full_Access, Next: Aspect Volatile_Function, Prev: Aspect Value_Size, Up: Implementation Defined Aspects + + 3.59 Aspect Volatile_Full_Access + ================================ + + This boolean aspect is equivalent to *note pragma Volatile_Full_Access: + 115. + +  + File: gnat_rm.info, Node: Aspect Volatile_Function, Next: Aspect Warnings, Prev: Aspect Volatile_Full_Access, Up: Implementation Defined Aspects + + 3.60 Aspect Volatile_Function + ============================= + + This boolean aspect is equivalent to *note pragma Volatile_Function: + 117. + +  + File: gnat_rm.info, Node: Aspect Warnings, Prev: Aspect Volatile_Function, Up: Implementation Defined Aspects + + 3.61 Aspect Warnings + ==================== + + This aspect is equivalent to the two argument form of *note pragma + Warnings: 119, where the first argument is ‘ON’ or ‘OFF’ and the second + argument is the entity. + +  + File: gnat_rm.info, Node: Implementation Defined Attributes, Next: Standard and Implementation Defined Restrictions, Prev: Implementation Defined Aspects, Up: Top + + 4 Implementation Defined Attributes + *********************************** + + Ada defines (throughout the Ada reference manual, summarized in Annex + K), a set of attributes that provide useful additional functionality in + all areas of the language. These language defined attributes are + implemented in GNAT and work as described in the Ada Reference Manual. + + In addition, Ada allows implementations to define additional attributes + whose meaning is defined by the implementation. GNAT provides a number + of these implementation-dependent attributes which can be used to extend + and enhance the functionality of the compiler. This section of the GNAT + reference manual describes these additional attributes. It also + describes additional implementation-dependent features of standard + language-defined attributes. + + Note that any program using these attributes may not be portable to + other compilers (although GNAT implements this set of attributes on all + platforms). Therefore if portability to other compilers is an important + consideration, you should minimize the use of these attributes. + + * Menu: + + * Attribute Abort_Signal:: + * Attribute Address_Size:: + * Attribute Asm_Input:: + * Attribute Asm_Output:: + * Attribute Atomic_Always_Lock_Free:: + * Attribute Bit:: + * Attribute Bit_Position:: + * Attribute Code_Address:: + * Attribute Compiler_Version:: + * Attribute Constrained:: + * Attribute Default_Bit_Order:: + * Attribute Default_Scalar_Storage_Order:: + * Attribute Deref:: + * Attribute Descriptor_Size:: + * Attribute Elaborated:: + * Attribute Elab_Body:: + * Attribute Elab_Spec:: + * Attribute Elab_Subp_Body:: + * Attribute Emax:: + * Attribute Enabled:: + * Attribute Enum_Rep:: + * Attribute Enum_Val:: + * Attribute Epsilon:: + * Attribute Fast_Math:: + * Attribute Finalization_Size:: + * Attribute Fixed_Value:: + * Attribute From_Any:: + * Attribute Has_Access_Values:: + * Attribute Has_Discriminants:: + * Attribute Has_Tagged_Values:: + * Attribute Img:: + * Attribute Initialized:: + * Attribute Integer_Value:: + * Attribute Invalid_Value:: + * Attribute Iterable:: + * Attribute Large:: + * Attribute Library_Level:: + * Attribute Lock_Free:: + * Attribute Loop_Entry:: + * Attribute Machine_Size:: + * Attribute Mantissa:: + * Attribute Maximum_Alignment:: + * Attribute Max_Integer_Size:: + * Attribute Mechanism_Code:: + * Attribute Null_Parameter:: + * Attribute Object_Size:: + * Attribute Old:: + * Attribute Passed_By_Reference:: + * Attribute Pool_Address:: + * Attribute Range_Length:: + * Attribute Restriction_Set:: + * Attribute Result:: + * Attribute Safe_Emax:: + * Attribute Safe_Large:: + * Attribute Safe_Small:: + * Attribute Scalar_Storage_Order:: + * Attribute Simple_Storage_Pool:: + * Attribute Small:: + * Attribute Small_Denominator:: + * Attribute Small_Numerator:: + * Attribute Storage_Unit:: + * Attribute Stub_Type:: + * Attribute System_Allocator_Alignment:: + * Attribute Target_Name:: + * Attribute To_Address:: + * Attribute To_Any:: + * Attribute Type_Class:: + * Attribute Type_Key:: + * Attribute TypeCode:: + * Attribute Unconstrained_Array:: + * Attribute Universal_Literal_String:: + * Attribute Unrestricted_Access:: + * Attribute Update:: + * Attribute Valid_Image:: + * Attribute Valid_Scalars:: + * Attribute VADS_Size:: + * Attribute Value_Size:: + * Attribute Wchar_T_Size:: + * Attribute Word_Size:: + +  + File: gnat_rm.info, Node: Attribute Abort_Signal, Next: Attribute Address_Size, Up: Implementation Defined Attributes + + 4.1 Attribute Abort_Signal + ========================== + + ‘Standard'Abort_Signal’ (‘Standard’ is the only allowed prefix) provides + the entity for the special exception used to signal task abort or + asynchronous transfer of control. Normally this attribute should only + be used in the tasking runtime (it is highly peculiar, and completely + outside the normal semantics of Ada, for a user program to intercept the + abort exception). + +  + File: gnat_rm.info, Node: Attribute Address_Size, Next: Attribute Asm_Input, Prev: Attribute Abort_Signal, Up: Implementation Defined Attributes + + 4.2 Attribute Address_Size + ========================== + + ‘Standard'Address_Size’ (‘Standard’ is the only allowed prefix) is a + static constant giving the number of bits in an ‘Address’. It is the + same value as System.Address’Size, but has the advantage of being + static, while a direct reference to System.Address’Size is nonstatic + because Address is a private type. + +  + File: gnat_rm.info, Node: Attribute Asm_Input, Next: Attribute Asm_Output, Prev: Attribute Address_Size, Up: Implementation Defined Attributes + + 4.3 Attribute Asm_Input + ======================= + + The ‘Asm_Input’ attribute denotes a function that takes two parameters. + The first is a string, the second is an expression of the type + designated by the prefix. The first (string) argument is required to be + a static expression, and is the constraint for the parameter, (e.g., + what kind of register is required). The second argument is the value to + be used as the input argument. The possible values for the constant are + the same as those used in the RTL, and are dependent on the + configuration file used to built the GCC back end. *note Machine Code + Insertions: 165. + +  + File: gnat_rm.info, Node: Attribute Asm_Output, Next: Attribute Atomic_Always_Lock_Free, Prev: Attribute Asm_Input, Up: Implementation Defined Attributes + + 4.4 Attribute Asm_Output + ======================== + + The ‘Asm_Output’ attribute denotes a function that takes two parameters. + The first is a string, the second is the name of a variable of the type + designated by the attribute prefix. The first (string) argument is + required to be a static expression and designates the constraint for the + parameter (e.g., what kind of register is required). The second + argument is the variable to be updated with the result. The possible + values for constraint are the same as those used in the RTL, and are + dependent on the configuration file used to build the GCC back end. If + there are no output operands, then this argument may either be omitted, + or explicitly given as ‘No_Output_Operands’. *note Machine Code + Insertions: 165. + +  + File: gnat_rm.info, Node: Attribute Atomic_Always_Lock_Free, Next: Attribute Bit, Prev: Attribute Asm_Output, Up: Implementation Defined Attributes + + 4.5 Attribute Atomic_Always_Lock_Free + ===================================== + + The prefix of the ‘Atomic_Always_Lock_Free’ attribute is a type. The + result is a Boolean value which is True if the type has discriminants, + and False otherwise. The result indicate whether atomic operations are + supported by the target for the given type. + +  + File: gnat_rm.info, Node: Attribute Bit, Next: Attribute Bit_Position, Prev: Attribute Atomic_Always_Lock_Free, Up: Implementation Defined Attributes + + 4.6 Attribute Bit + ================= + + ‘obj'Bit’, where ‘obj’ is any object, yields the bit offset within the + storage unit (byte) that contains the first bit of storage allocated for + the object. The value of this attribute is of the type + `universal_integer' and is always a nonnegative number smaller than + ‘System.Storage_Unit’. + + For an object that is a variable or a constant allocated in a register, + the value is zero. (The use of this attribute does not force the + allocation of a variable to memory). + + For an object that is a formal parameter, this attribute applies to + either the matching actual parameter or to a copy of the matching actual + parameter. + + For an access object the value is zero. Note that ‘obj.all'Bit’ is + subject to an ‘Access_Check’ for the designated object. Similarly for a + record component ‘X.C'Bit’ is subject to a discriminant check and + ‘X(I).Bit’ and ‘X(I1..I2)'Bit’ are subject to index checks. + + This attribute is designed to be compatible with the DEC Ada 83 + definition and implementation of the ‘Bit’ attribute. + +  + File: gnat_rm.info, Node: Attribute Bit_Position, Next: Attribute Code_Address, Prev: Attribute Bit, Up: Implementation Defined Attributes + + 4.7 Attribute Bit_Position + ========================== + + ‘R.C'Bit_Position’, where ‘R’ is a record object and ‘C’ is one of the + fields of the record type, yields the bit offset within the record + contains the first bit of storage allocated for the object. The value + of this attribute is of the type `universal_integer'. The value depends + only on the field ‘C’ and is independent of the alignment of the + containing record ‘R’. + +  + File: gnat_rm.info, Node: Attribute Code_Address, Next: Attribute Compiler_Version, Prev: Attribute Bit_Position, Up: Implementation Defined Attributes + + 4.8 Attribute Code_Address + ========================== + + The ‘'Address’ attribute may be applied to subprograms in Ada 95 and Ada + 2005, but the intended effect seems to be to provide an address value + which can be used to call the subprogram by means of an address clause + as in the following example: + + procedure K is ... + + procedure L; + for L'Address use K'Address; + pragma Import (Ada, L); + + A call to ‘L’ is then expected to result in a call to ‘K’. In Ada 83, + where there were no access-to-subprogram values, this was a common + work-around for getting the effect of an indirect call. GNAT implements + the above use of ‘Address’ and the technique illustrated by the example + code works correctly. + + However, for some purposes, it is useful to have the address of the + start of the generated code for the subprogram. On some architectures, + this is not necessarily the same as the ‘Address’ value described above. + For example, the ‘Address’ value may reference a subprogram descriptor + rather than the subprogram itself. + + The ‘'Code_Address’ attribute, which can only be applied to subprogram + entities, always returns the address of the start of the generated code + of the specified subprogram, which may or may not be the same value as + is returned by the corresponding ‘'Address’ attribute. + +  + File: gnat_rm.info, Node: Attribute Compiler_Version, Next: Attribute Constrained, Prev: Attribute Code_Address, Up: Implementation Defined Attributes + + 4.9 Attribute Compiler_Version + ============================== + + ‘Standard'Compiler_Version’ (‘Standard’ is the only allowed prefix) + yields a static string identifying the version of the compiler being + used to compile the unit containing the attribute reference. + +  + File: gnat_rm.info, Node: Attribute Constrained, Next: Attribute Default_Bit_Order, Prev: Attribute Compiler_Version, Up: Implementation Defined Attributes + + 4.10 Attribute Constrained + ========================== + + In addition to the usage of this attribute in the Ada RM, GNAT also + permits the use of the ‘'Constrained’ attribute in a generic template + for any type, including types without discriminants. The value of this + attribute in the generic instance when applied to a scalar type or a + record type without discriminants is always ‘True’. This usage is + compatible with older Ada compilers, including notably DEC Ada. + +  + File: gnat_rm.info, Node: Attribute Default_Bit_Order, Next: Attribute Default_Scalar_Storage_Order, Prev: Attribute Constrained, Up: Implementation Defined Attributes + + 4.11 Attribute Default_Bit_Order + ================================ + + ‘Standard'Default_Bit_Order’ (‘Standard’ is the only allowed prefix), + provides the value ‘System.Default_Bit_Order’ as a ‘Pos’ value (0 for + ‘High_Order_First’, 1 for ‘Low_Order_First’). This is used to construct + the definition of ‘Default_Bit_Order’ in package ‘System’. + +  + File: gnat_rm.info, Node: Attribute Default_Scalar_Storage_Order, Next: Attribute Deref, Prev: Attribute Default_Bit_Order, Up: Implementation Defined Attributes + + 4.12 Attribute Default_Scalar_Storage_Order + =========================================== + + ‘Standard'Default_Scalar_Storage_Order’ (‘Standard’ is the only allowed + prefix), provides the current value of the default scalar storage order + (as specified using pragma ‘Default_Scalar_Storage_Order’, or equal to + ‘Default_Bit_Order’ if unspecified) as a ‘System.Bit_Order’ value. This + is a static attribute. + +  + File: gnat_rm.info, Node: Attribute Deref, Next: Attribute Descriptor_Size, Prev: Attribute Default_Scalar_Storage_Order, Up: Implementation Defined Attributes + + 4.13 Attribute Deref + ==================== + + The attribute ‘typ'Deref(expr)’ where ‘expr’ is of type ‘System.Address’ + yields the variable of type ‘typ’ that is located at the given address. + It is similar to ‘(totyp (expr).all)’, where ‘totyp’ is an unchecked + conversion from address to a named access-to-‘typ’ type, except that it + yields a variable, so it can be used on the left side of an assignment. + +  + File: gnat_rm.info, Node: Attribute Descriptor_Size, Next: Attribute Elaborated, Prev: Attribute Deref, Up: Implementation Defined Attributes + + 4.14 Attribute Descriptor_Size + ============================== + + Nonstatic attribute ‘Descriptor_Size’ returns the size in bits of the + descriptor allocated for a type. The result is non-zero only for + unconstrained array types and the returned value is of type universal + integer. In GNAT, an array descriptor contains bounds information and + is located immediately before the first element of the array. + + type Unconstr_Array is array (Short_Short_Integer range <>) of Positive; + Put_Line ("Descriptor size = " & Unconstr_Array'Descriptor_Size'Img); + + The attribute takes into account any padding due to the alignment of the + component type. In the example above, the descriptor contains two + values of type ‘Short_Short_Integer’ representing the low and high + bound. But, since ‘Positive’ has an alignment of 4, the size of the + descriptor is ‘2 * Short_Short_Integer'Size’ rounded up to the next + multiple of 32, which yields a size of 32 bits, i.e. including 16 bits + of padding. + +  + File: gnat_rm.info, Node: Attribute Elaborated, Next: Attribute Elab_Body, Prev: Attribute Descriptor_Size, Up: Implementation Defined Attributes + + 4.15 Attribute Elaborated + ========================= + + The prefix of the ‘'Elaborated’ attribute must be a unit name. The + value is a Boolean which indicates whether or not the given unit has + been elaborated. This attribute is primarily intended for internal use + by the generated code for dynamic elaboration checking, but it can also + be used in user programs. The value will always be True once + elaboration of all units has been completed. An exception is for units + which need no elaboration, the value is always False for such units. + +  + File: gnat_rm.info, Node: Attribute Elab_Body, Next: Attribute Elab_Spec, Prev: Attribute Elaborated, Up: Implementation Defined Attributes + + 4.16 Attribute Elab_Body + ======================== + + This attribute can only be applied to a program unit name. It returns + the entity for the corresponding elaboration procedure for elaborating + the body of the referenced unit. This is used in the main generated + elaboration procedure by the binder and is not normally used in any + other context. However, there may be specialized situations in which it + is useful to be able to call this elaboration procedure from Ada code, + e.g., if it is necessary to do selective re-elaboration to fix some + error. + +  + File: gnat_rm.info, Node: Attribute Elab_Spec, Next: Attribute Elab_Subp_Body, Prev: Attribute Elab_Body, Up: Implementation Defined Attributes + + 4.17 Attribute Elab_Spec + ======================== + + This attribute can only be applied to a program unit name. It returns + the entity for the corresponding elaboration procedure for elaborating + the spec of the referenced unit. This is used in the main generated + elaboration procedure by the binder and is not normally used in any + other context. However, there may be specialized situations in which it + is useful to be able to call this elaboration procedure from Ada code, + e.g., if it is necessary to do selective re-elaboration to fix some + error. + +  + File: gnat_rm.info, Node: Attribute Elab_Subp_Body, Next: Attribute Emax, Prev: Attribute Elab_Spec, Up: Implementation Defined Attributes + + 4.18 Attribute Elab_Subp_Body + ============================= + + This attribute can only be applied to a library level subprogram name + and is only allowed in CodePeer mode. It returns the entity for the + corresponding elaboration procedure for elaborating the body of the + referenced subprogram unit. This is used in the main generated + elaboration procedure by the binder in CodePeer mode only and is + unrecognized otherwise. + +  + File: gnat_rm.info, Node: Attribute Emax, Next: Attribute Enabled, Prev: Attribute Elab_Subp_Body, Up: Implementation Defined Attributes + + 4.19 Attribute Emax + =================== + + The ‘Emax’ attribute is provided for compatibility with Ada 83. See the + Ada 83 reference manual for an exact description of the semantics of + this attribute. + +  + File: gnat_rm.info, Node: Attribute Enabled, Next: Attribute Enum_Rep, Prev: Attribute Emax, Up: Implementation Defined Attributes + + 4.20 Attribute Enabled + ====================== + + The ‘Enabled’ attribute allows an application program to check at + compile time to see if the designated check is currently enabled. The + prefix is a simple identifier, referencing any predefined check name + (other than ‘All_Checks’) or a check name introduced by pragma + Check_Name. If no argument is given for the attribute, the check is for + the general state of the check, if an argument is given, then it is an + entity name, and the check indicates whether an ‘Suppress’ or + ‘Unsuppress’ has been given naming the entity (if not, then the argument + is ignored). + + Note that instantiations inherit the check status at the point of the + instantiation, so a useful idiom is to have a library package that + introduces a check name with ‘pragma Check_Name’, and then contains + generic packages or subprograms which use the ‘Enabled’ attribute to see + if the check is enabled. A user of this package can then issue a + ‘pragma Suppress’ or ‘pragma Unsuppress’ before instantiating the + package or subprogram, controlling whether the check will be present. + +  + File: gnat_rm.info, Node: Attribute Enum_Rep, Next: Attribute Enum_Val, Prev: Attribute Enabled, Up: Implementation Defined Attributes + + 4.21 Attribute Enum_Rep + ======================= + + Note that this attribute is now standard in Ada 202x and is available as + an implementation defined attribute for earlier Ada versions. + + For every enumeration subtype ‘S’, ‘S'Enum_Rep’ denotes a function with + the following spec: + + function S'Enum_Rep (Arg : S'Base) return ; + + It is also allowable to apply ‘Enum_Rep’ directly to an object of an + enumeration type or to a non-overloaded enumeration literal. In this + case ‘S'Enum_Rep’ is equivalent to ‘typ'Enum_Rep(S)’ where ‘typ’ is the + type of the enumeration literal or object. + + The function returns the representation value for the given enumeration + value. This will be equal to value of the ‘Pos’ attribute in the + absence of an enumeration representation clause. This is a static + attribute (i.e., the result is static if the argument is static). + + ‘S'Enum_Rep’ can also be used with integer types and objects, in which + case it simply returns the integer value. The reason for this is to + allow it to be used for ‘(<>)’ discrete formal arguments in a generic + unit that can be instantiated with either enumeration types or integer + types. Note that if ‘Enum_Rep’ is used on a modular type whose upper + bound exceeds the upper bound of the largest signed integer type, and + the argument is a variable, so that the universal integer calculation is + done at run time, then the call to ‘Enum_Rep’ may raise + ‘Constraint_Error’. + +  + File: gnat_rm.info, Node: Attribute Enum_Val, Next: Attribute Epsilon, Prev: Attribute Enum_Rep, Up: Implementation Defined Attributes + + 4.22 Attribute Enum_Val + ======================= + + Note that this attribute is now standard in Ada 202x and is available as + an implementation defined attribute for earlier Ada versions. + + For every enumeration subtype ‘S’, ‘S'Enum_Val’ denotes a function with + the following spec: + + function S'Enum_Val (Arg : ) return S'Base; + + The function returns the enumeration value whose representation matches + the argument, or raises Constraint_Error if no enumeration literal of + the type has the matching value. This will be equal to value of the + ‘Val’ attribute in the absence of an enumeration representation clause. + This is a static attribute (i.e., the result is static if the argument + is static). + +  + File: gnat_rm.info, Node: Attribute Epsilon, Next: Attribute Fast_Math, Prev: Attribute Enum_Val, Up: Implementation Defined Attributes + + 4.23 Attribute Epsilon + ====================== + + The ‘Epsilon’ attribute is provided for compatibility with Ada 83. See + the Ada 83 reference manual for an exact description of the semantics of + this attribute. + +  + File: gnat_rm.info, Node: Attribute Fast_Math, Next: Attribute Finalization_Size, Prev: Attribute Epsilon, Up: Implementation Defined Attributes + + 4.24 Attribute Fast_Math + ======================== + + ‘Standard'Fast_Math’ (‘Standard’ is the only allowed prefix) yields a + static Boolean value that is True if pragma ‘Fast_Math’ is active, and + False otherwise. + +  + File: gnat_rm.info, Node: Attribute Finalization_Size, Next: Attribute Fixed_Value, Prev: Attribute Fast_Math, Up: Implementation Defined Attributes + + 4.25 Attribute Finalization_Size + ================================ + + The prefix of attribute ‘Finalization_Size’ must be an object or a + non-class-wide type. This attribute returns the size of any hidden data + reserved by the compiler to handle finalization-related actions. The + type of the attribute is `universal_integer'. + + ‘Finalization_Size’ yields a value of zero for a type with no controlled + parts, an object whose type has no controlled parts, or an object of a + class-wide type whose tag denotes a type with no controlled parts. + + Note that only heap-allocated objects contain finalization data. + +  + File: gnat_rm.info, Node: Attribute Fixed_Value, Next: Attribute From_Any, Prev: Attribute Finalization_Size, Up: Implementation Defined Attributes + + 4.26 Attribute Fixed_Value + ========================== + + For every fixed-point type ‘S’, ‘S'Fixed_Value’ denotes a function with + the following specification: + + function S'Fixed_Value (Arg : ) return S; + + The value returned is the fixed-point value ‘V’ such that: + + V = Arg * S'Small + + The effect is thus similar to first converting the argument to the + integer type used to represent ‘S’, and then doing an unchecked + conversion to the fixed-point type. The difference is that there are + full range checks, to ensure that the result is in range. This + attribute is primarily intended for use in implementation of the + input-output functions for fixed-point values. + +  + File: gnat_rm.info, Node: Attribute From_Any, Next: Attribute Has_Access_Values, Prev: Attribute Fixed_Value, Up: Implementation Defined Attributes + + 4.27 Attribute From_Any + ======================= + + This internal attribute is used for the generation of remote subprogram + stubs in the context of the Distributed Systems Annex. + +  + File: gnat_rm.info, Node: Attribute Has_Access_Values, Next: Attribute Has_Discriminants, Prev: Attribute From_Any, Up: Implementation Defined Attributes + + 4.28 Attribute Has_Access_Values + ================================ + + The prefix of the ‘Has_Access_Values’ attribute is a type. The result + is a Boolean value which is True if the is an access type, or is a + composite type with a component (at any nesting depth) that is an access + type, and is False otherwise. The intended use of this attribute is in + conjunction with generic definitions. If the attribute is applied to a + generic private type, it indicates whether or not the corresponding + actual type has access values. + +  + File: gnat_rm.info, Node: Attribute Has_Discriminants, Next: Attribute Has_Tagged_Values, Prev: Attribute Has_Access_Values, Up: Implementation Defined Attributes + + 4.29 Attribute Has_Discriminants + ================================ + + The prefix of the ‘Has_Discriminants’ attribute is a type. The result + is a Boolean value which is True if the type has discriminants, and + False otherwise. The intended use of this attribute is in conjunction + with generic definitions. If the attribute is applied to a generic + private type, it indicates whether or not the corresponding actual type + has discriminants. + +  + File: gnat_rm.info, Node: Attribute Has_Tagged_Values, Next: Attribute Img, Prev: Attribute Has_Discriminants, Up: Implementation Defined Attributes + + 4.30 Attribute Has_Tagged_Values + ================================ + + The prefix of the ‘Has_Tagged_Values’ attribute is a type. The result + is a Boolean value which is True if the type is a composite type (array + or record) that is either a tagged type or has a subcomponent that is + tagged, and is False otherwise. The intended use of this attribute is + in conjunction with generic definitions. If the attribute is applied to + a generic private type, it indicates whether or not the corresponding + actual type has access values. + +  + File: gnat_rm.info, Node: Attribute Img, Next: Attribute Initialized, Prev: Attribute Has_Tagged_Values, Up: Implementation Defined Attributes + + 4.31 Attribute Img + ================== + + The ‘Img’ attribute differs from ‘Image’ in that, while both can be + applied directly to an object, ‘Img’ cannot be applied to types. + + Example usage of the attribute: + + Put_Line ("X = " & X'Img); + + which has the same meaning as the more verbose: + + Put_Line ("X = " & T'Image (X)); + + where ‘T’ is the (sub)type of the object ‘X’. + + Note that technically, in analogy to ‘Image’, ‘X'Img’ returns a + parameterless function that returns the appropriate string when called. + This means that ‘X'Img’ can be renamed as a function-returning-string, + or used in an instantiation as a function parameter. + +  + File: gnat_rm.info, Node: Attribute Initialized, Next: Attribute Integer_Value, Prev: Attribute Img, Up: Implementation Defined Attributes + + 4.32 Attribute Initialized + ========================== + + For the syntax and semantics of this attribute, see the SPARK 2014 + Reference Manual, section 6.10. + +  + File: gnat_rm.info, Node: Attribute Integer_Value, Next: Attribute Invalid_Value, Prev: Attribute Initialized, Up: Implementation Defined Attributes + + 4.33 Attribute Integer_Value + ============================ + + For every integer type ‘S’, ‘S'Integer_Value’ denotes a function with + the following spec: + + function S'Integer_Value (Arg : ) return S; + + The value returned is the integer value ‘V’, such that: + + Arg = V * T'Small + + where ‘T’ is the type of ‘Arg’. The effect is thus similar to first + doing an unchecked conversion from the fixed-point type to its + corresponding implementation type, and then converting the result to the + target integer type. The difference is that there are full range + checks, to ensure that the result is in range. This attribute is + primarily intended for use in implementation of the standard + input-output functions for fixed-point values. + +  + File: gnat_rm.info, Node: Attribute Invalid_Value, Next: Attribute Iterable, Prev: Attribute Integer_Value, Up: Implementation Defined Attributes + + 4.34 Attribute Invalid_Value + ============================ + + For every scalar type S, S’Invalid_Value returns an undefined value of + the type. If possible this value is an invalid representation for the + type. The value returned is identical to the value used to initialize + an otherwise uninitialized value of the type if pragma + Initialize_Scalars is used, including the ability to modify the value + with the binder -Sxx flag and relevant environment variables at run + time. + +  + File: gnat_rm.info, Node: Attribute Iterable, Next: Attribute Large, Prev: Attribute Invalid_Value, Up: Implementation Defined Attributes + + 4.35 Attribute Iterable + ======================= + + Equivalent to Aspect Iterable. + +  + File: gnat_rm.info, Node: Attribute Large, Next: Attribute Library_Level, Prev: Attribute Iterable, Up: Implementation Defined Attributes + + 4.36 Attribute Large + ==================== + + The ‘Large’ attribute is provided for compatibility with Ada 83. See + the Ada 83 reference manual for an exact description of the semantics of + this attribute. + +  + File: gnat_rm.info, Node: Attribute Library_Level, Next: Attribute Lock_Free, Prev: Attribute Large, Up: Implementation Defined Attributes + + 4.37 Attribute Library_Level + ============================ + + ‘P'Library_Level’, where P is an entity name, returns a Boolean value + which is True if the entity is declared at the library level, and False + otherwise. Note that within a generic instantition, the name of the + generic unit denotes the instance, which means that this attribute can + be used to test if a generic is instantiated at the library level, as + shown in this example: + + generic + ... + package Gen is + pragma Compile_Time_Error + (not Gen'Library_Level, + "Gen can only be instantiated at library level"); + ... + end Gen; + +  + File: gnat_rm.info, Node: Attribute Lock_Free, Next: Attribute Loop_Entry, Prev: Attribute Library_Level, Up: Implementation Defined Attributes + + 4.38 Attribute Lock_Free + ======================== + + ‘P'Lock_Free’, where P is a protected object, returns True if a pragma + ‘Lock_Free’ applies to P. + +  + File: gnat_rm.info, Node: Attribute Loop_Entry, Next: Attribute Machine_Size, Prev: Attribute Lock_Free, Up: Implementation Defined Attributes + + 4.39 Attribute Loop_Entry + ========================= + + Syntax: + + X'Loop_Entry [(loop_name)] + + The ‘Loop_Entry’ attribute is used to refer to the value that an + expression had upon entry to a given loop in much the same way that the + ‘Old’ attribute in a subprogram postcondition can be used to refer to + the value an expression had upon entry to the subprogram. The relevant + loop is either identified by the given loop name, or it is the innermost + enclosing loop when no loop name is given. + + A ‘Loop_Entry’ attribute can only occur within a ‘Loop_Variant’ or + ‘Loop_Invariant’ pragma. A common use of ‘Loop_Entry’ is to compare the + current value of objects with their initial value at loop entry, in a + ‘Loop_Invariant’ pragma. + + The effect of using ‘X'Loop_Entry’ is the same as declaring a constant + initialized with the initial value of ‘X’ at loop entry. This copy is + not performed if the loop is not entered, or if the corresponding + pragmas are ignored or disabled. + +  + File: gnat_rm.info, Node: Attribute Machine_Size, Next: Attribute Mantissa, Prev: Attribute Loop_Entry, Up: Implementation Defined Attributes + + 4.40 Attribute Machine_Size + =========================== + + This attribute is identical to the ‘Object_Size’ attribute. It is + provided for compatibility with the DEC Ada 83 attribute of this name. + +  + File: gnat_rm.info, Node: Attribute Mantissa, Next: Attribute Maximum_Alignment, Prev: Attribute Machine_Size, Up: Implementation Defined Attributes + + 4.41 Attribute Mantissa + ======================= + + The ‘Mantissa’ attribute is provided for compatibility with Ada 83. See + the Ada 83 reference manual for an exact description of the semantics of + this attribute. + +  + File: gnat_rm.info, Node: Attribute Maximum_Alignment, Next: Attribute Max_Integer_Size, Prev: Attribute Mantissa, Up: Implementation Defined Attributes + + 4.42 Attribute Maximum_Alignment + ================================ + + ‘Standard'Maximum_Alignment’ (‘Standard’ is the only allowed prefix) + provides the maximum useful alignment value for the target. This is a + static value that can be used to specify the alignment for an object, + guaranteeing that it is properly aligned in all cases. + +  + File: gnat_rm.info, Node: Attribute Max_Integer_Size, Next: Attribute Mechanism_Code, Prev: Attribute Maximum_Alignment, Up: Implementation Defined Attributes + + 4.43 Attribute Max_Integer_Size + =============================== + + ‘Standard'Max_Integer_Size’ (‘Standard’ is the only allowed prefix) + provides the size of the largest supported integer type for the target. + The result is a static constant. + +  + File: gnat_rm.info, Node: Attribute Mechanism_Code, Next: Attribute Null_Parameter, Prev: Attribute Max_Integer_Size, Up: Implementation Defined Attributes + + 4.44 Attribute Mechanism_Code + ============================= + + ‘func'Mechanism_Code’ yields an integer code for the mechanism used for + the result of function ‘func’, and ‘subprog'Mechanism_Code (n)’ yields + the mechanism used for formal parameter number `n' (a static integer + value, with 1 meaning the first parameter) of subprogram ‘subprog’. The + code returned is: + + `1' + + by copy (value) + + `2' + + by reference + +  + File: gnat_rm.info, Node: Attribute Null_Parameter, Next: Attribute Object_Size, Prev: Attribute Mechanism_Code, Up: Implementation Defined Attributes + + 4.45 Attribute Null_Parameter + ============================= + + A reference ‘T'Null_Parameter’ denotes an imaginary object of type or + subtype ‘T’ allocated at machine address zero. The attribute is allowed + only as the default expression of a formal parameter, or as an actual + expression of a subprogram call. In either case, the subprogram must be + imported. + + The identity of the object is represented by the address zero in the + argument list, independent of the passing mechanism (explicit or + default). + + This capability is needed to specify that a zero address should be + passed for a record or other composite object passed by reference. + There is no way of indicating this without the ‘Null_Parameter’ + attribute. + +  + File: gnat_rm.info, Node: Attribute Object_Size, Next: Attribute Old, Prev: Attribute Null_Parameter, Up: Implementation Defined Attributes + + 4.46 Attribute Object_Size + ========================== + + The size of an object is not necessarily the same as the size of the + type of an object. This is because by default object sizes are + increased to be a multiple of the alignment of the object. For example, + ‘Natural'Size’ is 31, but by default objects of type ‘Natural’ will have + a size of 32 bits. Similarly, a record containing an integer and a + character: + + type Rec is record + I : Integer; + C : Character; + end record; + + will have a size of 40 (that is ‘Rec'Size’ will be 40). The alignment + will be 4, because of the integer field, and so the default size of + record objects for this type will be 64 (8 bytes). + + If the alignment of the above record is specified to be 1, then the + object size will be 40 (5 bytes). This is true by default, and also an + object size of 40 can be explicitly specified in this case. + + A consequence of this capability is that different object sizes can be + given to subtypes that would otherwise be considered in Ada to be + statically matching. But it makes no sense to consider such subtypes as + statically matching. Consequently, GNAT adds a rule to the static + matching rules that requires object sizes to match. Consider this + example: + + 1. procedure BadAVConvert is + 2. type R is new Integer; + 3. subtype R1 is R range 1 .. 10; + 4. subtype R2 is R range 1 .. 10; + 5. for R1'Object_Size use 8; + 6. for R2'Object_Size use 16; + 7. type R1P is access all R1; + 8. type R2P is access all R2; + 9. R1PV : R1P := new R1'(4); + 10. R2PV : R2P; + 11. begin + 12. R2PV := R2P (R1PV); + | + >>> target designated subtype not compatible with + type "R1" defined at line 3 + + 13. end; + + In the absence of lines 5 and 6, types ‘R1’ and ‘R2’ statically match + and hence the conversion on line 12 is legal. But since lines 5 and 6 + cause the object sizes to differ, GNAT considers that types ‘R1’ and + ‘R2’ are not statically matching, and line 12 generates the diagnostic + shown above. + + Similar additional checks are performed in other contexts requiring + statically matching subtypes. + +  + File: gnat_rm.info, Node: Attribute Old, Next: Attribute Passed_By_Reference, Prev: Attribute Object_Size, Up: Implementation Defined Attributes + + 4.47 Attribute Old + ================== + + In addition to the usage of ‘Old’ defined in the Ada 2012 RM (usage + within ‘Post’ aspect), GNAT also permits the use of this attribute in + implementation defined pragmas ‘Postcondition’, ‘Contract_Cases’ and + ‘Test_Case’. Also usages of ‘Old’ which would be illegal according to + the Ada 2012 RM definition are allowed under control of implementation + defined pragma ‘Unevaluated_Use_Of_Old’. + +  + File: gnat_rm.info, Node: Attribute Passed_By_Reference, Next: Attribute Pool_Address, Prev: Attribute Old, Up: Implementation Defined Attributes + + 4.48 Attribute Passed_By_Reference + ================================== + + ‘typ'Passed_By_Reference’ for any subtype ‘typ’ returns a value of type + ‘Boolean’ value that is ‘True’ if the type is normally passed by + reference and ‘False’ if the type is normally passed by copy in calls. + For scalar types, the result is always ‘False’ and is static. For + non-scalar types, the result is nonstatic. + +  + File: gnat_rm.info, Node: Attribute Pool_Address, Next: Attribute Range_Length, Prev: Attribute Passed_By_Reference, Up: Implementation Defined Attributes + + 4.49 Attribute Pool_Address + =========================== + + ‘X'Pool_Address’ for any object ‘X’ returns the address of X within its + storage pool. This is the same as ‘X'Address’, except that for an + unconstrained array whose bounds are allocated just before the first + component, ‘X'Pool_Address’ returns the address of those bounds, whereas + ‘X'Address’ returns the address of the first component. + + Here, we are interpreting ‘storage pool’ broadly to mean ‘wherever the + object is allocated’, which could be a user-defined storage pool, the + global heap, on the stack, or in a static memory area. For an object + created by ‘new’, ‘Ptr.all'Pool_Address’ is what is passed to ‘Allocate’ + and returned from ‘Deallocate’. + +  + File: gnat_rm.info, Node: Attribute Range_Length, Next: Attribute Restriction_Set, Prev: Attribute Pool_Address, Up: Implementation Defined Attributes + + 4.50 Attribute Range_Length + =========================== + + ‘typ'Range_Length’ for any discrete type ‘typ’ yields the number of + values represented by the subtype (zero for a null range). The result + is static for static subtypes. ‘Range_Length’ applied to the index + subtype of a one dimensional array always gives the same result as + ‘Length’ applied to the array itself. + +  + File: gnat_rm.info, Node: Attribute Restriction_Set, Next: Attribute Result, Prev: Attribute Range_Length, Up: Implementation Defined Attributes + + 4.51 Attribute Restriction_Set + ============================== + + This attribute allows compile time testing of restrictions that are + currently in effect. It is primarily intended for specializing code in + the run-time based on restrictions that are active (e.g. don’t need to + save fpt registers if restriction No_Floating_Point is known to be in + effect), but can be used anywhere. + + There are two forms: + + System'Restriction_Set (partition_boolean_restriction_NAME) + System'Restriction_Set (No_Dependence => library_unit_NAME); + + In the case of the first form, the only restriction names allowed are + parameterless restrictions that are checked for consistency at bind + time. For a complete list see the subtype + ‘System.Rident.Partition_Boolean_Restrictions’. + + The result returned is True if the restriction is known to be in effect, + and False if the restriction is known not to be in effect. An important + guarantee is that the value of a Restriction_Set attribute is known to + be consistent throughout all the code of a partition. + + This is trivially achieved if the entire partition is compiled with a + consistent set of restriction pragmas. However, the compilation model + does not require this. It is possible to compile one set of units with + one set of pragmas, and another set of units with another set of + pragmas. It is even possible to compile a spec with one set of pragmas, + and then WITH the same spec with a different set of pragmas. + Inconsistencies in the actual use of the restriction are checked at bind + time. + + In order to achieve the guarantee of consistency for the Restriction_Set + pragma, we consider that a use of the pragma that yields False is + equivalent to a violation of the restriction. + + So for example if you write + + if System'Restriction_Set (No_Floating_Point) then + ... + else + ... + end if; + + And the result is False, so that the else branch is executed, you can + assume that this restriction is not set for any unit in the partition. + This is checked by considering this use of the restriction pragma to be + a violation of the restriction No_Floating_Point. This means that no + other unit can attempt to set this restriction (if some unit does + attempt to set it, the binder will refuse to bind the partition). + + Technical note: The restriction name and the unit name are intepreted + entirely syntactically, as in the corresponding Restrictions pragma, + they are not analyzed semantically, so they do not have a type. + +  + File: gnat_rm.info, Node: Attribute Result, Next: Attribute Safe_Emax, Prev: Attribute Restriction_Set, Up: Implementation Defined Attributes + + 4.52 Attribute Result + ===================== + + ‘function'Result’ can only be used with in a Postcondition pragma for a + function. The prefix must be the name of the corresponding function. + This is used to refer to the result of the function in the postcondition + expression. For a further discussion of the use of this attribute and + examples of its use, see the description of pragma Postcondition. + +  + File: gnat_rm.info, Node: Attribute Safe_Emax, Next: Attribute Safe_Large, Prev: Attribute Result, Up: Implementation Defined Attributes + + 4.53 Attribute Safe_Emax + ======================== + + The ‘Safe_Emax’ attribute is provided for compatibility with Ada 83. + See the Ada 83 reference manual for an exact description of the + semantics of this attribute. + +  + File: gnat_rm.info, Node: Attribute Safe_Large, Next: Attribute Safe_Small, Prev: Attribute Safe_Emax, Up: Implementation Defined Attributes + + 4.54 Attribute Safe_Large + ========================= + + The ‘Safe_Large’ attribute is provided for compatibility with Ada 83. + See the Ada 83 reference manual for an exact description of the + semantics of this attribute. + +  + File: gnat_rm.info, Node: Attribute Safe_Small, Next: Attribute Scalar_Storage_Order, Prev: Attribute Safe_Large, Up: Implementation Defined Attributes + + 4.55 Attribute Safe_Small + ========================= + + The ‘Safe_Small’ attribute is provided for compatibility with Ada 83. + See the Ada 83 reference manual for an exact description of the + semantics of this attribute. + +  + File: gnat_rm.info, Node: Attribute Scalar_Storage_Order, Next: Attribute Simple_Storage_Pool, Prev: Attribute Safe_Small, Up: Implementation Defined Attributes + + 4.56 Attribute Scalar_Storage_Order + =================================== + + For every array or record type ‘S’, the representation attribute + ‘Scalar_Storage_Order’ denotes the order in which storage elements that + make up scalar components are ordered within S. The value given must be + a static expression of type System.Bit_Order. The following is an + example of the use of this feature: + + -- Component type definitions + + subtype Yr_Type is Natural range 0 .. 127; + subtype Mo_Type is Natural range 1 .. 12; + subtype Da_Type is Natural range 1 .. 31; + + -- Record declaration + + type Date is record + Years_Since_1980 : Yr_Type; + Month : Mo_Type; + Day_Of_Month : Da_Type; + end record; + + -- Record representation clause + + for Date use record + Years_Since_1980 at 0 range 0 .. 6; + Month at 0 range 7 .. 10; + Day_Of_Month at 0 range 11 .. 15; + end record; + + -- Attribute definition clauses + + for Date'Bit_Order use System.High_Order_First; + for Date'Scalar_Storage_Order use System.High_Order_First; + -- If Scalar_Storage_Order is specified, it must be consistent with + -- Bit_Order, so it's best to always define the latter explicitly if + -- the former is used. + + Other properties are as for the standard representation attribute + ‘Bit_Order’ defined by Ada RM 13.5.3(4). The default is + ‘System.Default_Bit_Order’. + + For a record type ‘T’, if ‘T'Scalar_Storage_Order’ is specified + explicitly, it shall be equal to ‘T'Bit_Order’. Note: this means that + if a ‘Scalar_Storage_Order’ attribute definition clause is not + confirming, then the type’s ‘Bit_Order’ shall be specified explicitly + and set to the same value. + + Derived types inherit an explicitly set scalar storage order from their + parent types. This may be overridden for the derived type by giving an + explicit scalar storage order for it. However, for a record extension, + the derived type must have the same scalar storage order as the parent + type. + + A component of a record type that is itself a record or an array and + that does not start and end on a byte boundary must have have the same + scalar storage order as the record type. A component of a bit-packed + array type that is itself a record or an array must have the same scalar + storage order as the array type. + + No component of a type that has an explicit ‘Scalar_Storage_Order’ + attribute definition may be aliased. + + A confirming ‘Scalar_Storage_Order’ attribute definition clause (i.e. + with a value equal to ‘System.Default_Bit_Order’) has no effect. + + If the opposite storage order is specified, then whenever the value of a + scalar component of an object of type ‘S’ is read, the storage elements + of the enclosing machine scalar are first reversed (before retrieving + the component value, possibly applying some shift and mask operatings on + the enclosing machine scalar), and the opposite operation is done for + writes. + + In that case, the restrictions set forth in 13.5.1(10.3/2) for scalar + components are relaxed. Instead, the following rules apply: + + * the underlying storage elements are those at positions ‘(position + + first_bit / storage_element_size) .. (position + (last_bit + + storage_element_size - 1) / storage_element_size)’ + + * the sequence of underlying storage elements shall have a size no + greater than the largest machine scalar + + * the enclosing machine scalar is defined as the smallest machine + scalar starting at a position no greater than ‘position + first_bit + / storage_element_size’ and covering storage elements at least up + to ‘position + (last_bit + storage_element_size - 1) / + storage_element_size`’ + + * the position of the component is interpreted relative to that + machine scalar. + + If no scalar storage order is specified for a type (either directly, or + by inheritance in the case of a derived type), then the default is + normally the native ordering of the target, but this default can be + overridden using pragma ‘Default_Scalar_Storage_Order’. + + If a component of ‘T’ is itself of a record or array type, the specfied + ‘Scalar_Storage_Order’ does `not' apply to that nested type: an explicit + attribute definition clause must be provided for the component type as + well if desired. + + Representation changes that explicitly or implicitly toggle the scalar + storage order are not supported and may result in erroneous execution of + the program, except when performed by means of an instance of + ‘Ada.Unchecked_Conversion’. + + In particular, overlays are not supported and a warning is given for + them: + + type Rec_LE is record + I : Integer; + end record; + + for Rec_LE use record + I at 0 range 0 .. 31; + end record; + + for Rec_LE'Bit_Order use System.Low_Order_First; + for Rec_LE'Scalar_Storage_Order use System.Low_Order_First; + + type Rec_BE is record + I : Integer; + end record; + + for Rec_BE use record + I at 0 range 0 .. 31; + end record; + + for Rec_BE'Bit_Order use System.High_Order_First; + for Rec_BE'Scalar_Storage_Order use System.High_Order_First; + + R_LE : Rec_LE; + + R_BE : Rec_BE; + for R_BE'Address use R_LE'Address; + + ‘warning: overlay changes scalar storage order [enabled by default]’ + + In most cases, such representation changes ought to be replaced by an + instantiation of a function or procedure provided by + ‘GNAT.Byte_Swapping’. + + Note that the scalar storage order only affects the in-memory data + representation. It has no effect on the representation used by stream + attributes. + + Note that debuggers may be unable to display the correct value of scalar + components of a type for which the opposite storage order is specified. + +  + File: gnat_rm.info, Node: Attribute Simple_Storage_Pool, Next: Attribute Small, Prev: Attribute Scalar_Storage_Order, Up: Implementation Defined Attributes + + 4.57 Attribute Simple_Storage_Pool + ================================== + + For every nonformal, nonderived access-to-object type ‘Acc’, the + representation attribute ‘Simple_Storage_Pool’ may be specified via an + attribute_definition_clause (or by specifying the equivalent aspect): + + My_Pool : My_Simple_Storage_Pool_Type; + + type Acc is access My_Data_Type; + + for Acc'Simple_Storage_Pool use My_Pool; + + The name given in an attribute_definition_clause for the + ‘Simple_Storage_Pool’ attribute shall denote a variable of a ‘simple + storage pool type’ (see pragma ‘Simple_Storage_Pool_Type’). + + The use of this attribute is only allowed for a prefix denoting a type + for which it has been specified. The type of the attribute is the type + of the variable specified as the simple storage pool of the access type, + and the attribute denotes that variable. + + It is illegal to specify both ‘Storage_Pool’ and ‘Simple_Storage_Pool’ + for the same access type. + + If the ‘Simple_Storage_Pool’ attribute has been specified for an access + type, then applying the ‘Storage_Pool’ attribute to the type is flagged + with a warning and its evaluation raises the exception ‘Program_Error’. + + If the Simple_Storage_Pool attribute has been specified for an access + type ‘S’, then the evaluation of the attribute ‘S'Storage_Size’ returns + the result of calling ‘Storage_Size (S'Simple_Storage_Pool)’, which is + intended to indicate the number of storage elements reserved for the + simple storage pool. If the Storage_Size function has not been defined + for the simple storage pool type, then this attribute returns zero. + + If an access type ‘S’ has a specified simple storage pool of type ‘SSP’, + then the evaluation of an allocator for that access type calls the + primitive ‘Allocate’ procedure for type ‘SSP’, passing + ‘S'Simple_Storage_Pool’ as the pool parameter. The detailed semantics + of such allocators is the same as those defined for allocators in + section 13.11 of the ‘Ada Reference Manual’, with the term `simple + storage pool' substituted for `storage pool'. + + If an access type ‘S’ has a specified simple storage pool of type ‘SSP’, + then a call to an instance of the ‘Ada.Unchecked_Deallocation’ for that + access type invokes the primitive ‘Deallocate’ procedure for type ‘SSP’, + passing ‘S'Simple_Storage_Pool’ as the pool parameter. The detailed + semantics of such unchecked deallocations is the same as defined in + section 13.11.2 of the Ada Reference Manual, except that the term + `simple storage pool' is substituted for `storage pool'. + +  + File: gnat_rm.info, Node: Attribute Small, Next: Attribute Small_Denominator, Prev: Attribute Simple_Storage_Pool, Up: Implementation Defined Attributes + + 4.58 Attribute Small + ==================== + + The ‘Small’ attribute is defined in Ada 95 (and Ada 2005) only for + fixed-point types. GNAT also allows this attribute to be applied to + floating-point types for compatibility with Ada 83. See the Ada 83 + reference manual for an exact description of the semantics of this + attribute when applied to floating-point types. + +  + File: gnat_rm.info, Node: Attribute Small_Denominator, Next: Attribute Small_Numerator, Prev: Attribute Small, Up: Implementation Defined Attributes + + 4.59 Attribute Small_Denominator + ================================ + + ‘typ'Small_Denominator’ for any fixed-point subtype ‘typ’ yields the + denominator in the representation of ‘typ'Small’ as a rational number + with coprime factors (i.e. as an irreducible fraction). + +  + File: gnat_rm.info, Node: Attribute Small_Numerator, Next: Attribute Storage_Unit, Prev: Attribute Small_Denominator, Up: Implementation Defined Attributes + + 4.60 Attribute Small_Numerator + ============================== + + ‘typ'Small_Numerator’ for any fixed-point subtype ‘typ’ yields the + numerator in the representation of ‘typ'Small’ as a rational number with + coprime factors (i.e. as an irreducible fraction). + +  + File: gnat_rm.info, Node: Attribute Storage_Unit, Next: Attribute Stub_Type, Prev: Attribute Small_Numerator, Up: Implementation Defined Attributes + + 4.61 Attribute Storage_Unit + =========================== + + ‘Standard'Storage_Unit’ (‘Standard’ is the only allowed prefix) provides + the same value as ‘System.Storage_Unit’. + +  + File: gnat_rm.info, Node: Attribute Stub_Type, Next: Attribute System_Allocator_Alignment, Prev: Attribute Storage_Unit, Up: Implementation Defined Attributes + + 4.62 Attribute Stub_Type + ======================== + + The GNAT implementation of remote access-to-classwide types is organized + as described in AARM section E.4 (20.t): a value of an RACW type + (designating a remote object) is represented as a normal access value, + pointing to a “stub” object which in turn contains the necessary + information to contact the designated remote object. A call on any + dispatching operation of such a stub object does the remote call, if + necessary, using the information in the stub object to locate the target + partition, etc. + + For a prefix ‘T’ that denotes a remote access-to-classwide type, + ‘T'Stub_Type’ denotes the type of the corresponding stub objects. + + By construction, the layout of ‘T'Stub_Type’ is identical to that of + type ‘RACW_Stub_Type’ declared in the internal implementation-defined + unit ‘System.Partition_Interface’. Use of this attribute will create an + implicit dependency on this unit. + +  + File: gnat_rm.info, Node: Attribute System_Allocator_Alignment, Next: Attribute Target_Name, Prev: Attribute Stub_Type, Up: Implementation Defined Attributes + + 4.63 Attribute System_Allocator_Alignment + ========================================= + + ‘Standard'System_Allocator_Alignment’ (‘Standard’ is the only allowed + prefix) provides the observable guaranted to be honored by the system + allocator (malloc). This is a static value that can be used in user + storage pools based on malloc either to reject allocation with alignment + too large or to enable a realignment circuitry if the alignment request + is larger than this value. + +  + File: gnat_rm.info, Node: Attribute Target_Name, Next: Attribute To_Address, Prev: Attribute System_Allocator_Alignment, Up: Implementation Defined Attributes + + 4.64 Attribute Target_Name + ========================== + + ‘Standard'Target_Name’ (‘Standard’ is the only allowed prefix) provides + a static string value that identifies the target for the current + compilation. For GCC implementations, this is the standard gcc target + name without the terminating slash (for example, GNAT 5.0 on windows + yields “i586-pc-mingw32msv”). + +  + File: gnat_rm.info, Node: Attribute To_Address, Next: Attribute To_Any, Prev: Attribute Target_Name, Up: Implementation Defined Attributes + + 4.65 Attribute To_Address + ========================= + + The ‘System'To_Address’ (‘System’ is the only allowed prefix) denotes a + function identical to ‘System.Storage_Elements.To_Address’ except that + it is a static attribute. This means that if its argument is a static + expression, then the result of the attribute is a static expression. + This means that such an expression can be used in contexts (e.g., + preelaborable packages) which require a static expression and where the + function call could not be used (since the function call is always + nonstatic, even if its argument is static). The argument must be in the + range -(2**(m-1)) .. 2**m-1, where m is the memory size (typically 32 + or 64). Negative values are intepreted in a modular manner (e.g., -1 + means the same as 16#FFFF_FFFF# on a 32 bits machine). + +  + File: gnat_rm.info, Node: Attribute To_Any, Next: Attribute Type_Class, Prev: Attribute To_Address, Up: Implementation Defined Attributes + + 4.66 Attribute To_Any + ===================== + + This internal attribute is used for the generation of remote subprogram + stubs in the context of the Distributed Systems Annex. + +  + File: gnat_rm.info, Node: Attribute Type_Class, Next: Attribute Type_Key, Prev: Attribute To_Any, Up: Implementation Defined Attributes + + 4.67 Attribute Type_Class + ========================= + + ‘typ'Type_Class’ for any type or subtype ‘typ’ yields the value of the + type class for the full type of ‘typ’. If ‘typ’ is a generic formal + type, the value is the value for the corresponding actual subtype. The + value of this attribute is of type ‘System.Aux_DEC.Type_Class’, which + has the following definition: + + type Type_Class is + (Type_Class_Enumeration, + Type_Class_Integer, + Type_Class_Fixed_Point, + Type_Class_Floating_Point, + Type_Class_Array, + Type_Class_Record, + Type_Class_Access, + Type_Class_Task, + Type_Class_Address); + + Protected types yield the value ‘Type_Class_Task’, which thus applies to + all concurrent types. This attribute is designed to be compatible with + the DEC Ada 83 attribute of the same name. + +  + File: gnat_rm.info, Node: Attribute Type_Key, Next: Attribute TypeCode, Prev: Attribute Type_Class, Up: Implementation Defined Attributes + + 4.68 Attribute Type_Key + ======================= + + The ‘Type_Key’ attribute is applicable to a type or subtype and yields a + value of type Standard.String containing encoded information about the + type or subtype. This provides improved compatibility with other + implementations that support this attribute. + +  + File: gnat_rm.info, Node: Attribute TypeCode, Next: Attribute Unconstrained_Array, Prev: Attribute Type_Key, Up: Implementation Defined Attributes + + 4.69 Attribute TypeCode + ======================= + + This internal attribute is used for the generation of remote subprogram + stubs in the context of the Distributed Systems Annex. + +  + File: gnat_rm.info, Node: Attribute Unconstrained_Array, Next: Attribute Universal_Literal_String, Prev: Attribute TypeCode, Up: Implementation Defined Attributes + + 4.70 Attribute Unconstrained_Array + ================================== + + The ‘Unconstrained_Array’ attribute can be used with a prefix that + denotes any type or subtype. It is a static attribute that yields + ‘True’ if the prefix designates an unconstrained array, and ‘False’ + otherwise. In a generic instance, the result is still static, and + yields the result of applying this test to the generic actual. + +  + File: gnat_rm.info, Node: Attribute Universal_Literal_String, Next: Attribute Unrestricted_Access, Prev: Attribute Unconstrained_Array, Up: Implementation Defined Attributes + + 4.71 Attribute Universal_Literal_String + ======================================= + + The prefix of ‘Universal_Literal_String’ must be a named number. The + static result is the string consisting of the characters of the number + as defined in the original source. This allows the user program to + access the actual text of named numbers without intermediate conversions + and without the need to enclose the strings in quotes (which would + preclude their use as numbers). + + For example, the following program prints the first 50 digits of pi: + + with Text_IO; use Text_IO; + with Ada.Numerics; + procedure Pi is + begin + Put (Ada.Numerics.Pi'Universal_Literal_String); + end; + +  + File: gnat_rm.info, Node: Attribute Unrestricted_Access, Next: Attribute Update, Prev: Attribute Universal_Literal_String, Up: Implementation Defined Attributes + + 4.72 Attribute Unrestricted_Access + ================================== + + The ‘Unrestricted_Access’ attribute is similar to ‘Access’ except that + all accessibility and aliased view checks are omitted. This is a + user-beware attribute. + + For objects, it is similar to ‘Address’, for which it is a desirable + replacement where the value desired is an access type. In other words, + its effect is similar to first applying the ‘Address’ attribute and then + doing an unchecked conversion to a desired access type. + + For subprograms, ‘P'Unrestricted_Access’ may be used where ‘P'Access’ + would be illegal, to construct a value of a less-nested named access + type that designates a more-nested subprogram. This value may be used + in indirect calls, so long as the more-nested subprogram still exists; + once the subprogram containing it has returned, such calls are + erroneous. For example: + + package body P is + + type Less_Nested is not null access procedure; + Global : Less_Nested; + + procedure P1 is + begin + Global.all; + end P1; + + procedure P2 is + Local_Var : Integer; + + procedure More_Nested is + begin + ... Local_Var ... + end More_Nested; + begin + Global := More_Nested'Unrestricted_Access; + P1; + end P2; + + end P; + + When P1 is called from P2, the call via Global is OK, but if P1 were + called after P2 returns, it would be an erroneous use of a dangling + pointer. + + For objects, it is possible to use ‘Unrestricted_Access’ for any type. + However, if the result is of an access-to-unconstrained array subtype, + then the resulting pointer has the same scope as the context of the + attribute, and must not be returned to some enclosing scope. For + instance, if a function uses ‘Unrestricted_Access’ to create an + access-to-unconstrained-array and returns that value to the caller, the + result will involve dangling pointers. In addition, it is only valid to + create pointers to unconstrained arrays using this attribute if the + pointer has the normal default ‘fat’ representation where a pointer has + two components, one points to the array and one points to the bounds. + If a size clause is used to force ‘thin’ representation for a pointer to + unconstrained where there is only space for a single pointer, then the + resulting pointer is not usable. + + In the simple case where a direct use of Unrestricted_Access attempts to + make a thin pointer for a non-aliased object, the compiler will reject + the use as illegal, as shown in the following example: + + with System; use System; + procedure SliceUA2 is + type A is access all String; + for A'Size use Standard'Address_Size; + + procedure P (Arg : A) is + begin + null; + end P; + + X : String := "hello world!"; + X2 : aliased String := "hello world!"; + + AV : A := X'Unrestricted_Access; -- ERROR + | + >>> illegal use of Unrestricted_Access attribute + >>> attempt to generate thin pointer to unaliased object + + begin + P (X'Unrestricted_Access); -- ERROR + | + >>> illegal use of Unrestricted_Access attribute + >>> attempt to generate thin pointer to unaliased object + + P (X(7 .. 12)'Unrestricted_Access); -- ERROR + | + >>> illegal use of Unrestricted_Access attribute + >>> attempt to generate thin pointer to unaliased object + + P (X2'Unrestricted_Access); -- OK + end; + + but other cases cannot be detected by the compiler, and are considered + to be erroneous. Consider the following example: + + with System; use System; + with System; use System; + procedure SliceUA is + type AF is access all String; + + type A is access all String; + for A'Size use Standard'Address_Size; + + procedure P (Arg : A) is + begin + if Arg'Length /= 6 then + raise Program_Error; + end if; + end P; + + X : String := "hello world!"; + Y : AF := X (7 .. 12)'Unrestricted_Access; + + begin + P (A (Y)); + end; + + A normal unconstrained array value or a constrained array object marked + as aliased has the bounds in memory just before the array, so a thin + pointer can retrieve both the data and the bounds. But in this case, + the non-aliased object ‘X’ does not have the bounds before the string. + If the size clause for type ‘A’ were not present, then the pointer would + be a fat pointer, where one component is a pointer to the bounds, and + all would be well. But with the size clause present, the conversion + from fat pointer to thin pointer in the call loses the bounds, and so + this is erroneous, and the program likely raises a ‘Program_Error’ + exception. + + In general, it is advisable to completely avoid mixing the use of thin + pointers and the use of ‘Unrestricted_Access’ where the designated type + is an unconstrained array. The use of thin pointers should be + restricted to cases of porting legacy code that implicitly assumes the + size of pointers, and such code should not in any case be using this + attribute. + + Another erroneous situation arises if the attribute is applied to a + constant. The resulting pointer can be used to access the constant, but + the effect of trying to modify a constant in this manner is not + well-defined. Consider this example: + + P : constant Integer := 4; + type R is access all Integer; + RV : R := P'Unrestricted_Access; + .. + RV.all := 3; + + Here we attempt to modify the constant P from 4 to 3, but the compiler + may or may not notice this attempt, and subsequent references to P may + yield either the value 3 or the value 4 or the assignment may blow up if + the compiler decides to put P in read-only memory. One particular case + where ‘Unrestricted_Access’ can be used in this way is to modify the + value of an ‘in’ parameter: + + procedure K (S : in String) is + type R is access all Character; + RV : R := S (3)'Unrestricted_Access; + begin + RV.all := 'a'; + end; + + In general this is a risky approach. It may appear to “work” but such + uses of ‘Unrestricted_Access’ are potentially non-portable, even from + one version of GNAT to another, so are best avoided if possible. + +  + File: gnat_rm.info, Node: Attribute Update, Next: Attribute Valid_Image, Prev: Attribute Unrestricted_Access, Up: Implementation Defined Attributes + + 4.73 Attribute Update + ===================== + + The ‘Update’ attribute creates a copy of an array or record value with + one or more modified components. The syntax is: + + PREFIX'Update ( RECORD_COMPONENT_ASSOCIATION_LIST ) + PREFIX'Update ( ARRAY_COMPONENT_ASSOCIATION {, ARRAY_COMPONENT_ASSOCIATION } ) + PREFIX'Update ( MULTIDIMENSIONAL_ARRAY_COMPONENT_ASSOCIATION + {, MULTIDIMENSIONAL_ARRAY_COMPONENT_ASSOCIATION } ) + + MULTIDIMENSIONAL_ARRAY_COMPONENT_ASSOCIATION ::= INDEX_EXPRESSION_LIST_LIST => EXPRESSION + INDEX_EXPRESSION_LIST_LIST ::= INDEX_EXPRESSION_LIST {| INDEX_EXPRESSION_LIST } + INDEX_EXPRESSION_LIST ::= ( EXPRESSION {, EXPRESSION } ) + + where ‘PREFIX’ is the name of an array or record object, the association + list in parentheses does not contain an ‘others’ choice and the box + symbol ‘<>’ may not appear in any expression. The effect is to yield a + copy of the array or record value which is unchanged apart from the + components mentioned in the association list, which are changed to the + indicated value. The original value of the array or record value is not + affected. For example: + + type Arr is Array (1 .. 5) of Integer; + ... + Avar1 : Arr := (1,2,3,4,5); + Avar2 : Arr := Avar1'Update (2 => 10, 3 .. 4 => 20); + + yields a value for ‘Avar2’ of 1,10,20,20,5 with ‘Avar1’ begin + unmodified. Similarly: + + type Rec is A, B, C : Integer; + ... + Rvar1 : Rec := (A => 1, B => 2, C => 3); + Rvar2 : Rec := Rvar1'Update (B => 20); + + yields a value for ‘Rvar2’ of (A => 1, B => 20, C => 3), with ‘Rvar1’ + being unmodifed. Note that the value of the attribute reference is + computed completely before it is used. This means that if you write: + + Avar1 := Avar1'Update (1 => 10, 2 => Function_Call); + + then the value of ‘Avar1’ is not modified if ‘Function_Call’ raises an + exception, unlike the effect of a series of direct assignments to + elements of ‘Avar1’. In general this requires that two extra complete + copies of the object are required, which should be kept in mind when + considering efficiency. + + The ‘Update’ attribute cannot be applied to prefixes of a limited type, + and cannot reference discriminants in the case of a record type. The + accessibility level of an Update attribute result object is defined as + for an aggregate. + + In the record case, no component can be mentioned more than once. In + the array case, two overlapping ranges can appear in the association + list, in which case the modifications are processed left to right. + + Multi-dimensional arrays can be modified, as shown by this example: + + A : array (1 .. 10, 1 .. 10) of Integer; + .. + A := A'Update ((1, 2) => 20, (3, 4) => 30); + + which changes element (1,2) to 20 and (3,4) to 30. + +  + File: gnat_rm.info, Node: Attribute Valid_Image, Next: Attribute Valid_Scalars, Prev: Attribute Update, Up: Implementation Defined Attributes + + 4.74 Attribute Valid_Image + ========================== + + The ‘'Valid_Image’ attribute is defined for enumeration types other than + those in package Standard. This attribute is a function that takes a + String, and returns Boolean. ‘T'Valid_Image (S)’ returns True if and + only if ‘T'Value (S)’ would not raise Constraint_Error. + +  + File: gnat_rm.info, Node: Attribute Valid_Scalars, Next: Attribute VADS_Size, Prev: Attribute Valid_Image, Up: Implementation Defined Attributes + + 4.75 Attribute Valid_Scalars + ============================ + + The ‘'Valid_Scalars’ attribute is intended to make it easier to check + the validity of scalar subcomponents of composite objects. The + attribute is defined for any prefix ‘P’ which denotes an object. Prefix + ‘P’ can be any type except for tagged private or ‘Unchecked_Union’ + types. The value of the attribute is of type ‘Boolean’. + + ‘P'Valid_Scalars’ yields ‘True’ if and only if the evaluation of + ‘C'Valid’ yields ‘True’ for every scalar subcomponent ‘C’ of ‘P’, or if + ‘P’ has no scalar subcomponents. Attribute ‘'Valid_Scalars’ is + equivalent to attribute ‘'Valid’ for scalar types. + + It is not specified in what order the subcomponents are checked, nor + whether any more are checked after any one of them is determined to be + invalid. If the prefix ‘P’ is of a class-wide type ‘T'Class’ (where ‘T’ + is the associated specific type), or if the prefix ‘P’ is of a specific + tagged type ‘T’, then only the subcomponents of ‘T’ are checked; in + other words, components of extensions of ‘T’ are not checked even if + ‘T'Class (P)'Tag /= T'Tag’. + + The compiler will issue a warning if it can be determined at compile + time that the prefix of the attribute has no scalar subcomponents. + + Note: ‘Valid_Scalars’ can generate a lot of code, especially in the case + of a large variant record. If the attribute is called in many places in + the same program applied to objects of the same type, it can reduce + program size to write a function with a single use of the attribute, and + then call that function from multiple places. + +  + File: gnat_rm.info, Node: Attribute VADS_Size, Next: Attribute Value_Size, Prev: Attribute Valid_Scalars, Up: Implementation Defined Attributes + + 4.76 Attribute VADS_Size + ======================== + + The ‘'VADS_Size’ attribute is intended to make it easier to port legacy + code which relies on the semantics of ‘'Size’ as implemented by the VADS + Ada 83 compiler. GNAT makes a best effort at duplicating the same + semantic interpretation. In particular, ‘'VADS_Size’ applied to a + predefined or other primitive type with no Size clause yields the + Object_Size (for example, ‘Natural'Size’ is 32 rather than 31 on typical + machines). In addition ‘'VADS_Size’ applied to an object gives the + result that would be obtained by applying the attribute to the + corresponding type. + +  + File: gnat_rm.info, Node: Attribute Value_Size, Next: Attribute Wchar_T_Size, Prev: Attribute VADS_Size, Up: Implementation Defined Attributes + + 4.77 Attribute Value_Size + ========================= + + ‘type'Value_Size’ is the number of bits required to represent a value of + the given subtype. It is the same as ‘type'Size’, but, unlike ‘Size’, + may be set for non-first subtypes. + +  + File: gnat_rm.info, Node: Attribute Wchar_T_Size, Next: Attribute Word_Size, Prev: Attribute Value_Size, Up: Implementation Defined Attributes + + 4.78 Attribute Wchar_T_Size + =========================== + + ‘Standard'Wchar_T_Size’ (‘Standard’ is the only allowed prefix) provides + the size in bits of the C ‘wchar_t’ type primarily for constructing the + definition of this type in package ‘Interfaces.C’. The result is a + static constant. + +  + File: gnat_rm.info, Node: Attribute Word_Size, Prev: Attribute Wchar_T_Size, Up: Implementation Defined Attributes + + 4.79 Attribute Word_Size + ======================== + + ‘Standard'Word_Size’ (‘Standard’ is the only allowed prefix) provides + the value ‘System.Word_Size’. The result is a static constant. + +  + File: gnat_rm.info, Node: Standard and Implementation Defined Restrictions, Next: Implementation Advice, Prev: Implementation Defined Attributes, Up: Top + + 5 Standard and Implementation Defined Restrictions + ************************************************** + + All Ada Reference Manual-defined Restriction identifiers are + implemented: + + * language-defined restrictions (see 13.12.1) + + * tasking restrictions (see D.7) + + * high integrity restrictions (see H.4) + + GNAT implements additional restriction identifiers. All restrictions, + whether language defined or GNAT-specific, are listed in the following. + + * Menu: + + * Partition-Wide Restrictions:: + * Program Unit Level Restrictions:: + +  + File: gnat_rm.info, Node: Partition-Wide Restrictions, Next: Program Unit Level Restrictions, Up: Standard and Implementation Defined Restrictions + + 5.1 Partition-Wide Restrictions + =============================== + + There are two separate lists of restriction identifiers. The first set + requires consistency throughout a partition (in other words, if the + restriction identifier is used for any compilation unit in the + partition, then all compilation units in the partition must obey the + restriction). + + * Menu: + + * Immediate_Reclamation:: + * Max_Asynchronous_Select_Nesting:: + * Max_Entry_Queue_Length:: + * Max_Protected_Entries:: + * Max_Select_Alternatives:: + * Max_Storage_At_Blocking:: + * Max_Task_Entries:: + * Max_Tasks:: + * No_Abort_Statements:: + * No_Access_Parameter_Allocators:: + * No_Access_Subprograms:: + * No_Allocators:: + * No_Anonymous_Allocators:: + * No_Asynchronous_Control:: + * No_Calendar:: + * No_Coextensions:: + * No_Default_Initialization:: + * No_Delay:: + * No_Dependence:: + * No_Direct_Boolean_Operators:: + * No_Dispatch:: + * No_Dispatching_Calls:: + * No_Dynamic_Attachment:: + * No_Dynamic_Priorities:: + * No_Entry_Calls_In_Elaboration_Code:: + * No_Enumeration_Maps:: + * No_Exception_Handlers:: + * No_Exception_Propagation:: + * No_Exception_Registration:: + * No_Exceptions:: + * No_Finalization:: + * No_Fixed_Point:: + * No_Floating_Point:: + * No_Implicit_Conditionals:: + * No_Implicit_Dynamic_Code:: + * No_Implicit_Heap_Allocations:: + * No_Implicit_Protected_Object_Allocations:: + * No_Implicit_Task_Allocations:: + * No_Initialize_Scalars:: + * No_IO:: + * No_Local_Allocators:: + * No_Local_Protected_Objects:: + * No_Local_Timing_Events:: + * No_Long_Long_Integers:: + * No_Multiple_Elaboration:: + * No_Nested_Finalization:: + * No_Protected_Type_Allocators:: + * No_Protected_Types:: + * No_Recursion:: + * No_Reentrancy:: + * No_Relative_Delay:: + * No_Requeue_Statements:: + * No_Secondary_Stack:: + * No_Select_Statements:: + * No_Specific_Termination_Handlers:: + * No_Specification_of_Aspect:: + * No_Standard_Allocators_After_Elaboration:: + * No_Standard_Storage_Pools:: + * No_Stream_Optimizations:: + * No_Streams:: + * No_Tagged_Type_Registration:: + * No_Task_Allocators:: + * No_Task_At_Interrupt_Priority:: + * No_Task_Attributes_Package:: + * No_Task_Hierarchy:: + * No_Task_Termination:: + * No_Tasking:: + * No_Terminate_Alternatives:: + * No_Unchecked_Access:: + * No_Unchecked_Conversion:: + * No_Unchecked_Deallocation:: + * No_Use_Of_Entity:: + * Pure_Barriers:: + * Simple_Barriers:: + * Static_Priorities:: + * Static_Storage_Size:: + +  + File: gnat_rm.info, Node: Immediate_Reclamation, Next: Max_Asynchronous_Select_Nesting, Up: Partition-Wide Restrictions + + 5.1.1 Immediate_Reclamation + --------------------------- + + [RM H.4] This restriction ensures that, except for storage occupied by + objects created by allocators and not deallocated via unchecked + deallocation, any storage reserved at run time for an object is + immediately reclaimed when the object no longer exists. + +  + File: gnat_rm.info, Node: Max_Asynchronous_Select_Nesting, Next: Max_Entry_Queue_Length, Prev: Immediate_Reclamation, Up: Partition-Wide Restrictions + + 5.1.2 Max_Asynchronous_Select_Nesting + ------------------------------------- + + [RM D.7] Specifies the maximum dynamic nesting level of asynchronous + selects. Violations of this restriction with a value of zero are + detected at compile time. Violations of this restriction with values + other than zero cause Storage_Error to be raised. + +  + File: gnat_rm.info, Node: Max_Entry_Queue_Length, Next: Max_Protected_Entries, Prev: Max_Asynchronous_Select_Nesting, Up: Partition-Wide Restrictions + + 5.1.3 Max_Entry_Queue_Length + ---------------------------- + + [RM D.7] This restriction is a declaration that any protected entry + compiled in the scope of the restriction has at most the specified + number of tasks waiting on the entry at any one time, and so no queue is + required. Note that this restriction is checked at run time. Violation + of this restriction results in the raising of Program_Error exception at + the point of the call. + + The restriction ‘Max_Entry_Queue_Depth’ is recognized as a synonym for + ‘Max_Entry_Queue_Length’. This is retained for historical compatibility + purposes (and a warning will be generated for its use if warnings on + obsolescent features are activated). + +  + File: gnat_rm.info, Node: Max_Protected_Entries, Next: Max_Select_Alternatives, Prev: Max_Entry_Queue_Length, Up: Partition-Wide Restrictions + + 5.1.4 Max_Protected_Entries + --------------------------- + + [RM D.7] Specifies the maximum number of entries per protected type. + The bounds of every entry family of a protected unit shall be static, or + shall be defined by a discriminant of a subtype whose corresponding + bound is static. + +  + File: gnat_rm.info, Node: Max_Select_Alternatives, Next: Max_Storage_At_Blocking, Prev: Max_Protected_Entries, Up: Partition-Wide Restrictions + + 5.1.5 Max_Select_Alternatives + ----------------------------- + + [RM D.7] Specifies the maximum number of alternatives in a selective + accept. + +  + File: gnat_rm.info, Node: Max_Storage_At_Blocking, Next: Max_Task_Entries, Prev: Max_Select_Alternatives, Up: Partition-Wide Restrictions + + 5.1.6 Max_Storage_At_Blocking + ----------------------------- + + [RM D.7] Specifies the maximum portion (in storage elements) of a task’s + Storage_Size that can be retained by a blocked task. A violation of + this restriction causes Storage_Error to be raised. + +  + File: gnat_rm.info, Node: Max_Task_Entries, Next: Max_Tasks, Prev: Max_Storage_At_Blocking, Up: Partition-Wide Restrictions + + 5.1.7 Max_Task_Entries + ---------------------- + + [RM D.7] Specifies the maximum number of entries per task. The bounds + of every entry family of a task unit shall be static, or shall be + defined by a discriminant of a subtype whose corresponding bound is + static. + +  + File: gnat_rm.info, Node: Max_Tasks, Next: No_Abort_Statements, Prev: Max_Task_Entries, Up: Partition-Wide Restrictions + + 5.1.8 Max_Tasks + --------------- + + [RM D.7] Specifies the maximum number of task that may be created, not + counting the creation of the environment task. Violations of this + restriction with a value of zero are detected at compile time. + Violations of this restriction with values other than zero cause + Storage_Error to be raised. + +  + File: gnat_rm.info, Node: No_Abort_Statements, Next: No_Access_Parameter_Allocators, Prev: Max_Tasks, Up: Partition-Wide Restrictions + + 5.1.9 No_Abort_Statements + ------------------------- + + [RM D.7] There are no abort_statements, and there are no calls to + Task_Identification.Abort_Task. + +  + File: gnat_rm.info, Node: No_Access_Parameter_Allocators, Next: No_Access_Subprograms, Prev: No_Abort_Statements, Up: Partition-Wide Restrictions + + 5.1.10 No_Access_Parameter_Allocators + ------------------------------------- + + [RM H.4] This restriction ensures at compile time that there are no + occurrences of an allocator as the actual parameter to an access + parameter. + +  + File: gnat_rm.info, Node: No_Access_Subprograms, Next: No_Allocators, Prev: No_Access_Parameter_Allocators, Up: Partition-Wide Restrictions + + 5.1.11 No_Access_Subprograms + ---------------------------- + + [RM H.4] This restriction ensures at compile time that there are no + declarations of access-to-subprogram types. + +  + File: gnat_rm.info, Node: No_Allocators, Next: No_Anonymous_Allocators, Prev: No_Access_Subprograms, Up: Partition-Wide Restrictions + + 5.1.12 No_Allocators + -------------------- + + [RM H.4] This restriction ensures at compile time that there are no + occurrences of an allocator. + +  + File: gnat_rm.info, Node: No_Anonymous_Allocators, Next: No_Asynchronous_Control, Prev: No_Allocators, Up: Partition-Wide Restrictions + + 5.1.13 No_Anonymous_Allocators + ------------------------------ + + [RM H.4] This restriction ensures at compile time that there are no + occurrences of an allocator of anonymous access type. + +  + File: gnat_rm.info, Node: No_Asynchronous_Control, Next: No_Calendar, Prev: No_Anonymous_Allocators, Up: Partition-Wide Restrictions + + 5.1.14 No_Asynchronous_Control + ------------------------------ + + [RM J.13] This restriction ensures at compile time that there are no + semantic dependences on the predefined package + Asynchronous_Task_Control. + +  + File: gnat_rm.info, Node: No_Calendar, Next: No_Coextensions, Prev: No_Asynchronous_Control, Up: Partition-Wide Restrictions + + 5.1.15 No_Calendar + ------------------ + + [GNAT] This restriction ensures at compile time that there are no + semantic dependences on package Calendar. + +  + File: gnat_rm.info, Node: No_Coextensions, Next: No_Default_Initialization, Prev: No_Calendar, Up: Partition-Wide Restrictions + + 5.1.16 No_Coextensions + ---------------------- + + [RM H.4] This restriction ensures at compile time that there are no + coextensions. See 3.10.2. + +  + File: gnat_rm.info, Node: No_Default_Initialization, Next: No_Delay, Prev: No_Coextensions, Up: Partition-Wide Restrictions + + 5.1.17 No_Default_Initialization + -------------------------------- + + [GNAT] This restriction prohibits any instance of default initialization + of variables. The binder implements a consistency rule which prevents + any unit compiled without the restriction from with’ing a unit with the + restriction (this allows the generation of initialization procedures to + be skipped, since you can be sure that no call is ever generated to an + initialization procedure in a unit with the restriction active). If + used in conjunction with Initialize_Scalars or Normalize_Scalars, the + effect is to prohibit all cases of variables declared without a specific + initializer (including the case of OUT scalar parameters). + +  + File: gnat_rm.info, Node: No_Delay, Next: No_Dependence, Prev: No_Default_Initialization, Up: Partition-Wide Restrictions + + 5.1.18 No_Delay + --------------- + + [RM H.4] This restriction ensures at compile time that there are no + delay statements and no semantic dependences on package Calendar. + +  + File: gnat_rm.info, Node: No_Dependence, Next: No_Direct_Boolean_Operators, Prev: No_Delay, Up: Partition-Wide Restrictions + + 5.1.19 No_Dependence + -------------------- + + [RM 13.12.1] This restriction ensures at compile time that there are no + dependences on a library unit. + +  + File: gnat_rm.info, Node: No_Direct_Boolean_Operators, Next: No_Dispatch, Prev: No_Dependence, Up: Partition-Wide Restrictions + + 5.1.20 No_Direct_Boolean_Operators + ---------------------------------- + + [GNAT] This restriction ensures that no logical operators (and/or/xor) + are used on operands of type Boolean (or any type derived from Boolean). + This is intended for use in safety critical programs where the + certification protocol requires the use of short-circuit (and then, or + else) forms for all composite boolean operations. + +  + File: gnat_rm.info, Node: No_Dispatch, Next: No_Dispatching_Calls, Prev: No_Direct_Boolean_Operators, Up: Partition-Wide Restrictions + + 5.1.21 No_Dispatch + ------------------ + + [RM H.4] This restriction ensures at compile time that there are no + occurrences of ‘T'Class’, for any (tagged) subtype ‘T’. + +  + File: gnat_rm.info, Node: No_Dispatching_Calls, Next: No_Dynamic_Attachment, Prev: No_Dispatch, Up: Partition-Wide Restrictions + + 5.1.22 No_Dispatching_Calls + --------------------------- + + [GNAT] This restriction ensures at compile time that the code generated + by the compiler involves no dispatching calls. The use of this + restriction allows the safe use of record extensions, classwide + membership tests and other classwide features not involving implicit + dispatching. This restriction ensures that the code contains no + indirect calls through a dispatching mechanism. Note that this includes + internally-generated calls created by the compiler, for example in the + implementation of class-wide objects assignments. The membership test + is allowed in the presence of this restriction, because its + implementation requires no dispatching. This restriction is comparable + to the official Ada restriction ‘No_Dispatch’ except that it is a bit + less restrictive in that it allows all classwide constructs that do not + imply dispatching. The following example indicates constructs that + violate this restriction. + + package Pkg is + type T is tagged record + Data : Natural; + end record; + procedure P (X : T); + + type DT is new T with record + More_Data : Natural; + end record; + procedure Q (X : DT); + end Pkg; + + with Pkg; use Pkg; + procedure Example is + procedure Test (O : T'Class) is + N : Natural := O'Size; -- Error: Dispatching call + C : T'Class := O; -- Error: implicit Dispatching Call + begin + if O in DT'Class then -- OK : Membership test + Q (DT (O)); -- OK : Type conversion plus direct call + else + P (O); -- Error: Dispatching call + end if; + end Test; + + Obj : DT; + begin + P (Obj); -- OK : Direct call + P (T (Obj)); -- OK : Type conversion plus direct call + P (T'Class (Obj)); -- Error: Dispatching call + + Test (Obj); -- OK : Type conversion + + if Obj in T'Class then -- OK : Membership test + null; + end if; + end Example; + +  + File: gnat_rm.info, Node: No_Dynamic_Attachment, Next: No_Dynamic_Priorities, Prev: No_Dispatching_Calls, Up: Partition-Wide Restrictions + + 5.1.23 No_Dynamic_Attachment + ---------------------------- + + [RM D.7] This restriction ensures that there is no call to any of the + operations defined in package Ada.Interrupts (Is_Reserved, Is_Attached, + Current_Handler, Attach_Handler, Exchange_Handler, Detach_Handler, and + Reference). + + The restriction ‘No_Dynamic_Interrupts’ is recognized as a synonym for + ‘No_Dynamic_Attachment’. This is retained for historical compatibility + purposes (and a warning will be generated for its use if warnings on + obsolescent features are activated). + +  + File: gnat_rm.info, Node: No_Dynamic_Priorities, Next: No_Entry_Calls_In_Elaboration_Code, Prev: No_Dynamic_Attachment, Up: Partition-Wide Restrictions + + 5.1.24 No_Dynamic_Priorities + ---------------------------- + + [RM D.7] There are no semantic dependencies on the package + Dynamic_Priorities. + +  + File: gnat_rm.info, Node: No_Entry_Calls_In_Elaboration_Code, Next: No_Enumeration_Maps, Prev: No_Dynamic_Priorities, Up: Partition-Wide Restrictions + + 5.1.25 No_Entry_Calls_In_Elaboration_Code + ----------------------------------------- + + [GNAT] This restriction ensures at compile time that no task or + protected entry calls are made during elaboration code. As a result of + the use of this restriction, the compiler can assume that no code past + an accept statement in a task can be executed at elaboration time. + +  + File: gnat_rm.info, Node: No_Enumeration_Maps, Next: No_Exception_Handlers, Prev: No_Entry_Calls_In_Elaboration_Code, Up: Partition-Wide Restrictions + + 5.1.26 No_Enumeration_Maps + -------------------------- + + [GNAT] This restriction ensures at compile time that no operations + requiring enumeration maps are used (that is Image and Value attributes + applied to enumeration types). + +  + File: gnat_rm.info, Node: No_Exception_Handlers, Next: No_Exception_Propagation, Prev: No_Enumeration_Maps, Up: Partition-Wide Restrictions + + 5.1.27 No_Exception_Handlers + ---------------------------- + + [GNAT] This restriction ensures at compile time that there are no + explicit exception handlers. It also indicates that no exception + propagation will be provided. In this mode, exceptions may be raised + but will result in an immediate call to the last chance handler, a + routine that the user must define with the following profile: + + procedure Last_Chance_Handler + (Source_Location : System.Address; Line : Integer); + pragma Export (C, Last_Chance_Handler, + "__gnat_last_chance_handler"); + + The parameter is a C null-terminated string representing a message to be + associated with the exception (typically the source location of the + raise statement generated by the compiler). The Line parameter when + nonzero represents the line number in the source program where the raise + occurs. + +  + File: gnat_rm.info, Node: No_Exception_Propagation, Next: No_Exception_Registration, Prev: No_Exception_Handlers, Up: Partition-Wide Restrictions + + 5.1.28 No_Exception_Propagation + ------------------------------- + + [GNAT] This restriction guarantees that exceptions are never propagated + to an outer subprogram scope. The only case in which an exception may + be raised is when the handler is statically in the same subprogram, so + that the effect of a raise is essentially like a goto statement. Any + other raise statement (implicit or explicit) will be considered + unhandled. Exception handlers are allowed, but may not contain an + exception occurrence identifier (exception choice). In addition, use of + the package GNAT.Current_Exception is not permitted, and reraise + statements (raise with no operand) are not permitted. + +  + File: gnat_rm.info, Node: No_Exception_Registration, Next: No_Exceptions, Prev: No_Exception_Propagation, Up: Partition-Wide Restrictions + + 5.1.29 No_Exception_Registration + -------------------------------- + + [GNAT] This restriction ensures at compile time that no stream + operations for types Exception_Id or Exception_Occurrence are used. + This also makes it impossible to pass exceptions to or from a partition + with this restriction in a distributed environment. If this restriction + is active, the generated code is simplified by omitting the + otherwise-required global registration of exceptions when they are + declared. + +  + File: gnat_rm.info, Node: No_Exceptions, Next: No_Finalization, Prev: No_Exception_Registration, Up: Partition-Wide Restrictions + + 5.1.30 No_Exceptions + -------------------- + + [RM H.4] This restriction ensures at compile time that there are no + raise statements and no exception handlers and also suppresses the + generation of language-defined run-time checks. + +  + File: gnat_rm.info, Node: No_Finalization, Next: No_Fixed_Point, Prev: No_Exceptions, Up: Partition-Wide Restrictions + + 5.1.31 No_Finalization + ---------------------- + + [GNAT] This restriction disables the language features described in + chapter 7.6 of the Ada 2005 RM as well as all form of code generation + performed by the compiler to support these features. The following + types are no longer considered controlled when this restriction is in + effect: + + * ‘Ada.Finalization.Controlled’ + + * ‘Ada.Finalization.Limited_Controlled’ + + * Derivations from ‘Controlled’ or ‘Limited_Controlled’ + + * Class-wide types + + * Protected types + + * Task types + + * Array and record types with controlled components + + The compiler no longer generates code to initialize, finalize or adjust + an object or a nested component, either declared on the stack or on the + heap. The deallocation of a controlled object no longer finalizes its + contents. + +  + File: gnat_rm.info, Node: No_Fixed_Point, Next: No_Floating_Point, Prev: No_Finalization, Up: Partition-Wide Restrictions + + 5.1.32 No_Fixed_Point + --------------------- + + [RM H.4] This restriction ensures at compile time that there are no + occurrences of fixed point types and operations. + +  + File: gnat_rm.info, Node: No_Floating_Point, Next: No_Implicit_Conditionals, Prev: No_Fixed_Point, Up: Partition-Wide Restrictions + + 5.1.33 No_Floating_Point + ------------------------ + + [RM H.4] This restriction ensures at compile time that there are no + occurrences of floating point types and operations. + +  + File: gnat_rm.info, Node: No_Implicit_Conditionals, Next: No_Implicit_Dynamic_Code, Prev: No_Floating_Point, Up: Partition-Wide Restrictions + + 5.1.34 No_Implicit_Conditionals + ------------------------------- + + [GNAT] This restriction ensures that the generated code does not contain + any implicit conditionals, either by modifying the generated code where + possible, or by rejecting any construct that would otherwise generate an + implicit conditional. Note that this check does not include run time + constraint checks, which on some targets may generate implicit + conditionals as well. To control the latter, constraint checks can be + suppressed in the normal manner. Constructs generating implicit + conditionals include comparisons of composite objects and the Max/Min + attributes. + +  + File: gnat_rm.info, Node: No_Implicit_Dynamic_Code, Next: No_Implicit_Heap_Allocations, Prev: No_Implicit_Conditionals, Up: Partition-Wide Restrictions + + 5.1.35 No_Implicit_Dynamic_Code + ------------------------------- + + [GNAT] This restriction prevents the compiler from building + ‘trampolines’. This is a structure that is built on the stack and + contains dynamic code to be executed at run time. On some targets, a + trampoline is built for the following features: ‘Access’, + ‘Unrestricted_Access’, or ‘Address’ of a nested subprogram; nested task + bodies; primitive operations of nested tagged types. Trampolines do not + work on machines that prevent execution of stack data. For example, on + windows systems, enabling DEP (data execution protection) will cause + trampolines to raise an exception. Trampolines are also quite slow at + run time. + + On many targets, trampolines have been largely eliminated. Look at the + version of system.ads for your target — if it has Always_Compatible_Rep + equal to False, then trampolines are largely eliminated. In particular, + a trampoline is built for the following features: ‘Address’ of a nested + subprogram; ‘Access’ or ‘Unrestricted_Access’ of a nested subprogram, + but only if pragma Favor_Top_Level applies, or the access type has a + foreign-language convention; primitive operations of nested tagged + types. + +  + File: gnat_rm.info, Node: No_Implicit_Heap_Allocations, Next: No_Implicit_Protected_Object_Allocations, Prev: No_Implicit_Dynamic_Code, Up: Partition-Wide Restrictions + + 5.1.36 No_Implicit_Heap_Allocations + ----------------------------------- + + [RM D.7] No constructs are allowed to cause implicit heap allocation. + +  + File: gnat_rm.info, Node: No_Implicit_Protected_Object_Allocations, Next: No_Implicit_Task_Allocations, Prev: No_Implicit_Heap_Allocations, Up: Partition-Wide Restrictions + + 5.1.37 No_Implicit_Protected_Object_Allocations + ----------------------------------------------- + + [GNAT] No constructs are allowed to cause implicit heap allocation of a + protected object. + +  + File: gnat_rm.info, Node: No_Implicit_Task_Allocations, Next: No_Initialize_Scalars, Prev: No_Implicit_Protected_Object_Allocations, Up: Partition-Wide Restrictions + + 5.1.38 No_Implicit_Task_Allocations + ----------------------------------- + + [GNAT] No constructs are allowed to cause implicit heap allocation of a + task. + +  + File: gnat_rm.info, Node: No_Initialize_Scalars, Next: No_IO, Prev: No_Implicit_Task_Allocations, Up: Partition-Wide Restrictions + + 5.1.39 No_Initialize_Scalars + ---------------------------- + + [GNAT] This restriction ensures that no unit in the partition is + compiled with pragma Initialize_Scalars. This allows the generation of + more efficient code, and in particular eliminates dummy null + initialization routines that are otherwise generated for some record and + array types. + +  + File: gnat_rm.info, Node: No_IO, Next: No_Local_Allocators, Prev: No_Initialize_Scalars, Up: Partition-Wide Restrictions + + 5.1.40 No_IO + ------------ + + [RM H.4] This restriction ensures at compile time that there are no + dependences on any of the library units Sequential_IO, Direct_IO, + Text_IO, Wide_Text_IO, Wide_Wide_Text_IO, or Stream_IO. + +  + File: gnat_rm.info, Node: No_Local_Allocators, Next: No_Local_Protected_Objects, Prev: No_IO, Up: Partition-Wide Restrictions + + 5.1.41 No_Local_Allocators + -------------------------- + + [RM H.4] This restriction ensures at compile time that there are no + occurrences of an allocator in subprograms, generic subprograms, tasks, + and entry bodies. + +  + File: gnat_rm.info, Node: No_Local_Protected_Objects, Next: No_Local_Timing_Events, Prev: No_Local_Allocators, Up: Partition-Wide Restrictions + + 5.1.42 No_Local_Protected_Objects + --------------------------------- + + [RM D.7] This restriction ensures at compile time that protected objects + are only declared at the library level. + +  + File: gnat_rm.info, Node: No_Local_Timing_Events, Next: No_Long_Long_Integers, Prev: No_Local_Protected_Objects, Up: Partition-Wide Restrictions + + 5.1.43 No_Local_Timing_Events + ----------------------------- + + [RM D.7] All objects of type Ada.Real_Time.Timing_Events.Timing_Event + are declared at the library level. + +  + File: gnat_rm.info, Node: No_Long_Long_Integers, Next: No_Multiple_Elaboration, Prev: No_Local_Timing_Events, Up: Partition-Wide Restrictions + + 5.1.44 No_Long_Long_Integers + ---------------------------- + + [GNAT] This partition-wide restriction forbids any explicit reference to + type Standard.Long_Long_Integer, and also forbids declaring range types + whose implicit base type is Long_Long_Integer, and modular types whose + size exceeds Long_Integer’Size. + +  + File: gnat_rm.info, Node: No_Multiple_Elaboration, Next: No_Nested_Finalization, Prev: No_Long_Long_Integers, Up: Partition-Wide Restrictions + + 5.1.45 No_Multiple_Elaboration + ------------------------------ + + [GNAT] When this restriction is active and the static elaboration model + is used, and -fpreserve-control-flow is not used, the compiler is + allowed to suppress the elaboration counter normally associated with the + unit, even if the unit has elaboration code. This counter is typically + used to check for access before elaboration and to control multiple + elaboration attempts. If the restriction is used, then the situations + in which multiple elaboration is possible, including non-Ada main + programs and Stand Alone libraries, are not permitted and will be + diagnosed by the binder. + +  + File: gnat_rm.info, Node: No_Nested_Finalization, Next: No_Protected_Type_Allocators, Prev: No_Multiple_Elaboration, Up: Partition-Wide Restrictions + + 5.1.46 No_Nested_Finalization + ----------------------------- + + [RM D.7] All objects requiring finalization are declared at the library + level. + +  + File: gnat_rm.info, Node: No_Protected_Type_Allocators, Next: No_Protected_Types, Prev: No_Nested_Finalization, Up: Partition-Wide Restrictions + + 5.1.47 No_Protected_Type_Allocators + ----------------------------------- + + [RM D.7] This restriction ensures at compile time that there are no + allocator expressions that attempt to allocate protected objects. + +  + File: gnat_rm.info, Node: No_Protected_Types, Next: No_Recursion, Prev: No_Protected_Type_Allocators, Up: Partition-Wide Restrictions + + 5.1.48 No_Protected_Types + ------------------------- + + [RM H.4] This restriction ensures at compile time that there are no + declarations of protected types or protected objects. + +  + File: gnat_rm.info, Node: No_Recursion, Next: No_Reentrancy, Prev: No_Protected_Types, Up: Partition-Wide Restrictions + + 5.1.49 No_Recursion + ------------------- + + [RM H.4] A program execution is erroneous if a subprogram is invoked as + part of its execution. + +  + File: gnat_rm.info, Node: No_Reentrancy, Next: No_Relative_Delay, Prev: No_Recursion, Up: Partition-Wide Restrictions + + 5.1.50 No_Reentrancy + -------------------- + + [RM H.4] A program execution is erroneous if a subprogram is executed by + two tasks at the same time. + +  + File: gnat_rm.info, Node: No_Relative_Delay, Next: No_Requeue_Statements, Prev: No_Reentrancy, Up: Partition-Wide Restrictions + + 5.1.51 No_Relative_Delay + ------------------------ + + [RM D.7] This restriction ensures at compile time that there are no + delay relative statements and prevents expressions such as ‘delay 1.23;’ + from appearing in source code. + +  + File: gnat_rm.info, Node: No_Requeue_Statements, Next: No_Secondary_Stack, Prev: No_Relative_Delay, Up: Partition-Wide Restrictions + + 5.1.52 No_Requeue_Statements + ---------------------------- + + [RM D.7] This restriction ensures at compile time that no requeue + statements are permitted and prevents keyword ‘requeue’ from being used + in source code. + + The restriction ‘No_Requeue’ is recognized as a synonym for + ‘No_Requeue_Statements’. This is retained for historical compatibility + purposes (and a warning will be generated for its use if warnings on + oNobsolescent features are activated). + +  + File: gnat_rm.info, Node: No_Secondary_Stack, Next: No_Select_Statements, Prev: No_Requeue_Statements, Up: Partition-Wide Restrictions + + 5.1.53 No_Secondary_Stack + ------------------------- + + [GNAT] This restriction ensures at compile time that the generated code + does not contain any reference to the secondary stack. The secondary + stack is used to implement functions returning unconstrained objects + (arrays or records) on some targets. Suppresses the allocation of + secondary stacks for tasks (excluding the environment task) at run time. + +  + File: gnat_rm.info, Node: No_Select_Statements, Next: No_Specific_Termination_Handlers, Prev: No_Secondary_Stack, Up: Partition-Wide Restrictions + + 5.1.54 No_Select_Statements + --------------------------- + + [RM D.7] This restriction ensures at compile time no select statements + of any kind are permitted, that is the keyword ‘select’ may not appear. + +  + File: gnat_rm.info, Node: No_Specific_Termination_Handlers, Next: No_Specification_of_Aspect, Prev: No_Select_Statements, Up: Partition-Wide Restrictions + + 5.1.55 No_Specific_Termination_Handlers + --------------------------------------- + + [RM D.7] There are no calls to Ada.Task_Termination.Set_Specific_Handler + or to Ada.Task_Termination.Specific_Handler. + +  + File: gnat_rm.info, Node: No_Specification_of_Aspect, Next: No_Standard_Allocators_After_Elaboration, Prev: No_Specific_Termination_Handlers, Up: Partition-Wide Restrictions + + 5.1.56 No_Specification_of_Aspect + --------------------------------- + + [RM 13.12.1] This restriction checks at compile time that no aspect + specification, attribute definition clause, or pragma is given for a + given aspect. + +  + File: gnat_rm.info, Node: No_Standard_Allocators_After_Elaboration, Next: No_Standard_Storage_Pools, Prev: No_Specification_of_Aspect, Up: Partition-Wide Restrictions + + 5.1.57 No_Standard_Allocators_After_Elaboration + ----------------------------------------------- + + [RM D.7] Specifies that an allocator using a standard storage pool + should never be evaluated at run time after the elaboration of the + library items of the partition has completed. Otherwise, Storage_Error + is raised. + +  + File: gnat_rm.info, Node: No_Standard_Storage_Pools, Next: No_Stream_Optimizations, Prev: No_Standard_Allocators_After_Elaboration, Up: Partition-Wide Restrictions + + 5.1.58 No_Standard_Storage_Pools + -------------------------------- + + [GNAT] This restriction ensures at compile time that no access types use + the standard default storage pool. Any access type declared must have + an explicit Storage_Pool attribute defined specifying a user-defined + storage pool. + +  + File: gnat_rm.info, Node: No_Stream_Optimizations, Next: No_Streams, Prev: No_Standard_Storage_Pools, Up: Partition-Wide Restrictions + + 5.1.59 No_Stream_Optimizations + ------------------------------ + + [GNAT] This restriction affects the performance of stream operations on + types ‘String’, ‘Wide_String’ and ‘Wide_Wide_String’. By default, the + compiler uses block reads and writes when manipulating ‘String’ objects + due to their superior performance. When this restriction is in effect, + the compiler performs all IO operations on a per-character basis. + +  + File: gnat_rm.info, Node: No_Streams, Next: No_Tagged_Type_Registration, Prev: No_Stream_Optimizations, Up: Partition-Wide Restrictions + + 5.1.60 No_Streams + ----------------- + + [GNAT] This restriction ensures at compile/bind time that there are no + stream objects created and no use of stream attributes. This + restriction does not forbid dependences on the package ‘Ada.Streams’. + So it is permissible to with ‘Ada.Streams’ (or another package that does + so itself) as long as no actual stream objects are created and no stream + attributes are used. + + Note that the use of restriction allows optimization of tagged types, + since they do not need to worry about dispatching stream operations. To + take maximum advantage of this space-saving optimization, any unit + declaring a tagged type should be compiled with the restriction, though + this is not required. + +  + File: gnat_rm.info, Node: No_Tagged_Type_Registration, Next: No_Task_Allocators, Prev: No_Streams, Up: Partition-Wide Restrictions + + 5.1.61 No_Tagged_Type_Registration + ---------------------------------- + + [GNAT] If this restriction is active, then class-wide streaming + attributes are not supported. In addition, the subprograms in Ada.Tags + are not supported. If this restriction is active, the generated code is + simplified by omitting the otherwise-required global registration of + tagged types when they are declared. This restriction may be necessary + in order to also apply the No_Elaboration_Code restriction. + +  + File: gnat_rm.info, Node: No_Task_Allocators, Next: No_Task_At_Interrupt_Priority, Prev: No_Tagged_Type_Registration, Up: Partition-Wide Restrictions + + 5.1.62 No_Task_Allocators + ------------------------- + + [RM D.7] There are no allocators for task types or types containing task + subcomponents. + +  + File: gnat_rm.info, Node: No_Task_At_Interrupt_Priority, Next: No_Task_Attributes_Package, Prev: No_Task_Allocators, Up: Partition-Wide Restrictions + + 5.1.63 No_Task_At_Interrupt_Priority + ------------------------------------ + + [GNAT] This restriction ensures at compile time that there is no + Interrupt_Priority aspect or pragma for a task or a task type. As a + consequence, the tasks are always created with a priority below that an + interrupt priority. + +  + File: gnat_rm.info, Node: No_Task_Attributes_Package, Next: No_Task_Hierarchy, Prev: No_Task_At_Interrupt_Priority, Up: Partition-Wide Restrictions + + 5.1.64 No_Task_Attributes_Package + --------------------------------- + + [GNAT] This restriction ensures at compile time that there are no + implicit or explicit dependencies on the package ‘Ada.Task_Attributes’. + + The restriction ‘No_Task_Attributes’ is recognized as a synonym for + ‘No_Task_Attributes_Package’. This is retained for historical + compatibility purposes (and a warning will be generated for its use if + warnings on obsolescent features are activated). + +  + File: gnat_rm.info, Node: No_Task_Hierarchy, Next: No_Task_Termination, Prev: No_Task_Attributes_Package, Up: Partition-Wide Restrictions + + 5.1.65 No_Task_Hierarchy + ------------------------ + + [RM D.7] All (non-environment) tasks depend directly on the environment + task of the partition. + +  + File: gnat_rm.info, Node: No_Task_Termination, Next: No_Tasking, Prev: No_Task_Hierarchy, Up: Partition-Wide Restrictions + + 5.1.66 No_Task_Termination + -------------------------- + + [RM D.7] Tasks that terminate are erroneous. + +  + File: gnat_rm.info, Node: No_Tasking, Next: No_Terminate_Alternatives, Prev: No_Task_Termination, Up: Partition-Wide Restrictions + + 5.1.67 No_Tasking + ----------------- + + [GNAT] This restriction prevents the declaration of tasks or task types + throughout the partition. It is similar in effect to the use of + ‘Max_Tasks => 0’ except that violations are caught at compile time and + cause an error message to be output either by the compiler or binder. + +  + File: gnat_rm.info, Node: No_Terminate_Alternatives, Next: No_Unchecked_Access, Prev: No_Tasking, Up: Partition-Wide Restrictions + + 5.1.68 No_Terminate_Alternatives + -------------------------------- + + [RM D.7] There are no selective accepts with terminate alternatives. + +  + File: gnat_rm.info, Node: No_Unchecked_Access, Next: No_Unchecked_Conversion, Prev: No_Terminate_Alternatives, Up: Partition-Wide Restrictions + + 5.1.69 No_Unchecked_Access + -------------------------- + + [RM H.4] This restriction ensures at compile time that there are no + occurrences of the Unchecked_Access attribute. + +  + File: gnat_rm.info, Node: No_Unchecked_Conversion, Next: No_Unchecked_Deallocation, Prev: No_Unchecked_Access, Up: Partition-Wide Restrictions + + 5.1.70 No_Unchecked_Conversion + ------------------------------ + + [RM J.13] This restriction ensures at compile time that there are no + semantic dependences on the predefined generic function + Unchecked_Conversion. + +  + File: gnat_rm.info, Node: No_Unchecked_Deallocation, Next: No_Use_Of_Entity, Prev: No_Unchecked_Conversion, Up: Partition-Wide Restrictions + + 5.1.71 No_Unchecked_Deallocation + -------------------------------- + + [RM J.13] This restriction ensures at compile time that there are no + semantic dependences on the predefined generic procedure + Unchecked_Deallocation. + +  + File: gnat_rm.info, Node: No_Use_Of_Entity, Next: Pure_Barriers, Prev: No_Unchecked_Deallocation, Up: Partition-Wide Restrictions + + 5.1.72 No_Use_Of_Entity + ----------------------- + + [GNAT] This restriction ensures at compile time that there are no + references to the entity given in the form + + No_Use_Of_Entity => Name + + where ‘Name’ is the fully qualified entity, for example + + No_Use_Of_Entity => Ada.Text_IO.Put_Line + +  + File: gnat_rm.info, Node: Pure_Barriers, Next: Simple_Barriers, Prev: No_Use_Of_Entity, Up: Partition-Wide Restrictions + + 5.1.73 Pure_Barriers + -------------------- + + [GNAT] This restriction ensures at compile time that protected entry + barriers are restricted to: + + * components of the protected object (excluding selection from + dereferences), + + * constant declarations, + + * named numbers, + + * enumeration literals, + + * integer literals, + + * real literals, + + * character literals, + + * implicitly defined comparison operators, + + * uses of the Standard.”not” operator, + + * short-circuit operator, + + * the Count attribute + + This restriction is a relaxation of the Simple_Barriers restriction, but + still ensures absence of side effects, exceptions, and recursion during + the evaluation of the barriers. + +  + File: gnat_rm.info, Node: Simple_Barriers, Next: Static_Priorities, Prev: Pure_Barriers, Up: Partition-Wide Restrictions + + 5.1.74 Simple_Barriers + ---------------------- + + [RM D.7] This restriction ensures at compile time that barriers in entry + declarations for protected types are restricted to either static boolean + expressions or references to simple boolean variables defined in the + private part of the protected type. No other form of entry barriers is + permitted. + + The restriction ‘Boolean_Entry_Barriers’ is recognized as a synonym for + ‘Simple_Barriers’. This is retained for historical compatibility + purposes (and a warning will be generated for its use if warnings on + obsolescent features are activated). + +  + File: gnat_rm.info, Node: Static_Priorities, Next: Static_Storage_Size, Prev: Simple_Barriers, Up: Partition-Wide Restrictions + + 5.1.75 Static_Priorities + ------------------------ + + [GNAT] This restriction ensures at compile time that all priority + expressions are static, and that there are no dependences on the package + ‘Ada.Dynamic_Priorities’. + +  + File: gnat_rm.info, Node: Static_Storage_Size, Prev: Static_Priorities, Up: Partition-Wide Restrictions + + 5.1.76 Static_Storage_Size + -------------------------- + + [GNAT] This restriction ensures at compile time that any expression + appearing in a Storage_Size pragma or attribute definition clause is + static. + +  + File: gnat_rm.info, Node: Program Unit Level Restrictions, Prev: Partition-Wide Restrictions, Up: Standard and Implementation Defined Restrictions + + 5.2 Program Unit Level Restrictions + =================================== + + The second set of restriction identifiers does not require + partition-wide consistency. The restriction may be enforced for a + single compilation unit without any effect on any of the other + compilation units in the partition. + + * Menu: + + * No_Elaboration_Code:: + * No_Dynamic_Accessibility_Checks:: + * No_Dynamic_Sized_Objects:: + * No_Entry_Queue:: + * No_Implementation_Aspect_Specifications:: + * No_Implementation_Attributes:: + * No_Implementation_Identifiers:: + * No_Implementation_Pragmas:: + * No_Implementation_Restrictions:: + * No_Implementation_Units:: + * No_Implicit_Aliasing:: + * No_Implicit_Loops:: + * No_Obsolescent_Features:: + * No_Wide_Characters:: + * Static_Dispatch_Tables:: + * SPARK_05:: + +  + File: gnat_rm.info, Node: No_Elaboration_Code, Next: No_Dynamic_Accessibility_Checks, Up: Program Unit Level Restrictions + + 5.2.1 No_Elaboration_Code + ------------------------- + + [GNAT] This restriction ensures at compile time that no elaboration code + is generated. Note that this is not the same condition as is enforced + by pragma ‘Preelaborate’. There are cases in which pragma + ‘Preelaborate’ still permits code to be generated (e.g., code to + initialize a large array to all zeroes), and there are cases of units + which do not meet the requirements for pragma ‘Preelaborate’, but for + which no elaboration code is generated. Generally, it is the case that + preelaborable units will meet the restrictions, with the exception of + large aggregates initialized with an others_clause, and exception + declarations (which generate calls to a run-time registry procedure). + This restriction is enforced on a unit by unit basis, it need not be + obeyed consistently throughout a partition. + + In the case of aggregates with others, if the aggregate has a dynamic + size, there is no way to eliminate the elaboration code (such dynamic + bounds would be incompatible with ‘Preelaborate’ in any case). If the + bounds are static, then use of this restriction actually modifies the + code choice of the compiler to avoid generating a loop, and instead + generate the aggregate statically if possible, no matter how many times + the data for the others clause must be repeatedly generated. + + It is not possible to precisely document the constructs which are + compatible with this restriction, since, unlike most other restrictions, + this is not a restriction on the source code, but a restriction on the + generated object code. For example, if the source contains a + declaration: + + Val : constant Integer := X; + + where X is not a static constant, it may be possible, depending on + complex optimization circuitry, for the compiler to figure out the value + of X at compile time, in which case this initialization can be done by + the loader, and requires no initialization code. It is not possible to + document the precise conditions under which the optimizer can figure + this out. + + Note that this the implementation of this restriction requires full code + generation. If it is used in conjunction with “semantics only” + checking, then some cases of violations may be missed. + + When this restriction is active, we are not requesting control-flow + preservation with -fpreserve-control-flow, and the static elaboration + model is used, the compiler is allowed to suppress the elaboration + counter normally associated with the unit. This counter is typically + used to check for access before elaboration and to control multiple + elaboration attempts. + +  + File: gnat_rm.info, Node: No_Dynamic_Accessibility_Checks, Next: No_Dynamic_Sized_Objects, Prev: No_Elaboration_Code, Up: Program Unit Level Restrictions + + 5.2.2 No_Dynamic_Accessibility_Checks + ------------------------------------- + + [GNAT] No dynamic accessibility checks are generated when this + restriction is in effect. Instead, dangling references are prevented + via more conservative compile-time checking. More specifically, + existing compile-time checks are enforced but with more conservative + assumptions about the accessibility levels of the relevant entities. + These conservative assumptions eliminate the need for dynamic + accessibility checks. + + These new rules for computing (at compile-time) the accessibility level + of an anonymous access type T are as follows: + + * If T is a function result type then, from the caller’s perspective, + its level is that of the innermost master enclosing the function + call. From the callee’s perspective, the level of parameters and + local variables of the callee is statically deeper than the level + of T. + + For any other accessibility level L such that the level of + parameters and local variables of the callee is statically deeper + than L, the level of T (from the callee’s perspective) is also + statically deeper than L. + + * If T is the type of a formal parameter then, from the caller’s + perspective, its level is at least as deep as that of the type of + the corresponding actual parameter (whatever that actual parameter + might be). From the callee’s perspective, the level of parameters + and local variables of the callee is statically deeper than the + level of T. + + * If T is the type of a discriminant then its level is that of the + discriminated type. + + * If T is the type of a stand-alone object then its level is the + level of the object. + + * In all other cases, the level of T is as defined by the existing + rules of Ada. + +  + File: gnat_rm.info, Node: No_Dynamic_Sized_Objects, Next: No_Entry_Queue, Prev: No_Dynamic_Accessibility_Checks, Up: Program Unit Level Restrictions + + 5.2.3 No_Dynamic_Sized_Objects + ------------------------------ + + [GNAT] This restriction disallows certain constructs that might lead to + the creation of dynamic-sized composite objects (or array or + discriminated type). An array subtype indication is illegal if the + bounds are not static or references to discriminants of an enclosing + type. A discriminated subtype indication is illegal if the type has + discriminant-dependent array components or a variant part, and the + discriminants are not static. In addition, array and record aggregates + are illegal in corresponding cases. Note that this restriction does not + forbid access discriminants. It is often a good idea to combine this + restriction with No_Secondary_Stack. + +  + File: gnat_rm.info, Node: No_Entry_Queue, Next: No_Implementation_Aspect_Specifications, Prev: No_Dynamic_Sized_Objects, Up: Program Unit Level Restrictions + + 5.2.4 No_Entry_Queue + -------------------- + + [GNAT] This restriction is a declaration that any protected entry + compiled in the scope of the restriction has at most one task waiting on + the entry at any one time, and so no queue is required. This + restriction is not checked at compile time. A program execution is + erroneous if an attempt is made to queue a second task on such an entry. + +  + File: gnat_rm.info, Node: No_Implementation_Aspect_Specifications, Next: No_Implementation_Attributes, Prev: No_Entry_Queue, Up: Program Unit Level Restrictions + + 5.2.5 No_Implementation_Aspect_Specifications + --------------------------------------------- + + [RM 13.12.1] This restriction checks at compile time that no + GNAT-defined aspects are present. With this restriction, the only + aspects that can be used are those defined in the Ada Reference Manual. + +  + File: gnat_rm.info, Node: No_Implementation_Attributes, Next: No_Implementation_Identifiers, Prev: No_Implementation_Aspect_Specifications, Up: Program Unit Level Restrictions + + 5.2.6 No_Implementation_Attributes + ---------------------------------- + + [RM 13.12.1] This restriction checks at compile time that no + GNAT-defined attributes are present. With this restriction, the only + attributes that can be used are those defined in the Ada Reference + Manual. + +  + File: gnat_rm.info, Node: No_Implementation_Identifiers, Next: No_Implementation_Pragmas, Prev: No_Implementation_Attributes, Up: Program Unit Level Restrictions + + 5.2.7 No_Implementation_Identifiers + ----------------------------------- + + [RM 13.12.1] This restriction checks at compile time that no + implementation-defined identifiers (marked with pragma + Implementation_Defined) occur within language-defined packages. + +  + File: gnat_rm.info, Node: No_Implementation_Pragmas, Next: No_Implementation_Restrictions, Prev: No_Implementation_Identifiers, Up: Program Unit Level Restrictions + + 5.2.8 No_Implementation_Pragmas + ------------------------------- + + [RM 13.12.1] This restriction checks at compile time that no + GNAT-defined pragmas are present. With this restriction, the only + pragmas that can be used are those defined in the Ada Reference Manual. + +  + File: gnat_rm.info, Node: No_Implementation_Restrictions, Next: No_Implementation_Units, Prev: No_Implementation_Pragmas, Up: Program Unit Level Restrictions + + 5.2.9 No_Implementation_Restrictions + ------------------------------------ + + [GNAT] This restriction checks at compile time that no GNAT-defined + restriction identifiers (other than ‘No_Implementation_Restrictions’ + itself) are present. With this restriction, the only other restriction + identifiers that can be used are those defined in the Ada Reference + Manual. + +  + File: gnat_rm.info, Node: No_Implementation_Units, Next: No_Implicit_Aliasing, Prev: No_Implementation_Restrictions, Up: Program Unit Level Restrictions + + 5.2.10 No_Implementation_Units + ------------------------------ + + [RM 13.12.1] This restriction checks at compile time that there is no + mention in the context clause of any implementation-defined descendants + of packages Ada, Interfaces, or System. + +  + File: gnat_rm.info, Node: No_Implicit_Aliasing, Next: No_Implicit_Loops, Prev: No_Implementation_Units, Up: Program Unit Level Restrictions + + 5.2.11 No_Implicit_Aliasing + --------------------------- + + [GNAT] This restriction, which is not required to be partition-wide + consistent, requires an explicit aliased keyword for an object to which + ‘Access, ‘Unchecked_Access, or ‘Address is applied, and forbids entirely + the use of the ‘Unrestricted_Access attribute for objects. Note: the + reason that Unrestricted_Access is forbidden is that it would require + the prefix to be aliased, and in such cases, it can always be replaced + by the standard attribute Unchecked_Access which is preferable. + +  + File: gnat_rm.info, Node: No_Implicit_Loops, Next: No_Obsolescent_Features, Prev: No_Implicit_Aliasing, Up: Program Unit Level Restrictions + + 5.2.12 No_Implicit_Loops + ------------------------ + + [GNAT] This restriction ensures that the generated code of the unit + marked with this restriction does not contain any implicit ‘for’ loops, + either by modifying the generated code where possible, or by rejecting + any construct that would otherwise generate an implicit ‘for’ loop. If + this restriction is active, it is possible to build large array + aggregates with all static components without generating an intermediate + temporary, and without generating a loop to initialize individual + components. Otherwise, a loop is created for arrays larger than about + 5000 scalar components. Note that if this restriction is set in the + spec of a package, it will not apply to its body. + +  + File: gnat_rm.info, Node: No_Obsolescent_Features, Next: No_Wide_Characters, Prev: No_Implicit_Loops, Up: Program Unit Level Restrictions + + 5.2.13 No_Obsolescent_Features + ------------------------------ + + [RM 13.12.1] This restriction checks at compile time that no obsolescent + features are used, as defined in Annex J of the Ada Reference Manual. + +  + File: gnat_rm.info, Node: No_Wide_Characters, Next: Static_Dispatch_Tables, Prev: No_Obsolescent_Features, Up: Program Unit Level Restrictions + + 5.2.14 No_Wide_Characters + ------------------------- + + [GNAT] This restriction ensures at compile time that no uses of the + types ‘Wide_Character’ or ‘Wide_String’ or corresponding wide wide types + appear, and that no wide or wide wide string or character literals + appear in the program (that is literals representing characters not in + type ‘Character’). + +  + File: gnat_rm.info, Node: Static_Dispatch_Tables, Next: SPARK_05, Prev: No_Wide_Characters, Up: Program Unit Level Restrictions + + 5.2.15 Static_Dispatch_Tables + ----------------------------- + + [GNAT] This restriction checks at compile time that all the artifacts + associated with dispatch tables can be placed in read-only memory. + +  + File: gnat_rm.info, Node: SPARK_05, Prev: Static_Dispatch_Tables, Up: Program Unit Level Restrictions + + 5.2.16 SPARK_05 + --------------- + + [GNAT] This restriction no longer has any effect and is superseded by + SPARK 2014, whose restrictions are checked by the tool GNATprove. To + check that a codebase respects SPARK 2014 restrictions, mark the code + with pragma or aspect ‘SPARK_Mode’, and run the tool GNATprove at Stone + assurance level, as follows: + + gnatprove -P project.gpr --mode=stone + + or equivalently: + + gnatprove -P project.gpr --mode=check_all + +  + File: gnat_rm.info, Node: Implementation Advice, Next: Implementation Defined Characteristics, Prev: Standard and Implementation Defined Restrictions, Up: Top + + 6 Implementation Advice + *********************** + + The main text of the Ada Reference Manual describes the required + behavior of all Ada compilers, and the GNAT compiler conforms to these + requirements. + + In addition, there are sections throughout the Ada Reference Manual + headed by the phrase ‘Implementation advice’. These sections are not + normative, i.e., they do not specify requirements that all compilers + must follow. Rather they provide advice on generally desirable + behavior. They are not requirements, because they describe behavior + that cannot be provided on all systems, or may be undesirable on some + systems. + + As far as practical, GNAT follows the implementation advice in the Ada + Reference Manual. Each such RM section corresponds to a section in this + chapter whose title specifies the RM section number and paragraph number + and the subject of the advice. The contents of each section consists of + the RM text within quotation marks, followed by the GNAT interpretation + of the advice. Most often, this simply says ‘followed’, which means + that GNAT follows the advice. However, in a number of cases, GNAT + deliberately deviates from this advice, in which case the text describes + what GNAT does and why. + + * Menu: + + * RM 1.1.3(20); Error Detection: RM 1 1 3 20 Error Detection. + * RM 1.1.3(31); Child Units: RM 1 1 3 31 Child Units. + * RM 1.1.5(12); Bounded Errors: RM 1 1 5 12 Bounded Errors. + * RM 2.8(16); Pragmas: RM 2 8 16 Pragmas. + * RM 2.8(17-19); Pragmas: RM 2 8 17-19 Pragmas. + * RM 3.5.2(5); Alternative Character Sets: RM 3 5 2 5 Alternative Character Sets. + * RM 3.5.4(28); Integer Types: RM 3 5 4 28 Integer Types. + * RM 3.5.4(29); Integer Types: RM 3 5 4 29 Integer Types. + * RM 3.5.5(8); Enumeration Values: RM 3 5 5 8 Enumeration Values. + * RM 3.5.7(17); Float Types: RM 3 5 7 17 Float Types. + * RM 3.6.2(11); Multidimensional Arrays: RM 3 6 2 11 Multidimensional Arrays. + * RM 9.6(30-31); Duration’Small: RM 9 6 30-31 Duration’Small. + * RM 10.2.1(12); Consistent Representation: RM 10 2 1 12 Consistent Representation. + * RM 11.4.1(19); Exception Information: RM 11 4 1 19 Exception Information. + * RM 11.5(28); Suppression of Checks: RM 11 5 28 Suppression of Checks. + * RM 13.1 (21-24); Representation Clauses: RM 13 1 21-24 Representation Clauses. + * RM 13.2(6-8); Packed Types: RM 13 2 6-8 Packed Types. + * RM 13.3(14-19); Address Clauses: RM 13 3 14-19 Address Clauses. + * RM 13.3(29-35); Alignment Clauses: RM 13 3 29-35 Alignment Clauses. + * RM 13.3(42-43); Size Clauses: RM 13 3 42-43 Size Clauses. + * RM 13.3(50-56); Size Clauses: RM 13 3 50-56 Size Clauses. + * RM 13.3(71-73); Component Size Clauses: RM 13 3 71-73 Component Size Clauses. + * RM 13.4(9-10); Enumeration Representation Clauses: RM 13 4 9-10 Enumeration Representation Clauses. + * RM 13.5.1(17-22); Record Representation Clauses: RM 13 5 1 17-22 Record Representation Clauses. + * RM 13.5.2(5); Storage Place Attributes: RM 13 5 2 5 Storage Place Attributes. + * RM 13.5.3(7-8); Bit Ordering: RM 13 5 3 7-8 Bit Ordering. + * RM 13.7(37); Address as Private: RM 13 7 37 Address as Private. + * RM 13.7.1(16); Address Operations: RM 13 7 1 16 Address Operations. + * RM 13.9(14-17); Unchecked Conversion: RM 13 9 14-17 Unchecked Conversion. + * RM 13.11(23-25); Implicit Heap Usage: RM 13 11 23-25 Implicit Heap Usage. + * RM 13.11.2(17); Unchecked Deallocation: RM 13 11 2 17 Unchecked Deallocation. + * RM 13.13.2(1.6); Stream Oriented Attributes: RM 13 13 2 1 6 Stream Oriented Attributes. + * RM A.1(52); Names of Predefined Numeric Types: RM A 1 52 Names of Predefined Numeric Types. + * RM A.3.2(49); Ada.Characters.Handling: RM A 3 2 49 Ada Characters Handling. + * RM A.4.4(106); Bounded-Length String Handling: RM A 4 4 106 Bounded-Length String Handling. + * RM A.5.2(46-47); Random Number Generation: RM A 5 2 46-47 Random Number Generation. + * RM A.10.7(23); Get_Immediate: RM A 10 7 23 Get_Immediate. + * RM A.18; Containers: RM A 18 Containers. + * RM B.1(39-41); Pragma Export: RM B 1 39-41 Pragma Export. + * RM B.2(12-13); Package Interfaces: RM B 2 12-13 Package Interfaces. + * RM B.3(63-71); Interfacing with C: RM B 3 63-71 Interfacing with C. + * RM B.4(95-98); Interfacing with COBOL: RM B 4 95-98 Interfacing with COBOL. + * RM B.5(22-26); Interfacing with Fortran: RM B 5 22-26 Interfacing with Fortran. + * RM C.1(3-5); Access to Machine Operations: RM C 1 3-5 Access to Machine Operations. + * RM C.1(10-16); Access to Machine Operations: RM C 1 10-16 Access to Machine Operations. + * RM C.3(28); Interrupt Support: RM C 3 28 Interrupt Support. + * RM C.3.1(20-21); Protected Procedure Handlers: RM C 3 1 20-21 Protected Procedure Handlers. + * RM C.3.2(25); Package Interrupts: RM C 3 2 25 Package Interrupts. + * RM C.4(14); Pre-elaboration Requirements: RM C 4 14 Pre-elaboration Requirements. + * RM C.5(8); Pragma Discard_Names: RM C 5 8 Pragma Discard_Names. + * RM C.7.2(30); The Package Task_Attributes: RM C 7 2 30 The Package Task_Attributes. + * RM D.3(17); Locking Policies: RM D 3 17 Locking Policies. + * RM D.4(16); Entry Queuing Policies: RM D 4 16 Entry Queuing Policies. + * RM D.6(9-10); Preemptive Abort: RM D 6 9-10 Preemptive Abort. + * RM D.7(21); Tasking Restrictions: RM D 7 21 Tasking Restrictions. + * RM D.8(47-49); Monotonic Time: RM D 8 47-49 Monotonic Time. + * RM E.5(28-29); Partition Communication Subsystem: RM E 5 28-29 Partition Communication Subsystem. + * RM F(7); COBOL Support: RM F 7 COBOL Support. + * RM F.1(2); Decimal Radix Support: RM F 1 2 Decimal Radix Support. + * RM G; Numerics: RM G Numerics. + * RM G.1.1(56-58); Complex Types: RM G 1 1 56-58 Complex Types. + * RM G.1.2(49); Complex Elementary Functions: RM G 1 2 49 Complex Elementary Functions. + * RM G.2.4(19); Accuracy Requirements: RM G 2 4 19 Accuracy Requirements. + * RM G.2.6(15); Complex Arithmetic Accuracy: RM G 2 6 15 Complex Arithmetic Accuracy. + * RM H.6(15/2); Pragma Partition_Elaboration_Policy: RM H 6 15/2 Pragma Partition_Elaboration_Policy. + +  + File: gnat_rm.info, Node: RM 1 1 3 20 Error Detection, Next: RM 1 1 3 31 Child Units, Up: Implementation Advice + + 6.1 RM 1.1.3(20): Error Detection + ================================= + + “If an implementation detects the use of an unsupported Specialized + Needs Annex feature at run time, it should raise ‘Program_Error’ if + feasible.” + + Not relevant. All specialized needs annex features are either + supported, or diagnosed at compile time. + +  + File: gnat_rm.info, Node: RM 1 1 3 31 Child Units, Next: RM 1 1 5 12 Bounded Errors, Prev: RM 1 1 3 20 Error Detection, Up: Implementation Advice + + 6.2 RM 1.1.3(31): Child Units + ============================= + + “If an implementation wishes to provide implementation-defined + extensions to the functionality of a language-defined library unit, + it should normally do so by adding children to the library unit.” + + Followed. + +  + File: gnat_rm.info, Node: RM 1 1 5 12 Bounded Errors, Next: RM 2 8 16 Pragmas, Prev: RM 1 1 3 31 Child Units, Up: Implementation Advice + + 6.3 RM 1.1.5(12): Bounded Errors + ================================ + + “If an implementation detects a bounded error or erroneous + execution, it should raise ‘Program_Error’.” + + Followed in all cases in which the implementation detects a bounded + error or erroneous execution. Not all such situations are detected at + runtime. + +  + File: gnat_rm.info, Node: RM 2 8 16 Pragmas, Next: RM 2 8 17-19 Pragmas, Prev: RM 1 1 5 12 Bounded Errors, Up: Implementation Advice + + 6.4 RM 2.8(16): Pragmas + ======================= + + “Normally, implementation-defined pragmas should have no semantic + effect for error-free programs; that is, if the + implementation-defined pragmas are removed from a working program, + the program should still be legal, and should still have the same + semantics.” + + The following implementation defined pragmas are exceptions to this + rule: + + Pragma Explanation + + ------------------------------------------------- + + `Abort_Defer' Affects semantics + + + `Ada_83' Affects legality + + + `Assert' Affects semantics + + + `CPP_Class' Affects semantics + + + `CPP_Constructor' Affects semantics + + + `Debug' Affects semantics + + + `Interface_Name' Affects semantics + + + `Machine_Attribute' Affects semantics + + + `Unimplemented_Unit' Affects legality + + + `Unchecked_Union' Affects semantics + + + In each of the above cases, it is essential to the purpose of the pragma + that this advice not be followed. For details see *note Implementation + Defined Pragmas: 7. + +  + File: gnat_rm.info, Node: RM 2 8 17-19 Pragmas, Next: RM 3 5 2 5 Alternative Character Sets, Prev: RM 2 8 16 Pragmas, Up: Implementation Advice + + 6.5 RM 2.8(17-19): Pragmas + ========================== + + “Normally, an implementation should not define pragmas that can + make an illegal program legal, except as follows: + + * A pragma used to complete a declaration, such as a pragma + ‘Import’; + + * A pragma used to configure the environment by adding, + removing, or replacing ‘library_items’.” + + See *note RM 2.8(16); Pragmas: 21b. + +  + File: gnat_rm.info, Node: RM 3 5 2 5 Alternative Character Sets, Next: RM 3 5 4 28 Integer Types, Prev: RM 2 8 17-19 Pragmas, Up: Implementation Advice + + 6.6 RM 3.5.2(5): Alternative Character Sets + =========================================== + + “If an implementation supports a mode with alternative + interpretations for ‘Character’ and ‘Wide_Character’, the set of + graphic characters of ‘Character’ should nevertheless remain a + proper subset of the set of graphic characters of ‘Wide_Character’. + Any character set ‘localizations’ should be reflected in the + results of the subprograms defined in the language-defined package + ‘Characters.Handling’ (see A.3) available in such a mode. In a + mode with an alternative interpretation of ‘Character’, the + implementation should also support a corresponding change in what + is a legal ‘identifier_letter’.” + + Not all wide character modes follow this advice, in particular the JIS + and IEC modes reflect standard usage in Japan, and in these encoding, + the upper half of the Latin-1 set is not part of the wide-character + subset, since the most significant bit is used for wide character + encoding. However, this only applies to the external forms. Internally + there is no such restriction. + +  + File: gnat_rm.info, Node: RM 3 5 4 28 Integer Types, Next: RM 3 5 4 29 Integer Types, Prev: RM 3 5 2 5 Alternative Character Sets, Up: Implementation Advice + + 6.7 RM 3.5.4(28): Integer Types + =============================== + + “An implementation should support ‘Long_Integer’ in addition to + ‘Integer’ if the target machine supports 32-bit (or longer) + arithmetic. No other named integer subtypes are recommended for + package ‘Standard’. Instead, appropriate named integer subtypes + should be provided in the library package ‘Interfaces’ (see B.2).” + + ‘Long_Integer’ is supported. Other standard integer types are supported + so this advice is not fully followed. These types are supported for + convenient interface to C, and so that all hardware types of the machine + are easily available. + +  + File: gnat_rm.info, Node: RM 3 5 4 29 Integer Types, Next: RM 3 5 5 8 Enumeration Values, Prev: RM 3 5 4 28 Integer Types, Up: Implementation Advice + + 6.8 RM 3.5.4(29): Integer Types + =============================== + + “An implementation for a two’s complement machine should support + modular types with a binary modulus up to ‘System.Max_Int*2+2’. An + implementation should support a non-binary modules up to + ‘Integer'Last’.” + + Followed. + +  + File: gnat_rm.info, Node: RM 3 5 5 8 Enumeration Values, Next: RM 3 5 7 17 Float Types, Prev: RM 3 5 4 29 Integer Types, Up: Implementation Advice + + 6.9 RM 3.5.5(8): Enumeration Values + =================================== + + “For the evaluation of a call on ‘S'Pos’ for an enumeration + subtype, if the value of the operand does not correspond to the + internal code for any enumeration literal of its type (perhaps due + to an un-initialized variable), then the implementation should + raise ‘Program_Error’. This is particularly important for + enumeration types with noncontiguous internal codes specified by an + enumeration_representation_clause.” + + Followed. + +  + File: gnat_rm.info, Node: RM 3 5 7 17 Float Types, Next: RM 3 6 2 11 Multidimensional Arrays, Prev: RM 3 5 5 8 Enumeration Values, Up: Implementation Advice + + 6.10 RM 3.5.7(17): Float Types + ============================== + + “An implementation should support ‘Long_Float’ in addition to + ‘Float’ if the target machine supports 11 or more digits of + precision. No other named floating point subtypes are recommended + for package ‘Standard’. Instead, appropriate named floating point + subtypes should be provided in the library package ‘Interfaces’ + (see B.2).” + + ‘Short_Float’ and ‘Long_Long_Float’ are also provided. The former + provides improved compatibility with other implementations supporting + this type. The latter corresponds to the highest precision + floating-point type supported by the hardware. On most machines, this + will be the same as ‘Long_Float’, but on some machines, it will + correspond to the IEEE extended form. The notable case is all x86 + implementations, where ‘Long_Long_Float’ corresponds to the 80-bit + extended precision format supported in hardware on this processor. Note + that the 128-bit format on SPARC is not supported, since this is a + software rather than a hardware format. + +  + File: gnat_rm.info, Node: RM 3 6 2 11 Multidimensional Arrays, Next: RM 9 6 30-31 Duration’Small, Prev: RM 3 5 7 17 Float Types, Up: Implementation Advice + + 6.11 RM 3.6.2(11): Multidimensional Arrays + ========================================== + + “An implementation should normally represent multidimensional + arrays in row-major order, consistent with the notation used for + multidimensional array aggregates (see 4.3.3). However, if a + pragma ‘Convention’ (‘Fortran’, …) applies to a multidimensional + array type, then column-major order should be used instead (see + B.5, `Interfacing with Fortran').” + + Followed. + +  + File: gnat_rm.info, Node: RM 9 6 30-31 Duration’Small, Next: RM 10 2 1 12 Consistent Representation, Prev: RM 3 6 2 11 Multidimensional Arrays, Up: Implementation Advice + + 6.12 RM 9.6(30-31): Duration’Small + ================================== + + “Whenever possible in an implementation, the value of + ‘Duration'Small’ should be no greater than 100 microseconds.” + + Followed. (‘Duration'Small’ = 10**(-9)). + + “The time base for ‘delay_relative_statements’ should be monotonic; + it need not be the same time base as used for ‘Calendar.Clock’.” + + Followed. + +  + File: gnat_rm.info, Node: RM 10 2 1 12 Consistent Representation, Next: RM 11 4 1 19 Exception Information, Prev: RM 9 6 30-31 Duration’Small, Up: Implementation Advice + + 6.13 RM 10.2.1(12): Consistent Representation + ============================================= + + “In an implementation, a type declared in a pre-elaborated package + should have the same representation in every elaboration of a given + version of the package, whether the elaborations occur in distinct + executions of the same program, or in executions of distinct + programs or partitions that include the given version.” + + Followed, except in the case of tagged types. Tagged types involve + implicit pointers to a local copy of a dispatch table, and these + pointers have representations which thus depend on a particular + elaboration of the package. It is not easy to see how it would be + possible to follow this advice without severely impacting efficiency of + execution. + +  + File: gnat_rm.info, Node: RM 11 4 1 19 Exception Information, Next: RM 11 5 28 Suppression of Checks, Prev: RM 10 2 1 12 Consistent Representation, Up: Implementation Advice + + 6.14 RM 11.4.1(19): Exception Information + ========================================= + + “‘Exception_Message’ by default and ‘Exception_Information’ should + produce information useful for debugging. ‘Exception_Message’ + should be short, about one line. ‘Exception_Information’ can be + long. ‘Exception_Message’ should not include the ‘Exception_Name’. + ‘Exception_Information’ should include both the ‘Exception_Name’ + and the ‘Exception_Message’.” + + Followed. For each exception that doesn’t have a specified + ‘Exception_Message’, the compiler generates one containing the location + of the raise statement. This location has the form ‘file_name:line’, + where file_name is the short file name (without path information) and + line is the line number in the file. Note that in the case of the Zero + Cost Exception mechanism, these messages become redundant with the + Exception_Information that contains a full backtrace of the calling + sequence, so they are disabled. To disable explicitly the generation of + the source location message, use the Pragma ‘Discard_Names’. + +  + File: gnat_rm.info, Node: RM 11 5 28 Suppression of Checks, Next: RM 13 1 21-24 Representation Clauses, Prev: RM 11 4 1 19 Exception Information, Up: Implementation Advice + + 6.15 RM 11.5(28): Suppression of Checks + ======================================= + + “The implementation should minimize the code executed for checks + that have been suppressed.” + + Followed. + +  + File: gnat_rm.info, Node: RM 13 1 21-24 Representation Clauses, Next: RM 13 2 6-8 Packed Types, Prev: RM 11 5 28 Suppression of Checks, Up: Implementation Advice + + 6.16 RM 13.1 (21-24): Representation Clauses + ============================================ + + “The recommended level of support for all representation items is + qualified as follows: + + An implementation need not support representation items containing + nonstatic expressions, except that an implementation should support + a representation item for a given entity if each nonstatic + expression in the representation item is a name that statically + denotes a constant declared before the entity.” + + Followed. In fact, GNAT goes beyond the recommended level of support by + allowing nonstatic expressions in some representation clauses even + without the need to declare constants initialized with the values of + such expressions. For example: + + X : Integer; + Y : Float; + for Y'Address use X'Address;>> + + + "An implementation need not support a specification for the ``Size`` + for a given composite subtype, nor the size or storage place for an + object (including a component) of a given composite subtype, unless the + constraints on the subtype and its composite subcomponents (if any) are + all static constraints." + + Followed. Size Clauses are not permitted on nonstatic components, as + described above. + + “An aliased component, or a component whose type is by-reference, + should always be allocated at an addressable location.” + + Followed. + +  + File: gnat_rm.info, Node: RM 13 2 6-8 Packed Types, Next: RM 13 3 14-19 Address Clauses, Prev: RM 13 1 21-24 Representation Clauses, Up: Implementation Advice + + 6.17 RM 13.2(6-8): Packed Types + =============================== + + “If a type is packed, then the implementation should try to + minimize storage allocated to objects of the type, possibly at the + expense of speed of accessing components, subject to reasonable + complexity in addressing calculations. + + The recommended level of support pragma ‘Pack’ is: + + For a packed record type, the components should be packed as + tightly as possible subject to the Sizes of the component subtypes, + and subject to any `record_representation_clause' that applies to + the type; the implementation may, but need not, reorder components + or cross aligned word boundaries to improve the packing. A + component whose ‘Size’ is greater than the word size may be + allocated an integral number of words.” + + Followed. Tight packing of arrays is supported for all component sizes + up to 64-bits. If the array component size is 1 (that is to say, if the + component is a boolean type or an enumeration type with two values) then + values of the type are implicitly initialized to zero. This happens + both for objects of the packed type, and for objects that have a + subcomponent of the packed type. + + “An implementation should support Address clauses for imported + subprograms.” + + Followed. + +  + File: gnat_rm.info, Node: RM 13 3 14-19 Address Clauses, Next: RM 13 3 29-35 Alignment Clauses, Prev: RM 13 2 6-8 Packed Types, Up: Implementation Advice + + 6.18 RM 13.3(14-19): Address Clauses + ==================================== + + “For an array ‘X’, ‘X'Address’ should point at the first component + of the array, and not at the array bounds.” + + Followed. + + “The recommended level of support for the ‘Address’ attribute is: + + ‘X'Address’ should produce a useful result if ‘X’ is an object that + is aliased or of a by-reference type, or is an entity whose + ‘Address’ has been specified.” + + Followed. A valid address will be produced even if none of those + conditions have been met. If necessary, the object is forced into + memory to ensure the address is valid. + + “An implementation should support ‘Address’ clauses for imported + subprograms.” + + Followed. + + “Objects (including subcomponents) that are aliased or of a + by-reference type should be allocated on storage element + boundaries.” + + Followed. + + “If the ‘Address’ of an object is specified, or it is imported or + exported, then the implementation should not perform optimizations + based on assumptions of no aliases.” + + Followed. + +  + File: gnat_rm.info, Node: RM 13 3 29-35 Alignment Clauses, Next: RM 13 3 42-43 Size Clauses, Prev: RM 13 3 14-19 Address Clauses, Up: Implementation Advice + + 6.19 RM 13.3(29-35): Alignment Clauses + ====================================== + + “The recommended level of support for the ‘Alignment’ attribute for + subtypes is: + + An implementation should support specified Alignments that are + factors and multiples of the number of storage elements per word, + subject to the following:” + + Followed. + + “An implementation need not support specified Alignments for + combinations of Sizes and Alignments that cannot be easily loaded + and stored by available machine instructions.” + + Followed. + + “An implementation need not support specified Alignments that are + greater than the maximum ‘Alignment’ the implementation ever + returns by default.” + + Followed. + + “The recommended level of support for the ‘Alignment’ attribute for + objects is: + + Same as above, for subtypes, but in addition:” + + Followed. + + “For stand-alone library-level objects of statically constrained + subtypes, the implementation should support all alignments + supported by the target linker. For example, page alignment is + likely to be supported for such objects, but not for subtypes.” + + Followed. + +  + File: gnat_rm.info, Node: RM 13 3 42-43 Size Clauses, Next: RM 13 3 50-56 Size Clauses, Prev: RM 13 3 29-35 Alignment Clauses, Up: Implementation Advice + + 6.20 RM 13.3(42-43): Size Clauses + ================================= + + “The recommended level of support for the ‘Size’ attribute of + objects is: + + A ‘Size’ clause should be supported for an object if the specified + ‘Size’ is at least as large as its subtype’s ‘Size’, and + corresponds to a size in storage elements that is a multiple of the + object’s ‘Alignment’ (if the ‘Alignment’ is nonzero).” + + Followed. + +  + File: gnat_rm.info, Node: RM 13 3 50-56 Size Clauses, Next: RM 13 3 71-73 Component Size Clauses, Prev: RM 13 3 42-43 Size Clauses, Up: Implementation Advice + + 6.21 RM 13.3(50-56): Size Clauses + ================================= + + “If the ‘Size’ of a subtype is specified, and allows for efficient + independent addressability (see 9.10) on the target architecture, + then the ‘Size’ of the following objects of the subtype should + equal the ‘Size’ of the subtype: + + Aliased objects (including components).” + + Followed. + + “‘Size’ clause on a composite subtype should not affect the + internal layout of components.” + + Followed. But note that this can be overridden by use of the + implementation pragma Implicit_Packing in the case of packed arrays. + + “The recommended level of support for the ‘Size’ attribute of + subtypes is: + + The ‘Size’ (if not specified) of a static discrete or fixed point + subtype should be the number of bits needed to represent each value + belonging to the subtype using an unbiased representation, leaving + space for a sign bit only if the subtype contains negative values. + If such a subtype is a first subtype, then an implementation should + support a specified ‘Size’ for it that reflects this + representation.” + + Followed. + + “For a subtype implemented with levels of indirection, the ‘Size’ + should include the size of the pointers, but not the size of what + they point at.” + + Followed. + +  + File: gnat_rm.info, Node: RM 13 3 71-73 Component Size Clauses, Next: RM 13 4 9-10 Enumeration Representation Clauses, Prev: RM 13 3 50-56 Size Clauses, Up: Implementation Advice + + 6.22 RM 13.3(71-73): Component Size Clauses + =========================================== + + “The recommended level of support for the ‘Component_Size’ + attribute is: + + An implementation need not support specified ‘Component_Sizes’ that + are less than the ‘Size’ of the component subtype.” + + Followed. + + “An implementation should support specified Component_Sizes that + are factors and multiples of the word size. For such + Component_Sizes, the array should contain no gaps between + components. For other Component_Sizes (if supported), the array + should contain no gaps between components when packing is also + specified; the implementation should forbid this combination in + cases where it cannot support a no-gaps representation.” + + Followed. + +  + File: gnat_rm.info, Node: RM 13 4 9-10 Enumeration Representation Clauses, Next: RM 13 5 1 17-22 Record Representation Clauses, Prev: RM 13 3 71-73 Component Size Clauses, Up: Implementation Advice + + 6.23 RM 13.4(9-10): Enumeration Representation Clauses + ====================================================== + + “The recommended level of support for enumeration representation + clauses is: + + An implementation need not support enumeration representation + clauses for boolean types, but should at minimum support the + internal codes in the range ‘System.Min_Int .. System.Max_Int’.” + + Followed. + +  + File: gnat_rm.info, Node: RM 13 5 1 17-22 Record Representation Clauses, Next: RM 13 5 2 5 Storage Place Attributes, Prev: RM 13 4 9-10 Enumeration Representation Clauses, Up: Implementation Advice + + 6.24 RM 13.5.1(17-22): Record Representation Clauses + ==================================================== + + “The recommended level of support for + `record_representation_clause's is: + + An implementation should support storage places that can be + extracted with a load, mask, shift sequence of machine code, and + set with a load, shift, mask, store sequence, given the available + machine instructions and run-time model.” + + Followed. + + “A storage place should be supported if its size is equal to the + ‘Size’ of the component subtype, and it starts and ends on a + boundary that obeys the ‘Alignment’ of the component subtype.” + + Followed. + + “If the default bit ordering applies to the declaration of a given + type, then for a component whose subtype’s ‘Size’ is less than the + word size, any storage place that does not cross an aligned word + boundary should be supported.” + + Followed. + + “An implementation may reserve a storage place for the tag field of + a tagged type, and disallow other components from overlapping that + place.” + + Followed. The storage place for the tag field is the beginning of the + tagged record, and its size is Address’Size. GNAT will reject an + explicit component clause for the tag field. + + “An implementation need not support a `component_clause' for a + component of an extension part if the storage place is not after + the storage places of all components of the parent type, whether or + not those storage places had been specified.” + + Followed. The above advice on record representation clauses is + followed, and all mentioned features are implemented. + +  + File: gnat_rm.info, Node: RM 13 5 2 5 Storage Place Attributes, Next: RM 13 5 3 7-8 Bit Ordering, Prev: RM 13 5 1 17-22 Record Representation Clauses, Up: Implementation Advice + + 6.25 RM 13.5.2(5): Storage Place Attributes + =========================================== + + “If a component is represented using some form of pointer (such as + an offset) to the actual data of the component, and this data is + contiguous with the rest of the object, then the storage place + attributes should reflect the place of the actual data, not the + pointer. If a component is allocated discontinuously from the rest + of the object, then a warning should be generated upon reference to + one of its storage place attributes.” + + Followed. There are no such components in GNAT. + +  + File: gnat_rm.info, Node: RM 13 5 3 7-8 Bit Ordering, Next: RM 13 7 37 Address as Private, Prev: RM 13 5 2 5 Storage Place Attributes, Up: Implementation Advice + + 6.26 RM 13.5.3(7-8): Bit Ordering + ================================= + + “The recommended level of support for the non-default bit ordering + is: + + If ‘Word_Size’ = ‘Storage_Unit’, then the implementation should + support the non-default bit ordering in addition to the default bit + ordering.” + + Followed. Word size does not equal storage size in this implementation. + Thus non-default bit ordering is not supported. + +  + File: gnat_rm.info, Node: RM 13 7 37 Address as Private, Next: RM 13 7 1 16 Address Operations, Prev: RM 13 5 3 7-8 Bit Ordering, Up: Implementation Advice + + 6.27 RM 13.7(37): Address as Private + ==================================== + + “‘Address’ should be of a private type.” + + Followed. + +  + File: gnat_rm.info, Node: RM 13 7 1 16 Address Operations, Next: RM 13 9 14-17 Unchecked Conversion, Prev: RM 13 7 37 Address as Private, Up: Implementation Advice + + 6.28 RM 13.7.1(16): Address Operations + ====================================== + + “Operations in ‘System’ and its children should reflect the target + environment semantics as closely as is reasonable. For example, on + most machines, it makes sense for address arithmetic to ‘wrap + around’. Operations that do not make sense should raise + ‘Program_Error’.” + + Followed. Address arithmetic is modular arithmetic that wraps around. + No operation raises ‘Program_Error’, since all operations make sense. + +  + File: gnat_rm.info, Node: RM 13 9 14-17 Unchecked Conversion, Next: RM 13 11 23-25 Implicit Heap Usage, Prev: RM 13 7 1 16 Address Operations, Up: Implementation Advice + + 6.29 RM 13.9(14-17): Unchecked Conversion + ========================================= + + “The ‘Size’ of an array object should not include its bounds; + hence, the bounds should not be part of the converted data.” + + Followed. + + “The implementation should not generate unnecessary run-time checks + to ensure that the representation of ‘S’ is a representation of the + target type. It should take advantage of the permission to return + by reference when possible. Restrictions on unchecked conversions + should be avoided unless required by the target environment.” + + Followed. There are no restrictions on unchecked conversion. A warning + is generated if the source and target types do not have the same size + since the semantics in this case may be target dependent. + + “The recommended level of support for unchecked conversions is: + + Unchecked conversions should be supported and should be reversible + in the cases where this clause defines the result. To enable + meaningful use of unchecked conversion, a contiguous representation + should be used for elementary subtypes, for statically constrained + array subtypes whose component subtype is one of the subtypes + described in this paragraph, and for record subtypes without + discriminants whose component subtypes are described in this + paragraph.” + + Followed. + +  + File: gnat_rm.info, Node: RM 13 11 23-25 Implicit Heap Usage, Next: RM 13 11 2 17 Unchecked Deallocation, Prev: RM 13 9 14-17 Unchecked Conversion, Up: Implementation Advice + + 6.30 RM 13.11(23-25): Implicit Heap Usage + ========================================= + + “An implementation should document any cases in which it + dynamically allocates heap storage for a purpose other than the + evaluation of an allocator.” + + Followed, the only other points at which heap storage is dynamically + allocated are as follows: + + * At initial elaboration time, to allocate dynamically sized global + objects. + + * To allocate space for a task when a task is created. + + * To extend the secondary stack dynamically when needed. The + secondary stack is used for returning variable length results. + + “A default (implementation-provided) storage pool for an + access-to-constant type should not have overhead to support + deallocation of individual objects.” + + Followed. + + “A storage pool for an anonymous access type should be created at + the point of an allocator for the type, and be reclaimed when the + designated object becomes inaccessible.” + + Followed. + +  + File: gnat_rm.info, Node: RM 13 11 2 17 Unchecked Deallocation, Next: RM 13 13 2 1 6 Stream Oriented Attributes, Prev: RM 13 11 23-25 Implicit Heap Usage, Up: Implementation Advice + + 6.31 RM 13.11.2(17): Unchecked Deallocation + =========================================== + + “For a standard storage pool, ‘Free’ should actually reclaim the + storage.” + + Followed. + +  + File: gnat_rm.info, Node: RM 13 13 2 1 6 Stream Oriented Attributes, Next: RM A 1 52 Names of Predefined Numeric Types, Prev: RM 13 11 2 17 Unchecked Deallocation, Up: Implementation Advice + + 6.32 RM 13.13.2(1.6): Stream Oriented Attributes + ================================================ + + “If not specified, the value of Stream_Size for an elementary type + should be the number of bits that corresponds to the minimum number + of stream elements required by the first subtype of the type, + rounded up to the nearest factor or multiple of the word size that + is also a multiple of the stream element size.” + + Followed, except that the number of stream elements is 1, 2, 3, 4 or 8. + The Stream_Size may be used to override the default choice. + + The default implementation is based on direct binary representations and + is therefore target- and endianness-dependent. To address this issue, + GNAT also supplies an alternate implementation of the stream attributes + ‘Read’ and ‘Write’, which uses the target-independent XDR standard + representation for scalar types. This XDR alternative can be enabled + via the binder switch -xdr. + +  + File: gnat_rm.info, Node: RM A 1 52 Names of Predefined Numeric Types, Next: RM A 3 2 49 Ada Characters Handling, Prev: RM 13 13 2 1 6 Stream Oriented Attributes, Up: Implementation Advice + + 6.33 RM A.1(52): Names of Predefined Numeric Types + ================================================== + + “If an implementation provides additional named predefined integer + types, then the names should end with ‘Integer’ as in + ‘Long_Integer’. If an implementation provides additional named + predefined floating point types, then the names should end with + ‘Float’ as in ‘Long_Float’.” + + Followed. + +  + File: gnat_rm.info, Node: RM A 3 2 49 Ada Characters Handling, Next: RM A 4 4 106 Bounded-Length String Handling, Prev: RM A 1 52 Names of Predefined Numeric Types, Up: Implementation Advice + + 6.34 RM A.3.2(49): ‘Ada.Characters.Handling’ + ============================================ + + “If an implementation provides a localized definition of + ‘Character’ or ‘Wide_Character’, then the effects of the + subprograms in ‘Characters.Handling’ should reflect the + localizations. See also 3.5.2.” + + Followed. GNAT provides no such localized definitions. + +  + File: gnat_rm.info, Node: RM A 4 4 106 Bounded-Length String Handling, Next: RM A 5 2 46-47 Random Number Generation, Prev: RM A 3 2 49 Ada Characters Handling, Up: Implementation Advice + + 6.35 RM A.4.4(106): Bounded-Length String Handling + ================================================== + + “Bounded string objects should not be implemented by implicit + pointers and dynamic allocation.” + + Followed. No implicit pointers or dynamic allocation are used. + +  + File: gnat_rm.info, Node: RM A 5 2 46-47 Random Number Generation, Next: RM A 10 7 23 Get_Immediate, Prev: RM A 4 4 106 Bounded-Length String Handling, Up: Implementation Advice + + 6.36 RM A.5.2(46-47): Random Number Generation + ============================================== + + “Any storage associated with an object of type ‘Generator’ should + be reclaimed on exit from the scope of the object.” + + Followed. + + “If the generator period is sufficiently long in relation to the + number of distinct initiator values, then each possible value of + ‘Initiator’ passed to ‘Reset’ should initiate a sequence of random + numbers that does not, in a practical sense, overlap the sequence + initiated by any other value. If this is not possible, then the + mapping between initiator values and generator states should be a + rapidly varying function of the initiator value.” + + Followed. The generator period is sufficiently long for the first + condition here to hold true. + +  + File: gnat_rm.info, Node: RM A 10 7 23 Get_Immediate, Next: RM A 18 Containers, Prev: RM A 5 2 46-47 Random Number Generation, Up: Implementation Advice + + 6.37 RM A.10.7(23): ‘Get_Immediate’ + =================================== + + “The ‘Get_Immediate’ procedures should be implemented with + unbuffered input. For a device such as a keyboard, input should be + available if a key has already been typed, whereas for a disk file, + input should always be available except at end of file. For a file + associated with a keyboard-like device, any line-editing features + of the underlying operating system should be disabled during the + execution of ‘Get_Immediate’.” + + Followed on all targets except VxWorks. For VxWorks, there is no way to + provide this functionality that does not result in the input buffer + being flushed before the ‘Get_Immediate’ call. A special unit + ‘Interfaces.Vxworks.IO’ is provided that contains routines to enable + this functionality. + +  + File: gnat_rm.info, Node: RM A 18 Containers, Next: RM B 1 39-41 Pragma Export, Prev: RM A 10 7 23 Get_Immediate, Up: Implementation Advice + + 6.38 RM A.18: ‘Containers’ + ========================== + + All implementation advice pertaining to Ada.Containers and its child + units (that is, all implementation advice occurring within section A.18 + and its subsections) is followed except for A.18.24(17): + + “Bounded ordered set objects should be implemented without implicit + pointers or dynamic allocation. “ + + The implementations of the two Reference_Preserving_Key functions of the + generic package Ada.Containers.Bounded_Ordered_Sets each currently make + use of dynamic allocation; other operations on bounded ordered set + objects follow the implementation advice. + +  + File: gnat_rm.info, Node: RM B 1 39-41 Pragma Export, Next: RM B 2 12-13 Package Interfaces, Prev: RM A 18 Containers, Up: Implementation Advice + + 6.39 RM B.1(39-41): Pragma ‘Export’ + =================================== + + “If an implementation supports pragma ‘Export’ to a given language, + then it should also allow the main subprogram to be written in that + language. It should support some mechanism for invoking the + elaboration of the Ada library units included in the system, and + for invoking the finalization of the environment task. On typical + systems, the recommended mechanism is to provide two subprograms + whose link names are ‘adainit’ and ‘adafinal’. ‘adainit’ should + contain the elaboration code for library units. ‘adafinal’ should + contain the finalization code. These subprograms should have no + effect the second and subsequent time they are called.” + + Followed. + + “Automatic elaboration of pre-elaborated packages should be + provided when pragma ‘Export’ is supported.” + + Followed when the main program is in Ada. If the main program is in a + foreign language, then ‘adainit’ must be called to elaborate + pre-elaborated packages. + + “For each supported convention `L' other than ‘Intrinsic’, an + implementation should support ‘Import’ and ‘Export’ pragmas for + objects of `L'-compatible types and for subprograms, and pragma + ‘Convention’ for `L'-eligible types and for subprograms, presuming + the other language has corresponding features. Pragma ‘Convention’ + need not be supported for scalar types.” + + Followed. + +  + File: gnat_rm.info, Node: RM B 2 12-13 Package Interfaces, Next: RM B 3 63-71 Interfacing with C, Prev: RM B 1 39-41 Pragma Export, Up: Implementation Advice + + 6.40 RM B.2(12-13): Package ‘Interfaces’ + ======================================== + + “For each implementation-defined convention identifier, there + should be a child package of package Interfaces with the + corresponding name. This package should contain any declarations + that would be useful for interfacing to the language + (implementation) represented by the convention. Any declarations + useful for interfacing to any language on the given hardware + architecture should be provided directly in ‘Interfaces’.” + + Followed. + + “An implementation supporting an interface to C, COBOL, or Fortran + should provide the corresponding package or packages described in + the following clauses.” + + Followed. GNAT provides all the packages described in this section. + +  + File: gnat_rm.info, Node: RM B 3 63-71 Interfacing with C, Next: RM B 4 95-98 Interfacing with COBOL, Prev: RM B 2 12-13 Package Interfaces, Up: Implementation Advice + + 6.41 RM B.3(63-71): Interfacing with C + ====================================== + + “An implementation should support the following interface + correspondences between Ada and C.” + + Followed. + + “An Ada procedure corresponds to a void-returning C function.” + + Followed. + + “An Ada function corresponds to a non-void C function.” + + Followed. + + “An Ada ‘in’ scalar parameter is passed as a scalar argument to a C + function.” + + Followed. + + “An Ada ‘in’ parameter of an access-to-object type with designated + type ‘T’ is passed as a ‘t*’ argument to a C function, where ‘t’ is + the C type corresponding to the Ada type ‘T’.” + + Followed. + + “An Ada access ‘T’ parameter, or an Ada ‘out’ or ‘in out’ parameter + of an elementary type ‘T’, is passed as a ‘t*’ argument to a C + function, where ‘t’ is the C type corresponding to the Ada type + ‘T’. In the case of an elementary ‘out’ or ‘in out’ parameter, a + pointer to a temporary copy is used to preserve by-copy semantics.” + + Followed. + + “An Ada parameter of a record type ‘T’, of any mode, is passed as a + ‘t*’ argument to a C function, where ‘t’ is the C structure + corresponding to the Ada type ‘T’.” + + Followed. This convention may be overridden by the use of the + C_Pass_By_Copy pragma, or Convention, or by explicitly specifying the + mechanism for a given call using an extended import or export pragma. + + “An Ada parameter of an array type with component type ‘T’, of any + mode, is passed as a ‘t*’ argument to a C function, where ‘t’ is + the C type corresponding to the Ada type ‘T’.” + + Followed. + + “An Ada parameter of an access-to-subprogram type is passed as a + pointer to a C function whose prototype corresponds to the + designated subprogram’s specification.” + + Followed. + +  + File: gnat_rm.info, Node: RM B 4 95-98 Interfacing with COBOL, Next: RM B 5 22-26 Interfacing with Fortran, Prev: RM B 3 63-71 Interfacing with C, Up: Implementation Advice + + 6.42 RM B.4(95-98): Interfacing with COBOL + ========================================== + + “An Ada implementation should support the following interface + correspondences between Ada and COBOL.” + + Followed. + + “An Ada access ‘T’ parameter is passed as a ‘BY REFERENCE’ data + item of the COBOL type corresponding to ‘T’.” + + Followed. + + “An Ada in scalar parameter is passed as a ‘BY CONTENT’ data item + of the corresponding COBOL type.” + + Followed. + + “Any other Ada parameter is passed as a ‘BY REFERENCE’ data item of + the COBOL type corresponding to the Ada parameter type; for + scalars, a local copy is used if necessary to ensure by-copy + semantics.” + + Followed. + +  + File: gnat_rm.info, Node: RM B 5 22-26 Interfacing with Fortran, Next: RM C 1 3-5 Access to Machine Operations, Prev: RM B 4 95-98 Interfacing with COBOL, Up: Implementation Advice + + 6.43 RM B.5(22-26): Interfacing with Fortran + ============================================ + + “An Ada implementation should support the following interface + correspondences between Ada and Fortran:” + + Followed. + + “An Ada procedure corresponds to a Fortran subroutine.” + + Followed. + + “An Ada function corresponds to a Fortran function.” + + Followed. + + “An Ada parameter of an elementary, array, or record type ‘T’ is + passed as a ‘T’ argument to a Fortran procedure, where ‘T’ is the + Fortran type corresponding to the Ada type ‘T’, and where the + INTENT attribute of the corresponding dummy argument matches the + Ada formal parameter mode; the Fortran implementation’s parameter + passing conventions are used. For elementary types, a local copy + is used if necessary to ensure by-copy semantics.” + + Followed. + + “An Ada parameter of an access-to-subprogram type is passed as a + reference to a Fortran procedure whose interface corresponds to the + designated subprogram’s specification.” + + Followed. + +  + File: gnat_rm.info, Node: RM C 1 3-5 Access to Machine Operations, Next: RM C 1 10-16 Access to Machine Operations, Prev: RM B 5 22-26 Interfacing with Fortran, Up: Implementation Advice + + 6.44 RM C.1(3-5): Access to Machine Operations + ============================================== + + “The machine code or intrinsic support should allow access to all + operations normally available to assembly language programmers for + the target environment, including privileged instructions, if any.” + + Followed. + + “The interfacing pragmas (see Annex B) should support interface to + assembler; the default assembler should be associated with the + convention identifier ‘Assembler’.” + + Followed. + + “If an entity is exported to assembly language, then the + implementation should allocate it at an addressable location, and + should ensure that it is retained by the linking process, even if + not otherwise referenced from the Ada code. The implementation + should assume that any call to a machine code or assembler + subprogram is allowed to read or update every object that is + specified as exported.” + + Followed. + +  + File: gnat_rm.info, Node: RM C 1 10-16 Access to Machine Operations, Next: RM C 3 28 Interrupt Support, Prev: RM C 1 3-5 Access to Machine Operations, Up: Implementation Advice + + 6.45 RM C.1(10-16): Access to Machine Operations + ================================================ + + “The implementation should ensure that little or no overhead is + associated with calling intrinsic and machine-code subprograms.” + + Followed for both intrinsics and machine-code subprograms. + + “It is recommended that intrinsic subprograms be provided for + convenient access to any machine operations that provide special + capabilities or efficiency and that are not otherwise available + through the language constructs.” + + Followed. A full set of machine operation intrinsic subprograms is + provided. + + “Atomic read-modify-write operations—e.g., test and set, compare + and swap, decrement and test, enqueue/dequeue.” + + Followed on any target supporting such operations. + + “Standard numeric functions—e.g.:, sin, log.” + + Followed on any target supporting such operations. + + “String manipulation operations—e.g.:, translate and test.” + + Followed on any target supporting such operations. + + “Vector operations—e.g.:, compare vector against thresholds.” + + Followed on any target supporting such operations. + + “Direct operations on I/O ports.” + + Followed on any target supporting such operations. + +  + File: gnat_rm.info, Node: RM C 3 28 Interrupt Support, Next: RM C 3 1 20-21 Protected Procedure Handlers, Prev: RM C 1 10-16 Access to Machine Operations, Up: Implementation Advice + + 6.46 RM C.3(28): Interrupt Support + ================================== + + “If the ‘Ceiling_Locking’ policy is not in effect, the + implementation should provide means for the application to specify + which interrupts are to be blocked during protected actions, if the + underlying system allows for a finer-grain control of interrupt + blocking.” + + Followed. The underlying system does not allow for finer-grain control + of interrupt blocking. + +  + File: gnat_rm.info, Node: RM C 3 1 20-21 Protected Procedure Handlers, Next: RM C 3 2 25 Package Interrupts, Prev: RM C 3 28 Interrupt Support, Up: Implementation Advice + + 6.47 RM C.3.1(20-21): Protected Procedure Handlers + ================================================== + + “Whenever possible, the implementation should allow interrupt + handlers to be called directly by the hardware.” + + Followed on any target where the underlying operating system permits + such direct calls. + + “Whenever practical, violations of any implementation-defined + restrictions should be detected before run time.” + + Followed. Compile time warnings are given when possible. + +  + File: gnat_rm.info, Node: RM C 3 2 25 Package Interrupts, Next: RM C 4 14 Pre-elaboration Requirements, Prev: RM C 3 1 20-21 Protected Procedure Handlers, Up: Implementation Advice + + 6.48 RM C.3.2(25): Package ‘Interrupts’ + ======================================= + + “If implementation-defined forms of interrupt handler procedures + are supported, such as protected procedures with parameters, then + for each such form of a handler, a type analogous to + ‘Parameterless_Handler’ should be specified in a child package of + ‘Interrupts’, with the same operations as in the predefined package + Interrupts.” + + Followed. + +  + File: gnat_rm.info, Node: RM C 4 14 Pre-elaboration Requirements, Next: RM C 5 8 Pragma Discard_Names, Prev: RM C 3 2 25 Package Interrupts, Up: Implementation Advice + + 6.49 RM C.4(14): Pre-elaboration Requirements + ============================================= + + “It is recommended that pre-elaborated packages be implemented in + such a way that there should be little or no code executed at run + time for the elaboration of entities not already covered by the + Implementation Requirements.” + + Followed. Executable code is generated in some cases, e.g., loops to + initialize large arrays. + +  + File: gnat_rm.info, Node: RM C 5 8 Pragma Discard_Names, Next: RM C 7 2 30 The Package Task_Attributes, Prev: RM C 4 14 Pre-elaboration Requirements, Up: Implementation Advice + + 6.50 RM C.5(8): Pragma ‘Discard_Names’ + ====================================== + + “If the pragma applies to an entity, then the implementation should + reduce the amount of storage used for storing names associated with + that entity.” + + Followed. + +  + File: gnat_rm.info, Node: RM C 7 2 30 The Package Task_Attributes, Next: RM D 3 17 Locking Policies, Prev: RM C 5 8 Pragma Discard_Names, Up: Implementation Advice + + 6.51 RM C.7.2(30): The Package Task_Attributes + ============================================== + + “Some implementations are targeted to domains in which memory use + at run time must be completely deterministic. For such + implementations, it is recommended that the storage for task + attributes will be pre-allocated statically and not from the heap. + This can be accomplished by either placing restrictions on the + number and the size of the task’s attributes, or by using the + pre-allocated storage for the first ‘N’ attribute objects, and the + heap for the others. In the latter case, ‘N’ should be + documented.” + + Not followed. This implementation is not targeted to such a domain. + +  + File: gnat_rm.info, Node: RM D 3 17 Locking Policies, Next: RM D 4 16 Entry Queuing Policies, Prev: RM C 7 2 30 The Package Task_Attributes, Up: Implementation Advice + + 6.52 RM D.3(17): Locking Policies + ================================= + + “The implementation should use names that end with ‘_Locking’ for + locking policies defined by the implementation.” + + Followed. Two implementation-defined locking policies are defined, + whose names (‘Inheritance_Locking’ and ‘Concurrent_Readers_Locking’) + follow this suggestion. + +  + File: gnat_rm.info, Node: RM D 4 16 Entry Queuing Policies, Next: RM D 6 9-10 Preemptive Abort, Prev: RM D 3 17 Locking Policies, Up: Implementation Advice + + 6.53 RM D.4(16): Entry Queuing Policies + ======================================= + + “Names that end with ‘_Queuing’ should be used for all + implementation-defined queuing policies.” + + Followed. No such implementation-defined queuing policies exist. + +  + File: gnat_rm.info, Node: RM D 6 9-10 Preemptive Abort, Next: RM D 7 21 Tasking Restrictions, Prev: RM D 4 16 Entry Queuing Policies, Up: Implementation Advice + + 6.54 RM D.6(9-10): Preemptive Abort + =================================== + + “Even though the `abort_statement' is included in the list of + potentially blocking operations (see 9.5.1), it is recommended that + this statement be implemented in a way that never requires the task + executing the `abort_statement' to block.” + + Followed. + + “On a multi-processor, the delay associated with aborting a task on + another processor should be bounded; the implementation should use + periodic polling, if necessary, to achieve this.” + + Followed. + +  + File: gnat_rm.info, Node: RM D 7 21 Tasking Restrictions, Next: RM D 8 47-49 Monotonic Time, Prev: RM D 6 9-10 Preemptive Abort, Up: Implementation Advice + + 6.55 RM D.7(21): Tasking Restrictions + ===================================== + + “When feasible, the implementation should take advantage of the + specified restrictions to produce a more efficient implementation.” + + GNAT currently takes advantage of these restrictions by providing an + optimized run time when the Ravenscar profile and the GNAT restricted + run time set of restrictions are specified. See pragma ‘Profile + (Ravenscar)’ and pragma ‘Profile (Restricted)’ for more details. + +  + File: gnat_rm.info, Node: RM D 8 47-49 Monotonic Time, Next: RM E 5 28-29 Partition Communication Subsystem, Prev: RM D 7 21 Tasking Restrictions, Up: Implementation Advice + + 6.56 RM D.8(47-49): Monotonic Time + ================================== + + “When appropriate, implementations should provide configuration + mechanisms to change the value of ‘Tick’.” + + Such configuration mechanisms are not appropriate to this implementation + and are thus not supported. + + “It is recommended that ‘Calendar.Clock’ and ‘Real_Time.Clock’ be + implemented as transformations of the same time base.” + + Followed. + + “It is recommended that the best time base which exists in the + underlying system be available to the application through ‘Clock’. + ‘Best’ may mean highest accuracy or largest range.” + + Followed. + +  + File: gnat_rm.info, Node: RM E 5 28-29 Partition Communication Subsystem, Next: RM F 7 COBOL Support, Prev: RM D 8 47-49 Monotonic Time, Up: Implementation Advice + + 6.57 RM E.5(28-29): Partition Communication Subsystem + ===================================================== + + “Whenever possible, the PCS on the called partition should allow + for multiple tasks to call the RPC-receiver with different messages + and should allow them to block until the corresponding subprogram + body returns.” + + Followed by GLADE, a separately supplied PCS that can be used with GNAT. + + “The ‘Write’ operation on a stream of type ‘Params_Stream_Type’ + should raise ‘Storage_Error’ if it runs out of space trying to + write the ‘Item’ into the stream.” + + Followed by GLADE, a separately supplied PCS that can be used with GNAT. + +  + File: gnat_rm.info, Node: RM F 7 COBOL Support, Next: RM F 1 2 Decimal Radix Support, Prev: RM E 5 28-29 Partition Communication Subsystem, Up: Implementation Advice + + 6.58 RM F(7): COBOL Support + =========================== + + “If COBOL (respectively, C) is widely supported in the target + environment, implementations supporting the Information Systems + Annex should provide the child package ‘Interfaces.COBOL’ + (respectively, ‘Interfaces.C’) specified in Annex B and should + support a ‘convention_identifier’ of COBOL (respectively, C) in the + interfacing pragmas (see Annex B), thus allowing Ada programs to + interface with programs written in that language.” + + Followed. + +  + File: gnat_rm.info, Node: RM F 1 2 Decimal Radix Support, Next: RM G Numerics, Prev: RM F 7 COBOL Support, Up: Implementation Advice + + 6.59 RM F.1(2): Decimal Radix Support + ===================================== + + “Packed decimal should be used as the internal representation for + objects of subtype ‘S’ when ‘S’’Machine_Radix = 10.” + + Not followed. GNAT ignores ‘S’’Machine_Radix and always uses binary + representations. + +  + File: gnat_rm.info, Node: RM G Numerics, Next: RM G 1 1 56-58 Complex Types, Prev: RM F 1 2 Decimal Radix Support, Up: Implementation Advice + + 6.60 RM G: Numerics + =================== + + “If Fortran (respectively, C) is widely supported in the target + environment, implementations supporting the Numerics Annex should + provide the child package ‘Interfaces.Fortran’ (respectively, + ‘Interfaces.C’) specified in Annex B and should support a + ‘convention_identifier’ of Fortran (respectively, C) in the + interfacing pragmas (see Annex B), thus allowing Ada programs to + interface with programs written in that language.” + + Followed. + +  + File: gnat_rm.info, Node: RM G 1 1 56-58 Complex Types, Next: RM G 1 2 49 Complex Elementary Functions, Prev: RM G Numerics, Up: Implementation Advice + + 6.61 RM G.1.1(56-58): Complex Types + =================================== + + “Because the usual mathematical meaning of multiplication of a + complex operand and a real operand is that of the scaling of both + components of the former by the latter, an implementation should + not perform this operation by first promoting the real operand to + complex type and then performing a full complex multiplication. In + systems that, in the future, support an Ada binding to IEC + 559:1989, the latter technique will not generate the required + result when one of the components of the complex operand is + infinite. (Explicit multiplication of the infinite component by + the zero component obtained during promotion yields a NaN that + propagates into the final result.) Analogous advice applies in the + case of multiplication of a complex operand and a pure-imaginary + operand, and in the case of division of a complex operand by a real + or pure-imaginary operand.” + + Not followed. + + “Similarly, because the usual mathematical meaning of addition of a + complex operand and a real operand is that the imaginary operand + remains unchanged, an implementation should not perform this + operation by first promoting the real operand to complex type and + then performing a full complex addition. In implementations in + which the ‘Signed_Zeros’ attribute of the component type is ‘True’ + (and which therefore conform to IEC 559:1989 in regard to the + handling of the sign of zero in predefined arithmetic operations), + the latter technique will not generate the required result when the + imaginary component of the complex operand is a negatively signed + zero. (Explicit addition of the negative zero to the zero obtained + during promotion yields a positive zero.) Analogous advice applies + in the case of addition of a complex operand and a pure-imaginary + operand, and in the case of subtraction of a complex operand and a + real or pure-imaginary operand.” + + Not followed. + + “Implementations in which ‘Real'Signed_Zeros’ is ‘True’ should + attempt to provide a rational treatment of the signs of zero + results and result components. As one example, the result of the + ‘Argument’ function should have the sign of the imaginary component + of the parameter ‘X’ when the point represented by that parameter + lies on the positive real axis; as another, the sign of the + imaginary component of the ‘Compose_From_Polar’ function should be + the same as (respectively, the opposite of) that of the ‘Argument’ + parameter when that parameter has a value of zero and the ‘Modulus’ + parameter has a nonnegative (respectively, negative) value.” + + Followed. + +  + File: gnat_rm.info, Node: RM G 1 2 49 Complex Elementary Functions, Next: RM G 2 4 19 Accuracy Requirements, Prev: RM G 1 1 56-58 Complex Types, Up: Implementation Advice + + 6.62 RM G.1.2(49): Complex Elementary Functions + =============================================== + + “Implementations in which ‘Complex_Types.Real'Signed_Zeros’ is + ‘True’ should attempt to provide a rational treatment of the signs + of zero results and result components. For example, many of the + complex elementary functions have components that are odd functions + of one of the parameter components; in these cases, the result + component should have the sign of the parameter component at the + origin. Other complex elementary functions have zero components + whose sign is opposite that of a parameter component at the origin, + or is always positive or always negative.” + + Followed. + +  + File: gnat_rm.info, Node: RM G 2 4 19 Accuracy Requirements, Next: RM G 2 6 15 Complex Arithmetic Accuracy, Prev: RM G 1 2 49 Complex Elementary Functions, Up: Implementation Advice + + 6.63 RM G.2.4(19): Accuracy Requirements + ======================================== + + “The versions of the forward trigonometric functions without a + ‘Cycle’ parameter should not be implemented by calling the + corresponding version with a ‘Cycle’ parameter of + ‘2.0*Numerics.Pi’, since this will not provide the required + accuracy in some portions of the domain. For the same reason, the + version of ‘Log’ without a ‘Base’ parameter should not be + implemented by calling the corresponding version with a ‘Base’ + parameter of ‘Numerics.e’.” + + Followed. + +  + File: gnat_rm.info, Node: RM G 2 6 15 Complex Arithmetic Accuracy, Next: RM H 6 15/2 Pragma Partition_Elaboration_Policy, Prev: RM G 2 4 19 Accuracy Requirements, Up: Implementation Advice + + 6.64 RM G.2.6(15): Complex Arithmetic Accuracy + ============================================== + + “The version of the ‘Compose_From_Polar’ function without a ‘Cycle’ + parameter should not be implemented by calling the corresponding + version with a ‘Cycle’ parameter of ‘2.0*Numerics.Pi’, since this + will not provide the required accuracy in some portions of the + domain.” + + Followed. + +  + File: gnat_rm.info, Node: RM H 6 15/2 Pragma Partition_Elaboration_Policy, Prev: RM G 2 6 15 Complex Arithmetic Accuracy, Up: Implementation Advice + + 6.65 RM H.6(15/2): Pragma Partition_Elaboration_Policy + ====================================================== + + “If the partition elaboration policy is ‘Sequential’ and the + Environment task becomes permanently blocked during elaboration + then the partition is deadlocked and it is recommended that the + partition be immediately terminated.” + + Not followed. + +  + File: gnat_rm.info, Node: Implementation Defined Characteristics, Next: Intrinsic Subprograms, Prev: Implementation Advice, Up: Top + + 7 Implementation Defined Characteristics + **************************************** + + In addition to the implementation dependent pragmas and attributes, and + the implementation advice, there are a number of other Ada features that + are potentially implementation dependent and are designated as + implementation-defined. These are mentioned throughout the Ada + Reference Manual, and are summarized in Annex M. + + A requirement for conforming Ada compilers is that they provide + documentation describing how the implementation deals with each of these + issues. In this chapter you will find each point in Annex M listed, + followed by a description of how GNAT handles the implementation + dependence. + + You can use this chapter as a guide to minimizing implementation + dependent features in your programs if portability to other compilers + and other operating systems is an important consideration. The numbers + in each entry below correspond to the paragraph numbers in the Ada + Reference Manual. + + * “Whether or not each recommendation given in Implementation Advice + is followed. See 1.1.2(37).” + + See *note Implementation Advice: a. + + * “Capacity limitations of the implementation. See 1.1.3(3).” + + The complexity of programs that can be processed is limited only by the + total amount of available virtual memory, and disk space for the + generated object files. + + * “Variations from the standard that are impractical to avoid given + the implementation’s execution environment. See 1.1.3(6).” + + There are no variations from the standard. + + * “Which code_statements cause external interactions. See + 1.1.3(10).” + + Any `code_statement' can potentially cause external interactions. + + * “The coded representation for the text of an Ada program. See + 2.1(4).” + + See separate section on source representation. + + * + “The semantics of an Ada program whose text is not in + + Normalization Form C. See 2.1(4).” + + See separate section on source representation. + + * “The representation for an end of line. See 2.2(2).” + + See separate section on source representation. + + * “Maximum supported line length and lexical element length. See + 2.2(15).” + + The maximum line length is 255 characters and the maximum length of a + lexical element is also 255 characters. This is the default setting if + not overridden by the use of compiler switch `-gnaty' (which sets the + maximum to 79) or `-gnatyMnn' which allows the maximum line length to be + specified to be any value up to 32767. The maximum length of a lexical + element is the same as the maximum line length. + + * “Implementation defined pragmas. See 2.8(14).” + + See *note Implementation Defined Pragmas: 7. + + * “Effect of pragma ‘Optimize’. See 2.8(27).” + + Pragma ‘Optimize’, if given with a ‘Time’ or ‘Space’ parameter, checks + that the optimization flag is set, and aborts if it is not. + + * “The message string associated with the Assertion_Error exception + raised by the failure of a predicate check if there is no + applicable Predicate_Failure aspect. See 3.2.4(31).” + + In the case of a Dynamic_Predicate aspect, the string is + “Dynamic_Predicate failed at ”, where “” might be something like “foo.adb:123”. The Static_Predicate + case is handled analogously. + + * “The predefined integer types declared in ‘Standard’. See + 3.5.4(25).” + + Type Representation + + -------------------------------------------------------------------------- + + `Short_Short_Integer' 8-bit signed + + + `Short_Integer' 16-bit signed + + + `Integer' 32-bit signed + + + `Long_Integer' 64-bit signed (on most 64-bit targets, + depending on the C definition of long) + 32-bit signed (on all other targets) + + + `Long_Long_Integer' 64-bit signed + + + `Long_Long_Long_Integer' 128-bit signed (on 64-bit targets) 64-bit + signed (on 32-bit targets) + + + * “Any nonstandard integer types and the operators defined for them. + See 3.5.4(26).” + + There are no nonstandard integer types. + + * “Any nonstandard real types and the operators defined for them. + See 3.5.6(8).” + + There are no nonstandard real types. + + * “What combinations of requested decimal precision and range are + supported for floating point types. See 3.5.7(7).” + + The precision and range are defined by the IEEE Standard for + Floating-Point Arithmetic (IEEE 754-2019). + + * “The predefined floating point types declared in ‘Standard’. See + 3.5.7(16).” + + Type Representation + + ------------------------------------------------------------------------------- + + `Short_Float' IEEE Binary32 (Single) + + + `Float' IEEE Binary32 (Single) + + + `Long_Float' IEEE Binary64 (Double) + + + `Long_Long_Float' IEEE Binary64 (Double) on non-x86 architectures + IEEE 80-bit Extended on x86 architecture + + + The default rounding mode specified by the IEEE 754 Standard is assumed + both for static and dynamic computations (that is, round to nearest, + ties to even). The input routines yield correctly rounded values for + Short_Float, Float, and Long_Float at least. The output routines can + compute up to twice as many exact digits as the value of ‘T'Digits’ for + any type, for example 30 digits for Long_Float; if more digits are + requested, zeros are printed. + + * “The small of an ordinary fixed point type. See 3.5.9(8).” + + The small is the largest power of two that does not exceed the delta. + + * “What combinations of small, range, and digits are supported for + fixed point types. See 3.5.9(10).” + + For an ordinary fixed point type, on 32-bit platforms, the small must + lie in 2.0**(-80) .. 2.0**80 and the range in -9.0E+36 .. 9.0E+36; any + combination is permitted that does not result in a mantissa larger than + 63 bits. + + On 64-bit platforms, the small must lie in 2.0**(-127) .. 2.0**127 and + the range in -1.0E+76 .. 1.0E+76; any combination is permitted that + does not result in a mantissa larger than 63 bits, and any combination + is permitted that results in a mantissa between 64 and 127 bits if the + small is the ratio of two integers that lie in 1 .. 2.0**127. + + If the small is the ratio of two integers with 64-bit magnitude on + 32-bit platforms and 128-bit magnitude on 64-bit platforms, which is the + case if no ‘small’ clause is provided, then the operations of the fixed + point type are entirely implemented by means of integer instructions. + In the other cases, some operations, in particular input and output, may + be implemented by means of floating-point instructions and may be + affected by accuracy issues on architectures other than x86. + + For a decimal fixed point type, on 32-bit platforms, the small must lie + in 1.0E-18 .. 1.0E+18 and the digits in 1 .. 18. On 64-bit platforms, + the small must lie in 1.0E-38 .. 1.0E+38 and the digits in 1 .. 38. + + * “The result of ‘Tags.Expanded_Name’ for types declared within an + unnamed `block_statement'. See 3.9(10).” + + Block numbers of the form ‘B`nnn'’, where `nnn' is a decimal integer are + allocated. + + * “The sequence of characters of the value returned by + Tags.Expanded_Name (respectively, Tags.Wide_Expanded_Name) when + some of the graphic characters of Tags.Wide_Wide_Expanded_Name are + not defined in Character (respectively, Wide_Character). See + 3.9(10.1).” + + This is handled in the same way as the implementation-defined behavior + referenced in A.4.12(34). + + * “Implementation-defined attributes. See 4.1.4(12).” + + See *note Implementation Defined Attributes: 8. + + * “The value of the parameter to Empty for some container aggregates. + See 4.3.5(40).” + + As per the suggestion given in the Annotated Ada RM, the default value + of the formal parameter is used if one exists and zero is used + otherwise. + + * “The maximum number of chunks for a parallel reduction expression + without a chunk_specification. See 4.5.10(21).” + + Feature unimplemented. + + * “Rounding of real static expressions which are exactly half-way + between two machine numbers. See 4.9(38).” + + Round to even is used in all such cases. + + * + “The maximum number of chunks for a parallel generalized iterator without + + a chunk_specification. See 5.5.2(10).” + + Feature unimplemented. + + * “The number of chunks for an array component iterator. See + 5.5.2(11).” + + Feature unimplemented. + + * “Any extensions of the Global aspect. See 6.1.2(43).” + + Feature unimplemented. + + * “The circumstances the implementation passes in the null value for + a view conversion of an access type used as an out parameter. See + 6.4.1(19).” + + Difficult to characterize. + + * “Any extensions of the Default_Initial_Condition aspect. See + 7.3.3(11).” + + SPARK allows specifying `null' as the Default_Initial_Condition aspect + of a type. See the SPARK reference manual for further details. + + * “Any implementation-defined time types. See 9.6(6).” + + There are no implementation-defined time types. + + * “The time base associated with relative delays. See 9.6(20).” + + See 9.6(20). The time base used is that provided by the C library + function ‘gettimeofday’. + + * “The time base of the type ‘Calendar.Time’. See 9.6(23).” + + The time base used is that provided by the C library function + ‘gettimeofday’. + + * “The time zone used for package ‘Calendar’ operations. See + 9.6(24).” + + The time zone used by package ‘Calendar’ is the current system time zone + setting for local time, as accessed by the C library function + ‘localtime’. + + * “Any limit on `delay_until_statements' of `select_statements'. See + 9.6(29).” + + There are no such limits. + + * + “The result of Calendar.Formatting.Image if its argument represents more + + than 100 hours. See 9.6.1(86).” + + Calendar.Time_Error is raised. + + * “Implementation-defined conflict check policies. See 9.10.1(5).” + + There are no implementation-defined conflict check policies. + + * “The representation for a compilation. See 10.1(2).” + + A compilation is represented by a sequence of files presented to the + compiler in a single invocation of the `gcc' command. + + * “Any restrictions on compilations that contain multiple + compilation_units. See 10.1(4).” + + No single file can contain more than one compilation unit, but any + sequence of files can be presented to the compiler as a single + compilation. + + * “The mechanisms for creating an environment and for adding and + replacing compilation units. See 10.1.4(3).” + + See separate section on compilation model. + + * “The manner of explicitly assigning library units to a partition. + See 10.2(2).” + + If a unit contains an Ada main program, then the Ada units for the + partition are determined by recursive application of the rules in the + Ada Reference Manual section 10.2(2-6). In other words, the Ada units + will be those that are needed by the main program, and then this + definition of need is applied recursively to those units, and the + partition contains the transitive closure determined by this + relationship. In short, all the necessary units are included, with no + need to explicitly specify the list. If additional units are required, + e.g., by foreign language units, then all units must be mentioned in the + context clause of one of the needed Ada units. + + If the partition contains no main program, or if the main program is in + a language other than Ada, then GNAT provides the binder options `-z' + and `-n' respectively, and in this case a list of units can be + explicitly supplied to the binder for inclusion in the partition (all + units needed by these units will also be included automatically). For + full details on the use of these options, refer to `GNAT Make Program + gnatmake' in the ‘GNAT User’s Guide’. + + * “The implementation-defined means, if any, of specifying which + compilation units are needed by a given compilation unit. See + 10.2(2).” + + The units needed by a given compilation unit are as defined in the Ada + Reference Manual section 10.2(2-6). There are no implementation-defined + pragmas or other implementation-defined means for specifying needed + units. + + * “The manner of designating the main subprogram of a partition. See + 10.2(7).” + + The main program is designated by providing the name of the + corresponding ‘ALI’ file as the input parameter to the binder. + + * “The order of elaboration of `library_items'. See 10.2(18).” + + The first constraint on ordering is that it meets the requirements of + Chapter 10 of the Ada Reference Manual. This still leaves some + implementation-dependent choices, which are resolved by analyzing the + elaboration code of each unit and identifying implicit elaboration-order + dependencies. + + * “Parameter passing and function return for the main subprogram. + See 10.2(21).” + + The main program has no parameters. It may be a procedure, or a + function returning an integer type. In the latter case, the returned + integer value is the return code of the program (overriding any value + that may have been set by a call to ‘Ada.Command_Line.Set_Exit_Status’). + + * “The mechanisms for building and running partitions. See + 10.2(24).” + + GNAT itself supports programs with only a single partition. The + GNATDIST tool provided with the GLADE package (which also includes an + implementation of the PCS) provides a completely flexible method for + building and running programs consisting of multiple partitions. See + the separate GLADE manual for details. + + * “The details of program execution, including program termination. + See 10.2(25).” + + See separate section on compilation model. + + * “The semantics of any non-active partitions supported by the + implementation. See 10.2(28).” + + Passive partitions are supported on targets where shared memory is + provided by the operating system. See the GLADE reference manual for + further details. + + * “The information returned by ‘Exception_Message’. See 11.4.1(10).” + + Exception message returns the null string unless a specific message has + been passed by the program. + + * “The result of ‘Exceptions.Exception_Name’ for types declared + within an unnamed `block_statement'. See 11.4.1(12).” + + Blocks have implementation defined names of the form ‘B`nnn'’ where + `nnn' is an integer. + + * “The information returned by ‘Exception_Information’. See + 11.4.1(13).” + + ‘Exception_Information’ returns a string in the following format: + + *Exception_Name:* nnnnn + *Message:* mmmmm + *PID:* ppp + *Load address:* 0xhhhh + *Call stack traceback locations:* + 0xhhhh 0xhhhh 0xhhhh ... 0xhhh + + where + + * ‘nnnn’ is the fully qualified name of the exception in all + upper case letters. This line is always present. + + * ‘mmmm’ is the message (this line present only if message is + non-null) + + * ‘ppp’ is the Process Id value as a decimal integer (this line + is present only if the Process Id is nonzero). Currently we + are not making use of this field. + + * The Load address line, the Call stack traceback locations line + and the following values are present only if at least one + traceback location was recorded. The Load address indicates + the address at which the main executable was loaded; this line + may not be present if operating system hasn’t relocated the + main executable. The values are given in C style format, with + lower case letters for a-f, and only as many digits present as + are necessary. The line terminator sequence at the end of + each line, including the last line is a single ‘LF’ character + (‘16#0A#’). + + * “The sequence of characters of the value returned by + Exceptions.Exception_Name (respectively, + Exceptions.Wide_Exception_Name) when some of the graphic characters + of Exceptions.Wide_Wide_Exception_Name are not defined in Character + (respectively, Wide_Character). See 11.4.1(12.1).” + + This is handled in the same way as the implementation-defined behavior + referenced in A.4.12(34). + + * “The information returned by Exception_Information. See + 11.4.1(13).” + + The exception name and the source location at which the exception was + raised are included. + + * “Implementation-defined policy_identifiers and + assertion_aspect_marks allowed in a pragma Assertion_Policy. See + 11.4.2(9).” + + Implementation-defined assertion_aspect_marks include Assert_And_Cut, + Assume, Contract_Cases, Debug, Ghost, Initial_Condition, Loop_Invariant, + Loop_Variant, Postcondition, Precondition, Predicate, Refined_Post, + Statement_Assertions, and Subprogram_Variant. Implementation-defined + policy_identifiers include Ignore and Suppressible. + + * “The default assertion policy. See 11.4.2(10).” + + The default assertion policy is Ignore, although this can be overridden + via compiler switches such as “-gnata”. + + * “Implementation-defined check names. See 11.5(27).” + + The implementation defined check names include Alignment_Check, + Atomic_Synchronization, Duplicated_Tag_Check, Container_Checks, + Tampering_Check, Predicate_Check, and Validity_Check. In addition, a + user program can add implementation-defined check names by means of the + pragma Check_Name. See the description of pragma ‘Suppress’ for full + details. + + * “Existence and meaning of second parameter of pragma Unsuppress. + See 11.5(27.1).” + + The legality rules for and semantics of the second parameter of pragma + Unsuppress match those for the second argument of pragma Suppress. + + * + “The cases that cause conflicts between the representation of the + + ancestors of a type_declaration. See 13.1(13.1).” + + No such cases exist. + + * “The interpretation of each representation aspect. See 13.1(20).” + + See separate section on data representations. + + * “Any restrictions placed upon the specification of representation + aspects. See 13.1(20).” + + See separate section on data representations. + + * “Implementation-defined aspects, including the syntax for + specifying such aspects and the legality rules for such aspects. + See 13.1.1(38).” + + See *note Implementation Defined Aspects: 11f. + + * “The set of machine scalars. See 13.3(8.1).” + + See separate section on data representations. + + * “The meaning of ‘Size’ for indefinite subtypes. See 13.3(48).” + + The Size attribute of an indefinite subtype is not less than the Size + attribute of any object of that type. + + * “The meaning of Object_Size for indefinite subtypes. See + 13.3(58).” + + The Object_Size attribute of an indefinite subtype is not less than the + Object_Size attribute of any object of that type. + + * “The default external representation for a type tag. See + 13.3(75).” + + The default external representation for a type tag is the fully expanded + name of the type in upper case letters. + + * “What determines whether a compilation unit is the same in two + different partitions. See 13.3(76).” + + A compilation unit is the same in two different partitions if and only + if it derives from the same source file. + + * “Implementation-defined components. See 13.5.1(15).” + + The only implementation defined component is the tag for a tagged type, + which contains a pointer to the dispatching table. + + * “If ‘Word_Size’ = ‘Storage_Unit’, the default bit ordering. See + 13.5.3(5).” + + ‘Word_Size’ (32) is not the same as ‘Storage_Unit’ (8) for this + implementation, so no non-default bit ordering is supported. The + default bit ordering corresponds to the natural endianness of the target + architecture. + + * “The contents of the visible part of package ‘System’. See + 13.7(2).” + + See the definition of package System in ‘system.ads’. Note that two + declarations are added to package System. + + Max_Priority : constant Positive := Priority'Last; + Max_Interrupt_Priority : constant Positive := Interrupt_Priority'Last; + + * “The range of Storage_Elements.Storage_Offset, the modulus of + Storage_Elements.Storage_Element, and the declaration of + Storage_Elements.Integer_Address. See 13.7.1(11).” + + See the definition of package System.Storage_Elements in ‘s-stoele.ads’. + + * “The contents of the visible part of package ‘System.Machine_Code’, + and the meaning of `code_statements'. See 13.8(7).” + + See the definition and documentation in file ‘s-maccod.ads’. + + * “The result of unchecked conversion for instances with scalar + result types whose result is not defined by the language. See + 13.9(11).” + + Unchecked conversion between types of the same size results in an + uninterpreted transmission of the bits from one type to the other. If + the types are of unequal sizes, then in the case of discrete types, a + shorter source is first zero or sign extended as necessary, and a + shorter target is simply truncated on the left. For all non-discrete + types, the source is first copied if necessary to ensure that the + alignment requirements of the target are met, then a pointer is + constructed to the source value, and the result is obtained by + dereferencing this pointer after converting it to be a pointer to the + target type. Unchecked conversions where the target subtype is an + unconstrained array are not permitted. If the target alignment is + greater than the source alignment, then a copy of the result is made + with appropriate alignment + + * “The result of unchecked conversion for instances with nonscalar + result types whose result is not defined by the language. See + 13.9(11).” + + See preceding definition for the scalar result case. + + * “Whether or not the implementation provides user-accessible names + for the standard pool type(s). See 13.11(17).” + + There are 3 different standard pools used by the compiler when + ‘Storage_Pool’ is not specified depending whether the type is local to a + subprogram or defined at the library level and whether ‘Storage_Size``is + specified or not. See documentation in the runtime library units + ``System.Pool_Global’, ‘System.Pool_Size’ and ‘System.Pool_Local’ in + files ‘s-poosiz.ads’, ‘s-pooglo.ads’ and ‘s-pooloc.ads’ for full details + on the default pools used. All these pools are accessible by means of + ‘with’ing these units. + + * “The meaning of ‘Storage_Size’ when neither the Storage_Size nor + the Storage_Pool is specified for an access type. See 13.11(18).” + + ‘Storage_Size’ is measured in storage units, and refers to the total + space available for an access type collection, or to the primary stack + space for a task. + + * “The effect of specifying aspect Default_Storage_Pool on an + instance of a language-defined generic unit. See 13.11.3(5).” + + Instances of language-defined generic units are treated the same as + other instances with respect to the Default_Storage_Pool aspect. + + * “Implementation-defined restrictions allowed in a pragma + ‘Restrictions’. See 13.12(8.7).” + + See *note Standard and Implementation Defined Restrictions: 9. + + * “The consequences of violating limitations on ‘Restrictions’ + pragmas. See 13.12(9).” + + Restrictions that can be checked at compile time are enforced at compile + time; violations are illegal. For other restrictions, any violation + during program execution results in erroneous execution. + + * “Implementation-defined usage profiles allowed in a pragma Profile. + See 13.12(15).” + + See *note Implementation Defined Pragmas: 7. + + * “The contents of the stream elements read and written by the Read + and Write attributes of elementary types. See 13.13.2(9).” + + The representation is the in-memory representation of the base type of + the type, using the number of bits corresponding to the ‘type'Size’ + value, and the natural ordering of the machine. + + * “The names and characteristics of the numeric subtypes declared in + the visible part of package ‘Standard’. See A.1(3).” + + See items describing the integer and floating-point types supported. + + * “The values returned by Strings.Hash. See A.4.9(3).” + + This hash function has predictable collisions and is subject to + equivalent substring attacks. It is not suitable for construction of a + hash table keyed on possibly malicious user input. + + * “The value returned by a call to a Text_Buffer Get procedure if any + character in the returned sequence is not defined in Character. + See A.4.12(34).” + + The contents of a buffer is represented internally as a UTF_8 string. + The value return by Text_Buffer.Get is the result of passing that UTF_8 + string to UTF_Encoding.Strings.Decode. + + * “The value returned by a call to a Text_Buffer Wide_Get procedure + if any character in the returned sequence is not defined in + Wide_Character. See A.4.12(34).” + + The contents of a buffer is represented internally as a UTF_8 string. + The value return by Text_Buffer.Wide_Get is the result of passing that + UTF_8 string to UTF_Encoding.Wide_Strings.Decode. + + * “The accuracy actually achieved by the elementary functions. See + A.5.1(1).” + + The elementary functions correspond to the functions available in the C + library. Only fast math mode is implemented. + + * “The sign of a zero result from some of the operators or functions + in ‘Numerics.Generic_Elementary_Functions’, when + ‘Float_Type'Signed_Zeros’ is ‘True’. See A.5.1(46).” + + The sign of zeroes follows the requirements of the IEEE 754 standard on + floating-point. + + * “The value of ‘Numerics.Float_Random.Max_Image_Width’. See + A.5.2(27).” + + Maximum image width is 6864, see library file ‘s-rannum.ads’. + + * “The value of ‘Numerics.Discrete_Random.Max_Image_Width’. See + A.5.2(27).” + + Maximum image width is 6864, see library file ‘s-rannum.ads’. + + * “The string representation of a random number generator’s state. + See A.5.2(38).” + + The value returned by the Image function is the concatenation of the + fixed-width decimal representations of the 624 32-bit integers of the + state vector. + + * “The values of the ‘Model_Mantissa’, ‘Model_Emin’, ‘Model_Epsilon’, + ‘Model’, ‘Safe_First’, and ‘Safe_Last’ attributes, if the Numerics + Annex is not supported. See A.5.3(72).” + + Running the compiler with `-gnatS' to produce a listing of package + ‘Standard’ displays the values of these attributes. + + * “The value of ‘Buffer_Size’ in ‘Storage_IO’. See A.9(10).” + + All type representations are contiguous, and the ‘Buffer_Size’ is the + value of ‘type'Size’ rounded up to the next storage unit boundary. + + * “External files for standard input, standard output, and standard + error See A.10(5).” + + These files are mapped onto the files provided by the C streams + libraries. See source file ‘i-cstrea.ads’ for further details. + + * “The accuracy of the value produced by ‘Put’. See A.10.9(36).” + + If more digits are requested in the output than are represented by the + precision of the value, zeroes are output in the corresponding least + significant digit positions. + + * “Current size for a stream file for which positioning is not + supported. See A.12.1(1.1).” + + Positioning is supported. + + * “The meaning of ‘Argument_Count’, ‘Argument’, and ‘Command_Name’. + See A.15(1).” + + These are mapped onto the ‘argv’ and ‘argc’ parameters of the main + program in the natural manner. + + * “The interpretation of file names and directory names. See + A.16(46).” + + These names are interpreted consistently with the underlying file + system. + + * “The maxium value for a file size in Directories. See A.16(87).” + + Directories.File_Size’Last is equal to Long_Long_Integer’Last . + + * + “The result for Directories.Size for a directory or special file. + + See A.16(93).” + + Name_Error is raised. + + * + “The result for Directories.Modification_Time for a directory or special file. + + See A.16(93).” + + Name_Error is raised. + + * + “The interpretation of a nonnull search pattern in Directories. + + See A.16(104).” + + When the ‘Pattern’ parameter is not the null string, it is interpreted + according to the syntax of regular expressions as defined in the + ‘GNAT.Regexp’ package. + + See *note GNAT.Regexp (g-regexp.ads): 25b. + + * + “The results of a Directories search if the contents of the directory are + + altered while a search is in progress. See A.16(110).” + + The effect of a call to Get_Next_Entry is determined by the current + state of the directory. + + * “The definition and meaning of an environment variable. See + A.17(1).” + + This definition is determined by the underlying operating system. + + * “The circumstances where an environment variable cannot be defined. + See A.17(16).” + + There are no such implementation-defined circumstances. + + * “Environment names for which Set has the effect of Clear. See + A.17(17).” + + There are no such names. + + * “The value of Containers.Hash_Type’Modulus. The value of + Containers.Count_Type’Last. See A.18.1(7).” + + Containers.Hash_Type’Modulus is 2**32. Containers.Count_Type’Last is + 2**31 - 1. + + * “Implementation-defined convention names. See B.1(11).” + + The following convention names are supported + + Convention Name Interpretation + + --------------------------------------------------------------------------------------------------------------- + + `Ada' Ada + + + `Ada_Pass_By_Copy' Allowed for any types except by-reference types such as limited records. + Compatible with convention Ada, but causes any parameters with this convention + to be passed by copy. + + + `Ada_Pass_By_Reference' Allowed for any types except by-copy types such as scalars. Compatible with + convention Ada, but causes any parameters with this convention to be passed by + reference. + + + `Assembler' Assembly language + + + `Asm' Synonym for Assembler + + + `Assembly' Synonym for Assembler + + + `C' C + + + `C_Pass_By_Copy' Allowed only for record types, like C, but also notes that record is to be + passed by copy rather than reference. + + + `COBOL' COBOL + + + `C_Plus_Plus (or CPP)' C++ + + + `Default' Treated the same as C + + + `External' Treated the same as C + + + `Fortran' Fortran + + + `Intrinsic' For support of pragma ‘Import’ with convention Intrinsic, see separate section + on Intrinsic Subprograms. + + + `Stdcall' Stdcall (used for Windows implementations only). This convention correspond to + the WINAPI (previously called Pascal convention) C/C++ convention under Windows. + A routine with this convention cleans the stack before exit. This pragma cannot + be applied to a dispatching call. + + + `DLL' Synonym for Stdcall + + + `Win32' Synonym for Stdcall + + + `Stubbed' Stubbed is a special convention used to indicate that the body of the subprogram + will be entirely ignored. Any call to the subprogram is converted into a raise + of the ‘Program_Error’ exception. If a pragma ‘Import’ specifies convention + ‘stubbed’ then no body need be present at all. This convention is useful during + development for the inclusion of subprograms whose body has not yet been + written. In addition, all otherwise unrecognized convention names are also + treated as being synonymous with convention C. In all implementations, use of + such other names results in a warning. + + + * “The meaning of link names. See B.1(36).” + + Link names are the actual names used by the linker. + + * “The manner of choosing link names when neither the link name nor + the address of an imported or exported entity is specified. See + B.1(36).” + + The default linker name is that which would be assigned by the relevant + external language, interpreting the Ada name as being in all lower case + letters. + + * “The effect of pragma ‘Linker_Options’. See B.1(37).” + + The string passed to ‘Linker_Options’ is presented uninterpreted as an + argument to the link command, unless it contains ASCII.NUL characters. + NUL characters if they appear act as argument separators, so for example + + pragma Linker_Options ("-labc" & ASCII.NUL & "-ldef"); + + causes two separate arguments ‘-labc’ and ‘-ldef’ to be passed to the + linker. The order of linker options is preserved for a given unit. The + final list of options passed to the linker is in reverse order of the + elaboration order. For example, linker options for a body always appear + before the options from the corresponding package spec. + + * “The contents of the visible part of package ‘Interfaces’ and its + language-defined descendants. See B.2(1).” + + See files with prefix ‘i-’ in the distributed library. + + * “Implementation-defined children of package ‘Interfaces’. The + contents of the visible part of package ‘Interfaces’. See + B.2(11).” + + See files with prefix ‘i-’ in the distributed library. + + * “The definitions of certain types and constants in Interfaces.C. + See B.3(41).” + + See source file ‘i-c.ads’. + + * “The types ‘Floating’, ‘Long_Floating’, ‘Binary’, ‘Long_Binary’, + ‘Decimal_ Element’, and ‘COBOL_Character’; and the initialization + of the variables ‘Ada_To_COBOL’ and ‘COBOL_To_Ada’, in + ‘Interfaces.COBOL’. See B.4(50).” + + COBOL Ada + + ------------------------------------------------------------------- + + `Floating' Float + + + `Long_Floating' (Floating) Long_Float + + + `Binary' Integer + + + `Long_Binary' Long_Long_Integer + + + `Decimal_Element' Character + + + `COBOL_Character' Character + + + For initialization, see the file ‘i-cobol.ads’ in the distributed + library. + + * “The types Fortran_Integer, Real, Double_Precision, and + Character_Set in Interfaces.Fortran. See B.5(17).” + + See source file ‘i-fortra.ads’. These types are derived, respectively, + from Integer, Float, Long_Float, and Character. + + * “Implementation-defined intrinsic subprograms. See C.1(1).” + + See separate section on Intrinsic Subprograms. + + * “Any restrictions on a protected procedure or its containing type + when an aspect Attach_handler or Interrupt_Handler is specified. + See C.3.1(17).” + + There are no such restrictions. + + * “Any other forms of interrupt handler supported by the + Attach_Handler and Interrupt_Handler aspects. See C.3.1(19).” + + There are no such forms. + + * + “The semantics of some attributes and functions of an entity for which + + aspect Discard_Names is True. See C.5(7).” + + If Discard_Names is True for an enumeration type, the Image attribute + provides the image of the Pos of the literal, and Value accepts Pos + values. + + If both of the aspects‘‘Discard_Names‘‘ and ‘No_Tagged_Streams’ are true + for a tagged type, its Expanded_Name and External_Tag values are empty + strings. This is useful to avoid exposing entity names at binary level. + + * “The modulus and size of Test_and_Set_Flag. See C.6.3(8).” + + The modulus is 2**8. The size is 8. + + * “The value used to represent the set value for Atomic_Test_and_Set. + See C.6.3(10).” + + The value is 1. + + * “The result of the ‘Task_Identification.Image’ attribute. See + C.7.1(7).” + + The result of this attribute is a string that identifies the object or + component that denotes a given task. If a variable ‘Var’ has a task + type, the image for this task will have the form ‘Var_`XXXXXXXX'’, where + the suffix `XXXXXXXX' is the hexadecimal representation of the virtual + address of the corresponding task control block. If the variable is an + array of tasks, the image of each task will have the form of an indexed + component indicating the position of a given task in the array, e.g., + ‘Group(5)_`XXXXXXX'’. If the task is a component of a record, the image + of the task will have the form of a selected component. These rules are + fully recursive, so that the image of a task that is a subcomponent of a + composite object corresponds to the expression that designates this + task. + + If a task is created by an allocator, its image depends on the context. + If the allocator is part of an object declaration, the rules described + above are used to construct its image, and this image is not affected by + subsequent assignments. If the allocator appears within an expression, + the image includes only the name of the task type. + + If the configuration pragma Discard_Names is present, or if the + restriction No_Implicit_Heap_Allocation is in effect, the image reduces + to the numeric suffix, that is to say the hexadecimal representation of + the virtual address of the control block of the task. + + * “The value of ‘Current_Task’ when in a protected entry or interrupt + handler. See C.7.1(17).” + + Protected entries or interrupt handlers can be executed by any + convenient thread, so the value of ‘Current_Task’ is undefined. + + * “Granularity of locking for Task_Attributes. See C.7.2(16).” + + No locking is needed if the formal type Attribute has the size and + alignment of either Integer or System.Address and the bit representation + of Initial_Value is all zeroes. Otherwise, locking is performed. + + * “The declarations of ‘Any_Priority’ and ‘Priority’. See D.1(11).” + + See declarations in file ‘system.ads’. + + * “Implementation-defined execution resources. See D.1(15).” + + There are no implementation-defined execution resources. + + * “Whether, on a multiprocessor, a task that is waiting for access to + a protected object keeps its processor busy. See D.2.1(3).” + + On a multi-processor, a task that is waiting for access to a protected + object does not keep its processor busy. + + * “The affect of implementation defined execution resources on task + dispatching. See D.2.1(9).” + + Tasks map to threads in the threads package used by GNAT. Where possible + and appropriate, these threads correspond to native threads of the + underlying operating system. + + * “Implementation-defined task dispatching policies. See D.2.2(3).” + + There are no implementation-defined task dispatching policies. + + * “The value of Default_Quantum in Dispatching.Round_Robin. See + D.2.5(4).” + + The value is 10 milliseconds. + + * “Implementation-defined `policy_identifiers' allowed in a pragma + ‘Locking_Policy’. See D.3(4).” + + The two implementation defined policies permitted in GNAT are + ‘Inheritance_Locking’ and ‘Concurrent_Readers_Locking’. On targets that + support the ‘Inheritance_Locking’ policy, locking is implemented by + inheritance, i.e., the task owning the lock operates at a priority equal + to the highest priority of any task currently requesting the lock. On + targets that support the ‘Concurrent_Readers_Locking’ policy, locking is + implemented with a read/write lock allowing multiple protected object + functions to enter concurrently. + + * “Default ceiling priorities. See D.3(10).” + + The ceiling priority of protected objects of the type + ‘System.Interrupt_Priority'Last’ as described in the Ada Reference + Manual D.3(10), + + * “The ceiling of any protected object used internally by the + implementation. See D.3(16).” + + The ceiling priority of internal protected objects is + ‘System.Priority'Last’. + + * “Implementation-defined queuing policies. See D.4(1).” + + There are no implementation-defined queuing policies. + + * “Implementation-defined admission policies. See D.4.1(1).” + + There are no implementation-defined admission policies. + + * “Any operations that implicitly require heap storage allocation. + See D.7(8).” + + The only operation that implicitly requires heap storage allocation is + task creation. + + * “When restriction No_Dynamic_CPU_Assignment applies to a partition, + the processor on which a task with a CPU value of a + Not_A_Specific_CPU will execute. See D.7(10).” + + Unknown. + + * + “When restriction No_Task_Termination applies to a partition, what happens + + when a task terminates. See D.7(15.1).” + + Execution is erroneous in that case. + + * + “The behavior when restriction Max_Storage_At_Blocking is violated. + + See D.7(17).” + + Execution is erroneous in that case. + + * “The behavior when restriction Max_Asynchronous_Select_Nesting is + violated. See D.7(18).” + + Execution is erroneous in that case. + + * “The behavior when restriction Max_Tasks is violated. See + D.7(19).” + + Execution is erroneous in that case. + + * + “Whether the use of pragma Restrictions results in a reduction in program + + code or data size or execution time. See D.7(20).” + + Yes it can, but the precise circumstances and properties of + such reductions are difficult to characterize. + + * “The value of Barrier_Limit’Last in Synchronous_Barriers. See + D.10.1(4).” + + Synchronous_Barriers.Barrier_Limit’Last is Integer’Last . + + * “When an aborted task that is waiting on a Synchronous_Barrier is + aborted. See D.10.1(13).” + + Difficult to characterize. + + * + “The value of Min_Handler_Ceiling in Execution_Time.Group_Budgets. + + See D.14.2(7).” + + See source file ‘a-etgrbu.ads’. + + * “The value of CPU_Range’Last in System.Multiprocessors. See + D.16(4).” + + See source file ‘s-multip.ads’. + + * “The processor on which the environment task executes in the + absence of a value for the aspect CPU. See D.16(13).” + + Unknown. + + * “The means for creating and executing distributed programs. See + E(5).” + + The GLADE package provides a utility GNATDIST for creating and executing + distributed programs. See the GLADE reference manual for further + details. + + * “Any events that can result in a partition becoming inaccessible. + See E.1(7).” + + See the GLADE reference manual for full details on such events. + + * “The scheduling policies, treatment of priorities, and management + of shared resources between partitions in certain cases. See + E.1(11).” + + See the GLADE reference manual for full details on these aspects of + multi-partition execution. + + * “Whether the execution of the remote subprogram is immediately + aborted as a result of cancellation. See E.4(13).” + + See the GLADE reference manual for details on the effect of abort in a + distributed application. + + * “The range of type System.RPC.Partition_Id. See E.5(14).” + + System.RPC.Partion_ID’Last is Integer’Last. See source file + ‘s-rpc.ads’. + + * “Implementation-defined interfaces in the PCS. See E.5(26).” + + See the GLADE reference manual for a full description of all + implementation defined interfaces. + + * “The values of named numbers in the package ‘Decimal’. See + F.2(7).” + + Named Number Value + + ---------------------------------------- + + `Max_Scale' +18 + + + `Min_Scale' -18 + + + `Min_Delta' 1.0E-18 + + + `Max_Delta' 1.0E+18 + + + `Max_Decimal_Digits' 18 + + + * “The value of ‘Max_Picture_Length’ in the package + ‘Text_IO.Editing’. See F.3.3(16).” + + 64 + + * “The value of ‘Max_Picture_Length’ in the package + ‘Wide_Text_IO.Editing’. See F.3.4(5).” + + 64 + + * “The accuracy actually achieved by the complex elementary functions + and by other complex arithmetic operations. See G.1(1).” + + Standard library functions are used for the complex arithmetic + operations. Only fast math mode is currently supported. + + * “The sign of a zero result (or a component thereof) from any + operator or function in ‘Numerics.Generic_Complex_Types’, when + ‘Real'Signed_Zeros’ is True. See G.1.1(53).” + + The signs of zero values are as recommended by the relevant + implementation advice. + + * “The sign of a zero result (or a component thereof) from any + operator or function in + ‘Numerics.Generic_Complex_Elementary_Functions’, when + ‘Real'Signed_Zeros’ is ‘True’. See G.1.2(45).” + + The signs of zero values are as recommended by the relevant + implementation advice. + + * “Whether the strict mode or the relaxed mode is the default. See + G.2(2).” + + The strict mode is the default. There is no separate relaxed mode. + GNAT provides a highly efficient implementation of strict mode. + + * “The result interval in certain cases of fixed-to-float conversion. + See G.2.1(10).” + + For cases where the result interval is implementation dependent, the + accuracy is that provided by performing all operations in 64-bit IEEE + floating-point format. + + * “The result of a floating point arithmetic operation in overflow + situations, when the ‘Machine_Overflows’ attribute of the result + type is ‘False’. See G.2.1(13).” + + Infinite and NaN values are produced as dictated by the IEEE + floating-point standard. Note that on machines that are not fully + compliant with the IEEE floating-point standard, such as Alpha, the + `-mieee' compiler flag must be used for achieving IEEE conforming + behavior (although at the cost of a significant performance penalty), so + infinite and NaN values are properly generated. + + * “The result interval for division (or exponentiation by a negative + exponent), when the floating point hardware implements division as + multiplication by a reciprocal. See G.2.1(16).” + + Not relevant, division is IEEE exact. + + * “The definition of close result set, which determines the accuracy + of certain fixed point multiplications and divisions. See + G.2.3(5).” + + Operations in the close result set are performed using IEEE long format + floating-point arithmetic. The input operands are converted to + floating-point, the operation is done in floating-point, and the result + is converted to the target type. + + * “Conditions on a `universal_real' operand of a fixed point + multiplication or division for which the result shall be in the + perfect result set. See G.2.3(22).” + + The result is only defined to be in the perfect result set if the result + can be computed by a single scaling operation involving a scale factor + representable in 64 bits. + + * “The result of a fixed point arithmetic operation in overflow + situations, when the ‘Machine_Overflows’ attribute of the result + type is ‘False’. See G.2.3(27).” + + Not relevant, ‘Machine_Overflows’ is ‘True’ for fixed-point types. + + * “The result of an elementary function reference in overflow + situations, when the ‘Machine_Overflows’ attribute of the result + type is ‘False’. See G.2.4(4).” + + IEEE infinite and Nan values are produced as appropriate. + + * “The value of the angle threshold, within which certain elementary + functions, complex arithmetic operations, and complex elementary + functions yield results conforming to a maximum relative error + bound. See G.2.4(10).” + + Information on this subject is not yet available. + + * “The accuracy of certain elementary functions for parameters beyond + the angle threshold. See G.2.4(10).” + + Information on this subject is not yet available. + + * “The result of a complex arithmetic operation or complex elementary + function reference in overflow situations, when the + ‘Machine_Overflows’ attribute of the corresponding real type is + ‘False’. See G.2.6(5).” + + IEEE infinite and Nan values are produced as appropriate. + + * “The accuracy of certain complex arithmetic operations and certain + complex elementary functions for parameters (or components thereof) + beyond the angle threshold. See G.2.6(8).” + + Information on those subjects is not yet available. + + * + “The accuracy requirements for the subprograms Solve, Inverse, + + Determinant, Eigenvalues and Eigensystem for type Real_Matrix. + See G.3.1(81).” + + Information on those subjects is not yet available. + + * + “The accuracy requirements for the subprograms Solve, Inverse, + + Determinant, Eigenvalues and Eigensystem for type + Complex_Matrix. See G.3.2(149).” + + Information on those subjects is not yet available. + + * “The consequences of violating No_Hidden_Indirect_Globals. See + H.4(23.9).” + + Execution is erroneous in that case. + +  + File: gnat_rm.info, Node: Intrinsic Subprograms, Next: Representation Clauses and Pragmas, Prev: Implementation Defined Characteristics, Up: Top + + 8 Intrinsic Subprograms + *********************** + + GNAT allows a user application program to write the declaration: + + pragma Import (Intrinsic, name); + + providing that the name corresponds to one of the implemented intrinsic + subprograms in GNAT, and that the parameter profile of the referenced + subprogram meets the requirements. This chapter describes the set of + implemented intrinsic subprograms, and the requirements on parameter + profiles. Note that no body is supplied; as with other uses of pragma + Import, the body is supplied elsewhere (in this case by the compiler + itself). Note that any use of this feature is potentially non-portable, + since the Ada standard does not require Ada compilers to implement this + feature. + + * Menu: + + * Intrinsic Operators:: + * Compilation_ISO_Date:: + * Compilation_Date:: + * Compilation_Time:: + * Enclosing_Entity:: + * Exception_Information:: + * Exception_Message:: + * Exception_Name:: + * File:: + * Line:: + * Shifts and Rotates:: + * Source_Location:: + +  + File: gnat_rm.info, Node: Intrinsic Operators, Next: Compilation_ISO_Date, Up: Intrinsic Subprograms + + 8.1 Intrinsic Operators + ======================= + + All the predefined numeric operators in package Standard in ‘pragma + Import (Intrinsic,..)’ declarations. In the binary operator case, the + operands must have the same size. The operand or operands must also be + appropriate for the operator. For example, for addition, the operands + must both be floating-point or both be fixed-point, and the right + operand for ‘"**"’ must have a root type of ‘Standard.Integer'Base’. + You can use an intrinsic operator declaration as in the following + example: + + type Int1 is new Integer; + type Int2 is new Integer; + + function "+" (X1 : Int1; X2 : Int2) return Int1; + function "+" (X1 : Int1; X2 : Int2) return Int2; + pragma Import (Intrinsic, "+"); + + This declaration would permit ‘mixed mode’ arithmetic on items of the + differing types ‘Int1’ and ‘Int2’. It is also possible to specify such + operators for private types, if the full views are appropriate + arithmetic types. + +  + File: gnat_rm.info, Node: Compilation_ISO_Date, Next: Compilation_Date, Prev: Intrinsic Operators, Up: Intrinsic Subprograms + + 8.2 Compilation_ISO_Date + ======================== + + This intrinsic subprogram is used in the implementation of the library + package ‘GNAT.Source_Info’. The only useful use of the intrinsic import + in this case is the one in this unit, so an application program should + simply call the function ‘GNAT.Source_Info.Compilation_ISO_Date’ to + obtain the date of the current compilation (in local time format + YYYY-MM-DD). + +  + File: gnat_rm.info, Node: Compilation_Date, Next: Compilation_Time, Prev: Compilation_ISO_Date, Up: Intrinsic Subprograms + + 8.3 Compilation_Date + ==================== + + Same as Compilation_ISO_Date, except the string is in the form MMM DD + YYYY. + +  + File: gnat_rm.info, Node: Compilation_Time, Next: Enclosing_Entity, Prev: Compilation_Date, Up: Intrinsic Subprograms + + 8.4 Compilation_Time + ==================== + + This intrinsic subprogram is used in the implementation of the library + package ‘GNAT.Source_Info’. The only useful use of the intrinsic import + in this case is the one in this unit, so an application program should + simply call the function ‘GNAT.Source_Info.Compilation_Time’ to obtain + the time of the current compilation (in local time format HH:MM:SS). + +  + File: gnat_rm.info, Node: Enclosing_Entity, Next: Exception_Information, Prev: Compilation_Time, Up: Intrinsic Subprograms + + 8.5 Enclosing_Entity + ==================== + + This intrinsic subprogram is used in the implementation of the library + package ‘GNAT.Source_Info’. The only useful use of the intrinsic import + in this case is the one in this unit, so an application program should + simply call the function ‘GNAT.Source_Info.Enclosing_Entity’ to obtain + the name of the current subprogram, package, task, entry, or protected + subprogram. + +  + File: gnat_rm.info, Node: Exception_Information, Next: Exception_Message, Prev: Enclosing_Entity, Up: Intrinsic Subprograms + + 8.6 Exception_Information + ========================= + + This intrinsic subprogram is used in the implementation of the library + package ‘GNAT.Current_Exception’. The only useful use of the intrinsic + import in this case is the one in this unit, so an application program + should simply call the function + ‘GNAT.Current_Exception.Exception_Information’ to obtain the exception + information associated with the current exception. + +  + File: gnat_rm.info, Node: Exception_Message, Next: Exception_Name, Prev: Exception_Information, Up: Intrinsic Subprograms + + 8.7 Exception_Message + ===================== + + This intrinsic subprogram is used in the implementation of the library + package ‘GNAT.Current_Exception’. The only useful use of the intrinsic + import in this case is the one in this unit, so an application program + should simply call the function + ‘GNAT.Current_Exception.Exception_Message’ to obtain the message + associated with the current exception. + +  + File: gnat_rm.info, Node: Exception_Name, Next: File, Prev: Exception_Message, Up: Intrinsic Subprograms + + 8.8 Exception_Name + ================== + + This intrinsic subprogram is used in the implementation of the library + package ‘GNAT.Current_Exception’. The only useful use of the intrinsic + import in this case is the one in this unit, so an application program + should simply call the function ‘GNAT.Current_Exception.Exception_Name’ + to obtain the name of the current exception. + +  + File: gnat_rm.info, Node: File, Next: Line, Prev: Exception_Name, Up: Intrinsic Subprograms + + 8.9 File + ======== + + This intrinsic subprogram is used in the implementation of the library + package ‘GNAT.Source_Info’. The only useful use of the intrinsic import + in this case is the one in this unit, so an application program should + simply call the function ‘GNAT.Source_Info.File’ to obtain the name of + the current file. + +  + File: gnat_rm.info, Node: Line, Next: Shifts and Rotates, Prev: File, Up: Intrinsic Subprograms + + 8.10 Line + ========= + + This intrinsic subprogram is used in the implementation of the library + package ‘GNAT.Source_Info’. The only useful use of the intrinsic import + in this case is the one in this unit, so an application program should + simply call the function ‘GNAT.Source_Info.Line’ to obtain the number of + the current source line. + +  + File: gnat_rm.info, Node: Shifts and Rotates, Next: Source_Location, Prev: Line, Up: Intrinsic Subprograms + + 8.11 Shifts and Rotates + ======================= + + In standard Ada, the shift and rotate functions are available only for + the predefined modular types in package ‘Interfaces’. However, in GNAT + it is possible to define these functions for any integer type (signed or + modular), as in this example: + + function Shift_Left + (Value : T; + Amount : Natural) return T + with Import, Convention => Intrinsic; + + The function name must be one of Shift_Left, Shift_Right, + Shift_Right_Arithmetic, Rotate_Left, or Rotate_Right. T must be an + integer type. T’Size must be 8, 16, 32 or 64 bits; if T is modular, the + modulus must be 2**8, 2**16, 2**32 or 2**64. The result type must be + the same as the type of ‘Value’. The shift amount must be Natural. The + formal parameter names can be anything. + + A more convenient way of providing these shift operators is to use the + Provide_Shift_Operators pragma, which provides the function declarations + and corresponding pragma Import’s for all five shift functions. For + signed types the semantics of these operators is to interpret the + bitwise result of the corresponding operator for modular type. In + particular, shifting a negative number may change its sign bit to + positive. + +  + File: gnat_rm.info, Node: Source_Location, Prev: Shifts and Rotates, Up: Intrinsic Subprograms + + 8.12 Source_Location + ==================== + + This intrinsic subprogram is used in the implementation of the library + routine ‘GNAT.Source_Info’. The only useful use of the intrinsic import + in this case is the one in this unit, so an application program should + simply call the function ‘GNAT.Source_Info.Source_Location’ to obtain + the current source file location. + +  + File: gnat_rm.info, Node: Representation Clauses and Pragmas, Next: Standard Library Routines, Prev: Intrinsic Subprograms, Up: Top + + 9 Representation Clauses and Pragmas + ************************************ + + This section describes the representation clauses accepted by GNAT, and + their effect on the representation of corresponding data objects. + + GNAT fully implements Annex C (Systems Programming). This means that + all the implementation advice sections in chapter 13 are fully + implemented. However, these sections only require a minimal level of + support for representation clauses. GNAT provides much more extensive + capabilities, and this section describes the additional capabilities + provided. + + * Menu: + + * Alignment Clauses:: + * Size Clauses:: + * Storage_Size Clauses:: + * Size of Variant Record Objects:: + * Biased Representation:: + * Value_Size and Object_Size Clauses:: + * Component_Size Clauses:: + * Bit_Order Clauses:: + * Effect of Bit_Order on Byte Ordering:: + * Pragma Pack for Arrays:: + * Pragma Pack for Records:: + * Record Representation Clauses:: + * Handling of Records with Holes:: + * Enumeration Clauses:: + * Address Clauses:: + * Use of Address Clauses for Memory-Mapped I/O:: + * Effect of Convention on Representation:: + * Conventions and Anonymous Access Types:: + * Determining the Representations chosen by GNAT:: + +  + File: gnat_rm.info, Node: Alignment Clauses, Next: Size Clauses, Up: Representation Clauses and Pragmas + + 9.1 Alignment Clauses + ===================== + + GNAT requires that all alignment clauses specify 0 or a power of 2, and + all default alignments are always a power of 2. Specifying 0 is the + same as specifying 1. + + The default alignment values are as follows: + + * `Elementary Types'. + + For elementary types, the alignment is the minimum of the actual + size of objects of the type divided by ‘Storage_Unit’, and the + maximum alignment supported by the target. (This maximum alignment + is given by the GNAT-specific attribute + ‘Standard'Maximum_Alignment’; see *note Attribute + Maximum_Alignment: 18c.) + + For example, for type ‘Long_Float’, the object size is 8 bytes, and + the default alignment will be 8 on any target that supports + alignments this large, but on some targets, the maximum alignment + may be smaller than 8, in which case objects of type ‘Long_Float’ + will be maximally aligned. + + * `Arrays'. + + For arrays, the alignment is equal to the alignment of the + component type for the normal case where no packing or component + size is given. If the array is packed, and the packing is + effective (see separate section on packed arrays), then the + alignment will be either 4, 2, or 1 for long packed arrays or + arrays whose length is not known at compile time, depending on + whether the component size is divisible by 4, 2, or is odd. For + short packed arrays, which are handled internally as modular types, + the alignment will be as described for elementary types, e.g. a + packed array of length 31 bits will have an object size of four + bytes, and an alignment of 4. + + * `Records'. + + For the normal unpacked case, the alignment of a record is equal to + the maximum alignment of any of its components. For tagged + records, this includes the implicit access type used for the tag. + If a pragma ‘Pack’ is used and all components are packable (see + separate section on pragma ‘Pack’), then the resulting alignment is + 1, unless the layout of the record makes it profitable to increase + it. + + A special case is when: + + * the size of the record is given explicitly, or a full record + representation clause is given, and + + * the size of the record is 2, 4, or 8 bytes. + + In this case, an alignment is chosen to match the size of the + record. For example, if we have: + + type Small is record + A, B : Character; + end record; + for Small'Size use 16; + + then the default alignment of the record type ‘Small’ is 2, not 1. + This leads to more efficient code when the record is treated as a + unit, and also allows the type to specified as ‘Atomic’ on + architectures requiring strict alignment. + + An alignment clause may specify a larger alignment than the default + value up to some maximum value dependent on the target (obtainable by + using the attribute reference ‘Standard'Maximum_Alignment’). It may + also specify a smaller alignment than the default value for enumeration, + integer and fixed point types, as well as for record types, for example + + type V is record + A : Integer; + end record; + + for V'alignment use 1; + + The default alignment for the type ‘V’ is 4, as a result of the Integer + field in the record, but it is permissible, as shown, to override the + default alignment of the record with a smaller value. + + Note that according to the Ada standard, an alignment clause applies + only to the first named subtype. If additional subtypes are declared, + then the compiler is allowed to choose any alignment it likes, and there + is no way to control this choice. Consider: + + type R is range 1 .. 10_000; + for R'Alignment use 1; + subtype RS is R range 1 .. 1000; + + The alignment clause specifies an alignment of 1 for the first named + subtype ‘R’ but this does not necessarily apply to ‘RS’. When writing + portable Ada code, you should avoid writing code that explicitly or + implicitly relies on the alignment of such subtypes. + + For the GNAT compiler, if an explicit alignment clause is given, this + value is also used for any subsequent subtypes. So for GNAT, in the + above example, you can count on the alignment of ‘RS’ being 1. But this + assumption is non-portable, and other compilers may choose different + alignments for the subtype ‘RS’. + +  + File: gnat_rm.info, Node: Size Clauses, Next: Storage_Size Clauses, Prev: Alignment Clauses, Up: Representation Clauses and Pragmas + + 9.2 Size Clauses + ================ + + The default size for a type ‘T’ is obtainable through the + language-defined attribute ‘T'Size’ and also through the equivalent + GNAT-defined attribute ‘T'Value_Size’. For objects of type ‘T’, GNAT + will generally increase the type size so that the object size + (obtainable through the GNAT-defined attribute ‘T'Object_Size’) is a + multiple of ‘T'Alignment * Storage_Unit’. + + For example: + + type Smallint is range 1 .. 6; + + type Rec is record + Y1 : integer; + Y2 : boolean; + end record; + + In this example, ‘Smallint'Size’ = ‘Smallint'Value_Size’ = 3, as + specified by the RM rules, but objects of this type will have a size of + 8 (‘Smallint'Object_Size’ = 8), since objects by default occupy an + integral number of storage units. On some targets, notably older + versions of the Digital Alpha, the size of stand alone objects of this + type may be 32, reflecting the inability of the hardware to do byte + load/stores. + + Similarly, the size of type ‘Rec’ is 40 bits (‘Rec'Size’ = + ‘Rec'Value_Size’ = 40), but the alignment is 4, so objects of this type + will have their size increased to 64 bits so that it is a multiple of + the alignment (in bits). This decision is in accordance with the + specific Implementation Advice in RM 13.3(43): + + “A ‘Size’ clause should be supported for an object if the specified + ‘Size’ is at least as large as its subtype’s ‘Size’, and + corresponds to a size in storage elements that is a multiple of the + object’s ‘Alignment’ (if the ‘Alignment’ is nonzero).” + + An explicit size clause may be used to override the default size by + increasing it. For example, if we have: + + type My_Boolean is new Boolean; + for My_Boolean'Size use 32; + + then values of this type will always be 32-bit long. In the case of + discrete types, the size can be increased up to 64 bits on 32-bit + targets and 128 bits on 64-bit targets, with the effect that the entire + specified field is used to hold the value, sign- or zero-extended as + appropriate. If more than 64 bits or 128 bits resp. is specified, then + padding space is allocated after the value, and a warning is issued that + there are unused bits. + + Similarly the size of records and arrays may be increased, and the + effect is to add padding bits after the value. This also causes a + warning message to be generated. + + The largest Size value permitted in GNAT is 2**31-1. Since this is a + Size in bits, this corresponds to an object of size 256 megabytes (minus + one). This limitation is true on all targets. The reason for this + limitation is that it improves the quality of the code in many cases if + it is known that a Size value can be accommodated in an object of type + Integer. + +  + File: gnat_rm.info, Node: Storage_Size Clauses, Next: Size of Variant Record Objects, Prev: Size Clauses, Up: Representation Clauses and Pragmas + + 9.3 Storage_Size Clauses + ======================== + + For tasks, the ‘Storage_Size’ clause specifies the amount of space to be + allocated for the task stack. This cannot be extended, and if the stack + is exhausted, then ‘Storage_Error’ will be raised (if stack checking is + enabled). Use a ‘Storage_Size’ attribute definition clause, or a + ‘Storage_Size’ pragma in the task definition to set the appropriate + required size. A useful technique is to include in every task + definition a pragma of the form: + + pragma Storage_Size (Default_Stack_Size); + + Then ‘Default_Stack_Size’ can be defined in a global package, and + modified as required. Any tasks requiring stack sizes different from + the default can have an appropriate alternative reference in the pragma. + + You can also use the `-d' binder switch to modify the default stack + size. + + For access types, the ‘Storage_Size’ clause specifies the maximum space + available for allocation of objects of the type. If this space is + exceeded then ‘Storage_Error’ will be raised by an allocation attempt. + In the case where the access type is declared local to a subprogram, the + use of a ‘Storage_Size’ clause triggers automatic use of a special + predefined storage pool (‘System.Pool_Size’) that ensures that all space + for the pool is automatically reclaimed on exit from the scope in which + the type is declared. + + A special case recognized by the compiler is the specification of a + ‘Storage_Size’ of zero for an access type. This means that no items can + be allocated from the pool, and this is recognized at compile time, and + all the overhead normally associated with maintaining a fixed size + storage pool is eliminated. Consider the following example: + + procedure p is + type R is array (Natural) of Character; + type P is access all R; + for P'Storage_Size use 0; + -- Above access type intended only for interfacing purposes + + y : P; + + procedure g (m : P); + pragma Import (C, g); + + -- ... + + begin + -- ... + y := new R; + end; + + As indicated in this example, these dummy storage pools are often useful + in connection with interfacing where no object will ever be allocated. + If you compile the above example, you get the warning: + + p.adb:16:09: warning: allocation from empty storage pool + p.adb:16:09: warning: Storage_Error will be raised at run time + + Of course in practice, there will not be any explicit allocators in the + case of such an access declaration. + +  + File: gnat_rm.info, Node: Size of Variant Record Objects, Next: Biased Representation, Prev: Storage_Size Clauses, Up: Representation Clauses and Pragmas + + 9.4 Size of Variant Record Objects + ================================== + + In the case of variant record objects, there is a question whether Size + gives information about a particular variant, or the maximum size + required for any variant. Consider the following program + + with Text_IO; use Text_IO; + procedure q is + type R1 (A : Boolean := False) is record + case A is + when True => X : Character; + when False => null; + end case; + end record; + + V1 : R1 (False); + V2 : R1; + + begin + Put_Line (Integer'Image (V1'Size)); + Put_Line (Integer'Image (V2'Size)); + end q; + + Here we are dealing with a variant record, where the True variant + requires 16 bits, and the False variant requires 8 bits. In the above + example, both V1 and V2 contain the False variant, which is only 8 bits + long. However, the result of running the program is: + + 8 + 16 + + The reason for the difference here is that the discriminant value of V1 + is fixed, and will always be False. It is not possible to assign a True + variant value to V1, therefore 8 bits is sufficient. On the other hand, + in the case of V2, the initial discriminant value is False (from the + default), but it is possible to assign a True variant value to V2, + therefore 16 bits must be allocated for V2 in the general case, even + fewer bits may be needed at any particular point during the program + execution. + + As can be seen from the output of this program, the ‘'Size’ attribute + applied to such an object in GNAT gives the actual allocated size of the + variable, which is the largest size of any of the variants. The Ada + Reference Manual is not completely clear on what choice should be made + here, but the GNAT behavior seems most consistent with the language in + the RM. + + In some cases, it may be desirable to obtain the size of the current + variant, rather than the size of the largest variant. This can be + achieved in GNAT by making use of the fact that in the case of a + subprogram parameter, GNAT does indeed return the size of the current + variant (because a subprogram has no way of knowing how much space is + actually allocated for the actual). + + Consider the following modified version of the above program: + + with Text_IO; use Text_IO; + procedure q is + type R1 (A : Boolean := False) is record + case A is + when True => X : Character; + when False => null; + end case; + end record; + + V2 : R1; + + function Size (V : R1) return Integer is + begin + return V'Size; + end Size; + + begin + Put_Line (Integer'Image (V2'Size)); + Put_Line (Integer'Image (Size (V2))); + V2 := (True, 'x'); + Put_Line (Integer'Image (V2'Size)); + Put_Line (Integer'Image (Size (V2))); + end q; + + The output from this program is + + 16 + 8 + 16 + 16 + + Here we see that while the ‘'Size’ attribute always returns the maximum + size, regardless of the current variant value, the ‘Size’ function does + indeed return the size of the current variant value. + +  + File: gnat_rm.info, Node: Biased Representation, Next: Value_Size and Object_Size Clauses, Prev: Size of Variant Record Objects, Up: Representation Clauses and Pragmas + + 9.5 Biased Representation + ========================= + + In the case of scalars with a range starting at other than zero, it is + possible in some cases to specify a size smaller than the default + minimum value, and in such cases, GNAT uses an unsigned biased + representation, in which zero is used to represent the lower bound, and + successive values represent successive values of the type. + + For example, suppose we have the declaration: + + type Small is range -7 .. -4; + for Small'Size use 2; + + Although the default size of type ‘Small’ is 4, the ‘Size’ clause is + accepted by GNAT and results in the following representation scheme: + + -7 is represented as 2#00# + -6 is represented as 2#01# + -5 is represented as 2#10# + -4 is represented as 2#11# + + Biased representation is only used if the specified ‘Size’ clause cannot + be accepted in any other manner. These reduced sizes that force biased + representation can be used for all discrete types except for enumeration + types for which a representation clause is given. + +  + File: gnat_rm.info, Node: Value_Size and Object_Size Clauses, Next: Component_Size Clauses, Prev: Biased Representation, Up: Representation Clauses and Pragmas + + 9.6 Value_Size and Object_Size Clauses + ====================================== + + In Ada 95 and Ada 2005, ‘T'Size’ for a type ‘T’ is the minimum number of + bits required to hold values of type ‘T’. Although this interpretation + was allowed in Ada 83, it was not required, and this requirement in + practice can cause some significant difficulties. For example, in most + Ada 83 compilers, ‘Natural'Size’ was 32. However, in Ada 95 and Ada + 2005, ‘Natural'Size’ is typically 31. This means that code may change + in behavior when moving from Ada 83 to Ada 95 or Ada 2005. For example, + consider: + + type Rec is record; + A : Natural; + B : Natural; + end record; + + for Rec use record + at 0 range 0 .. Natural'Size - 1; + at 0 range Natural'Size .. 2 * Natural'Size - 1; + end record; + + In the above code, since the typical size of ‘Natural’ objects is 32 + bits and ‘Natural'Size’ is 31, the above code can cause unexpected + inefficient packing in Ada 95 and Ada 2005, and in general there are + cases where the fact that the object size can exceed the size of the + type causes surprises. + + To help get around this problem GNAT provides two implementation defined + attributes, ‘Value_Size’ and ‘Object_Size’. When applied to a type, + these attributes yield the size of the type (corresponding to the RM + defined size attribute), and the size of objects of the type + respectively. + + The ‘Object_Size’ is used for determining the default size of objects + and components. This size value can be referred to using the + ‘Object_Size’ attribute. The phrase ‘is used’ here means that it is the + basis of the determination of the size. The backend is free to pad this + up if necessary for efficiency, e.g., an 8-bit stand-alone character + might be stored in 32 bits on a machine with no efficient byte access + instructions such as the Alpha. + + The default rules for the value of ‘Object_Size’ for discrete types are + as follows: + + * The ‘Object_Size’ for base subtypes reflect the natural hardware + size in bits (run the compiler with `-gnatS' to find those values + for numeric types). Enumeration types and fixed-point base + subtypes have 8, 16, 32, or 64 bits for this size, depending on the + range of values to be stored. + + * The ‘Object_Size’ of a subtype is the same as the ‘Object_Size’ of + the type from which it is obtained. + + * The ‘Object_Size’ of a derived base type is copied from the parent + base type, and the ‘Object_Size’ of a derived first subtype is + copied from the parent first subtype. + + The ‘Value_Size’ attribute is the (minimum) number of bits required to + store a value of the type. This value is used to determine how tightly + to pack records or arrays with components of this type, and also affects + the semantics of unchecked conversion (unchecked conversions where the + ‘Value_Size’ values differ generate a warning, and are potentially + target dependent). + + The default rules for the value of ‘Value_Size’ are as follows: + + * The ‘Value_Size’ for a base subtype is the minimum number of bits + required to store all values of the type (including the sign bit + only if negative values are possible). + + * If a subtype statically matches the first subtype of a given type, + then it has by default the same ‘Value_Size’ as the first subtype. + This is a consequence of RM 13.1(14): “if two subtypes statically + match, then their subtype-specific aspects are the same”.) + + * All other subtypes have a ‘Value_Size’ corresponding to the minimum + number of bits required to store all values of the subtype. For + dynamic bounds, it is assumed that the value can range down or up + to the corresponding bound of the ancestor + + The RM defined attribute ‘Size’ corresponds to the ‘Value_Size’ + attribute. + + The ‘Size’ attribute may be defined for a first-named subtype. This + sets the ‘Value_Size’ of the first-named subtype to the given value, and + the ‘Object_Size’ of this first-named subtype to the given value padded + up to an appropriate boundary. It is a consequence of the default rules + above that this ‘Object_Size’ will apply to all further subtypes. On + the other hand, ‘Value_Size’ is affected only for the first subtype, any + dynamic subtypes obtained from it directly, and any statically matching + subtypes. The ‘Value_Size’ of any other static subtypes is not + affected. + + ‘Value_Size’ and ‘Object_Size’ may be explicitly set for any subtype + using an attribute definition clause. Note that the use of these + attributes can cause the RM 13.1(14) rule to be violated. If two access + types reference aliased objects whose subtypes have differing + ‘Object_Size’ values as a result of explicit attribute definition + clauses, then it is illegal to convert from one access subtype to the + other. For a more complete description of this additional legality + rule, see the description of the ‘Object_Size’ attribute. + + To get a feel for the difference, consider the following examples (note + that in each case the base is ‘Short_Short_Integer’ with a size of 8): + + Type or subtype declaration Object_Size Value_Size + + -------------------------------------------------------------------------------------- + + ‘type x1 is range 0 .. 5;’ 8 3 + + + ‘type x2 is range 0 .. 5;’ ‘for x2'size use 16 12 + 12;’ + + ‘subtype x3 is x2 range 0 .. 3;’ 16 2 + + + ‘subtype x4 is x2'base range 0 .. 10;’ 8 4 + + + ‘dynamic : x2'Base range -64 .. +63;’ + + ‘subtype x5 is x2 range 0 .. dynamic;’ 16 3* + + + ‘subtype x6 is x2'base range 0 .. dynamic;’ 8 7* + + + Note: the entries marked ‘*’ are not actually specified by the Ada + Reference Manual, which has nothing to say about size in the dynamic + case. What GNAT does is to allocate sufficient bits to accommodate any + possible dynamic values for the bounds at run-time. + + So far, so good, but GNAT has to obey the RM rules, so the question is + under what conditions must the RM ‘Size’ be used. The following is a + list of the occasions on which the RM ‘Size’ must be used: + + * Component size for packed arrays or records + + * Value of the attribute ‘Size’ for a type + + * Warning about sizes not matching for unchecked conversion + + For record types, the ‘Object_Size’ is always a multiple of the + alignment of the type (this is true for all types). In some cases the + ‘Value_Size’ can be smaller. Consider: + + type R is record + X : Integer; + Y : Character; + end record; + + On a typical 32-bit architecture, the X component will occupy four bytes + and the Y component will occupy one byte, for a total of 5 bytes. As a + result ‘R'Value_Size’ will be 40 (bits) since this is the minimum size + required to store a value of this type. For example, it is permissible + to have a component of type R in an array whose component size is + specified to be 40 bits. + + However, ‘R'Object_Size’ will be 64 (bits). The difference is due to + the alignment requirement for objects of the record type. The X + component will require four-byte alignment because that is what type + Integer requires, whereas the Y component, a Character, will only + require 1-byte alignment. Since the alignment required for X is the + greatest of all the components’ alignments, that is the alignment + required for the enclosing record type, i.e., 4 bytes or 32 bits. As + indicated above, the actual object size must be rounded up so that it is + a multiple of the alignment value. Therefore, 40 bits rounded up to the + next multiple of 32 yields 64 bits. + + For all other types, the ‘Object_Size’ and ‘Value_Size’ are the same + (and equivalent to the RM attribute ‘Size’). Only ‘Size’ may be + specified for such types. + + Note that ‘Value_Size’ can be used to force biased representation for a + particular subtype. Consider this example: + + type R is (A, B, C, D, E, F); + subtype RAB is R range A .. B; + subtype REF is R range E .. F; + + By default, ‘RAB’ has a size of 1 (sufficient to accommodate the + representation of ‘A’ and ‘B’, 0 and 1), and ‘REF’ has a size of 3 + (sufficient to accommodate the representation of ‘E’ and ‘F’, 4 and 5). + But if we add the following ‘Value_Size’ attribute definition clause: + + for REF'Value_Size use 1; + + then biased representation is forced for ‘REF’, and 0 will represent ‘E’ + and 1 will represent ‘F’. A warning is issued when a ‘Value_Size’ + attribute definition clause forces biased representation. This warning + can be turned off using ‘-gnatw.B’. + +  + File: gnat_rm.info, Node: Component_Size Clauses, Next: Bit_Order Clauses, Prev: Value_Size and Object_Size Clauses, Up: Representation Clauses and Pragmas + + 9.7 Component_Size Clauses + ========================== + + Normally, the value specified in a component size clause must be + consistent with the subtype of the array component with regard to size + and alignment. In other words, the value specified must be at least + equal to the size of this subtype, and must be a multiple of the + alignment value. + + In addition, component size clauses are allowed which cause the array to + be packed, by specifying a smaller value. A first case is for component + size values in the range 1 through 63 on 32-bit targets, and 1 through + 127 on 64-bit targets. The value specified may not be smaller than the + Size of the subtype. GNAT will accurately honor all packing requests in + this range. For example, if we have: + + type r is array (1 .. 8) of Natural; + for r'Component_Size use 31; + + then the resulting array has a length of 31 bytes (248 bits = 8 * 31). + Of course access to the components of such an array is considerably less + efficient than if the natural component size of 32 is used. A second + case is when the subtype of the component is a record type padded + because of its default alignment. For example, if we have: + + type r is record + i : Integer; + j : Integer; + b : Boolean; + end record; + + type a is array (1 .. 8) of r; + for a'Component_Size use 72; + + then the resulting array has a length of 72 bytes, instead of 96 bytes + if the alignment of the record (4) was obeyed. + + Note that there is no point in giving both a component size clause and a + pragma Pack for the same array type. if such duplicate clauses are + given, the pragma Pack will be ignored. + +  + File: gnat_rm.info, Node: Bit_Order Clauses, Next: Effect of Bit_Order on Byte Ordering, Prev: Component_Size Clauses, Up: Representation Clauses and Pragmas + + 9.8 Bit_Order Clauses + ===================== + + For record subtypes, GNAT permits the specification of the ‘Bit_Order’ + attribute. The specification may either correspond to the default bit + order for the target, in which case the specification has no effect and + places no additional restrictions, or it may be for the non-standard + setting (that is the opposite of the default). + + In the case where the non-standard value is specified, the effect is to + renumber bits within each byte, but the ordering of bytes is not + affected. There are certain restrictions placed on component clauses as + follows: + + * Components fitting within a single storage unit. + + These are unrestricted, and the effect is merely to renumber bits. + For example if we are on a little-endian machine with + ‘Low_Order_First’ being the default, then the following two + declarations have exactly the same effect: + + type R1 is record + A : Boolean; + B : Integer range 1 .. 120; + end record; + + for R1 use record + A at 0 range 0 .. 0; + B at 0 range 1 .. 7; + end record; + + type R2 is record + A : Boolean; + B : Integer range 1 .. 120; + end record; + + for R2'Bit_Order use High_Order_First; + + for R2 use record + A at 0 range 7 .. 7; + B at 0 range 0 .. 6; + end record; + + The useful application here is to write the second declaration with + the ‘Bit_Order’ attribute definition clause, and know that it will + be treated the same, regardless of whether the target is + little-endian or big-endian. + + * Components occupying an integral number of bytes. + + These are components that exactly fit in two or more bytes. Such + component declarations are allowed, but have no effect, since it is + important to realize that the ‘Bit_Order’ specification does not + affect the ordering of bytes. In particular, the following attempt + at getting an endian-independent integer does not work: + + type R2 is record + A : Integer; + end record; + + for R2'Bit_Order use High_Order_First; + + for R2 use record + A at 0 range 0 .. 31; + end record; + + This declaration will result in a little-endian integer on a + little-endian machine, and a big-endian integer on a big-endian + machine. If byte flipping is required for interoperability between + big- and little-endian machines, this must be explicitly + programmed. This capability is not provided by ‘Bit_Order’. + + * Components that are positioned across byte boundaries. + + but do not occupy an integral number of bytes. Given that bytes + are not reordered, such fields would occupy a non-contiguous + sequence of bits in memory, requiring non-trivial code to + reassemble. They are for this reason not permitted, and any + component clause specifying such a layout will be flagged as + illegal by GNAT. + + Since the misconception that Bit_Order automatically deals with all + endian-related incompatibilities is a common one, the specification of a + component field that is an integral number of bytes will always generate + a warning. This warning may be suppressed using ‘pragma Warnings (Off)’ + if desired. The following section contains additional details regarding + the issue of byte ordering. + +  + File: gnat_rm.info, Node: Effect of Bit_Order on Byte Ordering, Next: Pragma Pack for Arrays, Prev: Bit_Order Clauses, Up: Representation Clauses and Pragmas + + 9.9 Effect of Bit_Order on Byte Ordering + ======================================== + + In this section we will review the effect of the ‘Bit_Order’ attribute + definition clause on byte ordering. Briefly, it has no effect at all, + but a detailed example will be helpful. Before giving this example, let + us review the precise definition of the effect of defining ‘Bit_Order’. + The effect of a non-standard bit order is described in section 13.5.3 of + the Ada Reference Manual: + + “2 A bit ordering is a method of interpreting the meaning of the + storage place attributes.” + + To understand the precise definition of storage place attributes in this + context, we visit section 13.5.1 of the manual: + + “13 A record_representation_clause (without the mod_clause) + specifies the layout. The storage place attributes (see 13.5.2) + are taken from the values of the position, first_bit, and last_bit + expressions after normalizing those values so that first_bit is + less than Storage_Unit.” + + The critical point here is that storage places are taken from the values + after normalization, not before. So the ‘Bit_Order’ interpretation + applies to normalized values. The interpretation is described in the + later part of the 13.5.3 paragraph: + + “2 A bit ordering is a method of interpreting the meaning of the + storage place attributes. High_Order_First (known in the + vernacular as ‘big endian’) means that the first bit of a storage + element (bit 0) is the most significant bit (interpreting the + sequence of bits that represent a component as an unsigned integer + value). Low_Order_First (known in the vernacular as ‘little + endian’) means the opposite: the first bit is the least + significant.” + + Note that the numbering is with respect to the bits of a storage unit. + In other words, the specification affects only the numbering of bits + within a single storage unit. + + We can make the effect clearer by giving an example. + + Suppose that we have an external device which presents two bytes, the + first byte presented, which is the first (low addressed byte) of the two + byte record is called Master, and the second byte is called Slave. + + The left most (most significant bit is called Control for each byte, and + the remaining 7 bits are called V1, V2, … V7, where V7 is the rightmost + (least significant) bit. + + On a big-endian machine, we can write the following representation + clause + + type Data is record + Master_Control : Bit; + Master_V1 : Bit; + Master_V2 : Bit; + Master_V3 : Bit; + Master_V4 : Bit; + Master_V5 : Bit; + Master_V6 : Bit; + Master_V7 : Bit; + Slave_Control : Bit; + Slave_V1 : Bit; + Slave_V2 : Bit; + Slave_V3 : Bit; + Slave_V4 : Bit; + Slave_V5 : Bit; + Slave_V6 : Bit; + Slave_V7 : Bit; + end record; + + for Data use record + Master_Control at 0 range 0 .. 0; + Master_V1 at 0 range 1 .. 1; + Master_V2 at 0 range 2 .. 2; + Master_V3 at 0 range 3 .. 3; + Master_V4 at 0 range 4 .. 4; + Master_V5 at 0 range 5 .. 5; + Master_V6 at 0 range 6 .. 6; + Master_V7 at 0 range 7 .. 7; + Slave_Control at 1 range 0 .. 0; + Slave_V1 at 1 range 1 .. 1; + Slave_V2 at 1 range 2 .. 2; + Slave_V3 at 1 range 3 .. 3; + Slave_V4 at 1 range 4 .. 4; + Slave_V5 at 1 range 5 .. 5; + Slave_V6 at 1 range 6 .. 6; + Slave_V7 at 1 range 7 .. 7; + end record; + + Now if we move this to a little endian machine, then the bit ordering + within the byte is backwards, so we have to rewrite the record rep + clause as: + + for Data use record + Master_Control at 0 range 7 .. 7; + Master_V1 at 0 range 6 .. 6; + Master_V2 at 0 range 5 .. 5; + Master_V3 at 0 range 4 .. 4; + Master_V4 at 0 range 3 .. 3; + Master_V5 at 0 range 2 .. 2; + Master_V6 at 0 range 1 .. 1; + Master_V7 at 0 range 0 .. 0; + Slave_Control at 1 range 7 .. 7; + Slave_V1 at 1 range 6 .. 6; + Slave_V2 at 1 range 5 .. 5; + Slave_V3 at 1 range 4 .. 4; + Slave_V4 at 1 range 3 .. 3; + Slave_V5 at 1 range 2 .. 2; + Slave_V6 at 1 range 1 .. 1; + Slave_V7 at 1 range 0 .. 0; + end record; + + It is a nuisance to have to rewrite the clause, especially if the code + has to be maintained on both machines. However, this is a case that we + can handle with the ‘Bit_Order’ attribute if it is implemented. Note + that the implementation is not required on byte addressed machines, but + it is indeed implemented in GNAT. This means that we can simply use the + first record clause, together with the declaration + + for Data'Bit_Order use High_Order_First; + + and the effect is what is desired, namely the layout is exactly the + same, independent of whether the code is compiled on a big-endian or + little-endian machine. + + The important point to understand is that byte ordering is not affected. + A ‘Bit_Order’ attribute definition never affects which byte a field ends + up in, only where it ends up in that byte. To make this clear, let us + rewrite the record rep clause of the previous example as: + + for Data'Bit_Order use High_Order_First; + for Data use record + Master_Control at 0 range 0 .. 0; + Master_V1 at 0 range 1 .. 1; + Master_V2 at 0 range 2 .. 2; + Master_V3 at 0 range 3 .. 3; + Master_V4 at 0 range 4 .. 4; + Master_V5 at 0 range 5 .. 5; + Master_V6 at 0 range 6 .. 6; + Master_V7 at 0 range 7 .. 7; + Slave_Control at 0 range 8 .. 8; + Slave_V1 at 0 range 9 .. 9; + Slave_V2 at 0 range 10 .. 10; + Slave_V3 at 0 range 11 .. 11; + Slave_V4 at 0 range 12 .. 12; + Slave_V5 at 0 range 13 .. 13; + Slave_V6 at 0 range 14 .. 14; + Slave_V7 at 0 range 15 .. 15; + end record; + + This is exactly equivalent to saying (a repeat of the first example): + + for Data'Bit_Order use High_Order_First; + for Data use record + Master_Control at 0 range 0 .. 0; + Master_V1 at 0 range 1 .. 1; + Master_V2 at 0 range 2 .. 2; + Master_V3 at 0 range 3 .. 3; + Master_V4 at 0 range 4 .. 4; + Master_V5 at 0 range 5 .. 5; + Master_V6 at 0 range 6 .. 6; + Master_V7 at 0 range 7 .. 7; + Slave_Control at 1 range 0 .. 0; + Slave_V1 at 1 range 1 .. 1; + Slave_V2 at 1 range 2 .. 2; + Slave_V3 at 1 range 3 .. 3; + Slave_V4 at 1 range 4 .. 4; + Slave_V5 at 1 range 5 .. 5; + Slave_V6 at 1 range 6 .. 6; + Slave_V7 at 1 range 7 .. 7; + end record; + + Why are they equivalent? Well take a specific field, the ‘Slave_V2’ + field. The storage place attributes are obtained by normalizing the + values given so that the ‘First_Bit’ value is less than 8. After + normalizing the values (0,10,10) we get (1,2,2) which is exactly what we + specified in the other case. + + Now one might expect that the ‘Bit_Order’ attribute might affect bit + numbering within the entire record component (two bytes in this case, + thus affecting which byte fields end up in), but that is not the way + this feature is defined, it only affects numbering of bits, not which + byte they end up in. + + Consequently it never makes sense to specify a starting bit number + greater than 7 (for a byte addressable field) if an attribute definition + for ‘Bit_Order’ has been given, and indeed it may be actively confusing + to specify such a value, so the compiler generates a warning for such + usage. + + If you do need to control byte ordering then appropriate conditional + values must be used. If in our example, the slave byte came first on + some machines we might write: + + Master_Byte_First constant Boolean := ...; + + Master_Byte : constant Natural := + 1 - Boolean'Pos (Master_Byte_First); + Slave_Byte : constant Natural := + Boolean'Pos (Master_Byte_First); + + for Data'Bit_Order use High_Order_First; + for Data use record + Master_Control at Master_Byte range 0 .. 0; + Master_V1 at Master_Byte range 1 .. 1; + Master_V2 at Master_Byte range 2 .. 2; + Master_V3 at Master_Byte range 3 .. 3; + Master_V4 at Master_Byte range 4 .. 4; + Master_V5 at Master_Byte range 5 .. 5; + Master_V6 at Master_Byte range 6 .. 6; + Master_V7 at Master_Byte range 7 .. 7; + Slave_Control at Slave_Byte range 0 .. 0; + Slave_V1 at Slave_Byte range 1 .. 1; + Slave_V2 at Slave_Byte range 2 .. 2; + Slave_V3 at Slave_Byte range 3 .. 3; + Slave_V4 at Slave_Byte range 4 .. 4; + Slave_V5 at Slave_Byte range 5 .. 5; + Slave_V6 at Slave_Byte range 6 .. 6; + Slave_V7 at Slave_Byte range 7 .. 7; + end record; + + Now to switch between machines, all that is necessary is to set the + boolean constant ‘Master_Byte_First’ in an appropriate manner. + +  + File: gnat_rm.info, Node: Pragma Pack for Arrays, Next: Pragma Pack for Records, Prev: Effect of Bit_Order on Byte Ordering, Up: Representation Clauses and Pragmas + + 9.10 Pragma Pack for Arrays + =========================== + + Pragma ‘Pack’ applied to an array has an effect that depends upon + whether the component type is `packable'. For a component type to be + `packable', it must be one of the following cases: + + * Any elementary type. + + * Any small packed array type with a static size. + + * Any small simple record type with a static size. + + For all these cases, if the component subtype size is in the range 1 + through 63 on 32-bit targets, and 1 through 127 on 64-bit targets, then + the effect of the pragma ‘Pack’ is exactly as though a component size + were specified giving the component subtype size. + + All other types are non-packable, they occupy an integral number of + storage units and the only effect of pragma Pack is to remove alignment + gaps. + + For example if we have: + + type r is range 0 .. 17; + + type ar is array (1 .. 8) of r; + pragma Pack (ar); + + Then the component size of ‘ar’ will be set to 5 (i.e., to ‘r'size’, and + the size of the array ‘ar’ will be exactly 40 bits). + + Note that in some cases this rather fierce approach to packing can + produce unexpected effects. For example, in Ada 95 and Ada 2005, + subtype ‘Natural’ typically has a size of 31, meaning that if you pack + an array of ‘Natural’, you get 31-bit close packing, which saves a few + bits, but results in far less efficient access. Since many other Ada + compilers will ignore such a packing request, GNAT will generate a + warning on some uses of pragma ‘Pack’ that it guesses might not be what + is intended. You can easily remove this warning by using an explicit + ‘Component_Size’ setting instead, which never generates a warning, since + the intention of the programmer is clear in this case. + + GNAT treats packed arrays in one of two ways. If the size of the array + is known at compile time and is at most 64 bits on 32-bit targets, and + at most 128 bits on 64-bit targets, then internally the array is + represented as a single modular type, of exactly the appropriate number + of bits. If the length is greater than 64 bits on 32-bit targets, and + greater than 128 bits on 64-bit targets, or is not known at compile + time, then the packed array is represented as an array of bytes, and its + length is always a multiple of 8 bits. + + Note that to represent a packed array as a modular type, the alignment + must be suitable for the modular type involved. For example, on typical + machines a 32-bit packed array will be represented by a 32-bit modular + integer with an alignment of four bytes. If you explicitly override the + default alignment with an alignment clause that is too small, the + modular representation cannot be used. For example, consider the + following set of declarations: + + type R is range 1 .. 3; + type S is array (1 .. 31) of R; + for S'Component_Size use 2; + for S'Size use 62; + for S'Alignment use 1; + + If the alignment clause were not present, then a 62-bit modular + representation would be chosen (typically with an alignment of 4 or 8 + bytes depending on the target). But the default alignment is overridden + with the explicit alignment clause. This means that the modular + representation cannot be used, and instead the array of bytes + representation must be used, meaning that the length must be a multiple + of 8. Thus the above set of declarations will result in a diagnostic + rejecting the size clause and noting that the minimum size allowed is + 64. + + One special case that is worth noting occurs when the base type of the + component size is 8/16/32 and the subtype is one bit less. Notably this + occurs with subtype ‘Natural’. Consider: + + type Arr is array (1 .. 32) of Natural; + pragma Pack (Arr); + + In all commonly used Ada 83 compilers, this pragma Pack would be + ignored, since typically ‘Natural'Size’ is 32 in Ada 83, and in any case + most Ada 83 compilers did not attempt 31 bit packing. + + In Ada 95 and Ada 2005, ‘Natural'Size’ is required to be 31. + Furthermore, GNAT really does pack 31-bit subtype to 31 bits. This may + result in a substantial unintended performance penalty when porting + legacy Ada 83 code. To help prevent this, GNAT generates a warning in + such cases. If you really want 31 bit packing in a case like this, you + can set the component size explicitly: + + type Arr is array (1 .. 32) of Natural; + for Arr'Component_Size use 31; + + Here 31-bit packing is achieved as required, and no warning is + generated, since in this case the programmer intention is clear. + +  + File: gnat_rm.info, Node: Pragma Pack for Records, Next: Record Representation Clauses, Prev: Pragma Pack for Arrays, Up: Representation Clauses and Pragmas + + 9.11 Pragma Pack for Records + ============================ + + Pragma ‘Pack’ applied to a record will pack the components to reduce + wasted space from alignment gaps and by reducing the amount of space + taken by components. We distinguish between `packable' components and + `non-packable' components. Components of the following types are + considered packable: + + * Components of an elementary type are packable unless they are + aliased, independent or atomic. + + * Small packed arrays, where the size is statically known, are + represented internally as modular integers, and so they are also + packable. + + * Small simple records, where the size is statically known, are also + packable. + + For all these cases, if the ‘'Size’ value is in the range 1 through 64 + on 32-bit targets, and 1 through 128 on 64-bit targets, the components + occupy the exact number of bits corresponding to this value and are + packed with no padding bits, i.e. they can start on an arbitrary bit + boundary. + + All other types are non-packable, they occupy an integral number of + storage units and the only effect of pragma ‘Pack’ is to remove + alignment gaps. + + For example, consider the record + + type Rb1 is array (1 .. 13) of Boolean; + pragma Pack (Rb1); + + type Rb2 is array (1 .. 65) of Boolean; + pragma Pack (Rb2); + + type AF is new Float with Atomic; + + type X2 is record + L1 : Boolean; + L2 : Duration; + L3 : AF; + L4 : Boolean; + L5 : Rb1; + L6 : Rb2; + end record; + pragma Pack (X2); + + The representation for the record ‘X2’ is as follows on 32-bit targets: + + for X2'Size use 224; + for X2 use record + L1 at 0 range 0 .. 0; + L2 at 0 range 1 .. 64; + L3 at 12 range 0 .. 31; + L4 at 16 range 0 .. 0; + L5 at 16 range 1 .. 13; + L6 at 18 range 0 .. 71; + end record; + + Studying this example, we see that the packable fields ‘L1’ and ‘L2’ are + of length equal to their sizes, and placed at specific bit boundaries + (and not byte boundaries) to eliminate padding. But ‘L3’ is of a + non-packable float type (because it is aliased), so it is on the next + appropriate alignment boundary. + + The next two fields are fully packable, so ‘L4’ and ‘L5’ are minimally + packed with no gaps. However, type ‘Rb2’ is a packed array that is + longer than 64 bits, so it is itself non-packable on 32-bit targets. + Thus the ‘L6’ field is aligned to the next byte boundary, and takes an + integral number of bytes, i.e., 72 bits. + +  + File: gnat_rm.info, Node: Record Representation Clauses, Next: Handling of Records with Holes, Prev: Pragma Pack for Records, Up: Representation Clauses and Pragmas + + 9.12 Record Representation Clauses + ================================== + + Record representation clauses may be given for all record types, + including types obtained by record extension. Component clauses are + allowed for any static component. The restrictions on component clauses + depend on the type of the component. + + For all components of an elementary type, the only restriction on + component clauses is that the size must be at least the ‘'Size’ value of + the type (actually the Value_Size). There are no restrictions due to + alignment, and such components may freely cross storage boundaries. + + Packed arrays with a size up to and including 64 bits on 32-bit targets, + and up to and including 128 bits on 64-bit targets, are represented + internally using a modular type with the appropriate number of bits, and + thus the same lack of restriction applies. For example, if you declare: + + type R is array (1 .. 49) of Boolean; + pragma Pack (R); + for R'Size use 49; + + then a component clause for a component of type ‘R’ may start on any + specified bit boundary, and may specify a value of 49 bits or greater. + + For packed bit arrays that are longer than 64 bits on 32-bit targets, + and longer than 128 bits on 64-bit targets, there are two cases. If the + component size is a power of 2 (1,2,4,8,16,32,64 bits), including the + important case of single bits or boolean values, then there are no + limitations on placement of such components, and they may start and end + at arbitrary bit boundaries. + + If the component size is not a power of 2 (e.g., 3 or 5), then an array + of this type must always be placed on on a storage unit (byte) boundary + and occupy an integral number of storage units (bytes). Any component + clause that does not meet this requirement will be rejected. + + Any aliased component, or component of an aliased type, must have its + normal alignment and size. A component clause that does not meet this + requirement will be rejected. + + The tag field of a tagged type always occupies an address sized field at + the start of the record. No component clause may attempt to overlay + this tag. When a tagged type appears as a component, the tag field must + have proper alignment + + In the case of a record extension ‘T1’, of a type ‘T’, no component + clause applied to the type ‘T1’ can specify a storage location that + would overlap the first ‘T'Object_Size’ bits of the record. + + For all other component types, including non-bit-packed arrays, the + component can be placed at an arbitrary bit boundary, so for example, + the following is permitted: + + type R is array (1 .. 10) of Boolean; + for R'Size use 80; + + type Q is record + G, H : Boolean; + L, M : R; + end record; + + for Q use record + G at 0 range 0 .. 0; + H at 0 range 1 .. 1; + L at 0 range 2 .. 81; + R at 0 range 82 .. 161; + end record; + +  + File: gnat_rm.info, Node: Handling of Records with Holes, Next: Enumeration Clauses, Prev: Record Representation Clauses, Up: Representation Clauses and Pragmas + + 9.13 Handling of Records with Holes + =================================== + + As a result of alignment considerations, records may contain “holes” or + gaps which do not correspond to the data bits of any of the components. + Record representation clauses can also result in holes in records. + + GNAT does not attempt to clear these holes, so in record objects, they + should be considered to hold undefined rubbish. The generated equality + routine just tests components so does not access these undefined bits, + and assignment and copy operations may or may not preserve the contents + of these holes (for assignments, the holes in the target will in + practice contain either the bits that are present in the holes in the + source, or the bits that were present in the target before the + assignment). + + If it is necessary to ensure that holes in records have all zero bits, + then record objects for which this initialization is desired should be + explicitly set to all zero values using Unchecked_Conversion or address + overlays. For example + + type HRec is record + C : Character; + I : Integer; + end record; + + On typical machines, integers need to be aligned on a four-byte + boundary, resulting in three bytes of undefined rubbish following the + 8-bit field for C. To ensure that the hole in a variable of type HRec is + set to all zero bits, you could for example do: + + type Base is record + Dummy1, Dummy2 : Integer := 0; + end record; + + BaseVar : Base; + RealVar : Hrec; + for RealVar'Address use BaseVar'Address; + + Now the 8-bytes of the value of RealVar start out containing all zero + bits. A safer approach is to just define dummy fields, avoiding the + holes, as in: + + type HRec is record + C : Character; + Dummy1 : Short_Short_Integer := 0; + Dummy2 : Short_Short_Integer := 0; + Dummy3 : Short_Short_Integer := 0; + I : Integer; + end record; + + And to make absolutely sure that the intent of this is followed, you can + use representation clauses: + + for Hrec use record + C at 0 range 0 .. 7; + Dummy1 at 1 range 0 .. 7; + Dummy2 at 2 range 0 .. 7; + Dummy3 at 3 range 0 .. 7; + I at 4 range 0 .. 31; + end record; + for Hrec'Size use 64; + +  + File: gnat_rm.info, Node: Enumeration Clauses, Next: Address Clauses, Prev: Handling of Records with Holes, Up: Representation Clauses and Pragmas + + 9.14 Enumeration Clauses + ======================== + + The only restriction on enumeration clauses is that the range of values + must be representable. For the signed case, if one or more of the + representation values are negative, all values must be in the range: + + System.Min_Int .. System.Max_Int + + For the unsigned case, where all values are nonnegative, the values must + be in the range: + + 0 .. System.Max_Binary_Modulus; + + A `confirming' representation clause is one in which the values range + from 0 in sequence, i.e., a clause that confirms the default + representation for an enumeration type. Such a confirming + representation is permitted by these rules, and is specially recognized + by the compiler so that no extra overhead results from the use of such a + clause. + + If an array has an index type which is an enumeration type to which an + enumeration clause has been applied, then the array is stored in a + compact manner. Consider the declarations: + + type r is (A, B, C); + for r use (A => 1, B => 5, C => 10); + type t is array (r) of Character; + + The array type t corresponds to a vector with exactly three elements and + has a default size equal to ‘3*Character'Size’. This ensures efficient + use of space, but means that accesses to elements of the array will + incur the overhead of converting representation values to the + corresponding positional values, (i.e., the value delivered by the ‘Pos’ + attribute). + +  + File: gnat_rm.info, Node: Address Clauses, Next: Use of Address Clauses for Memory-Mapped I/O, Prev: Enumeration Clauses, Up: Representation Clauses and Pragmas + + 9.15 Address Clauses + ==================== + + The reference manual allows a general restriction on representation + clauses, as found in RM 13.1(22): + + “An implementation need not support representation items containing + nonstatic expressions, except that an implementation should support + a representation item for a given entity if each nonstatic + expression in the representation item is a name that statically + denotes a constant declared before the entity.” + + In practice this is applicable only to address clauses, since this is + the only case in which a nonstatic expression is permitted by the + syntax. As the AARM notes in sections 13.1 (22.a-22.h): + + 22.a Reason: This is to avoid the following sort of thing: + + 22.b X : Integer := F(…); Y : Address := G(…); for X’Address use Y; + + 22.c In the above, we have to evaluate the initialization + expression for X before we know where to put the result. This + seems like an unreasonable implementation burden. + + 22.d The above code should instead be written like this: + + 22.e Y : constant Address := G(…); X : Integer := F(…); for + X’Address use Y; + + 22.f This allows the expression ‘Y’ to be safely evaluated before X + is created. + + 22.g The constant could be a formal parameter of mode in. + + 22.h An implementation can support other nonstatic expressions if + it wants to. Expressions of type Address are hardly ever static, + but their value might be known at compile time anyway in many + cases. + + GNAT does indeed permit many additional cases of nonstatic expressions. + In particular, if the type involved is elementary there are no + restrictions (since in this case, holding a temporary copy of the + initialization value, if one is present, is inexpensive). In addition, + if there is no implicit or explicit initialization, then there are no + restrictions. GNAT will reject only the case where all three of these + conditions hold: + + * The type of the item is non-elementary (e.g., a record or array). + + * There is explicit or implicit initialization required for the + object. Note that access values are always implicitly initialized. + + * The address value is nonstatic. Here GNAT is more permissive than + the RM, and allows the address value to be the address of a + previously declared stand-alone variable, as long as it does not + itself have an address clause. + + Anchor : Some_Initialized_Type; + Overlay : Some_Initialized_Type; + for Overlay'Address use Anchor'Address; + + However, the prefix of the address clause cannot be an array + component, or a component of a discriminated record. + + As noted above in section 22.h, address values are typically nonstatic. + In particular the To_Address function, even if applied to a literal + value, is a nonstatic function call. To avoid this minor annoyance, + GNAT provides the implementation defined attribute ‘To_Address. The + following two expressions have identical values: + + To_Address (16#1234_0000#) + System'To_Address (16#1234_0000#); + + except that the second form is considered to be a static expression, and + thus when used as an address clause value is always permitted. + + Additionally, GNAT treats as static an address clause that is an + unchecked_conversion of a static integer value. This simplifies the + porting of legacy code, and provides a portable equivalent to the GNAT + attribute ‘To_Address’. + + Another issue with address clauses is the interaction with alignment + requirements. When an address clause is given for an object, the + address value must be consistent with the alignment of the object (which + is usually the same as the alignment of the type of the object). If an + address clause is given that specifies an inappropriately aligned + address value, then the program execution is erroneous. + + Since this source of erroneous behavior can have unfortunate effects on + machines with strict alignment requirements, GNAT checks (at compile + time if possible, generating a warning, or at execution time with a + run-time check) that the alignment is appropriate. If the run-time + check fails, then ‘Program_Error’ is raised. This run-time check is + suppressed if range checks are suppressed, or if the special GNAT check + Alignment_Check is suppressed, or if ‘pragma Restrictions + (No_Elaboration_Code)’ is in effect. It is also suppressed by default + on non-strict alignment machines (such as the x86). + + Finally, GNAT does not permit overlaying of objects of class-wide types. + In most cases, the compiler can detect an attempt at such overlays and + will generate a warning at compile time and a Program_Error exception at + run time. + + An address clause cannot be given for an exported object. More + understandably the real restriction is that objects with an address + clause cannot be exported. This is because such variables are not + defined by the Ada program, so there is no external object to export. + + It is permissible to give an address clause and a pragma Import for the + same object. In this case, the variable is not really defined by the + Ada program, so there is no external symbol to be linked. The link name + and the external name are ignored in this case. The reason that we + allow this combination is that it provides a useful idiom to avoid + unwanted initializations on objects with address clauses. + + When an address clause is given for an object that has implicit or + explicit initialization, then by default initialization takes place. + This means that the effect of the object declaration is to overwrite the + memory at the specified address. This is almost always not what the + programmer wants, so GNAT will output a warning: + + with System; + package G is + type R is record + M : Integer := 0; + end record; + + Ext : R; + for Ext'Address use System'To_Address (16#1234_1234#); + | + >>> warning: implicit initialization of "Ext" may + modify overlaid storage + >>> warning: use pragma Import for "Ext" to suppress + initialization (RM B(24)) + + end G; + + As indicated by the warning message, the solution is to use a (dummy) + pragma Import to suppress this initialization. The pragma tell the + compiler that the object is declared and initialized elsewhere. The + following package compiles without warnings (and the initialization is + suppressed): + + with System; + package G is + type R is record + M : Integer := 0; + end record; + + Ext : R; + for Ext'Address use System'To_Address (16#1234_1234#); + pragma Import (Ada, Ext); + end G; + + A final issue with address clauses involves their use for overlaying + variables, as in the following example: + + A : Integer; + B : Integer; + for B'Address use A'Address; + + or alternatively, using the form recommended by the RM: + + A : Integer; + Addr : constant Address := A'Address; + B : Integer; + for B'Address use Addr; + + In both of these cases, ‘A’ and ‘B’ become aliased to one another via + the address clause. This use of address clauses to overlay variables, + achieving an effect similar to unchecked conversion was erroneous in Ada + 83, but in Ada 95 and Ada 2005 the effect is implementation defined. + Furthermore, the Ada RM specifically recommends that in a situation like + this, ‘B’ should be subject to the following implementation advice (RM + 13.3(19)): + + “19 If the Address of an object is specified, or it is imported or + exported, then the implementation should not perform optimizations + based on assumptions of no aliases.” + + GNAT follows this recommendation, and goes further by also applying this + recommendation to the overlaid variable (‘A’ in the above example) in + this case. This means that the overlay works “as expected”, in that a + modification to one of the variables will affect the value of the other. + + More generally, GNAT interprets this recommendation conservatively for + address clauses: in the cases other than overlays, it considers that the + object is effectively subject to pragma ‘Volatile’ and implements the + associated semantics. + + Note that when address clause overlays are used in this way, there is an + issue of unintentional initialization, as shown by this example: + + package Overwrite_Record is + type R is record + A : Character := 'C'; + B : Character := 'A'; + end record; + X : Short_Integer := 3; + Y : R; + for Y'Address use X'Address; + | + >>> warning: default initialization of "Y" may + modify "X", use pragma Import for "Y" to + suppress initialization (RM B.1(24)) + + end Overwrite_Record; + + Here the default initialization of ‘Y’ will clobber the value of ‘X’, + which justifies the warning. The warning notes that this effect can be + eliminated by adding a ‘pragma Import’ which suppresses the + initialization: + + package Overwrite_Record is + type R is record + A : Character := 'C'; + B : Character := 'A'; + end record; + X : Short_Integer := 3; + Y : R; + for Y'Address use X'Address; + pragma Import (Ada, Y); + end Overwrite_Record; + + Note that the use of ‘pragma Initialize_Scalars’ may cause variables to + be initialized when they would not otherwise have been in the absence of + the use of this pragma. This may cause an overlay to have this + unintended clobbering effect. The compiler avoids this for scalar + types, but not for composite objects (where in general the effect of + ‘Initialize_Scalars’ is part of the initialization routine for the + composite object): + + pragma Initialize_Scalars; + with Ada.Text_IO; use Ada.Text_IO; + procedure Overwrite_Array is + type Arr is array (1 .. 5) of Integer; + X : Arr := (others => 1); + A : Arr; + for A'Address use X'Address; + | + >>> warning: default initialization of "A" may + modify "X", use pragma Import for "A" to + suppress initialization (RM B.1(24)) + + begin + if X /= Arr'(others => 1) then + Put_Line ("X was clobbered"); + else + Put_Line ("X was not clobbered"); + end if; + end Overwrite_Array; + + The above program generates the warning as shown, and at execution time, + prints ‘X was clobbered’. If the ‘pragma Import’ is added as suggested: + + pragma Initialize_Scalars; + with Ada.Text_IO; use Ada.Text_IO; + procedure Overwrite_Array is + type Arr is array (1 .. 5) of Integer; + X : Arr := (others => 1); + A : Arr; + for A'Address use X'Address; + pragma Import (Ada, A); + begin + if X /= Arr'(others => 1) then + Put_Line ("X was clobbered"); + else + Put_Line ("X was not clobbered"); + end if; + end Overwrite_Array; + + then the program compiles without the warning and when run will generate + the output ‘X was not clobbered’. + +  + File: gnat_rm.info, Node: Use of Address Clauses for Memory-Mapped I/O, Next: Effect of Convention on Representation, Prev: Address Clauses, Up: Representation Clauses and Pragmas + + 9.16 Use of Address Clauses for Memory-Mapped I/O + ================================================= + + A common pattern is to use an address clause to map an atomic variable + to a location in memory that corresponds to a memory-mapped I/O + operation or operations, for example: + + type Mem_Word is record + A,B,C,D : Byte; + end record; + pragma Atomic (Mem_Word); + for Mem_Word_Size use 32; + + Mem : Mem_Word; + for Mem'Address use some-address; + ... + Temp := Mem; + Temp.A := 32; + Mem := Temp; + + For a full access (reference or modification) of the variable (Mem) in + this case, as in the above examples, GNAT guarantees that the entire + atomic word will be accessed, in accordance with the RM C.6(15) clause. + + A problem arises with a component access such as: + + Mem.A := 32; + + Note that the component A is not declared as atomic. This means that it + is not clear what this assignment means. It could correspond to full + word read and write as given in the first example, or on architectures + that supported such an operation it might be a single byte store + instruction. The RM does not have anything to say in this situation, + and GNAT does not make any guarantee. The code generated may vary from + target to target. GNAT will issue a warning in such a case: + + Mem.A := 32; + | + >>> warning: access to non-atomic component of atomic array, + may cause unexpected accesses to atomic object + + It is best to be explicit in this situation, by either declaring the + components to be atomic if you want the byte store, or explicitly + writing the full word access sequence if that is what the hardware + requires. Alternatively, if the full word access sequence is required, + GNAT also provides the pragma ‘Volatile_Full_Access’ which can be used + in lieu of pragma ‘Atomic’ and will give the additional guarantee. + +  + File: gnat_rm.info, Node: Effect of Convention on Representation, Next: Conventions and Anonymous Access Types, Prev: Use of Address Clauses for Memory-Mapped I/O, Up: Representation Clauses and Pragmas + + 9.17 Effect of Convention on Representation + =========================================== + + Normally the specification of a foreign language convention for a type + or an object has no effect on the chosen representation. In particular, + the representation chosen for data in GNAT generally meets the standard + system conventions, and for example records are laid out in a manner + that is consistent with C. This means that specifying convention C (for + example) has no effect. + + There are four exceptions to this general rule: + + * `Convention Fortran and array subtypes'. + + If pragma Convention Fortran is specified for an array subtype, + then in accordance with the implementation advice in section + 3.6.2(11) of the Ada Reference Manual, the array will be stored in + a Fortran-compatible column-major manner, instead of the normal + default row-major order. + + * `Convention C and enumeration types' + + GNAT normally stores enumeration types in 8, 16, or 32 bits as + required to accommodate all values of the type. For example, for + the enumeration type declared by: + + type Color is (Red, Green, Blue); + + 8 bits is sufficient to store all values of the type, so by + default, objects of type ‘Color’ will be represented using 8 bits. + However, normal C convention is to use 32 bits for all enum values + in C, since enum values are essentially of type int. If pragma + ‘Convention C’ is specified for an Ada enumeration type, then the + size is modified as necessary (usually to 32 bits) to be consistent + with the C convention for enum values. + + Note that this treatment applies only to types. If Convention C is + given for an enumeration object, where the enumeration type is not + Convention C, then Object_Size bits are allocated. For example, + for a normal enumeration type, with less than 256 elements, only 8 + bits will be allocated for the object. Since this may be a + surprise in terms of what C expects, GNAT will issue a warning in + this situation. The warning can be suppressed by giving an + explicit size clause specifying the desired size. + + * `Convention C/Fortran and Boolean types' + + In C, the usual convention for boolean values, that is values used + for conditions, is that zero represents false, and nonzero values + represent true. In Ada, the normal convention is that two specific + values, typically 0/1, are used to represent false/true + respectively. + + Fortran has a similar convention for ‘LOGICAL’ values (any nonzero + value represents true). + + To accommodate the Fortran and C conventions, if a pragma + Convention specifies C or Fortran convention for a derived Boolean, + as in the following example: + + type C_Switch is new Boolean; + pragma Convention (C, C_Switch); + + then the GNAT generated code will treat any nonzero value as true. + For truth values generated by GNAT, the conventional value 1 will + be used for True, but when one of these values is read, any nonzero + value is treated as True. + +  + File: gnat_rm.info, Node: Conventions and Anonymous Access Types, Next: Determining the Representations chosen by GNAT, Prev: Effect of Convention on Representation, Up: Representation Clauses and Pragmas + + 9.18 Conventions and Anonymous Access Types + =========================================== + + The RM is not entirely clear on convention handling in a number of + cases, and in particular, it is not clear on the convention to be given + to anonymous access types in general, and in particular what is to be + done for the case of anonymous access-to-subprogram. + + In GNAT, we decide that if an explicit Convention is applied to an + object or component, and its type is such an anonymous type, then the + convention will apply to this anonymous type as well. This seems to + make sense since it is anomolous in any case to have a different + convention for an object and its type, and there is clearly no way to + explicitly specify a convention for an anonymous type, since it doesn’t + have a name to specify! + + Furthermore, we decide that if a convention is applied to a record type, + then this convention is inherited by any of its components that are of + an anonymous access type which do not have an explicitly specified + convention. + + The following program shows these conventions in action: + + package ConvComp is + type Foo is range 1 .. 10; + type T1 is record + A : access function (X : Foo) return Integer; + B : Integer; + end record; + pragma Convention (C, T1); + + type T2 is record + A : access function (X : Foo) return Integer; + pragma Convention (C, A); + B : Integer; + end record; + pragma Convention (COBOL, T2); + + type T3 is record + A : access function (X : Foo) return Integer; + pragma Convention (COBOL, A); + B : Integer; + end record; + pragma Convention (C, T3); + + type T4 is record + A : access function (X : Foo) return Integer; + B : Integer; + end record; + pragma Convention (COBOL, T4); + + function F (X : Foo) return Integer; + pragma Convention (C, F); + + function F (X : Foo) return Integer is (13); + + TV1 : T1 := (F'Access, 12); -- OK + TV2 : T2 := (F'Access, 13); -- OK + + TV3 : T3 := (F'Access, 13); -- ERROR + | + >>> subprogram "F" has wrong convention + >>> does not match access to subprogram declared at line 17 + 38. TV4 : T4 := (F'Access, 13); -- ERROR + | + >>> subprogram "F" has wrong convention + >>> does not match access to subprogram declared at line 24 + 39. end ConvComp; + +  + File: gnat_rm.info, Node: Determining the Representations chosen by GNAT, Prev: Conventions and Anonymous Access Types, Up: Representation Clauses and Pragmas + + 9.19 Determining the Representations chosen by GNAT + =================================================== + + Although the descriptions in this section are intended to be complete, + it is often easier to simply experiment to see what GNAT accepts and + what the effect is on the layout of types and objects. + + As required by the Ada RM, if a representation clause is not accepted, + then it must be rejected as illegal by the compiler. However, when a + representation clause or pragma is accepted, there can still be + questions of what the compiler actually does. For example, if a partial + record representation clause specifies the location of some components + and not others, then where are the non-specified components placed? Or + if pragma ‘Pack’ is used on a record, then exactly where are the + resulting fields placed? The section on pragma ‘Pack’ in this chapter + can be used to answer the second question, but it is often easier to + just see what the compiler does. + + For this purpose, GNAT provides the option `-gnatR'. If you compile with + this option, then the compiler will output information on the actual + representations chosen, in a format similar to source representation + clauses. For example, if we compile the package: + + package q is + type r (x : boolean) is tagged record + case x is + when True => S : String (1 .. 100); + when False => null; + end case; + end record; + + type r2 is new r (false) with record + y2 : integer; + end record; + + for r2 use record + y2 at 16 range 0 .. 31; + end record; + + type x is record + y : character; + end record; + + type x1 is array (1 .. 10) of x; + for x1'component_size use 11; + + type ia is access integer; + + type Rb1 is array (1 .. 13) of Boolean; + pragma Pack (rb1); + + type Rb2 is array (1 .. 65) of Boolean; + pragma Pack (rb2); + + type x2 is record + l1 : Boolean; + l2 : Duration; + l3 : Float; + l4 : Boolean; + l5 : Rb1; + l6 : Rb2; + end record; + pragma Pack (x2); + end q; + + using the switch `-gnatR' we obtain the following output: + + Representation information for unit q + ------------------------------------- + + for r'Size use ??; + for r'Alignment use 4; + for r use record + x at 4 range 0 .. 7; + _tag at 0 range 0 .. 31; + s at 5 range 0 .. 799; + end record; + + for r2'Size use 160; + for r2'Alignment use 4; + for r2 use record + x at 4 range 0 .. 7; + _tag at 0 range 0 .. 31; + _parent at 0 range 0 .. 63; + y2 at 16 range 0 .. 31; + end record; + + for x'Size use 8; + for x'Alignment use 1; + for x use record + y at 0 range 0 .. 7; + end record; + + for x1'Size use 112; + for x1'Alignment use 1; + for x1'Component_Size use 11; + + for rb1'Size use 13; + for rb1'Alignment use 2; + for rb1'Component_Size use 1; + + for rb2'Size use 72; + for rb2'Alignment use 1; + for rb2'Component_Size use 1; + + for x2'Size use 224; + for x2'Alignment use 4; + for x2 use record + l1 at 0 range 0 .. 0; + l2 at 0 range 1 .. 64; + l3 at 12 range 0 .. 31; + l4 at 16 range 0 .. 0; + l5 at 16 range 1 .. 13; + l6 at 18 range 0 .. 71; + end record; + + The Size values are actually the Object_Size, i.e., the default size + that will be allocated for objects of the type. The ‘??’ size for type + r indicates that we have a variant record, and the actual size of + objects will depend on the discriminant value. + + The Alignment values show the actual alignment chosen by the compiler + for each record or array type. + + The record representation clause for type r shows where all fields are + placed, including the compiler generated tag field (whose location + cannot be controlled by the programmer). + + The record representation clause for the type extension r2 shows all the + fields present, including the parent field, which is a copy of the + fields of the parent type of r2, i.e., r1. + + The component size and size clauses for types rb1 and rb2 show the exact + effect of pragma ‘Pack’ on these arrays, and the record representation + clause for type x2 shows how pragma ‘Pack’ affects this record type. + + In some cases, it may be useful to cut and paste the representation + clauses generated by the compiler into the original source to fix and + guarantee the actual representation to be used. + +  + File: gnat_rm.info, Node: Standard Library Routines, Next: The Implementation of Standard I/O, Prev: Representation Clauses and Pragmas, Up: Top + + 10 Standard Library Routines + **************************** + + The Ada Reference Manual contains in Annex A a full description of an + extensive set of standard library routines that can be used in any Ada + program, and which must be provided by all Ada compilers. They are + analogous to the standard C library used by C programs. + + GNAT implements all of the facilities described in annex A, and for most + purposes the description in the Ada Reference Manual, or appropriate Ada + text book, will be sufficient for making use of these facilities. + + In the case of the input-output facilities, *note The Implementation of + Standard I/O: f, gives details on exactly how GNAT interfaces to the + file system. For the remaining packages, the Ada Reference Manual + should be sufficient. The following is a list of the packages included, + together with a brief description of the functionality that is provided. + + For completeness, references are included to other predefined library + routines defined in other sections of the Ada Reference Manual (these + are cross-indexed from Annex A). For further details see the relevant + package declarations in the run-time library. In particular, a few + units are not implemented, as marked by the presence of pragma + Unimplemented_Unit, and in this case the package declaration contains + comments explaining why the unit is not implemented. + + ‘Ada’ `(A.2)' + + This is a parent package for all the standard library packages. It + is usually included implicitly in your program, and itself contains + no useful data or routines. + + ‘Ada.Assertions’ `(11.4.2)' + + ‘Assertions’ provides the ‘Assert’ subprograms, and also the + declaration of the ‘Assertion_Error’ exception. + + ‘Ada.Asynchronous_Task_Control’ `(D.11)' + + ‘Asynchronous_Task_Control’ provides low level facilities for task + synchronization. It is typically not implemented. See package + spec for details. + + ‘Ada.Calendar’ `(9.6)' + + ‘Calendar’ provides time of day access, and routines for + manipulating times and durations. + + ‘Ada.Calendar.Arithmetic’ `(9.6.1)' + + This package provides additional arithmetic operations for + ‘Calendar’. + + ‘Ada.Calendar.Formatting’ `(9.6.1)' + + This package provides formatting operations for ‘Calendar’. + + ‘Ada.Calendar.Time_Zones’ `(9.6.1)' + + This package provides additional ‘Calendar’ facilities for handling + time zones. + + ‘Ada.Characters’ `(A.3.1)' + + This is a dummy parent package that contains no useful entities + + ‘Ada.Characters.Conversions’ `(A.3.2)' + + This package provides character conversion functions. + + ‘Ada.Characters.Handling’ `(A.3.2)' + + This package provides some basic character handling capabilities, + including classification functions for classes of characters (e.g., + test for letters, or digits). + + ‘Ada.Characters.Latin_1’ `(A.3.3)' + + This package includes a complete set of definitions of the + characters that appear in type CHARACTER. It is useful for writing + programs that will run in international environments. For example, + if you want an upper case E with an acute accent in a string, it is + often better to use the definition of ‘UC_E_Acute’ in this package. + Then your program will print in an understandable manner even if + your environment does not support these extended characters. + + ‘Ada.Command_Line’ `(A.15)' + + This package provides access to the command line parameters and the + name of the current program (analogous to the use of ‘argc’ and + ‘argv’ in C), and also allows the exit status for the program to be + set in a system-independent manner. + + ‘Ada.Complex_Text_IO’ `(G.1.3)' + + This package provides text input and output of complex numbers. + + ‘Ada.Containers’ `(A.18.1)' + + A top level package providing a few basic definitions used by all + the following specific child packages that provide specific kinds + of containers. + + ‘Ada.Containers.Bounded_Priority_Queues’ `(A.18.31)' + + ‘Ada.Containers.Bounded_Synchronized_Queues’ `(A.18.29)' + + ‘Ada.Containers.Doubly_Linked_Lists’ `(A.18.3)' + + ‘Ada.Containers.Generic_Array_Sort’ `(A.18.26)' + + ‘Ada.Containers.Generic_Constrained_Array_Sort’ `(A.18.26)' + + ‘Ada.Containers.Generic_Sort’ `(A.18.26)' + + ‘Ada.Containers.Hashed_Maps’ `(A.18.5)' + + ‘Ada.Containers.Hashed_Sets’ `(A.18.8)' + + ‘Ada.Containers.Indefinite_Doubly_Linked_Lists’ `(A.18.12)' + + ‘Ada.Containers.Indefinite_Hashed_Maps’ `(A.18.13)' + + ‘Ada.Containers.Indefinite_Hashed_Sets’ `(A.18.15)' + + ‘Ada.Containers.Indefinite_Holders’ `(A.18.18)' + + ‘Ada.Containers.Indefinite_Multiway_Trees’ `(A.18.17)' + + ‘Ada.Containers.Indefinite_Ordered_Maps’ `(A.18.14)' + + ‘Ada.Containers.Indefinite_Ordered_Sets’ `(A.18.16)' + + ‘Ada.Containers.Indefinite_Vectors’ `(A.18.11)' + + ‘Ada.Containers.Multiway_Trees’ `(A.18.10)' + + ‘Ada.Containers.Ordered_Maps’ `(A.18.6)' + + ‘Ada.Containers.Ordered_Sets’ `(A.18.9)' + + ‘Ada.Containers.Synchronized_Queue_Interfaces’ `(A.18.27)' + + ‘Ada.Containers.Unbounded_Priority_Queues’ `(A.18.30)' + + ‘Ada.Containers.Unbounded_Synchronized_Queues’ `(A.18.28)' + + ‘Ada.Containers.Vectors’ `(A.18.2)' + + ‘Ada.Directories’ `(A.16)' + + This package provides operations on directories. + + ‘Ada.Directories.Hierarchical_File_Names’ `(A.16.1)' + + This package provides additional directory operations handling + hiearchical file names. + + ‘Ada.Directories.Information’ `(A.16)' + + This is an implementation defined package for additional directory + operations, which is not implemented in GNAT. + + ‘Ada.Decimal’ `(F.2)' + + This package provides constants describing the range of decimal + numbers implemented, and also a decimal divide routine (analogous + to the COBOL verb DIVIDE … GIVING … REMAINDER …) + + ‘Ada.Direct_IO’ `(A.8.4)' + + This package provides input-output using a model of a set of + records of fixed-length, containing an arbitrary definite Ada type, + indexed by an integer record number. + + ‘Ada.Dispatching’ `(D.2.1)' + + A parent package containing definitions for task dispatching + operations. + + ‘Ada.Dispatching.EDF’ `(D.2.6)' + + Not implemented in GNAT. + + ‘Ada.Dispatching.Non_Preemptive’ `(D.2.4)' + + Not implemented in GNAT. + + ‘Ada.Dispatching.Round_Robin’ `(D.2.5)' + + Not implemented in GNAT. + + ‘Ada.Dynamic_Priorities’ `(D.5)' + + This package allows the priorities of a task to be adjusted + dynamically as the task is running. + + ‘Ada.Environment_Variables’ `(A.17)' + + This package provides facilities for accessing environment + variables. + + ‘Ada.Exceptions’ `(11.4.1)' + + This package provides additional information on exceptions, and + also contains facilities for treating exceptions as data objects, + and raising exceptions with associated messages. + + ‘Ada.Execution_Time’ `(D.14)' + + This package provides CPU clock functionalities. It is not + implemented on all targets (see package spec for details). + + ‘Ada.Execution_Time.Group_Budgets’ `(D.14.2)' + + Not implemented in GNAT. + + ‘Ada.Execution_Time.Timers’ `(D.14.1)’' + + Not implemented in GNAT. + + ‘Ada.Finalization’ `(7.6)' + + This package contains the declarations and subprograms to support + the use of controlled types, providing for automatic initialization + and finalization (analogous to the constructors and destructors of + C++). + + ‘Ada.Float_Text_IO’ `(A.10.9)' + + A library level instantiation of Text_IO.Float_IO for type Float. + + ‘Ada.Float_Wide_Text_IO’ `(A.10.9)' + + A library level instantiation of Wide_Text_IO.Float_IO for type + Float. + + ‘Ada.Float_Wide_Wide_Text_IO’ `(A.10.9)' + + A library level instantiation of Wide_Wide_Text_IO.Float_IO for + type Float. + + ‘Ada.Integer_Text_IO’ `(A.10.9)' + + A library level instantiation of Text_IO.Integer_IO for type + Integer. + + ‘Ada.Integer_Wide_Text_IO’ `(A.10.9)' + + A library level instantiation of Wide_Text_IO.Integer_IO for type + Integer. + + ‘Ada.Integer_Wide_Wide_Text_IO’ `(A.10.9)' + + A library level instantiation of Wide_Wide_Text_IO.Integer_IO for + type Integer. + + ‘Ada.Interrupts’ `(C.3.2)' + + This package provides facilities for interfacing to interrupts, + which includes the set of signals or conditions that can be raised + and recognized as interrupts. + + ‘Ada.Interrupts.Names’ `(C.3.2)' + + This package provides the set of interrupt names (actually signal + or condition names) that can be handled by GNAT. + + ‘Ada.IO_Exceptions’ `(A.13)' + + This package defines the set of exceptions that can be raised by + use of the standard IO packages. + + ‘Ada.Iterator_Interfaces’ `(5.5.1)' + + This package provides a generic interface to generalized iterators. + + ‘Ada.Locales’ `(A.19)' + + This package provides declarations providing information (Language + and Country) about the current locale. + + ‘Ada.Numerics’ + + This package contains some standard constants and exceptions used + throughout the numerics packages. Note that the constants pi and e + are defined here, and it is better to use these definitions than + rolling your own. + + ‘Ada.Numerics.Complex_Arrays’ `(G.3.2)' + + Provides operations on arrays of complex numbers. + + ‘Ada.Numerics.Complex_Elementary_Functions’ + + Provides the implementation of standard elementary functions (such + as log and trigonometric functions) operating on complex numbers + using the standard ‘Float’ and the ‘Complex’ and ‘Imaginary’ types + created by the package ‘Numerics.Complex_Types’. + + ‘Ada.Numerics.Complex_Types’ + + This is a predefined instantiation of + ‘Numerics.Generic_Complex_Types’ using ‘Standard.Float’ to build + the type ‘Complex’ and ‘Imaginary’. + + ‘Ada.Numerics.Discrete_Random’ + + This generic package provides a random number generator suitable + for generating uniformly distributed values of a specified discrete + subtype. + + ‘Ada.Numerics.Float_Random’ + + This package provides a random number generator suitable for + generating uniformly distributed floating point values in the unit + interval. + + ‘Ada.Numerics.Generic_Complex_Elementary_Functions’ + + This is a generic version of the package that provides the + implementation of standard elementary functions (such as log and + trigonometric functions) for an arbitrary complex type. + + The following predefined instantiations of this package are + provided: + + * ‘Short_Float’ + + ‘Ada.Numerics.Short_Complex_Elementary_Functions’ + + * ‘Float’ + + ‘Ada.Numerics.Complex_Elementary_Functions’ + + * ‘Long_Float’ + + ‘Ada.Numerics.Long_Complex_Elementary_Functions’ + + ‘Ada.Numerics.Generic_Complex_Types’ + + This is a generic package that allows the creation of complex + types, with associated complex arithmetic operations. + + The following predefined instantiations of this package exist + + * ‘Short_Float’ + + ‘Ada.Numerics.Short_Complex_Complex_Types’ + + * ‘Float’ + + ‘Ada.Numerics.Complex_Complex_Types’ + + * ‘Long_Float’ + + ‘Ada.Numerics.Long_Complex_Complex_Types’ + + ‘Ada.Numerics.Generic_Elementary_Functions’ + + This is a generic package that provides the implementation of + standard elementary functions (such as log an trigonometric + functions) for an arbitrary float type. + + The following predefined instantiations of this package exist + + * ‘Short_Float’ + + ‘Ada.Numerics.Short_Elementary_Functions’ + + * ‘Float’ + + ‘Ada.Numerics.Elementary_Functions’ + + * ‘Long_Float’ + + ‘Ada.Numerics.Long_Elementary_Functions’ + + ‘Ada.Numerics.Generic_Real_Arrays’ `(G.3.1)' + + Generic operations on arrays of reals + + ‘Ada.Numerics.Real_Arrays’ `(G.3.1)' + + Preinstantiation of Ada.Numerics.Generic_Real_Arrays (Float). + + ‘Ada.Real_Time’ `(D.8)' + + This package provides facilities similar to those of ‘Calendar’, + but operating with a finer clock suitable for real time control. + Note that annex D requires that there be no backward clock jumps, + and GNAT generally guarantees this behavior, but of course if the + external clock on which the GNAT runtime depends is deliberately + reset by some external event, then such a backward jump may occur. + + ‘Ada.Real_Time.Timing_Events’ `(D.15)' + + Not implemented in GNAT. + + ‘Ada.Sequential_IO’ `(A.8.1)' + + This package provides input-output facilities for sequential files, + which can contain a sequence of values of a single type, which can + be any Ada type, including indefinite (unconstrained) types. + + ‘Ada.Storage_IO’ `(A.9)' + + This package provides a facility for mapping arbitrary Ada types to + and from a storage buffer. It is primarily intended for the + creation of new IO packages. + + ‘Ada.Streams’ `(13.13.1)' + + This is a generic package that provides the basic support for the + concept of streams as used by the stream attributes (‘Input’, + ‘Output’, ‘Read’ and ‘Write’). + + ‘Ada.Streams.Stream_IO’ `(A.12.1)' + + This package is a specialization of the type ‘Streams’ defined in + package ‘Streams’ together with a set of operations providing + Stream_IO capability. The Stream_IO model permits both random and + sequential access to a file which can contain an arbitrary set of + values of one or more Ada types. + + ‘Ada.Strings’ `(A.4.1)' + + This package provides some basic constants used by the string + handling packages. + + ‘Ada.Strings.Bounded’ `(A.4.4)' + + This package provides facilities for handling variable length + strings. The bounded model requires a maximum length. It is thus + somewhat more limited than the unbounded model, but avoids the use + of dynamic allocation or finalization. + + ‘Ada.Strings.Bounded.Equal_Case_Insensitive’ `(A.4.10)' + + Provides case-insensitive comparisons of bounded strings + + ‘Ada.Strings.Bounded.Hash’ `(A.4.9)' + + This package provides a generic hash function for bounded strings + + ‘Ada.Strings.Bounded.Hash_Case_Insensitive’ `(A.4.9)' + + This package provides a generic hash function for bounded strings + that converts the string to be hashed to lower case. + + ‘Ada.Strings.Bounded.Less_Case_Insensitive’ `(A.4.10)' + + This package provides a comparison function for bounded strings + that works in a case insensitive manner by converting to lower case + before the comparison. + + ‘Ada.Strings.Fixed’ `(A.4.3)' + + This package provides facilities for handling fixed length strings. + + ‘Ada.Strings.Fixed.Equal_Case_Insensitive’ `(A.4.10)' + + This package provides an equality function for fixed strings that + compares the strings after converting both to lower case. + + ‘Ada.Strings.Fixed.Hash_Case_Insensitive’ `(A.4.9)' + + This package provides a case insensitive hash function for fixed + strings that converts the string to lower case before computing the + hash. + + ‘Ada.Strings.Fixed.Less_Case_Insensitive’ `(A.4.10)' + + This package provides a comparison function for fixed strings that + works in a case insensitive manner by converting to lower case + before the comparison. + + ‘Ada.Strings.Hash’ `(A.4.9)' + + This package provides a hash function for strings. + + ‘Ada.Strings.Hash_Case_Insensitive’ `(A.4.9)' + + This package provides a hash function for strings that is case + insensitive. The string is converted to lower case before + computing the hash. + + ‘Ada.Strings.Less_Case_Insensitive’ `(A.4.10)' + + This package provides a comparison function for\strings that works + in a case insensitive manner by converting to lower case before the + comparison. + + ‘Ada.Strings.Maps’ `(A.4.2)' + + This package provides facilities for handling character mappings + and arbitrarily defined subsets of characters. For instance it is + useful in defining specialized translation tables. + + ‘Ada.Strings.Maps.Constants’ `(A.4.6)' + + This package provides a standard set of predefined mappings and + predefined character sets. For example, the standard upper to + lower case conversion table is found in this package. Note that + upper to lower case conversion is non-trivial if you want to take + the entire set of characters, including extended characters like E + with an acute accent, into account. You should use the mappings in + this package (rather than adding 32 yourself) to do case mappings. + + ‘Ada.Strings.Unbounded’ `(A.4.5)' + + This package provides facilities for handling variable length + strings. The unbounded model allows arbitrary length strings, but + requires the use of dynamic allocation and finalization. + + ‘Ada.Strings.Unbounded.Equal_Case_Insensitive’ `(A.4.10)' + + Provides case-insensitive comparisons of unbounded strings + + ‘Ada.Strings.Unbounded.Hash’ `(A.4.9)' + + This package provides a generic hash function for unbounded strings + + ‘Ada.Strings.Unbounded.Hash_Case_Insensitive’ `(A.4.9)' + + This package provides a generic hash function for unbounded strings + that converts the string to be hashed to lower case. + + ‘Ada.Strings.Unbounded.Less_Case_Insensitive’ `(A.4.10)' + + This package provides a comparison function for unbounded strings + that works in a case insensitive manner by converting to lower case + before the comparison. + + ‘Ada.Strings.UTF_Encoding’ `(A.4.11)' + + This package provides basic definitions for dealing with + UTF-encoded strings. + + ‘Ada.Strings.UTF_Encoding.Conversions’ `(A.4.11)' + + This package provides conversion functions for UTF-encoded strings. + + ‘Ada.Strings.UTF_Encoding.Strings’ `(A.4.11)' + + ‘Ada.Strings.UTF_Encoding.Wide_Strings’ `(A.4.11)' + + ‘Ada.Strings.UTF_Encoding.Wide_Wide_Strings’ `(A.4.11)' + + These packages provide facilities for handling UTF encodings for + Strings, Wide_Strings and Wide_Wide_Strings. + + ‘Ada.Strings.Wide_Bounded’ `(A.4.7)' + + ‘Ada.Strings.Wide_Fixed’ `(A.4.7)' + + ‘Ada.Strings.Wide_Maps’ `(A.4.7)' + + ‘Ada.Strings.Wide_Unbounded’ `(A.4.7)' + + These packages provide analogous capabilities to the corresponding + packages without ‘Wide_’ in the name, but operate with the types + ‘Wide_String’ and ‘Wide_Character’ instead of ‘String’ and + ‘Character’. Versions of all the child packages are available. + + ‘Ada.Strings.Wide_Wide_Bounded’ `(A.4.7)' + + ‘Ada.Strings.Wide_Wide_Fixed’ `(A.4.7)' + + ‘Ada.Strings.Wide_Wide_Maps’ `(A.4.7)' + + ‘Ada.Strings.Wide_Wide_Unbounded’ `(A.4.7)' + + These packages provide analogous capabilities to the corresponding + packages without ‘Wide_’ in the name, but operate with the types + ‘Wide_Wide_String’ and ‘Wide_Wide_Character’ instead of ‘String’ + and ‘Character’. + + ‘Ada.Synchronous_Barriers’ `(D.10.1)' + + This package provides facilities for synchronizing tasks at a low + level with barriers. + + ‘Ada.Synchronous_Task_Control’ `(D.10)' + + This package provides some standard facilities for controlling task + communication in a synchronous manner. + + ‘Ada.Synchronous_Task_Control.EDF’ `(D.10)' + + Not implemented in GNAT. + + ‘Ada.Tags’ + + This package contains definitions for manipulation of the tags of + tagged values. + + ‘Ada.Tags.Generic_Dispatching_Constructor’ `(3.9)' + + This package provides a way of constructing tagged class-wide + values given only the tag value. + + ‘Ada.Task_Attributes’ `(C.7.2)' + + This package provides the capability of associating arbitrary + task-specific data with separate tasks. + + ‘Ada.Task_Identifification’ `(C.7.1)' + + This package provides capabilities for task identification. + + ‘Ada.Task_Termination’ `(C.7.3)' + + This package provides control over task termination. + + ‘Ada.Text_IO’ + + This package provides basic text input-output capabilities for + character, string and numeric data. The subpackages of this + package are listed next. Note that although these are defined as + subpackages in the RM, they are actually transparently implemented + as child packages in GNAT, meaning that they are only loaded if + needed. + + ‘Ada.Text_IO.Decimal_IO’ + + Provides input-output facilities for decimal fixed-point types + + ‘Ada.Text_IO.Enumeration_IO’ + + Provides input-output facilities for enumeration types. + + ‘Ada.Text_IO.Fixed_IO’ + + Provides input-output facilities for ordinary fixed-point types. + + ‘Ada.Text_IO.Float_IO’ + + Provides input-output facilities for float types. The following + predefined instantiations of this generic package are available: + + * ‘Short_Float’ + + ‘Short_Float_Text_IO’ + + * ‘Float’ + + ‘Float_Text_IO’ + + * ‘Long_Float’ + + ‘Long_Float_Text_IO’ + + ‘Ada.Text_IO.Integer_IO’ + + Provides input-output facilities for integer types. The following + predefined instantiations of this generic package are available: + + * ‘Short_Short_Integer’ + + ‘Ada.Short_Short_Integer_Text_IO’ + + * ‘Short_Integer’ + + ‘Ada.Short_Integer_Text_IO’ + + * ‘Integer’ + + ‘Ada.Integer_Text_IO’ + + * ‘Long_Integer’ + + ‘Ada.Long_Integer_Text_IO’ + + * ‘Long_Long_Integer’ + + ‘Ada.Long_Long_Integer_Text_IO’ + + ‘Ada.Text_IO.Modular_IO’ + + Provides input-output facilities for modular (unsigned) types. + + ‘Ada.Text_IO.Bounded_IO (A.10.11)’ + + Provides input-output facilities for bounded strings. + + ‘Ada.Text_IO.Complex_IO (G.1.3)’ + + This package provides basic text input-output capabilities for + complex data. + + ‘Ada.Text_IO.Editing (F.3.3)’ + + This package contains routines for edited output, analogous to the + use of pictures in COBOL. The picture formats used by this package + are a close copy of the facility in COBOL. + + ‘Ada.Text_IO.Text_Streams (A.12.2)’ + + This package provides a facility that allows Text_IO files to be + treated as streams, so that the stream attributes can be used for + writing arbitrary data, including binary data, to Text_IO files. + + ‘Ada.Text_IO.Unbounded_IO (A.10.12)’ + + This package provides input-output facilities for unbounded + strings. + + ‘Ada.Unchecked_Conversion (13.9)’ + + This generic package allows arbitrary conversion from one type to + another of the same size, providing for breaking the type safety in + special circumstances. + + If the types have the same Size (more accurately the same + Value_Size), then the effect is simply to transfer the bits from + the source to the target type without any modification. This usage + is well defined, and for simple types whose representation is + typically the same across all implementations, gives a portable + method of performing such conversions. + + If the types do not have the same size, then the result is + implementation defined, and thus may be non-portable. The + following describes how GNAT handles such unchecked conversion + cases. + + If the types are of different sizes, and are both discrete types, + then the effect is of a normal type conversion without any + constraint checking. In particular if the result type has a larger + size, the result will be zero or sign extended. If the result type + has a smaller size, the result will be truncated by ignoring high + order bits. + + If the types are of different sizes, and are not both discrete + types, then the conversion works as though pointers were created to + the source and target, and the pointer value is converted. The + effect is that bits are copied from successive low order storage + units and bits of the source up to the length of the target type. + + A warning is issued if the lengths differ, since the effect in this + case is implementation dependent, and the above behavior may not + match that of some other compiler. + + A pointer to one type may be converted to a pointer to another type + using unchecked conversion. The only case in which the effect is + undefined is when one or both pointers are pointers to + unconstrained array types. In this case, the bounds information + may get incorrectly transferred, and in particular, GNAT uses + double size pointers for such types, and it is meaningless to + convert between such pointer types. GNAT will issue a warning if + the alignment of the target designated type is more strict than the + alignment of the source designated type (since the result may be + unaligned in this case). + + A pointer other than a pointer to an unconstrained array type may + be converted to and from System.Address. Such usage is common in + Ada 83 programs, but note that Ada.Address_To_Access_Conversions is + the preferred method of performing such conversions in Ada 95 and + Ada 2005. Neither unchecked conversion nor + Ada.Address_To_Access_Conversions should be used in conjunction + with pointers to unconstrained objects, since the bounds + information cannot be handled correctly in this case. + + ‘Ada.Unchecked_Deallocation’ `(13.11.2)' + + This generic package allows explicit freeing of storage previously + allocated by use of an allocator. + + ‘Ada.Wide_Text_IO’ `(A.11)' + + This package is similar to ‘Ada.Text_IO’, except that the external + file supports wide character representations, and the internal + types are ‘Wide_Character’ and ‘Wide_String’ instead of ‘Character’ + and ‘String’. The corresponding set of nested packages and child + packages are defined. + + ‘Ada.Wide_Wide_Text_IO’ `(A.11)' + + This package is similar to ‘Ada.Text_IO’, except that the external + file supports wide character representations, and the internal + types are ‘Wide_Character’ and ‘Wide_String’ instead of ‘Character’ + and ‘String’. The corresponding set of nested packages and child + packages are defined. + + For packages in Interfaces and System, all the RM defined packages are + available in GNAT, see the Ada 2012 RM for full details. + +  + File: gnat_rm.info, Node: The Implementation of Standard I/O, Next: The GNAT Library, Prev: Standard Library Routines, Up: Top + + 11 The Implementation of Standard I/O + ************************************* + + GNAT implements all the required input-output facilities described in + A.6 through A.14. These sections of the Ada Reference Manual describe + the required behavior of these packages from the Ada point of view, and + if you are writing a portable Ada program that does not need to know the + exact manner in which Ada maps to the outside world when it comes to + reading or writing external files, then you do not need to read this + chapter. As long as your files are all regular files (not pipes or + devices), and as long as you write and read the files only from Ada, the + description in the Ada Reference Manual is sufficient. + + However, if you want to do input-output to pipes or other devices, such + as the keyboard or screen, or if the files you are dealing with are + either generated by some other language, or to be read by some other + language, then you need to know more about the details of how the GNAT + implementation of these input-output facilities behaves. + + In this chapter we give a detailed description of exactly how GNAT + interfaces to the file system. As always, the sources of the system are + available to you for answering questions at an even more detailed level, + but for most purposes the information in this chapter will suffice. + + Another reason that you may need to know more about how input-output is + implemented arises when you have a program written in mixed languages + where, for example, files are shared between the C and Ada sections of + the same program. GNAT provides some additional facilities, in the form + of additional child library packages, that facilitate this sharing, and + these additional facilities are also described in this chapter. + + * Menu: + + * Standard I/O Packages:: + * FORM Strings:: + * Direct_IO:: + * Sequential_IO:: + * Text_IO:: + * Wide_Text_IO:: + * Wide_Wide_Text_IO:: + * Stream_IO:: + * Text Translation:: + * Shared Files:: + * Filenames encoding:: + * File content encoding:: + * Open Modes:: + * Operations on C Streams:: + * Interfacing to C Streams:: + +  + File: gnat_rm.info, Node: Standard I/O Packages, Next: FORM Strings, Up: The Implementation of Standard I/O + + 11.1 Standard I/O Packages + ========================== + + The Standard I/O packages described in Annex A for + + * Ada.Text_IO + + * Ada.Text_IO.Complex_IO + + * Ada.Text_IO.Text_Streams + + * Ada.Wide_Text_IO + + * Ada.Wide_Text_IO.Complex_IO + + * Ada.Wide_Text_IO.Text_Streams + + * Ada.Wide_Wide_Text_IO + + * Ada.Wide_Wide_Text_IO.Complex_IO + + * Ada.Wide_Wide_Text_IO.Text_Streams + + * Ada.Stream_IO + + * Ada.Sequential_IO + + * Ada.Direct_IO + + are implemented using the C library streams facility; where + + * All files are opened using ‘fopen’. + + * All input/output operations use ‘fread’/‘fwrite’. + + There is no internal buffering of any kind at the Ada library level. + The only buffering is that provided at the system level in the + implementation of the library routines that support streams. This + facilitates shared use of these streams by mixed language programs. + Note though that system level buffering is explicitly enabled at + elaboration of the standard I/O packages and that can have an impact on + mixed language programs, in particular those using I/O before calling + the Ada elaboration routine (e.g., adainit). It is recommended to call + the Ada elaboration routine before performing any I/O or when + impractical, flush the common I/O streams and in particular + Standard_Output before elaborating the Ada code. + +  + File: gnat_rm.info, Node: FORM Strings, Next: Direct_IO, Prev: Standard I/O Packages, Up: The Implementation of Standard I/O + + 11.2 FORM Strings + ================= + + The format of a FORM string in GNAT is: + + "keyword=value,keyword=value,...,keyword=value" + + where letters may be in upper or lower case, and there are no spaces + between values. The order of the entries is not important. Currently + the following keywords defined. + + TEXT_TRANSLATION=[YES|NO|TEXT|BINARY|U8TEXT|WTEXT|U16TEXT] + SHARED=[YES|NO] + WCEM=[n|h|u|s|e|8|b] + ENCODING=[UTF8|8BITS] + + The use of these parameters is described later in this section. If an + unrecognized keyword appears in a form string, it is silently ignored + and not considered invalid. + +  + File: gnat_rm.info, Node: Direct_IO, Next: Sequential_IO, Prev: FORM Strings, Up: The Implementation of Standard I/O + + 11.3 Direct_IO + ============== + + Direct_IO can only be instantiated for definite types. This is a + restriction of the Ada language, which means that the records are fixed + length (the length being determined by ‘type'Size’, rounded up to the + next storage unit boundary if necessary). + + The records of a Direct_IO file are simply written to the file in index + sequence, with the first record starting at offset zero, and subsequent + records following. There is no control information of any kind. For + example, if 32-bit integers are being written, each record takes + 4-bytes, so the record at index ‘K’ starts at offset (‘K’-1)*4. + + There is no limit on the size of Direct_IO files, they are expanded as + necessary to accommodate whatever records are written to the file. + +  + File: gnat_rm.info, Node: Sequential_IO, Next: Text_IO, Prev: Direct_IO, Up: The Implementation of Standard I/O + + 11.4 Sequential_IO + ================== + + Sequential_IO may be instantiated with either a definite (constrained) + or indefinite (unconstrained) type. + + For the definite type case, the elements written to the file are simply + the memory images of the data values with no control information of any + kind. The resulting file should be read using the same type, no + validity checking is performed on input. + + For the indefinite type case, the elements written consist of two parts. + First is the size of the data item, written as the memory image of a + ‘Interfaces.C.size_t’ value, followed by the memory image of the data + value. The resulting file can only be read using the same + (unconstrained) type. Normal assignment checks are performed on these + read operations, and if these checks fail, ‘Data_Error’ is raised. In + particular, in the array case, the lengths must match, and in the + variant record case, if the variable for a particular read operation is + constrained, the discriminants must match. + + Note that it is not possible to use Sequential_IO to write variable + length array items, and then read the data back into different length + arrays. For example, the following will raise ‘Data_Error’: + + package IO is new Sequential_IO (String); + F : IO.File_Type; + S : String (1..4); + ... + IO.Create (F) + IO.Write (F, "hello!") + IO.Reset (F, Mode=>In_File); + IO.Read (F, S); + Put_Line (S); + + On some Ada implementations, this will print ‘hell’, but the program is + clearly incorrect, since there is only one element in the file, and that + element is the string ‘hello!’. + + In Ada 95 and Ada 2005, this kind of behavior can be legitimately + achieved using Stream_IO, and this is the preferred mechanism. In + particular, the above program fragment rewritten to use Stream_IO will + work correctly. + +  + File: gnat_rm.info, Node: Text_IO, Next: Wide_Text_IO, Prev: Sequential_IO, Up: The Implementation of Standard I/O + + 11.5 Text_IO + ============ + + Text_IO files consist of a stream of characters containing the following + special control characters: + + LF (line feed, 16#0A#) Line Mark + FF (form feed, 16#0C#) Page Mark + + A canonical Text_IO file is defined as one in which the following + conditions are met: + + * The character ‘LF’ is used only as a line mark, i.e., to mark the + end of the line. + + * The character ‘FF’ is used only as a page mark, i.e., to mark the + end of a page and consequently can appear only immediately + following a ‘LF’ (line mark) character. + + * The file ends with either ‘LF’ (line mark) or ‘LF’-‘FF’ (line mark, + page mark). In the former case, the page mark is implicitly + assumed to be present. + + A file written using Text_IO will be in canonical form provided that no + explicit ‘LF’ or ‘FF’ characters are written using ‘Put’ or ‘Put_Line’. + There will be no ‘FF’ character at the end of the file unless an + explicit ‘New_Page’ operation was performed before closing the file. + + A canonical Text_IO file that is a regular file (i.e., not a device or a + pipe) can be read using any of the routines in Text_IO. The semantics in + this case will be exactly as defined in the Ada Reference Manual, and + all the routines in Text_IO are fully implemented. + + A text file that does not meet the requirements for a canonical Text_IO + file has one of the following: + + * The file contains ‘FF’ characters not immediately following a ‘LF’ + character. + + * The file contains ‘LF’ or ‘FF’ characters written by ‘Put’ or + ‘Put_Line’, which are not logically considered to be line marks or + page marks. + + * The file ends in a character other than ‘LF’ or ‘FF’, i.e., there + is no explicit line mark or page mark at the end of the file. + + Text_IO can be used to read such non-standard text files but subprograms + to do with line or page numbers do not have defined meanings. In + particular, a ‘FF’ character that does not follow a ‘LF’ character may + or may not be treated as a page mark from the point of view of page and + line numbering. Every ‘LF’ character is considered to end a line, and + there is an implied ‘LF’ character at the end of the file. + + * Menu: + + * Stream Pointer Positioning:: + * Reading and Writing Non-Regular Files:: + * Get_Immediate:: + * Treating Text_IO Files as Streams:: + * Text_IO Extensions:: + * Text_IO Facilities for Unbounded Strings:: + +  + File: gnat_rm.info, Node: Stream Pointer Positioning, Next: Reading and Writing Non-Regular Files, Up: Text_IO + + 11.5.1 Stream Pointer Positioning + --------------------------------- + + ‘Ada.Text_IO’ has a definition of current position for a file that is + being read. No internal buffering occurs in Text_IO, and usually the + physical position in the stream used to implement the file corresponds + to this logical position defined by Text_IO. There are two exceptions: + + * After a call to ‘End_Of_Page’ that returns ‘True’, the stream is + positioned past the ‘LF’ (line mark) that precedes the page mark. + Text_IO maintains an internal flag so that subsequent read + operations properly handle the logical position which is unchanged + by the ‘End_Of_Page’ call. + + * After a call to ‘End_Of_File’ that returns ‘True’, if the Text_IO + file was positioned before the line mark at the end of file before + the call, then the logical position is unchanged, but the stream is + physically positioned right at the end of file (past the line mark, + and past a possible page mark following the line mark. Again + Text_IO maintains internal flags so that subsequent read operations + properly handle the logical position. + + These discrepancies have no effect on the observable behavior of + Text_IO, but if a single Ada stream is shared between a C program and + Ada program, or shared (using ‘shared=yes’ in the form string) between + two Ada files, then the difference may be observable in some situations. + +  + File: gnat_rm.info, Node: Reading and Writing Non-Regular Files, Next: Get_Immediate, Prev: Stream Pointer Positioning, Up: Text_IO + + 11.5.2 Reading and Writing Non-Regular Files + -------------------------------------------- + + A non-regular file is a device (such as a keyboard), or a pipe. Text_IO + can be used for reading and writing. Writing is not affected and the + sequence of characters output is identical to the normal file case, but + for reading, the behavior of Text_IO is modified to avoid undesirable + look-ahead as follows: + + An input file that is not a regular file is considered to have no page + marks. Any ‘Ascii.FF’ characters (the character normally used for a + page mark) appearing in the file are considered to be data characters. + In particular: + + * ‘Get_Line’ and ‘Skip_Line’ do not test for a page mark following a + line mark. If a page mark appears, it will be treated as a data + character. + + * This avoids the need to wait for an extra character to be typed or + entered from the pipe to complete one of these operations. + + * ‘End_Of_Page’ always returns ‘False’ + + * ‘End_Of_File’ will return ‘False’ if there is a page mark at the + end of the file. + + Output to non-regular files is the same as for regular files. Page + marks may be written to non-regular files using ‘New_Page’, but as noted + above they will not be treated as page marks on input if the output is + piped to another Ada program. + + Another important discrepancy when reading non-regular files is that the + end of file indication is not ‘sticky’. If an end of file is entered, + e.g., by pressing the ‘EOT’ key, then end of file is signaled once + (i.e., the test ‘End_Of_File’ will yield ‘True’, or a read will raise + ‘End_Error’), but then reading can resume to read data past that end of + file indication, until another end of file indication is entered. + +  + File: gnat_rm.info, Node: Get_Immediate, Next: Treating Text_IO Files as Streams, Prev: Reading and Writing Non-Regular Files, Up: Text_IO + + 11.5.3 Get_Immediate + -------------------- + + Get_Immediate returns the next character (including control characters) + from the input file. In particular, Get_Immediate will return LF or FF + characters used as line marks or page marks. Such operations leave the + file positioned past the control character, and it is thus not treated + as having its normal function. This means that page, line and column + counts after this kind of Get_Immediate call are set as though the mark + did not occur. In the case where a Get_Immediate leaves the file + positioned between the line mark and page mark (which is not normally + possible), it is undefined whether the FF character will be treated as a + page mark. + +  + File: gnat_rm.info, Node: Treating Text_IO Files as Streams, Next: Text_IO Extensions, Prev: Get_Immediate, Up: Text_IO + + 11.5.4 Treating Text_IO Files as Streams + ---------------------------------------- + + The package ‘Text_IO.Streams’ allows a ‘Text_IO’ file to be treated as a + stream. Data written to a ‘Text_IO’ file in this stream mode is binary + data. If this binary data contains bytes 16#0A# (‘LF’) or 16#0C# + (‘FF’), the resulting file may have non-standard format. Similarly if + read operations are used to read from a Text_IO file treated as a + stream, then ‘LF’ and ‘FF’ characters may be skipped and the effect is + similar to that described above for ‘Get_Immediate’. + +  + File: gnat_rm.info, Node: Text_IO Extensions, Next: Text_IO Facilities for Unbounded Strings, Prev: Treating Text_IO Files as Streams, Up: Text_IO + + 11.5.5 Text_IO Extensions + ------------------------- + + A package GNAT.IO_Aux in the GNAT library provides some useful + extensions to the standard ‘Text_IO’ package: + + * function File_Exists (Name : String) return Boolean; Determines if + a file of the given name exists. + + * function Get_Line return String; Reads a string from the standard + input file. The value returned is exactly the length of the line + that was read. + + * function Get_Line (File : Ada.Text_IO.File_Type) return String; + Similar, except that the parameter File specifies the file from + which the string is to be read. + +  + File: gnat_rm.info, Node: Text_IO Facilities for Unbounded Strings, Prev: Text_IO Extensions, Up: Text_IO + + 11.5.6 Text_IO Facilities for Unbounded Strings + ----------------------------------------------- + + The package ‘Ada.Strings.Unbounded.Text_IO’ in library files + ‘a-suteio.ads/adb’ contains some GNAT-specific subprograms useful for + Text_IO operations on unbounded strings: + + * function Get_Line (File : File_Type) return Unbounded_String; Reads + a line from the specified file and returns the result as an + unbounded string. + + * procedure Put (File : File_Type; U : Unbounded_String); Writes the + value of the given unbounded string to the specified file Similar + to the effect of ‘Put (To_String (U))’ except that an extra copy is + avoided. + + * procedure Put_Line (File : File_Type; U : Unbounded_String); Writes + the value of the given unbounded string to the specified file, + followed by a ‘New_Line’. Similar to the effect of ‘Put_Line + (To_String (U))’ except that an extra copy is avoided. + + In the above procedures, ‘File’ is of type ‘Ada.Text_IO.File_Type’ and + is optional. If the parameter is omitted, then the standard input or + output file is referenced as appropriate. + + The package ‘Ada.Strings.Wide_Unbounded.Wide_Text_IO’ in library files + ‘a-swuwti.ads’ and ‘a-swuwti.adb’ provides similar extended + ‘Wide_Text_IO’ functionality for unbounded wide strings. + + The package ‘Ada.Strings.Wide_Wide_Unbounded.Wide_Wide_Text_IO’ in + library files ‘a-szuzti.ads’ and ‘a-szuzti.adb’ provides similar + extended ‘Wide_Wide_Text_IO’ functionality for unbounded wide wide + strings. + +  + File: gnat_rm.info, Node: Wide_Text_IO, Next: Wide_Wide_Text_IO, Prev: Text_IO, Up: The Implementation of Standard I/O + + 11.6 Wide_Text_IO + ================= + + ‘Wide_Text_IO’ is similar in most respects to Text_IO, except that both + input and output files may contain special sequences that represent wide + character values. The encoding scheme for a given file may be specified + using a FORM parameter: + + WCEM=`x` + + as part of the FORM string (WCEM = wide character encoding method), + where ‘x’ is one of the following characters + + Character Encoding + + ---------------------------------------- + + `h' Hex ESC encoding + + + `u' Upper half encoding + + + `s' Shift-JIS encoding + + + `e' EUC Encoding + + + `8' UTF-8 encoding + + + `b' Brackets encoding + + + The encoding methods match those that can be used in a source program, + but there is no requirement that the encoding method used for the source + program be the same as the encoding method used for files, and different + files may use different encoding methods. + + The default encoding method for the standard files, and for opened files + for which no WCEM parameter is given in the FORM string matches the wide + character encoding specified for the main program (the default being + brackets encoding if no coding method was specified with -gnatW). + + `Hex Coding' + + In this encoding, a wide character is represented by a five + character sequence: + + ESC a b c d + + where ‘a’, ‘b’, ‘c’, ‘d’ are the four hexadecimal characters (using + upper case letters) of the wide character code. For example, ESC + A345 is used to represent the wide character with code 16#A345#. + This scheme is compatible with use of the full ‘Wide_Character’ + set. + + `Upper Half Coding' + + The wide character with encoding 16#abcd#, where the upper bit is + on (i.e., a is in the range 8-F) is represented as two bytes 16#ab# + and 16#cd#. The second byte may never be a format control + character, but is not required to be in the upper half. This + method can be also used for shift-JIS or EUC where the internal + coding matches the external coding. + + `Shift JIS Coding' + + A wide character is represented by a two character sequence 16#ab# + and 16#cd#, with the restrictions described for upper half encoding + as described above. The internal character code is the + corresponding JIS character according to the standard algorithm for + Shift-JIS conversion. Only characters defined in the JIS code set + table can be used with this encoding method. + + `EUC Coding' + + A wide character is represented by a two character sequence 16#ab# + and 16#cd#, with both characters being in the upper half. The + internal character code is the corresponding JIS character + according to the EUC encoding algorithm. Only characters defined + in the JIS code set table can be used with this encoding method. + + `UTF-8 Coding' + + A wide character is represented using UCS Transformation Format 8 + (UTF-8) as defined in Annex R of ISO 10646-1/Am.2. Depending on + the character value, the representation is a one, two, or three + byte sequence: + + 16#0000#-16#007f#: 2#0xxxxxxx# + 16#0080#-16#07ff#: 2#110xxxxx# 2#10xxxxxx# + 16#0800#-16#ffff#: 2#1110xxxx# 2#10xxxxxx# 2#10xxxxxx# + + where the ‘xxx’ bits correspond to the left-padded bits of the + 16-bit character value. Note that all lower half ASCII characters + are represented as ASCII bytes and all upper half characters and + other wide characters are represented as sequences of upper-half + (The full UTF-8 scheme allows for encoding 31-bit characters as + 6-byte sequences, but in this implementation, all UTF-8 sequences + of four or more bytes length will raise a Constraint_Error, as will + all invalid UTF-8 sequences.) + + `Brackets Coding' + + In this encoding, a wide character is represented by the following + eight character sequence: + + [ " a b c d " ] + + where ‘a’, ‘b’, ‘c’, ‘d’ are the four hexadecimal characters (using + uppercase letters) of the wide character code. For example, + ‘["A345"]’ is used to represent the wide character with code + ‘16#A345#’. This scheme is compatible with use of the full + Wide_Character set. On input, brackets coding can also be used for + upper half characters, e.g., ‘["C1"]’ for lower case a. However, + on output, brackets notation is only used for wide characters with + a code greater than ‘16#FF#’. + + Note that brackets coding is not normally used in the context of + Wide_Text_IO or Wide_Wide_Text_IO, since it is really just designed + as a portable way of encoding source files. In the context of + Wide_Text_IO or Wide_Wide_Text_IO, it can only be used if the file + does not contain any instance of the left bracket character other + than to encode wide character values using the brackets encoding + method. In practice it is expected that some standard wide + character encoding method such as UTF-8 will be used for text input + output. + + If brackets notation is used, then any occurrence of a left bracket + in the input file which is not the start of a valid wide character + sequence will cause Constraint_Error to be raised. It is possible + to encode a left bracket as [“5B”] and Wide_Text_IO and + Wide_Wide_Text_IO input will interpret this as a left bracket. + + However, when a left bracket is output, it will be output as a left + bracket and not as [“5B”]. We make this decision because for + normal use of Wide_Text_IO for outputting messages, it is + unpleasant to clobber left brackets. For example, if we write: + + Put_Line ("Start of output [first run]"); + + we really do not want to have the left bracket in this message + clobbered so that the output reads: + + Start of output ["5B"]first run] + + In practice brackets encoding is reasonably useful for normal + Put_Line use since we won’t get confused between left brackets and + wide character sequences in the output. But for input, or when + files are written out and read back in, it really makes better + sense to use one of the standard encoding methods such as UTF-8. + + For the coding schemes other than UTF-8, Hex, or Brackets encoding, not + all wide character values can be represented. An attempt to output a + character that cannot be represented using the encoding scheme for the + file causes Constraint_Error to be raised. An invalid wide character + sequence on input also causes Constraint_Error to be raised. + + * Menu: + + * Stream Pointer Positioning: Stream Pointer Positioning<2>. + * Reading and Writing Non-Regular Files: Reading and Writing Non-Regular Files<2>. + +  + File: gnat_rm.info, Node: Stream Pointer Positioning<2>, Next: Reading and Writing Non-Regular Files<2>, Up: Wide_Text_IO + + 11.6.1 Stream Pointer Positioning + --------------------------------- + + ‘Ada.Wide_Text_IO’ is similar to ‘Ada.Text_IO’ in its handling of stream + pointer positioning (*note Text_IO: 2ab.). There is one additional + case: + + If ‘Ada.Wide_Text_IO.Look_Ahead’ reads a character outside the normal + lower ASCII set (i.e., a character in the range: + + Wide_Character'Val (16#0080#) .. Wide_Character'Val (16#FFFF#) + + then although the logical position of the file pointer is unchanged by + the ‘Look_Ahead’ call, the stream is physically positioned past the wide + character sequence. Again this is to avoid the need for buffering or + backup, and all ‘Wide_Text_IO’ routines check the internal indication + that this situation has occurred so that this is not visible to a normal + program using ‘Wide_Text_IO’. However, this discrepancy can be observed + if the wide text file shares a stream with another file. + +  + File: gnat_rm.info, Node: Reading and Writing Non-Regular Files<2>, Prev: Stream Pointer Positioning<2>, Up: Wide_Text_IO + + 11.6.2 Reading and Writing Non-Regular Files + -------------------------------------------- + + As in the case of Text_IO, when a non-regular file is read, it is + assumed that the file contains no page marks (any form characters are + treated as data characters), and ‘End_Of_Page’ always returns ‘False’. + Similarly, the end of file indication is not sticky, so it is possible + to read beyond an end of file. + +  + File: gnat_rm.info, Node: Wide_Wide_Text_IO, Next: Stream_IO, Prev: Wide_Text_IO, Up: The Implementation of Standard I/O + + 11.7 Wide_Wide_Text_IO + ====================== + + ‘Wide_Wide_Text_IO’ is similar in most respects to Text_IO, except that + both input and output files may contain special sequences that represent + wide wide character values. The encoding scheme for a given file may be + specified using a FORM parameter: + + WCEM=`x` + + as part of the FORM string (WCEM = wide character encoding method), + where ‘x’ is one of the following characters + + Character Encoding + + ---------------------------------------- + + `h' Hex ESC encoding + + + `u' Upper half encoding + + + `s' Shift-JIS encoding + + + `e' EUC Encoding + + + `8' UTF-8 encoding + + + `b' Brackets encoding + + + The encoding methods match those that can be used in a source program, + but there is no requirement that the encoding method used for the source + program be the same as the encoding method used for files, and different + files may use different encoding methods. + + The default encoding method for the standard files, and for opened files + for which no WCEM parameter is given in the FORM string matches the wide + character encoding specified for the main program (the default being + brackets encoding if no coding method was specified with -gnatW). + + `UTF-8 Coding' + + A wide character is represented using UCS Transformation Format 8 + (UTF-8) as defined in Annex R of ISO 10646-1/Am.2. Depending on + the character value, the representation is a one, two, three, or + four byte sequence: + + 16#000000#-16#00007f#: 2#0xxxxxxx# + 16#000080#-16#0007ff#: 2#110xxxxx# 2#10xxxxxx# + 16#000800#-16#00ffff#: 2#1110xxxx# 2#10xxxxxx# 2#10xxxxxx# + 16#010000#-16#10ffff#: 2#11110xxx# 2#10xxxxxx# 2#10xxxxxx# 2#10xxxxxx# + + where the ‘xxx’ bits correspond to the left-padded bits of the + 21-bit character value. Note that all lower half ASCII characters + are represented as ASCII bytes and all upper half characters and + other wide characters are represented as sequences of upper-half + characters. + + `Brackets Coding' + + In this encoding, a wide wide character is represented by the + following eight character sequence if is in wide character range + + [ " a b c d " ] + + and by the following ten character sequence if not + + [ " a b c d e f " ] + + where ‘a’, ‘b’, ‘c’, ‘d’, ‘e’, and ‘f’ are the four or six + hexadecimal characters (using uppercase letters) of the wide wide + character code. For example, ‘["01A345"]’ is used to represent the + wide wide character with code ‘16#01A345#’. + + This scheme is compatible with use of the full Wide_Wide_Character + set. On input, brackets coding can also be used for upper half + characters, e.g., ‘["C1"]’ for lower case a. However, on output, + brackets notation is only used for wide characters with a code + greater than ‘16#FF#’. + + If is also possible to use the other Wide_Character encoding methods, + such as Shift-JIS, but the other schemes cannot support the full range + of wide wide characters. An attempt to output a character that cannot + be represented using the encoding scheme for the file causes + Constraint_Error to be raised. An invalid wide character sequence on + input also causes Constraint_Error to be raised. + + * Menu: + + * Stream Pointer Positioning: Stream Pointer Positioning<3>. + * Reading and Writing Non-Regular Files: Reading and Writing Non-Regular Files<3>. + +  + File: gnat_rm.info, Node: Stream Pointer Positioning<3>, Next: Reading and Writing Non-Regular Files<3>, Up: Wide_Wide_Text_IO + + 11.7.1 Stream Pointer Positioning + --------------------------------- + + ‘Ada.Wide_Wide_Text_IO’ is similar to ‘Ada.Text_IO’ in its handling of + stream pointer positioning (*note Text_IO: 2ab.). There is one + additional case: + + If ‘Ada.Wide_Wide_Text_IO.Look_Ahead’ reads a character outside the + normal lower ASCII set (i.e., a character in the range: + + Wide_Wide_Character'Val (16#0080#) .. Wide_Wide_Character'Val (16#10FFFF#) + + then although the logical position of the file pointer is unchanged by + the ‘Look_Ahead’ call, the stream is physically positioned past the wide + character sequence. Again this is to avoid the need for buffering or + backup, and all ‘Wide_Wide_Text_IO’ routines check the internal + indication that this situation has occurred so that this is not visible + to a normal program using ‘Wide_Wide_Text_IO’. However, this + discrepancy can be observed if the wide text file shares a stream with + another file. + +  + File: gnat_rm.info, Node: Reading and Writing Non-Regular Files<3>, Prev: Stream Pointer Positioning<3>, Up: Wide_Wide_Text_IO + + 11.7.2 Reading and Writing Non-Regular Files + -------------------------------------------- + + As in the case of Text_IO, when a non-regular file is read, it is + assumed that the file contains no page marks (any form characters are + treated as data characters), and ‘End_Of_Page’ always returns ‘False’. + Similarly, the end of file indication is not sticky, so it is possible + to read beyond an end of file. + +  + File: gnat_rm.info, Node: Stream_IO, Next: Text Translation, Prev: Wide_Wide_Text_IO, Up: The Implementation of Standard I/O + + 11.8 Stream_IO + ============== + + A stream file is a sequence of bytes, where individual elements are + written to the file as described in the Ada Reference Manual. The type + ‘Stream_Element’ is simply a byte. There are two ways to read or write + a stream file. + + * The operations ‘Read’ and ‘Write’ directly read or write a sequence + of stream elements with no control information. + + * The stream attributes applied to a stream file transfer data in the + manner described for stream attributes. + +  + File: gnat_rm.info, Node: Text Translation, Next: Shared Files, Prev: Stream_IO, Up: The Implementation of Standard I/O + + 11.9 Text Translation + ===================== + + ‘Text_Translation=xxx’ may be used as the Form parameter passed to + Text_IO.Create and Text_IO.Open. ‘Text_Translation=xxx’ has no effect + on Unix systems. Possible values are: + + * ‘Yes’ or ‘Text’ is the default, which means to translate LF to/from + CR/LF on Windows systems. + + ‘No’ disables this translation; i.e. it uses binary mode. For + output files, ‘Text_Translation=No’ may be used to create + Unix-style files on Windows. + + * ‘wtext’ translation enabled in Unicode mode. (corresponds to + _O_WTEXT). + + * ‘u8text’ translation enabled in Unicode UTF-8 mode. (corresponds + to O_U8TEXT). + + * ‘u16text’ translation enabled in Unicode UTF-16 mode. (corresponds + to_O_U16TEXT). + +  + File: gnat_rm.info, Node: Shared Files, Next: Filenames encoding, Prev: Text Translation, Up: The Implementation of Standard I/O + + 11.10 Shared Files + ================== + + Section A.14 of the Ada Reference Manual allows implementations to + provide a wide variety of behavior if an attempt is made to access the + same external file with two or more internal files. + + To provide a full range of functionality, while at the same time + minimizing the problems of portability caused by this implementation + dependence, GNAT handles file sharing as follows: + + * In the absence of a ‘shared=xxx’ form parameter, an attempt to open + two or more files with the same full name is considered an error + and is not supported. The exception ‘Use_Error’ will be raised. + Note that a file that is not explicitly closed by the program + remains open until the program terminates. + + * If the form parameter ‘shared=no’ appears in the form string, the + file can be opened or created with its own separate stream + identifier, regardless of whether other files sharing the same + external file are opened. The exact effect depends on how the C + stream routines handle multiple accesses to the same external files + using separate streams. + + * If the form parameter ‘shared=yes’ appears in the form string for + each of two or more files opened using the same full name, the same + stream is shared between these files, and the semantics are as + described in Ada Reference Manual, Section A.14. + + When a program that opens multiple files with the same name is ported + from another Ada compiler to GNAT, the effect will be that ‘Use_Error’ + is raised. + + The documentation of the original compiler and the documentation of the + program should then be examined to determine if file sharing was + expected, and ‘shared=xxx’ parameters added to ‘Open’ and ‘Create’ calls + as required. + + When a program is ported from GNAT to some other Ada compiler, no + special attention is required unless the ‘shared=xxx’ form parameter is + used in the program. In this case, you must examine the documentation + of the new compiler to see if it supports the required file sharing + semantics, and form strings modified appropriately. Of course it may be + the case that the program cannot be ported if the target compiler does + not support the required functionality. The best approach in writing + portable code is to avoid file sharing (and hence the use of the + ‘shared=xxx’ parameter in the form string) completely. + + One common use of file sharing in Ada 83 is the use of instantiations of + Sequential_IO on the same file with different types, to achieve + heterogeneous input-output. Although this approach will work in GNAT if + ‘shared=yes’ is specified, it is preferable in Ada to use Stream_IO for + this purpose (using the stream attributes) + +  + File: gnat_rm.info, Node: Filenames encoding, Next: File content encoding, Prev: Shared Files, Up: The Implementation of Standard I/O + + 11.11 Filenames encoding + ======================== + + An encoding form parameter can be used to specify the filename encoding + ‘encoding=xxx’. + + * If the form parameter ‘encoding=utf8’ appears in the form string, + the filename must be encoded in UTF-8. + + * If the form parameter ‘encoding=8bits’ appears in the form string, + the filename must be a standard 8bits string. + + In the absence of a ‘encoding=xxx’ form parameter, the encoding is + controlled by the ‘GNAT_CODE_PAGE’ environment variable. And if not set + ‘utf8’ is assumed. + + `CP_ACP' + + The current system Windows ANSI code page. + + `CP_UTF8' + + UTF-8 encoding + + This encoding form parameter is only supported on the Windows platform. + On the other Operating Systems the run-time is supporting UTF-8 + natively. + +  + File: gnat_rm.info, Node: File content encoding, Next: Open Modes, Prev: Filenames encoding, Up: The Implementation of Standard I/O + + 11.12 File content encoding + =========================== + + For text files it is possible to specify the encoding to use. This is + controlled by the by the ‘GNAT_CCS_ENCODING’ environment variable. And + if not set ‘TEXT’ is assumed. + + The possible values are those supported on Windows: + + `TEXT' + + Translated text mode + + `WTEXT' + + Translated unicode encoding + + `U16TEXT' + + Unicode 16-bit encoding + + `U8TEXT' + + Unicode 8-bit encoding + + This encoding is only supported on the Windows platform. + +  + File: gnat_rm.info, Node: Open Modes, Next: Operations on C Streams, Prev: File content encoding, Up: The Implementation of Standard I/O + + 11.13 Open Modes + ================ + + ‘Open’ and ‘Create’ calls result in a call to ‘fopen’ using the mode + shown in the following table: + + ‘Open’ and ‘Create’ Call Modes + + ---------------------------------------------------------------------------- + + `OPEN' `CREATE' + + + Append_File “r+” “w+” + + + In_File “r” “w+” + + + Out_File (Direct_IO) “r+” “w” + + + Out_File (all other cases) “w” “w” + + + Inout_File “r+” “w+” + + + If text file translation is required, then either ‘b’ or ‘t’ is added to + the mode, depending on the setting of Text. Text file translation + refers to the mapping of CR/LF sequences in an external file to LF + characters internally. This mapping only occurs in DOS and DOS-like + systems, and is not relevant to other systems. + + A special case occurs with Stream_IO. As shown in the above table, the + file is initially opened in ‘r’ or ‘w’ mode for the ‘In_File’ and + ‘Out_File’ cases. If a ‘Set_Mode’ operation subsequently requires + switching from reading to writing or vice-versa, then the file is + reopened in ‘r+’ mode to permit the required operation. + +  + File: gnat_rm.info, Node: Operations on C Streams, Next: Interfacing to C Streams, Prev: Open Modes, Up: The Implementation of Standard I/O + + 11.14 Operations on C Streams + ============================= + + The package ‘Interfaces.C_Streams’ provides an Ada program with direct + access to the C library functions for operations on C streams: + + package Interfaces.C_Streams is + -- Note: the reason we do not use the types that are in + -- Interfaces.C is that we want to avoid dragging in the + -- code in this unit if possible. + subtype chars is System.Address; + -- Pointer to null-terminated array of characters + subtype FILEs is System.Address; + -- Corresponds to the C type FILE* + subtype voids is System.Address; + -- Corresponds to the C type void* + subtype int is Integer; + subtype long is Long_Integer; + -- Note: the above types are subtypes deliberately, and it + -- is part of this spec that the above correspondences are + -- guaranteed. This means that it is legitimate to, for + -- example, use Integer instead of int. We provide these + -- synonyms for clarity, but in some cases it may be + -- convenient to use the underlying types (for example to + -- avoid an unnecessary dependency of a spec on the spec + -- of this unit). + type size_t is mod 2 ** Standard'Address_Size; + NULL_Stream : constant FILEs; + -- Value returned (NULL in C) to indicate an + -- fdopen/fopen/tmpfile error + ---------------------------------- + -- Constants Defined in stdio.h -- + ---------------------------------- + EOF : constant int; + -- Used by a number of routines to indicate error or + -- end of file + IOFBF : constant int; + IOLBF : constant int; + IONBF : constant int; + -- Used to indicate buffering mode for setvbuf call + SEEK_CUR : constant int; + SEEK_END : constant int; + SEEK_SET : constant int; + -- Used to indicate origin for fseek call + function stdin return FILEs; + function stdout return FILEs; + function stderr return FILEs; + -- Streams associated with standard files + -------------------------- + -- Standard C functions -- + -------------------------- + -- The functions selected below are ones that are + -- available in UNIX (but not necessarily in ANSI C). + -- These are very thin interfaces + -- which copy exactly the C headers. For more + -- documentation on these functions, see the Microsoft C + -- "Run-Time Library Reference" (Microsoft Press, 1990, + -- ISBN 1-55615-225-6), which includes useful information + -- on system compatibility. + procedure clearerr (stream : FILEs); + function fclose (stream : FILEs) return int; + function fdopen (handle : int; mode : chars) return FILEs; + function feof (stream : FILEs) return int; + function ferror (stream : FILEs) return int; + function fflush (stream : FILEs) return int; + function fgetc (stream : FILEs) return int; + function fgets (strng : chars; n : int; stream : FILEs) + return chars; + function fileno (stream : FILEs) return int; + function fopen (filename : chars; Mode : chars) + return FILEs; + -- Note: to maintain target independence, use + -- text_translation_required, a boolean variable defined in + -- a-sysdep.c to deal with the target dependent text + -- translation requirement. If this variable is set, + -- then b/t should be appended to the standard mode + -- argument to set the text translation mode off or on + -- as required. + function fputc (C : int; stream : FILEs) return int; + function fputs (Strng : chars; Stream : FILEs) return int; + function fread + (buffer : voids; + size : size_t; + count : size_t; + stream : FILEs) + return size_t; + function freopen + (filename : chars; + mode : chars; + stream : FILEs) + return FILEs; + function fseek + (stream : FILEs; + offset : long; + origin : int) + return int; + function ftell (stream : FILEs) return long; + function fwrite + (buffer : voids; + size : size_t; + count : size_t; + stream : FILEs) + return size_t; + function isatty (handle : int) return int; + procedure mktemp (template : chars); + -- The return value (which is just a pointer to template) + -- is discarded + procedure rewind (stream : FILEs); + function rmtmp return int; + function setvbuf + (stream : FILEs; + buffer : chars; + mode : int; + size : size_t) + return int; + + function tmpfile return FILEs; + function ungetc (c : int; stream : FILEs) return int; + function unlink (filename : chars) return int; + --------------------- + -- Extra functions -- + --------------------- + -- These functions supply slightly thicker bindings than + -- those above. They are derived from functions in the + -- C Run-Time Library, but may do a bit more work than + -- just directly calling one of the Library functions. + function is_regular_file (handle : int) return int; + -- Tests if given handle is for a regular file (result 1) + -- or for a non-regular file (pipe or device, result 0). + --------------------------------- + -- Control of Text/Binary Mode -- + --------------------------------- + -- If text_translation_required is true, then the following + -- functions may be used to dynamically switch a file from + -- binary to text mode or vice versa. These functions have + -- no effect if text_translation_required is false (i.e., in + -- normal UNIX mode). Use fileno to get a stream handle. + procedure set_binary_mode (handle : int); + procedure set_text_mode (handle : int); + ---------------------------- + -- Full Path Name support -- + ---------------------------- + procedure full_name (nam : chars; buffer : chars); + -- Given a NUL terminated string representing a file + -- name, returns in buffer a NUL terminated string + -- representing the full path name for the file name. + -- On systems where it is relevant the drive is also + -- part of the full path name. It is the responsibility + -- of the caller to pass an actual parameter for buffer + -- that is big enough for any full path name. Use + -- max_path_len given below as the size of buffer. + max_path_len : integer; + -- Maximum length of an allowable full path name on the + -- system, including a terminating NUL character. + end Interfaces.C_Streams; + +  + File: gnat_rm.info, Node: Interfacing to C Streams, Prev: Operations on C Streams, Up: The Implementation of Standard I/O + + 11.15 Interfacing to C Streams + ============================== + + The packages in this section permit interfacing Ada files to C Stream + operations. + + with Interfaces.C_Streams; + package Ada.Sequential_IO.C_Streams is + function C_Stream (F : File_Type) + return Interfaces.C_Streams.FILEs; + procedure Open + (File : in out File_Type; + Mode : in File_Mode; + C_Stream : in Interfaces.C_Streams.FILEs; + Form : in String := ""); + end Ada.Sequential_IO.C_Streams; + + with Interfaces.C_Streams; + package Ada.Direct_IO.C_Streams is + function C_Stream (F : File_Type) + return Interfaces.C_Streams.FILEs; + procedure Open + (File : in out File_Type; + Mode : in File_Mode; + C_Stream : in Interfaces.C_Streams.FILEs; + Form : in String := ""); + end Ada.Direct_IO.C_Streams; + + with Interfaces.C_Streams; + package Ada.Text_IO.C_Streams is + function C_Stream (F : File_Type) + return Interfaces.C_Streams.FILEs; + procedure Open + (File : in out File_Type; + Mode : in File_Mode; + C_Stream : in Interfaces.C_Streams.FILEs; + Form : in String := ""); + end Ada.Text_IO.C_Streams; + + with Interfaces.C_Streams; + package Ada.Wide_Text_IO.C_Streams is + function C_Stream (F : File_Type) + return Interfaces.C_Streams.FILEs; + procedure Open + (File : in out File_Type; + Mode : in File_Mode; + C_Stream : in Interfaces.C_Streams.FILEs; + Form : in String := ""); + end Ada.Wide_Text_IO.C_Streams; + + with Interfaces.C_Streams; + package Ada.Wide_Wide_Text_IO.C_Streams is + function C_Stream (F : File_Type) + return Interfaces.C_Streams.FILEs; + procedure Open + (File : in out File_Type; + Mode : in File_Mode; + C_Stream : in Interfaces.C_Streams.FILEs; + Form : in String := ""); + end Ada.Wide_Wide_Text_IO.C_Streams; + + with Interfaces.C_Streams; + package Ada.Stream_IO.C_Streams is + function C_Stream (F : File_Type) + return Interfaces.C_Streams.FILEs; + procedure Open + (File : in out File_Type; + Mode : in File_Mode; + C_Stream : in Interfaces.C_Streams.FILEs; + Form : in String := ""); + end Ada.Stream_IO.C_Streams; + + In each of these six packages, the ‘C_Stream’ function obtains the + ‘FILE’ pointer from a currently opened Ada file. It is then possible to + use the ‘Interfaces.C_Streams’ package to operate on this stream, or the + stream can be passed to a C program which can operate on it directly. + Of course the program is responsible for ensuring that only appropriate + sequences of operations are executed. + + One particular use of relevance to an Ada program is that the ‘setvbuf’ + function can be used to control the buffering of the stream used by an + Ada file. In the absence of such a call the standard default buffering + is used. + + The ‘Open’ procedures in these packages open a file giving an existing C + Stream instead of a file name. Typically this stream is imported from a + C program, allowing an Ada file to operate on an existing C file. + +  + File: gnat_rm.info, Node: The GNAT Library, Next: Interfacing to Other Languages, Prev: The Implementation of Standard I/O, Up: Top + + 12 The GNAT Library + ******************* + + The GNAT library contains a number of general and special purpose + packages. It represents functionality that the GNAT developers have + found useful, and which is made available to GNAT users. The packages + described here are fully supported, and upwards compatibility will be + maintained in future releases, so you can use these facilities with the + confidence that the same functionality will be available in future + releases. + + The chapter here simply gives a brief summary of the facilities + available. The full documentation is found in the spec file for the + package. The full sources of these library packages, including both + spec and body, are provided with all GNAT releases. For example, to + find out the full specifications of the SPITBOL pattern matching + capability, including a full tutorial and extensive examples, look in + the ‘g-spipat.ads’ file in the library. + + For each entry here, the package name (as it would appear in a ‘with’ + clause) is given, followed by the name of the corresponding spec file in + parentheses. The packages are children in four hierarchies, ‘Ada’, + ‘Interfaces’, ‘System’, and ‘GNAT’, the latter being a GNAT-specific + hierarchy. + + Note that an application program should only use packages in one of + these four hierarchies if the package is defined in the Ada Reference + Manual, or is listed in this section of the GNAT Programmers Reference + Manual. All other units should be considered internal implementation + units and should not be directly ‘with’ed by application code. The use + of a ‘with’ clause that references one of these internal implementation + units makes an application potentially dependent on changes in versions + of GNAT, and will generate a warning message. + + * Menu: + + * Ada.Characters.Latin_9 (a-chlat9.ads): Ada Characters Latin_9 a-chlat9 ads. + * Ada.Characters.Wide_Latin_1 (a-cwila1.ads): Ada Characters Wide_Latin_1 a-cwila1 ads. + * Ada.Characters.Wide_Latin_9 (a-cwila1.ads): Ada Characters Wide_Latin_9 a-cwila1 ads. + * Ada.Characters.Wide_Wide_Latin_1 (a-chzla1.ads): Ada Characters Wide_Wide_Latin_1 a-chzla1 ads. + * Ada.Characters.Wide_Wide_Latin_9 (a-chzla9.ads): Ada Characters Wide_Wide_Latin_9 a-chzla9 ads. + * Ada.Containers.Formal_Doubly_Linked_Lists (a-cfdlli.ads): Ada Containers Formal_Doubly_Linked_Lists a-cfdlli ads. + * Ada.Containers.Formal_Hashed_Maps (a-cfhama.ads): Ada Containers Formal_Hashed_Maps a-cfhama ads. + * Ada.Containers.Formal_Hashed_Sets (a-cfhase.ads): Ada Containers Formal_Hashed_Sets a-cfhase ads. + * Ada.Containers.Formal_Ordered_Maps (a-cforma.ads): Ada Containers Formal_Ordered_Maps a-cforma ads. + * Ada.Containers.Formal_Ordered_Sets (a-cforse.ads): Ada Containers Formal_Ordered_Sets a-cforse ads. + * Ada.Containers.Formal_Vectors (a-cofove.ads): Ada Containers Formal_Vectors a-cofove ads. + * Ada.Containers.Formal_Indefinite_Vectors (a-cfinve.ads): Ada Containers Formal_Indefinite_Vectors a-cfinve ads. + * Ada.Containers.Functional_Vectors (a-cofuve.ads): Ada Containers Functional_Vectors a-cofuve ads. + * Ada.Containers.Functional_Sets (a-cofuse.ads): Ada Containers Functional_Sets a-cofuse ads. + * Ada.Containers.Functional_Maps (a-cofuma.ads): Ada Containers Functional_Maps a-cofuma ads. + * Ada.Containers.Bounded_Holders (a-coboho.ads): Ada Containers Bounded_Holders a-coboho ads. + * Ada.Command_Line.Environment (a-colien.ads): Ada Command_Line Environment a-colien ads. + * Ada.Command_Line.Remove (a-colire.ads): Ada Command_Line Remove a-colire ads. + * Ada.Command_Line.Response_File (a-clrefi.ads): Ada Command_Line Response_File a-clrefi ads. + * Ada.Direct_IO.C_Streams (a-diocst.ads): Ada Direct_IO C_Streams a-diocst ads. + * Ada.Exceptions.Is_Null_Occurrence (a-einuoc.ads): Ada Exceptions Is_Null_Occurrence a-einuoc ads. + * Ada.Exceptions.Last_Chance_Handler (a-elchha.ads): Ada Exceptions Last_Chance_Handler a-elchha ads. + * Ada.Exceptions.Traceback (a-exctra.ads): Ada Exceptions Traceback a-exctra ads. + * Ada.Sequential_IO.C_Streams (a-siocst.ads): Ada Sequential_IO C_Streams a-siocst ads. + * Ada.Streams.Stream_IO.C_Streams (a-ssicst.ads): Ada Streams Stream_IO C_Streams a-ssicst ads. + * Ada.Strings.Unbounded.Text_IO (a-suteio.ads): Ada Strings Unbounded Text_IO a-suteio ads. + * Ada.Strings.Wide_Unbounded.Wide_Text_IO (a-swuwti.ads): Ada Strings Wide_Unbounded Wide_Text_IO a-swuwti ads. + * Ada.Strings.Wide_Wide_Unbounded.Wide_Wide_Text_IO (a-szuzti.ads): Ada Strings Wide_Wide_Unbounded Wide_Wide_Text_IO a-szuzti ads. + * Ada.Task_Initialization (a-tasini.ads): Ada Task_Initialization a-tasini ads. + * Ada.Text_IO.C_Streams (a-tiocst.ads): Ada Text_IO C_Streams a-tiocst ads. + * Ada.Text_IO.Reset_Standard_Files (a-tirsfi.ads): Ada Text_IO Reset_Standard_Files a-tirsfi ads. + * Ada.Wide_Characters.Unicode (a-wichun.ads): Ada Wide_Characters Unicode a-wichun ads. + * Ada.Wide_Text_IO.C_Streams (a-wtcstr.ads): Ada Wide_Text_IO C_Streams a-wtcstr ads. + * Ada.Wide_Text_IO.Reset_Standard_Files (a-wrstfi.ads): Ada Wide_Text_IO Reset_Standard_Files a-wrstfi ads. + * Ada.Wide_Wide_Characters.Unicode (a-zchuni.ads): Ada Wide_Wide_Characters Unicode a-zchuni ads. + * Ada.Wide_Wide_Text_IO.C_Streams (a-ztcstr.ads): Ada Wide_Wide_Text_IO C_Streams a-ztcstr ads. + * Ada.Wide_Wide_Text_IO.Reset_Standard_Files (a-zrstfi.ads): Ada Wide_Wide_Text_IO Reset_Standard_Files a-zrstfi ads. + * GNAT.Altivec (g-altive.ads): GNAT Altivec g-altive ads. + * GNAT.Altivec.Conversions (g-altcon.ads): GNAT Altivec Conversions g-altcon ads. + * GNAT.Altivec.Vector_Operations (g-alveop.ads): GNAT Altivec Vector_Operations g-alveop ads. + * GNAT.Altivec.Vector_Types (g-alvety.ads): GNAT Altivec Vector_Types g-alvety ads. + * GNAT.Altivec.Vector_Views (g-alvevi.ads): GNAT Altivec Vector_Views g-alvevi ads. + * GNAT.Array_Split (g-arrspl.ads): GNAT Array_Split g-arrspl ads. + * GNAT.AWK (g-awk.ads): GNAT AWK g-awk ads. + * GNAT.Bind_Environment (g-binenv.ads): GNAT Bind_Environment g-binenv ads. + * GNAT.Branch_Prediction (g-brapre.ads): GNAT Branch_Prediction g-brapre ads. + * GNAT.Bounded_Buffers (g-boubuf.ads): GNAT Bounded_Buffers g-boubuf ads. + * GNAT.Bounded_Mailboxes (g-boumai.ads): GNAT Bounded_Mailboxes g-boumai ads. + * GNAT.Bubble_Sort (g-bubsor.ads): GNAT Bubble_Sort g-bubsor ads. + * GNAT.Bubble_Sort_A (g-busora.ads): GNAT Bubble_Sort_A g-busora ads. + * GNAT.Bubble_Sort_G (g-busorg.ads): GNAT Bubble_Sort_G g-busorg ads. + * GNAT.Byte_Order_Mark (g-byorma.ads): GNAT Byte_Order_Mark g-byorma ads. + * GNAT.Byte_Swapping (g-bytswa.ads): GNAT Byte_Swapping g-bytswa ads. + * GNAT.Calendar (g-calend.ads): GNAT Calendar g-calend ads. + * GNAT.Calendar.Time_IO (g-catiio.ads): GNAT Calendar Time_IO g-catiio ads. + * GNAT.CRC32 (g-crc32.ads): GNAT CRC32 g-crc32 ads. + * GNAT.Case_Util (g-casuti.ads): GNAT Case_Util g-casuti ads. + * GNAT.CGI (g-cgi.ads): GNAT CGI g-cgi ads. + * GNAT.CGI.Cookie (g-cgicoo.ads): GNAT CGI Cookie g-cgicoo ads. + * GNAT.CGI.Debug (g-cgideb.ads): GNAT CGI Debug g-cgideb ads. + * GNAT.Command_Line (g-comlin.ads): GNAT Command_Line g-comlin ads. + * GNAT.Compiler_Version (g-comver.ads): GNAT Compiler_Version g-comver ads. + * GNAT.Ctrl_C (g-ctrl_c.ads): GNAT Ctrl_C g-ctrl_c ads. + * GNAT.Current_Exception (g-curexc.ads): GNAT Current_Exception g-curexc ads. + * GNAT.Debug_Pools (g-debpoo.ads): GNAT Debug_Pools g-debpoo ads. + * GNAT.Debug_Utilities (g-debuti.ads): GNAT Debug_Utilities g-debuti ads. + * GNAT.Decode_String (g-decstr.ads): GNAT Decode_String g-decstr ads. + * GNAT.Decode_UTF8_String (g-deutst.ads): GNAT Decode_UTF8_String g-deutst ads. + * GNAT.Directory_Operations (g-dirope.ads): GNAT Directory_Operations g-dirope ads. + * GNAT.Directory_Operations.Iteration (g-diopit.ads): GNAT Directory_Operations Iteration g-diopit ads. + * GNAT.Dynamic_HTables (g-dynhta.ads): GNAT Dynamic_HTables g-dynhta ads. + * GNAT.Dynamic_Tables (g-dyntab.ads): GNAT Dynamic_Tables g-dyntab ads. + * GNAT.Encode_String (g-encstr.ads): GNAT Encode_String g-encstr ads. + * GNAT.Encode_UTF8_String (g-enutst.ads): GNAT Encode_UTF8_String g-enutst ads. + * GNAT.Exception_Actions (g-excact.ads): GNAT Exception_Actions g-excact ads. + * GNAT.Exception_Traces (g-exctra.ads): GNAT Exception_Traces g-exctra ads. + * GNAT.Exceptions (g-except.ads): GNAT Exceptions g-except ads. + * GNAT.Expect (g-expect.ads): GNAT Expect g-expect ads. + * GNAT.Expect.TTY (g-exptty.ads): GNAT Expect TTY g-exptty ads. + * GNAT.Float_Control (g-flocon.ads): GNAT Float_Control g-flocon ads. + * GNAT.Formatted_String (g-forstr.ads): GNAT Formatted_String g-forstr ads. + * GNAT.Heap_Sort (g-heasor.ads): GNAT Heap_Sort g-heasor ads. + * GNAT.Heap_Sort_A (g-hesora.ads): GNAT Heap_Sort_A g-hesora ads. + * GNAT.Heap_Sort_G (g-hesorg.ads): GNAT Heap_Sort_G g-hesorg ads. + * GNAT.HTable (g-htable.ads): GNAT HTable g-htable ads. + * GNAT.IO (g-io.ads): GNAT IO g-io ads. + * GNAT.IO_Aux (g-io_aux.ads): GNAT IO_Aux g-io_aux ads. + * GNAT.Lock_Files (g-locfil.ads): GNAT Lock_Files g-locfil ads. + * GNAT.MBBS_Discrete_Random (g-mbdira.ads): GNAT MBBS_Discrete_Random g-mbdira ads. + * GNAT.MBBS_Float_Random (g-mbflra.ads): GNAT MBBS_Float_Random g-mbflra ads. + * GNAT.MD5 (g-md5.ads): GNAT MD5 g-md5 ads. + * GNAT.Memory_Dump (g-memdum.ads): GNAT Memory_Dump g-memdum ads. + * GNAT.Most_Recent_Exception (g-moreex.ads): GNAT Most_Recent_Exception g-moreex ads. + * GNAT.OS_Lib (g-os_lib.ads): GNAT OS_Lib g-os_lib ads. + * GNAT.Perfect_Hash_Generators (g-pehage.ads): GNAT Perfect_Hash_Generators g-pehage ads. + * GNAT.Random_Numbers (g-rannum.ads): GNAT Random_Numbers g-rannum ads. + * GNAT.Regexp (g-regexp.ads): GNAT Regexp g-regexp ads. + * GNAT.Registry (g-regist.ads): GNAT Registry g-regist ads. + * GNAT.Regpat (g-regpat.ads): GNAT Regpat g-regpat ads. + * GNAT.Rewrite_Data (g-rewdat.ads): GNAT Rewrite_Data g-rewdat ads. + * GNAT.Secondary_Stack_Info (g-sestin.ads): GNAT Secondary_Stack_Info g-sestin ads. + * GNAT.Semaphores (g-semaph.ads): GNAT Semaphores g-semaph ads. + * GNAT.Serial_Communications (g-sercom.ads): GNAT Serial_Communications g-sercom ads. + * GNAT.SHA1 (g-sha1.ads): GNAT SHA1 g-sha1 ads. + * GNAT.SHA224 (g-sha224.ads): GNAT SHA224 g-sha224 ads. + * GNAT.SHA256 (g-sha256.ads): GNAT SHA256 g-sha256 ads. + * GNAT.SHA384 (g-sha384.ads): GNAT SHA384 g-sha384 ads. + * GNAT.SHA512 (g-sha512.ads): GNAT SHA512 g-sha512 ads. + * GNAT.Signals (g-signal.ads): GNAT Signals g-signal ads. + * GNAT.Sockets (g-socket.ads): GNAT Sockets g-socket ads. + * GNAT.Source_Info (g-souinf.ads): GNAT Source_Info g-souinf ads. + * GNAT.Spelling_Checker (g-speche.ads): GNAT Spelling_Checker g-speche ads. + * GNAT.Spelling_Checker_Generic (g-spchge.ads): GNAT Spelling_Checker_Generic g-spchge ads. + * GNAT.Spitbol.Patterns (g-spipat.ads): GNAT Spitbol Patterns g-spipat ads. + * GNAT.Spitbol (g-spitbo.ads): GNAT Spitbol g-spitbo ads. + * GNAT.Spitbol.Table_Boolean (g-sptabo.ads): GNAT Spitbol Table_Boolean g-sptabo ads. + * GNAT.Spitbol.Table_Integer (g-sptain.ads): GNAT Spitbol Table_Integer g-sptain ads. + * GNAT.Spitbol.Table_VString (g-sptavs.ads): GNAT Spitbol Table_VString g-sptavs ads. + * GNAT.SSE (g-sse.ads): GNAT SSE g-sse ads. + * GNAT.SSE.Vector_Types (g-ssvety.ads): GNAT SSE Vector_Types g-ssvety ads. + * GNAT.String_Hash (g-strhas.ads): GNAT String_Hash g-strhas ads. + * GNAT.Strings (g-string.ads): GNAT Strings g-string ads. + * GNAT.String_Split (g-strspl.ads): GNAT String_Split g-strspl ads. + * GNAT.Table (g-table.ads): GNAT Table g-table ads. + * GNAT.Task_Lock (g-tasloc.ads): GNAT Task_Lock g-tasloc ads. + * GNAT.Time_Stamp (g-timsta.ads): GNAT Time_Stamp g-timsta ads. + * GNAT.Threads (g-thread.ads): GNAT Threads g-thread ads. + * GNAT.Traceback (g-traceb.ads): GNAT Traceback g-traceb ads. + * GNAT.Traceback.Symbolic (g-trasym.ads): GNAT Traceback Symbolic g-trasym ads. + * GNAT.UTF_32 (g-table.ads): GNAT UTF_32 g-table ads. + * GNAT.Wide_Spelling_Checker (g-u3spch.ads): GNAT Wide_Spelling_Checker g-u3spch ads. + * GNAT.Wide_Spelling_Checker (g-wispch.ads): GNAT Wide_Spelling_Checker g-wispch ads. + * GNAT.Wide_String_Split (g-wistsp.ads): GNAT Wide_String_Split g-wistsp ads. + * GNAT.Wide_Wide_Spelling_Checker (g-zspche.ads): GNAT Wide_Wide_Spelling_Checker g-zspche ads. + * GNAT.Wide_Wide_String_Split (g-zistsp.ads): GNAT Wide_Wide_String_Split g-zistsp ads. + * Interfaces.C.Extensions (i-cexten.ads): Interfaces C Extensions i-cexten ads. + * Interfaces.C.Streams (i-cstrea.ads): Interfaces C Streams i-cstrea ads. + * Interfaces.Packed_Decimal (i-pacdec.ads): Interfaces Packed_Decimal i-pacdec ads. + * Interfaces.VxWorks (i-vxwork.ads): Interfaces VxWorks i-vxwork ads. + * Interfaces.VxWorks.Int_Connection (i-vxinco.ads): Interfaces VxWorks Int_Connection i-vxinco ads. + * Interfaces.VxWorks.IO (i-vxwoio.ads): Interfaces VxWorks IO i-vxwoio ads. + * System.Address_Image (s-addima.ads): System Address_Image s-addima ads. + * System.Assertions (s-assert.ads): System Assertions s-assert ads. + * System.Atomic_Counters (s-atocou.ads): System Atomic_Counters s-atocou ads. + * System.Memory (s-memory.ads): System Memory s-memory ads. + * System.Multiprocessors (s-multip.ads): System Multiprocessors s-multip ads. + * System.Multiprocessors.Dispatching_Domains (s-mudido.ads): System Multiprocessors Dispatching_Domains s-mudido ads. + * System.Partition_Interface (s-parint.ads): System Partition_Interface s-parint ads. + * System.Pool_Global (s-pooglo.ads): System Pool_Global s-pooglo ads. + * System.Pool_Local (s-pooloc.ads): System Pool_Local s-pooloc ads. + * System.Restrictions (s-restri.ads): System Restrictions s-restri ads. + * System.Rident (s-rident.ads): System Rident s-rident ads. + * System.Strings.Stream_Ops (s-ststop.ads): System Strings Stream_Ops s-ststop ads. + * System.Unsigned_Types (s-unstyp.ads): System Unsigned_Types s-unstyp ads. + * System.Wch_Cnv (s-wchcnv.ads): System Wch_Cnv s-wchcnv ads. + * System.Wch_Con (s-wchcon.ads): System Wch_Con s-wchcon ads. + +  + File: gnat_rm.info, Node: Ada Characters Latin_9 a-chlat9 ads, Next: Ada Characters Wide_Latin_1 a-cwila1 ads, Up: The GNAT Library + + 12.1 ‘Ada.Characters.Latin_9’ (‘a-chlat9.ads’) + ============================================== + + This child of ‘Ada.Characters’ provides a set of definitions + corresponding to those in the RM-defined package + ‘Ada.Characters.Latin_1’ but with the few modifications required for + ‘Latin-9’ The provision of such a package is specifically authorized by + the Ada Reference Manual (RM A.3.3(27)). + +  + File: gnat_rm.info, Node: Ada Characters Wide_Latin_1 a-cwila1 ads, Next: Ada Characters Wide_Latin_9 a-cwila1 ads, Prev: Ada Characters Latin_9 a-chlat9 ads, Up: The GNAT Library + + 12.2 ‘Ada.Characters.Wide_Latin_1’ (‘a-cwila1.ads’) + =================================================== + + This child of ‘Ada.Characters’ provides a set of definitions + corresponding to those in the RM-defined package + ‘Ada.Characters.Latin_1’ but with the types of the constants being + ‘Wide_Character’ instead of ‘Character’. The provision of such a + package is specifically authorized by the Ada Reference Manual (RM + A.3.3(27)). + +  + File: gnat_rm.info, Node: Ada Characters Wide_Latin_9 a-cwila1 ads, Next: Ada Characters Wide_Wide_Latin_1 a-chzla1 ads, Prev: Ada Characters Wide_Latin_1 a-cwila1 ads, Up: The GNAT Library + + 12.3 ‘Ada.Characters.Wide_Latin_9’ (‘a-cwila1.ads’) + =================================================== + + This child of ‘Ada.Characters’ provides a set of definitions + corresponding to those in the GNAT defined package + ‘Ada.Characters.Latin_9’ but with the types of the constants being + ‘Wide_Character’ instead of ‘Character’. The provision of such a + package is specifically authorized by the Ada Reference Manual (RM + A.3.3(27)). + +  + File: gnat_rm.info, Node: Ada Characters Wide_Wide_Latin_1 a-chzla1 ads, Next: Ada Characters Wide_Wide_Latin_9 a-chzla9 ads, Prev: Ada Characters Wide_Latin_9 a-cwila1 ads, Up: The GNAT Library + + 12.4 ‘Ada.Characters.Wide_Wide_Latin_1’ (‘a-chzla1.ads’) + ======================================================== + + This child of ‘Ada.Characters’ provides a set of definitions + corresponding to those in the RM-defined package + ‘Ada.Characters.Latin_1’ but with the types of the constants being + ‘Wide_Wide_Character’ instead of ‘Character’. The provision of such a + package is specifically authorized by the Ada Reference Manual (RM + A.3.3(27)). + +  + File: gnat_rm.info, Node: Ada Characters Wide_Wide_Latin_9 a-chzla9 ads, Next: Ada Containers Formal_Doubly_Linked_Lists a-cfdlli ads, Prev: Ada Characters Wide_Wide_Latin_1 a-chzla1 ads, Up: The GNAT Library + + 12.5 ‘Ada.Characters.Wide_Wide_Latin_9’ (‘a-chzla9.ads’) + ======================================================== + + This child of ‘Ada.Characters’ provides a set of definitions + corresponding to those in the GNAT defined package + ‘Ada.Characters.Latin_9’ but with the types of the constants being + ‘Wide_Wide_Character’ instead of ‘Character’. The provision of such a + package is specifically authorized by the Ada Reference Manual (RM + A.3.3(27)). + +  + File: gnat_rm.info, Node: Ada Containers Formal_Doubly_Linked_Lists a-cfdlli ads, Next: Ada Containers Formal_Hashed_Maps a-cfhama ads, Prev: Ada Characters Wide_Wide_Latin_9 a-chzla9 ads, Up: The GNAT Library + + 12.6 ‘Ada.Containers.Formal_Doubly_Linked_Lists’ (‘a-cfdlli.ads’) + ================================================================= + + This child of ‘Ada.Containers’ defines a modified version of the Ada + 2005 container for doubly linked lists, meant to facilitate formal + verification of code using such containers. The specification of this + unit is compatible with SPARK 2014. + + Note that although this container was designed with formal verification + in mind, it may well be generally useful in that it is a simplified more + efficient version than the one defined in the standard. In particular + it does not have the complex overhead required to detect cursor + tampering. + +  + File: gnat_rm.info, Node: Ada Containers Formal_Hashed_Maps a-cfhama ads, Next: Ada Containers Formal_Hashed_Sets a-cfhase ads, Prev: Ada Containers Formal_Doubly_Linked_Lists a-cfdlli ads, Up: The GNAT Library + + 12.7 ‘Ada.Containers.Formal_Hashed_Maps’ (‘a-cfhama.ads’) + ========================================================= + + This child of ‘Ada.Containers’ defines a modified version of the Ada + 2005 container for hashed maps, meant to facilitate formal verification + of code using such containers. The specification of this unit is + compatible with SPARK 2014. + + Note that although this container was designed with formal verification + in mind, it may well be generally useful in that it is a simplified more + efficient version than the one defined in the standard. In particular + it does not have the complex overhead required to detect cursor + tampering. + +  + File: gnat_rm.info, Node: Ada Containers Formal_Hashed_Sets a-cfhase ads, Next: Ada Containers Formal_Ordered_Maps a-cforma ads, Prev: Ada Containers Formal_Hashed_Maps a-cfhama ads, Up: The GNAT Library + + 12.8 ‘Ada.Containers.Formal_Hashed_Sets’ (‘a-cfhase.ads’) + ========================================================= + + This child of ‘Ada.Containers’ defines a modified version of the Ada + 2005 container for hashed sets, meant to facilitate formal verification + of code using such containers. The specification of this unit is + compatible with SPARK 2014. + + Note that although this container was designed with formal verification + in mind, it may well be generally useful in that it is a simplified more + efficient version than the one defined in the standard. In particular + it does not have the complex overhead required to detect cursor + tampering. + +  + File: gnat_rm.info, Node: Ada Containers Formal_Ordered_Maps a-cforma ads, Next: Ada Containers Formal_Ordered_Sets a-cforse ads, Prev: Ada Containers Formal_Hashed_Sets a-cfhase ads, Up: The GNAT Library + + 12.9 ‘Ada.Containers.Formal_Ordered_Maps’ (‘a-cforma.ads’) + ========================================================== + + This child of ‘Ada.Containers’ defines a modified version of the Ada + 2005 container for ordered maps, meant to facilitate formal verification + of code using such containers. The specification of this unit is + compatible with SPARK 2014. + + Note that although this container was designed with formal verification + in mind, it may well be generally useful in that it is a simplified more + efficient version than the one defined in the standard. In particular + it does not have the complex overhead required to detect cursor + tampering. + +  + File: gnat_rm.info, Node: Ada Containers Formal_Ordered_Sets a-cforse ads, Next: Ada Containers Formal_Vectors a-cofove ads, Prev: Ada Containers Formal_Ordered_Maps a-cforma ads, Up: The GNAT Library + + 12.10 ‘Ada.Containers.Formal_Ordered_Sets’ (‘a-cforse.ads’) + =========================================================== + + This child of ‘Ada.Containers’ defines a modified version of the Ada + 2005 container for ordered sets, meant to facilitate formal verification + of code using such containers. The specification of this unit is + compatible with SPARK 2014. + + Note that although this container was designed with formal verification + in mind, it may well be generally useful in that it is a simplified more + efficient version than the one defined in the standard. In particular + it does not have the complex overhead required to detect cursor + tampering. + +  + File: gnat_rm.info, Node: Ada Containers Formal_Vectors a-cofove ads, Next: Ada Containers Formal_Indefinite_Vectors a-cfinve ads, Prev: Ada Containers Formal_Ordered_Sets a-cforse ads, Up: The GNAT Library + + 12.11 ‘Ada.Containers.Formal_Vectors’ (‘a-cofove.ads’) + ====================================================== + + This child of ‘Ada.Containers’ defines a modified version of the Ada + 2005 container for vectors, meant to facilitate formal verification of + code using such containers. The specification of this unit is + compatible with SPARK 2014. + + Note that although this container was designed with formal verification + in mind, it may well be generally useful in that it is a simplified more + efficient version than the one defined in the standard. In particular + it does not have the complex overhead required to detect cursor + tampering. + +  + File: gnat_rm.info, Node: Ada Containers Formal_Indefinite_Vectors a-cfinve ads, Next: Ada Containers Functional_Vectors a-cofuve ads, Prev: Ada Containers Formal_Vectors a-cofove ads, Up: The GNAT Library + + 12.12 ‘Ada.Containers.Formal_Indefinite_Vectors’ (‘a-cfinve.ads’) + ================================================================= + + This child of ‘Ada.Containers’ defines a modified version of the Ada + 2005 container for vectors of indefinite elements, meant to facilitate + formal verification of code using such containers. The specification of + this unit is compatible with SPARK 2014. + + Note that although this container was designed with formal verification + in mind, it may well be generally useful in that it is a simplified more + efficient version than the one defined in the standard. In particular + it does not have the complex overhead required to detect cursor + tampering. + +  + File: gnat_rm.info, Node: Ada Containers Functional_Vectors a-cofuve ads, Next: Ada Containers Functional_Sets a-cofuse ads, Prev: Ada Containers Formal_Indefinite_Vectors a-cfinve ads, Up: The GNAT Library + + 12.13 ‘Ada.Containers.Functional_Vectors’ (‘a-cofuve.ads’) + ========================================================== + + This child of ‘Ada.Containers’ defines immutable vectors. These + containers are unbounded and may contain indefinite elements. + Furthermore, to be usable in every context, they are neither controlled + nor limited. As they are functional, that is, no primitives are + provided which would allow modifying an existing container, these + containers can still be used safely. + + Their API features functions creating new containers from existing ones. + As a consequence, these containers are highly inefficient. They are + also memory consuming, as the allocated memory is not reclaimed when the + container is no longer referenced. Thus, they should in general be used + in ghost code and annotations, so that they can be removed from the + final executable. The specification of this unit is compatible with + SPARK 2014. + +  + File: gnat_rm.info, Node: Ada Containers Functional_Sets a-cofuse ads, Next: Ada Containers Functional_Maps a-cofuma ads, Prev: Ada Containers Functional_Vectors a-cofuve ads, Up: The GNAT Library + + 12.14 ‘Ada.Containers.Functional_Sets’ (‘a-cofuse.ads’) + ======================================================= + + This child of ‘Ada.Containers’ defines immutable sets. These containers + are unbounded and may contain indefinite elements. Furthermore, to be + usable in every context, they are neither controlled nor limited. As + they are functional, that is, no primitives are provided which would + allow modifying an existing container, these containers can still be + used safely. + + Their API features functions creating new containers from existing ones. + As a consequence, these containers are highly inefficient. They are + also memory consuming, as the allocated memory is not reclaimed when the + container is no longer referenced. Thus, they should in general be used + in ghost code and annotations, so that they can be removed from the + final executable. The specification of this unit is compatible with + SPARK 2014. + +  + File: gnat_rm.info, Node: Ada Containers Functional_Maps a-cofuma ads, Next: Ada Containers Bounded_Holders a-coboho ads, Prev: Ada Containers Functional_Sets a-cofuse ads, Up: The GNAT Library + + 12.15 ‘Ada.Containers.Functional_Maps’ (‘a-cofuma.ads’) + ======================================================= + + This child of ‘Ada.Containers’ defines immutable maps. These containers + are unbounded and may contain indefinite elements. Furthermore, to be + usable in every context, they are neither controlled nor limited. As + they are functional, that is, no primitives are provided which would + allow modifying an existing container, these containers can still be + used safely. + + Their API features functions creating new containers from existing ones. + As a consequence, these containers are highly inefficient. They are + also memory consuming, as the allocated memory is not reclaimed when the + container is no longer referenced. Thus, they should in general be used + in ghost code and annotations, so that they can be removed from the + final executable. The specification of this unit is compatible with + SPARK 2014. + +  + File: gnat_rm.info, Node: Ada Containers Bounded_Holders a-coboho ads, Next: Ada Command_Line Environment a-colien ads, Prev: Ada Containers Functional_Maps a-cofuma ads, Up: The GNAT Library + + 12.16 ‘Ada.Containers.Bounded_Holders’ (‘a-coboho.ads’) + ======================================================= + + This child of ‘Ada.Containers’ defines a modified version of + Indefinite_Holders that avoids heap allocation. + +  + File: gnat_rm.info, Node: Ada Command_Line Environment a-colien ads, Next: Ada Command_Line Remove a-colire ads, Prev: Ada Containers Bounded_Holders a-coboho ads, Up: The GNAT Library + + 12.17 ‘Ada.Command_Line.Environment’ (‘a-colien.ads’) + ===================================================== + + This child of ‘Ada.Command_Line’ provides a mechanism for obtaining + environment values on systems where this concept makes sense. + +  + File: gnat_rm.info, Node: Ada Command_Line Remove a-colire ads, Next: Ada Command_Line Response_File a-clrefi ads, Prev: Ada Command_Line Environment a-colien ads, Up: The GNAT Library + + 12.18 ‘Ada.Command_Line.Remove’ (‘a-colire.ads’) + ================================================ + + This child of ‘Ada.Command_Line’ provides a mechanism for logically + removing arguments from the argument list. Once removed, an argument is + not visible to further calls on the subprograms in ‘Ada.Command_Line’ + will not see the removed argument. + +  + File: gnat_rm.info, Node: Ada Command_Line Response_File a-clrefi ads, Next: Ada Direct_IO C_Streams a-diocst ads, Prev: Ada Command_Line Remove a-colire ads, Up: The GNAT Library + + 12.19 ‘Ada.Command_Line.Response_File’ (‘a-clrefi.ads’) + ======================================================= + + This child of ‘Ada.Command_Line’ provides a mechanism facilities for + getting command line arguments from a text file, called a “response + file”. Using a response file allow passing a set of arguments to an + executable longer than the maximum allowed by the system on the command + line. + +  + File: gnat_rm.info, Node: Ada Direct_IO C_Streams a-diocst ads, Next: Ada Exceptions Is_Null_Occurrence a-einuoc ads, Prev: Ada Command_Line Response_File a-clrefi ads, Up: The GNAT Library + + 12.20 ‘Ada.Direct_IO.C_Streams’ (‘a-diocst.ads’) + ================================================ + + This package provides subprograms that allow interfacing between C + streams and ‘Direct_IO’. The stream identifier can be extracted from a + file opened on the Ada side, and an Ada file can be constructed from a + stream opened on the C side. + +  + File: gnat_rm.info, Node: Ada Exceptions Is_Null_Occurrence a-einuoc ads, Next: Ada Exceptions Last_Chance_Handler a-elchha ads, Prev: Ada Direct_IO C_Streams a-diocst ads, Up: The GNAT Library + + 12.21 ‘Ada.Exceptions.Is_Null_Occurrence’ (‘a-einuoc.ads’) + ========================================================== + + This child subprogram provides a way of testing for the null exception + occurrence (‘Null_Occurrence’) without raising an exception. + +  + File: gnat_rm.info, Node: Ada Exceptions Last_Chance_Handler a-elchha ads, Next: Ada Exceptions Traceback a-exctra ads, Prev: Ada Exceptions Is_Null_Occurrence a-einuoc ads, Up: The GNAT Library + + 12.22 ‘Ada.Exceptions.Last_Chance_Handler’ (‘a-elchha.ads’) + =========================================================== + + This child subprogram is used for handling otherwise unhandled + exceptions (hence the name last chance), and perform clean ups before + terminating the program. Note that this subprogram never returns. + +  + File: gnat_rm.info, Node: Ada Exceptions Traceback a-exctra ads, Next: Ada Sequential_IO C_Streams a-siocst ads, Prev: Ada Exceptions Last_Chance_Handler a-elchha ads, Up: The GNAT Library + + 12.23 ‘Ada.Exceptions.Traceback’ (‘a-exctra.ads’) + ================================================= + + This child package provides the subprogram (‘Tracebacks’) to give a + traceback array of addresses based on an exception occurrence. + +  + File: gnat_rm.info, Node: Ada Sequential_IO C_Streams a-siocst ads, Next: Ada Streams Stream_IO C_Streams a-ssicst ads, Prev: Ada Exceptions Traceback a-exctra ads, Up: The GNAT Library + + 12.24 ‘Ada.Sequential_IO.C_Streams’ (‘a-siocst.ads’) + ==================================================== + + This package provides subprograms that allow interfacing between C + streams and ‘Sequential_IO’. The stream identifier can be extracted + from a file opened on the Ada side, and an Ada file can be constructed + from a stream opened on the C side. + +  + File: gnat_rm.info, Node: Ada Streams Stream_IO C_Streams a-ssicst ads, Next: Ada Strings Unbounded Text_IO a-suteio ads, Prev: Ada Sequential_IO C_Streams a-siocst ads, Up: The GNAT Library + + 12.25 ‘Ada.Streams.Stream_IO.C_Streams’ (‘a-ssicst.ads’) + ======================================================== + + This package provides subprograms that allow interfacing between C + streams and ‘Stream_IO’. The stream identifier can be extracted from a + file opened on the Ada side, and an Ada file can be constructed from a + stream opened on the C side. + +  + File: gnat_rm.info, Node: Ada Strings Unbounded Text_IO a-suteio ads, Next: Ada Strings Wide_Unbounded Wide_Text_IO a-swuwti ads, Prev: Ada Streams Stream_IO C_Streams a-ssicst ads, Up: The GNAT Library + + 12.26 ‘Ada.Strings.Unbounded.Text_IO’ (‘a-suteio.ads’) + ====================================================== + + This package provides subprograms for Text_IO for unbounded strings, + avoiding the necessity for an intermediate operation with ordinary + strings. + +  + File: gnat_rm.info, Node: Ada Strings Wide_Unbounded Wide_Text_IO a-swuwti ads, Next: Ada Strings Wide_Wide_Unbounded Wide_Wide_Text_IO a-szuzti ads, Prev: Ada Strings Unbounded Text_IO a-suteio ads, Up: The GNAT Library + + 12.27 ‘Ada.Strings.Wide_Unbounded.Wide_Text_IO’ (‘a-swuwti.ads’) + ================================================================ + + This package provides subprograms for Text_IO for unbounded wide + strings, avoiding the necessity for an intermediate operation with + ordinary wide strings. + +  + File: gnat_rm.info, Node: Ada Strings Wide_Wide_Unbounded Wide_Wide_Text_IO a-szuzti ads, Next: Ada Task_Initialization a-tasini ads, Prev: Ada Strings Wide_Unbounded Wide_Text_IO a-swuwti ads, Up: The GNAT Library + + 12.28 ‘Ada.Strings.Wide_Wide_Unbounded.Wide_Wide_Text_IO’ (‘a-szuzti.ads’) + ========================================================================== + + This package provides subprograms for Text_IO for unbounded wide wide + strings, avoiding the necessity for an intermediate operation with + ordinary wide wide strings. + +  + File: gnat_rm.info, Node: Ada Task_Initialization a-tasini ads, Next: Ada Text_IO C_Streams a-tiocst ads, Prev: Ada Strings Wide_Wide_Unbounded Wide_Wide_Text_IO a-szuzti ads, Up: The GNAT Library + + 12.29 ‘Ada.Task_Initialization’ (‘a-tasini.ads’) + ================================================ + + This package provides a way to set a global initialization handler that + is automatically invoked whenever a task is activated. Handlers are + parameterless procedures. Note that such a handler is only invoked for + those tasks activated after the handler is set. + +  + File: gnat_rm.info, Node: Ada Text_IO C_Streams a-tiocst ads, Next: Ada Text_IO Reset_Standard_Files a-tirsfi ads, Prev: Ada Task_Initialization a-tasini ads, Up: The GNAT Library + + 12.30 ‘Ada.Text_IO.C_Streams’ (‘a-tiocst.ads’) + ============================================== + + This package provides subprograms that allow interfacing between C + streams and ‘Text_IO’. The stream identifier can be extracted from a + file opened on the Ada side, and an Ada file can be constructed from a + stream opened on the C side. + +  + File: gnat_rm.info, Node: Ada Text_IO Reset_Standard_Files a-tirsfi ads, Next: Ada Wide_Characters Unicode a-wichun ads, Prev: Ada Text_IO C_Streams a-tiocst ads, Up: The GNAT Library + + 12.31 ‘Ada.Text_IO.Reset_Standard_Files’ (‘a-tirsfi.ads’) + ========================================================= + + This procedure is used to reset the status of the standard files used by + Ada.Text_IO. This is useful in a situation (such as a restart in an + embedded application) where the status of the files may change during + execution (for example a standard input file may be redefined to be + interactive). + +  + File: gnat_rm.info, Node: Ada Wide_Characters Unicode a-wichun ads, Next: Ada Wide_Text_IO C_Streams a-wtcstr ads, Prev: Ada Text_IO Reset_Standard_Files a-tirsfi ads, Up: The GNAT Library + + 12.32 ‘Ada.Wide_Characters.Unicode’ (‘a-wichun.ads’) + ==================================================== + + This package provides subprograms that allow categorization of + Wide_Character values according to Unicode categories. + +  + File: gnat_rm.info, Node: Ada Wide_Text_IO C_Streams a-wtcstr ads, Next: Ada Wide_Text_IO Reset_Standard_Files a-wrstfi ads, Prev: Ada Wide_Characters Unicode a-wichun ads, Up: The GNAT Library + + 12.33 ‘Ada.Wide_Text_IO.C_Streams’ (‘a-wtcstr.ads’) + =================================================== + + This package provides subprograms that allow interfacing between C + streams and ‘Wide_Text_IO’. The stream identifier can be extracted from + a file opened on the Ada side, and an Ada file can be constructed from a + stream opened on the C side. + +  + File: gnat_rm.info, Node: Ada Wide_Text_IO Reset_Standard_Files a-wrstfi ads, Next: Ada Wide_Wide_Characters Unicode a-zchuni ads, Prev: Ada Wide_Text_IO C_Streams a-wtcstr ads, Up: The GNAT Library + + 12.34 ‘Ada.Wide_Text_IO.Reset_Standard_Files’ (‘a-wrstfi.ads’) + ============================================================== + + This procedure is used to reset the status of the standard files used by + Ada.Wide_Text_IO. This is useful in a situation (such as a restart in an + embedded application) where the status of the files may change during + execution (for example a standard input file may be redefined to be + interactive). + +  + File: gnat_rm.info, Node: Ada Wide_Wide_Characters Unicode a-zchuni ads, Next: Ada Wide_Wide_Text_IO C_Streams a-ztcstr ads, Prev: Ada Wide_Text_IO Reset_Standard_Files a-wrstfi ads, Up: The GNAT Library + + 12.35 ‘Ada.Wide_Wide_Characters.Unicode’ (‘a-zchuni.ads’) + ========================================================= + + This package provides subprograms that allow categorization of + Wide_Wide_Character values according to Unicode categories. + +  + File: gnat_rm.info, Node: Ada Wide_Wide_Text_IO C_Streams a-ztcstr ads, Next: Ada Wide_Wide_Text_IO Reset_Standard_Files a-zrstfi ads, Prev: Ada Wide_Wide_Characters Unicode a-zchuni ads, Up: The GNAT Library + + 12.36 ‘Ada.Wide_Wide_Text_IO.C_Streams’ (‘a-ztcstr.ads’) + ======================================================== + + This package provides subprograms that allow interfacing between C + streams and ‘Wide_Wide_Text_IO’. The stream identifier can be extracted + from a file opened on the Ada side, and an Ada file can be constructed + from a stream opened on the C side. + +  + File: gnat_rm.info, Node: Ada Wide_Wide_Text_IO Reset_Standard_Files a-zrstfi ads, Next: GNAT Altivec g-altive ads, Prev: Ada Wide_Wide_Text_IO C_Streams a-ztcstr ads, Up: The GNAT Library + + 12.37 ‘Ada.Wide_Wide_Text_IO.Reset_Standard_Files’ (‘a-zrstfi.ads’) + =================================================================== + + This procedure is used to reset the status of the standard files used by + Ada.Wide_Wide_Text_IO. This is useful in a situation (such as a restart + in an embedded application) where the status of the files may change + during execution (for example a standard input file may be redefined to + be interactive). + +  + File: gnat_rm.info, Node: GNAT Altivec g-altive ads, Next: GNAT Altivec Conversions g-altcon ads, Prev: Ada Wide_Wide_Text_IO Reset_Standard_Files a-zrstfi ads, Up: The GNAT Library + + 12.38 ‘GNAT.Altivec’ (‘g-altive.ads’) + ===================================== + + This is the root package of the GNAT AltiVec binding. It provides + definitions of constants and types common to all the versions of the + binding. + +  + File: gnat_rm.info, Node: GNAT Altivec Conversions g-altcon ads, Next: GNAT Altivec Vector_Operations g-alveop ads, Prev: GNAT Altivec g-altive ads, Up: The GNAT Library + + 12.39 ‘GNAT.Altivec.Conversions’ (‘g-altcon.ads’) + ================================================= + + This package provides the Vector/View conversion routines. + +  + File: gnat_rm.info, Node: GNAT Altivec Vector_Operations g-alveop ads, Next: GNAT Altivec Vector_Types g-alvety ads, Prev: GNAT Altivec Conversions g-altcon ads, Up: The GNAT Library + + 12.40 ‘GNAT.Altivec.Vector_Operations’ (‘g-alveop.ads’) + ======================================================= + + This package exposes the Ada interface to the AltiVec operations on + vector objects. A soft emulation is included by default in the GNAT + library. The hard binding is provided as a separate package. This unit + is common to both bindings. + +  + File: gnat_rm.info, Node: GNAT Altivec Vector_Types g-alvety ads, Next: GNAT Altivec Vector_Views g-alvevi ads, Prev: GNAT Altivec Vector_Operations g-alveop ads, Up: The GNAT Library + + 12.41 ‘GNAT.Altivec.Vector_Types’ (‘g-alvety.ads’) + ================================================== + + This package exposes the various vector types part of the Ada binding to + AltiVec facilities. + +  + File: gnat_rm.info, Node: GNAT Altivec Vector_Views g-alvevi ads, Next: GNAT Array_Split g-arrspl ads, Prev: GNAT Altivec Vector_Types g-alvety ads, Up: The GNAT Library + + 12.42 ‘GNAT.Altivec.Vector_Views’ (‘g-alvevi.ads’) + ================================================== + + This package provides public ‘View’ data types from/to which private + vector representations can be converted via GNAT.Altivec.Conversions. + This allows convenient access to individual vector elements and provides + a simple way to initialize vector objects. + +  + File: gnat_rm.info, Node: GNAT Array_Split g-arrspl ads, Next: GNAT AWK g-awk ads, Prev: GNAT Altivec Vector_Views g-alvevi ads, Up: The GNAT Library + + 12.43 ‘GNAT.Array_Split’ (‘g-arrspl.ads’) + ========================================= + + Useful array-manipulation routines: given a set of separators, split an + array wherever the separators appear, and provide direct access to the + resulting slices. + +  + File: gnat_rm.info, Node: GNAT AWK g-awk ads, Next: GNAT Bind_Environment g-binenv ads, Prev: GNAT Array_Split g-arrspl ads, Up: The GNAT Library + + 12.44 ‘GNAT.AWK’ (‘g-awk.ads’) + ============================== + + Provides AWK-like parsing functions, with an easy interface for parsing + one or more files containing formatted data. The file is viewed as a + database where each record is a line and a field is a data element in + this line. + +  + File: gnat_rm.info, Node: GNAT Bind_Environment g-binenv ads, Next: GNAT Branch_Prediction g-brapre ads, Prev: GNAT AWK g-awk ads, Up: The GNAT Library + + 12.45 ‘GNAT.Bind_Environment’ (‘g-binenv.ads’) + ============================================== + + Provides access to key=value associations captured at bind time. These + associations can be specified using the ‘-V’ binder command line switch. + +  + File: gnat_rm.info, Node: GNAT Branch_Prediction g-brapre ads, Next: GNAT Bounded_Buffers g-boubuf ads, Prev: GNAT Bind_Environment g-binenv ads, Up: The GNAT Library + + 12.46 ‘GNAT.Branch_Prediction’ (‘g-brapre.ads’) + =============================================== + + Provides routines giving hints to the branch predictor of the code + generator. + +  + File: gnat_rm.info, Node: GNAT Bounded_Buffers g-boubuf ads, Next: GNAT Bounded_Mailboxes g-boumai ads, Prev: GNAT Branch_Prediction g-brapre ads, Up: The GNAT Library + + 12.47 ‘GNAT.Bounded_Buffers’ (‘g-boubuf.ads’) + ============================================= + + Provides a concurrent generic bounded buffer abstraction. Instances are + useful directly or as parts of the implementations of other + abstractions, such as mailboxes. + +  + File: gnat_rm.info, Node: GNAT Bounded_Mailboxes g-boumai ads, Next: GNAT Bubble_Sort g-bubsor ads, Prev: GNAT Bounded_Buffers g-boubuf ads, Up: The GNAT Library + + 12.48 ‘GNAT.Bounded_Mailboxes’ (‘g-boumai.ads’) + =============================================== + + Provides a thread-safe asynchronous intertask mailbox communication + facility. + +  + File: gnat_rm.info, Node: GNAT Bubble_Sort g-bubsor ads, Next: GNAT Bubble_Sort_A g-busora ads, Prev: GNAT Bounded_Mailboxes g-boumai ads, Up: The GNAT Library + + 12.49 ‘GNAT.Bubble_Sort’ (‘g-bubsor.ads’) + ========================================= + + Provides a general implementation of bubble sort usable for sorting + arbitrary data items. Exchange and comparison procedures are provided + by passing access-to-procedure values. + +  + File: gnat_rm.info, Node: GNAT Bubble_Sort_A g-busora ads, Next: GNAT Bubble_Sort_G g-busorg ads, Prev: GNAT Bubble_Sort g-bubsor ads, Up: The GNAT Library + + 12.50 ‘GNAT.Bubble_Sort_A’ (‘g-busora.ads’) + =========================================== + + Provides a general implementation of bubble sort usable for sorting + arbitrary data items. Move and comparison procedures are provided by + passing access-to-procedure values. This is an older version, retained + for compatibility. Usually ‘GNAT.Bubble_Sort’ will be preferable. + +  + File: gnat_rm.info, Node: GNAT Bubble_Sort_G g-busorg ads, Next: GNAT Byte_Order_Mark g-byorma ads, Prev: GNAT Bubble_Sort_A g-busora ads, Up: The GNAT Library + + 12.51 ‘GNAT.Bubble_Sort_G’ (‘g-busorg.ads’) + =========================================== + + Similar to ‘Bubble_Sort_A’ except that the move and sorting procedures + are provided as generic parameters, this improves efficiency, especially + if the procedures can be inlined, at the expense of duplicating code for + multiple instantiations. + +  + File: gnat_rm.info, Node: GNAT Byte_Order_Mark g-byorma ads, Next: GNAT Byte_Swapping g-bytswa ads, Prev: GNAT Bubble_Sort_G g-busorg ads, Up: The GNAT Library + + 12.52 ‘GNAT.Byte_Order_Mark’ (‘g-byorma.ads’) + ============================================= + + Provides a routine which given a string, reads the start of the string + to see whether it is one of the standard byte order marks (BOM’s) which + signal the encoding of the string. The routine includes detection of + special XML sequences for various UCS input formats. + +  + File: gnat_rm.info, Node: GNAT Byte_Swapping g-bytswa ads, Next: GNAT Calendar g-calend ads, Prev: GNAT Byte_Order_Mark g-byorma ads, Up: The GNAT Library + + 12.53 ‘GNAT.Byte_Swapping’ (‘g-bytswa.ads’) + =========================================== + + General routines for swapping the bytes in 2-, 4-, and 8-byte + quantities. Machine-specific implementations are available in some + cases. + +  + File: gnat_rm.info, Node: GNAT Calendar g-calend ads, Next: GNAT Calendar Time_IO g-catiio ads, Prev: GNAT Byte_Swapping g-bytswa ads, Up: The GNAT Library + + 12.54 ‘GNAT.Calendar’ (‘g-calend.ads’) + ====================================== + + Extends the facilities provided by ‘Ada.Calendar’ to include handling of + days of the week, an extended ‘Split’ and ‘Time_Of’ capability. Also + provides conversion of ‘Ada.Calendar.Time’ values to and from the C + ‘timeval’ format. + +  + File: gnat_rm.info, Node: GNAT Calendar Time_IO g-catiio ads, Next: GNAT CRC32 g-crc32 ads, Prev: GNAT Calendar g-calend ads, Up: The GNAT Library + + 12.55 ‘GNAT.Calendar.Time_IO’ (‘g-catiio.ads’) + ============================================== + +  + File: gnat_rm.info, Node: GNAT CRC32 g-crc32 ads, Next: GNAT Case_Util g-casuti ads, Prev: GNAT Calendar Time_IO g-catiio ads, Up: The GNAT Library + + 12.56 ‘GNAT.CRC32’ (‘g-crc32.ads’) + ================================== + + This package implements the CRC-32 algorithm. For a full description of + this algorithm see `Computation of Cyclic Redundancy Checks via Table + Look-Up', ‘Communications of the ACM’, Vol. 31 No. 8, pp. 1008-1013, + Aug. 1988. Sarwate, D.V. + +  + File: gnat_rm.info, Node: GNAT Case_Util g-casuti ads, Next: GNAT CGI g-cgi ads, Prev: GNAT CRC32 g-crc32 ads, Up: The GNAT Library + + 12.57 ‘GNAT.Case_Util’ (‘g-casuti.ads’) + ======================================= + + A set of simple routines for handling upper and lower casing of strings + without the overhead of the full casing tables in + ‘Ada.Characters.Handling’. + +  + File: gnat_rm.info, Node: GNAT CGI g-cgi ads, Next: GNAT CGI Cookie g-cgicoo ads, Prev: GNAT Case_Util g-casuti ads, Up: The GNAT Library + + 12.58 ‘GNAT.CGI’ (‘g-cgi.ads’) + ============================== + + This is a package for interfacing a GNAT program with a Web server via + the Common Gateway Interface (CGI). Basically this package parses the + CGI parameters, which are a set of key/value pairs sent by the Web + server. It builds a table whose index is the key and provides some + services to deal with this table. + +  + File: gnat_rm.info, Node: GNAT CGI Cookie g-cgicoo ads, Next: GNAT CGI Debug g-cgideb ads, Prev: GNAT CGI g-cgi ads, Up: The GNAT Library + + 12.59 ‘GNAT.CGI.Cookie’ (‘g-cgicoo.ads’) + ======================================== + + This is a package to interface a GNAT program with a Web server via the + Common Gateway Interface (CGI). It exports services to deal with Web + cookies (piece of information kept in the Web client software). + +  + File: gnat_rm.info, Node: GNAT CGI Debug g-cgideb ads, Next: GNAT Command_Line g-comlin ads, Prev: GNAT CGI Cookie g-cgicoo ads, Up: The GNAT Library + + 12.60 ‘GNAT.CGI.Debug’ (‘g-cgideb.ads’) + ======================================= + + This is a package to help debugging CGI (Common Gateway Interface) + programs written in Ada. + +  + File: gnat_rm.info, Node: GNAT Command_Line g-comlin ads, Next: GNAT Compiler_Version g-comver ads, Prev: GNAT CGI Debug g-cgideb ads, Up: The GNAT Library + + 12.61 ‘GNAT.Command_Line’ (‘g-comlin.ads’) + ========================================== + + Provides a high level interface to ‘Ada.Command_Line’ facilities, + including the ability to scan for named switches with optional + parameters and expand file names using wildcard notations. + +  + File: gnat_rm.info, Node: GNAT Compiler_Version g-comver ads, Next: GNAT Ctrl_C g-ctrl_c ads, Prev: GNAT Command_Line g-comlin ads, Up: The GNAT Library + + 12.62 ‘GNAT.Compiler_Version’ (‘g-comver.ads’) + ============================================== + + Provides a routine for obtaining the version of the compiler used to + compile the program. More accurately this is the version of the binder + used to bind the program (this will normally be the same as the version + of the compiler if a consistent tool set is used to compile all units of + a partition). + +  + File: gnat_rm.info, Node: GNAT Ctrl_C g-ctrl_c ads, Next: GNAT Current_Exception g-curexc ads, Prev: GNAT Compiler_Version g-comver ads, Up: The GNAT Library + + 12.63 ‘GNAT.Ctrl_C’ (‘g-ctrl_c.ads’) + ==================================== + + Provides a simple interface to handle Ctrl-C keyboard events. + +  + File: gnat_rm.info, Node: GNAT Current_Exception g-curexc ads, Next: GNAT Debug_Pools g-debpoo ads, Prev: GNAT Ctrl_C g-ctrl_c ads, Up: The GNAT Library + + 12.64 ‘GNAT.Current_Exception’ (‘g-curexc.ads’) + =============================================== + + Provides access to information on the current exception that has been + raised without the need for using the Ada 95 / Ada 2005 exception choice + parameter specification syntax. This is particularly useful in + simulating typical facilities for obtaining information about exceptions + provided by Ada 83 compilers. + +  + File: gnat_rm.info, Node: GNAT Debug_Pools g-debpoo ads, Next: GNAT Debug_Utilities g-debuti ads, Prev: GNAT Current_Exception g-curexc ads, Up: The GNAT Library + + 12.65 ‘GNAT.Debug_Pools’ (‘g-debpoo.ads’) + ========================================= + + Provide a debugging storage pools that helps tracking memory corruption + problems. See ‘The GNAT Debug_Pool Facility’ section in the ‘GNAT + User’s Guide’. + +  + File: gnat_rm.info, Node: GNAT Debug_Utilities g-debuti ads, Next: GNAT Decode_String g-decstr ads, Prev: GNAT Debug_Pools g-debpoo ads, Up: The GNAT Library + + 12.66 ‘GNAT.Debug_Utilities’ (‘g-debuti.ads’) + ============================================= + + Provides a few useful utilities for debugging purposes, including + conversion to and from string images of address values. Supports both C + and Ada formats for hexadecimal literals. + +  + File: gnat_rm.info, Node: GNAT Decode_String g-decstr ads, Next: GNAT Decode_UTF8_String g-deutst ads, Prev: GNAT Debug_Utilities g-debuti ads, Up: The GNAT Library + + 12.67 ‘GNAT.Decode_String’ (‘g-decstr.ads’) + =========================================== + + A generic package providing routines for decoding wide character and + wide wide character strings encoded as sequences of 8-bit characters + using a specified encoding method. Includes validation routines, and + also routines for stepping to next or previous encoded character in an + encoded string. Useful in conjunction with Unicode character coding. + Note there is a preinstantiation for UTF-8. See next entry. + +  + File: gnat_rm.info, Node: GNAT Decode_UTF8_String g-deutst ads, Next: GNAT Directory_Operations g-dirope ads, Prev: GNAT Decode_String g-decstr ads, Up: The GNAT Library + + 12.68 ‘GNAT.Decode_UTF8_String’ (‘g-deutst.ads’) + ================================================ + + A preinstantiation of GNAT.Decode_Strings for UTF-8 encoding. + +  + File: gnat_rm.info, Node: GNAT Directory_Operations g-dirope ads, Next: GNAT Directory_Operations Iteration g-diopit ads, Prev: GNAT Decode_UTF8_String g-deutst ads, Up: The GNAT Library + + 12.69 ‘GNAT.Directory_Operations’ (‘g-dirope.ads’) + ================================================== + + Provides a set of routines for manipulating directories, including + changing the current directory, making new directories, and scanning the + files in a directory. + +  + File: gnat_rm.info, Node: GNAT Directory_Operations Iteration g-diopit ads, Next: GNAT Dynamic_HTables g-dynhta ads, Prev: GNAT Directory_Operations g-dirope ads, Up: The GNAT Library + + 12.70 ‘GNAT.Directory_Operations.Iteration’ (‘g-diopit.ads’) + ============================================================ + + A child unit of GNAT.Directory_Operations providing additional + operations for iterating through directories. + +  + File: gnat_rm.info, Node: GNAT Dynamic_HTables g-dynhta ads, Next: GNAT Dynamic_Tables g-dyntab ads, Prev: GNAT Directory_Operations Iteration g-diopit ads, Up: The GNAT Library + + 12.71 ‘GNAT.Dynamic_HTables’ (‘g-dynhta.ads’) + ============================================= + + A generic implementation of hash tables that can be used to hash + arbitrary data. Provided in two forms, a simple form with built in hash + functions, and a more complex form in which the hash function is + supplied. + + This package provides a facility similar to that of ‘GNAT.HTable’, + except that this package declares a type that can be used to define + dynamic instances of the hash table, while an instantiation of + ‘GNAT.HTable’ creates a single instance of the hash table. + +  + File: gnat_rm.info, Node: GNAT Dynamic_Tables g-dyntab ads, Next: GNAT Encode_String g-encstr ads, Prev: GNAT Dynamic_HTables g-dynhta ads, Up: The GNAT Library + + 12.72 ‘GNAT.Dynamic_Tables’ (‘g-dyntab.ads’) + ============================================ + + A generic package providing a single dimension array abstraction where + the length of the array can be dynamically modified. + + This package provides a facility similar to that of ‘GNAT.Table’, except + that this package declares a type that can be used to define dynamic + instances of the table, while an instantiation of ‘GNAT.Table’ creates a + single instance of the table type. + +  + File: gnat_rm.info, Node: GNAT Encode_String g-encstr ads, Next: GNAT Encode_UTF8_String g-enutst ads, Prev: GNAT Dynamic_Tables g-dyntab ads, Up: The GNAT Library + + 12.73 ‘GNAT.Encode_String’ (‘g-encstr.ads’) + =========================================== + + A generic package providing routines for encoding wide character and + wide wide character strings as sequences of 8-bit characters using a + specified encoding method. Useful in conjunction with Unicode character + coding. Note there is a preinstantiation for UTF-8. See next entry. + +  + File: gnat_rm.info, Node: GNAT Encode_UTF8_String g-enutst ads, Next: GNAT Exception_Actions g-excact ads, Prev: GNAT Encode_String g-encstr ads, Up: The GNAT Library + + 12.74 ‘GNAT.Encode_UTF8_String’ (‘g-enutst.ads’) + ================================================ + + A preinstantiation of GNAT.Encode_Strings for UTF-8 encoding. + +  + File: gnat_rm.info, Node: GNAT Exception_Actions g-excact ads, Next: GNAT Exception_Traces g-exctra ads, Prev: GNAT Encode_UTF8_String g-enutst ads, Up: The GNAT Library + + 12.75 ‘GNAT.Exception_Actions’ (‘g-excact.ads’) + =============================================== + + Provides callbacks when an exception is raised. Callbacks can be + registered for specific exceptions, or when any exception is raised. + This can be used for instance to force a core dump to ease debugging. + +  + File: gnat_rm.info, Node: GNAT Exception_Traces g-exctra ads, Next: GNAT Exceptions g-except ads, Prev: GNAT Exception_Actions g-excact ads, Up: The GNAT Library + + 12.76 ‘GNAT.Exception_Traces’ (‘g-exctra.ads’) + ============================================== + + Provides an interface allowing to control automatic output upon + exception occurrences. + +  + File: gnat_rm.info, Node: GNAT Exceptions g-except ads, Next: GNAT Expect g-expect ads, Prev: GNAT Exception_Traces g-exctra ads, Up: The GNAT Library + + 12.77 ‘GNAT.Exceptions’ (‘g-except.ads’) + ======================================== + + Normally it is not possible to raise an exception with a message from a + subprogram in a pure package, since the necessary types and subprograms + are in ‘Ada.Exceptions’ which is not a pure unit. ‘GNAT.Exceptions’ + provides a facility for getting around this limitation for a few + predefined exceptions, and for example allow raising ‘Constraint_Error’ + with a message from a pure subprogram. + +  + File: gnat_rm.info, Node: GNAT Expect g-expect ads, Next: GNAT Expect TTY g-exptty ads, Prev: GNAT Exceptions g-except ads, Up: The GNAT Library + + 12.78 ‘GNAT.Expect’ (‘g-expect.ads’) + ==================================== + + Provides a set of subprograms similar to what is available with the + standard Tcl Expect tool. It allows you to easily spawn and communicate + with an external process. You can send commands or inputs to the + process, and compare the output with some expected regular expression. + Currently ‘GNAT.Expect’ is implemented on all native GNAT ports. It is + not implemented for cross ports, and in particular is not implemented + for VxWorks or LynxOS. + +  + File: gnat_rm.info, Node: GNAT Expect TTY g-exptty ads, Next: GNAT Float_Control g-flocon ads, Prev: GNAT Expect g-expect ads, Up: The GNAT Library + + 12.79 ‘GNAT.Expect.TTY’ (‘g-exptty.ads’) + ======================================== + + As GNAT.Expect but using pseudo-terminal. Currently ‘GNAT.Expect.TTY’ + is implemented on all native GNAT ports. It is not implemented for + cross ports, and in particular is not implemented for VxWorks or LynxOS. + +  + File: gnat_rm.info, Node: GNAT Float_Control g-flocon ads, Next: GNAT Formatted_String g-forstr ads, Prev: GNAT Expect TTY g-exptty ads, Up: The GNAT Library + + 12.80 ‘GNAT.Float_Control’ (‘g-flocon.ads’) + =========================================== + + Provides an interface for resetting the floating-point processor into + the mode required for correct semantic operation in Ada. Some third + party library calls may cause this mode to be modified, and the Reset + procedure in this package can be used to reestablish the required mode. + +  + File: gnat_rm.info, Node: GNAT Formatted_String g-forstr ads, Next: GNAT Heap_Sort g-heasor ads, Prev: GNAT Float_Control g-flocon ads, Up: The GNAT Library + + 12.81 ‘GNAT.Formatted_String’ (‘g-forstr.ads’) + ============================================== + + Provides support for C/C++ printf() formatted strings. The format is + copied from the printf() routine and should therefore gives identical + output. Some generic routines are provided to be able to use types + derived from Integer, Float or enumerations as values for the formatted + string. + +  + File: gnat_rm.info, Node: GNAT Heap_Sort g-heasor ads, Next: GNAT Heap_Sort_A g-hesora ads, Prev: GNAT Formatted_String g-forstr ads, Up: The GNAT Library + + 12.82 ‘GNAT.Heap_Sort’ (‘g-heasor.ads’) + ======================================= + + Provides a general implementation of heap sort usable for sorting + arbitrary data items. Exchange and comparison procedures are provided + by passing access-to-procedure values. The algorithm used is a modified + heap sort that performs approximately N*log(N) comparisons in the worst + case. + +  + File: gnat_rm.info, Node: GNAT Heap_Sort_A g-hesora ads, Next: GNAT Heap_Sort_G g-hesorg ads, Prev: GNAT Heap_Sort g-heasor ads, Up: The GNAT Library + + 12.83 ‘GNAT.Heap_Sort_A’ (‘g-hesora.ads’) + ========================================= + + Provides a general implementation of heap sort usable for sorting + arbitrary data items. Move and comparison procedures are provided by + passing access-to-procedure values. The algorithm used is a modified + heap sort that performs approximately N*log(N) comparisons in the worst + case. This differs from ‘GNAT.Heap_Sort’ in having a less convenient + interface, but may be slightly more efficient. + +  + File: gnat_rm.info, Node: GNAT Heap_Sort_G g-hesorg ads, Next: GNAT HTable g-htable ads, Prev: GNAT Heap_Sort_A g-hesora ads, Up: The GNAT Library + + 12.84 ‘GNAT.Heap_Sort_G’ (‘g-hesorg.ads’) + ========================================= + + Similar to ‘Heap_Sort_A’ except that the move and sorting procedures are + provided as generic parameters, this improves efficiency, especially if + the procedures can be inlined, at the expense of duplicating code for + multiple instantiations. + +  + File: gnat_rm.info, Node: GNAT HTable g-htable ads, Next: GNAT IO g-io ads, Prev: GNAT Heap_Sort_G g-hesorg ads, Up: The GNAT Library + + 12.85 ‘GNAT.HTable’ (‘g-htable.ads’) + ==================================== + + A generic implementation of hash tables that can be used to hash + arbitrary data. Provides two approaches, one a simple static approach, + and the other allowing arbitrary dynamic hash tables. + +  + File: gnat_rm.info, Node: GNAT IO g-io ads, Next: GNAT IO_Aux g-io_aux ads, Prev: GNAT HTable g-htable ads, Up: The GNAT Library + + 12.86 ‘GNAT.IO’ (‘g-io.ads’) + ============================ + + A simple preelaborable input-output package that provides a subset of + simple Text_IO functions for reading characters and strings from + Standard_Input, and writing characters, strings and integers to either + Standard_Output or Standard_Error. + +  + File: gnat_rm.info, Node: GNAT IO_Aux g-io_aux ads, Next: GNAT Lock_Files g-locfil ads, Prev: GNAT IO g-io ads, Up: The GNAT Library + + 12.87 ‘GNAT.IO_Aux’ (‘g-io_aux.ads’) + ==================================== + + Provides some auxiliary functions for use with Text_IO, including a test + for whether a file exists, and functions for reading a line of text. + +  + File: gnat_rm.info, Node: GNAT Lock_Files g-locfil ads, Next: GNAT MBBS_Discrete_Random g-mbdira ads, Prev: GNAT IO_Aux g-io_aux ads, Up: The GNAT Library + + 12.88 ‘GNAT.Lock_Files’ (‘g-locfil.ads’) + ======================================== + + Provides a general interface for using files as locks. Can be used for + providing program level synchronization. + +  + File: gnat_rm.info, Node: GNAT MBBS_Discrete_Random g-mbdira ads, Next: GNAT MBBS_Float_Random g-mbflra ads, Prev: GNAT Lock_Files g-locfil ads, Up: The GNAT Library + + 12.89 ‘GNAT.MBBS_Discrete_Random’ (‘g-mbdira.ads’) + ================================================== + + The original implementation of ‘Ada.Numerics.Discrete_Random’. Uses a + modified version of the Blum-Blum-Shub generator. + +  + File: gnat_rm.info, Node: GNAT MBBS_Float_Random g-mbflra ads, Next: GNAT MD5 g-md5 ads, Prev: GNAT MBBS_Discrete_Random g-mbdira ads, Up: The GNAT Library + + 12.90 ‘GNAT.MBBS_Float_Random’ (‘g-mbflra.ads’) + =============================================== + + The original implementation of ‘Ada.Numerics.Float_Random’. Uses a + modified version of the Blum-Blum-Shub generator. + +  + File: gnat_rm.info, Node: GNAT MD5 g-md5 ads, Next: GNAT Memory_Dump g-memdum ads, Prev: GNAT MBBS_Float_Random g-mbflra ads, Up: The GNAT Library + + 12.91 ‘GNAT.MD5’ (‘g-md5.ads’) + ============================== + + Implements the MD5 Message-Digest Algorithm as described in RFC 1321, + and the HMAC-MD5 message authentication function as described in RFC + 2104 and FIPS PUB 198. + +  + File: gnat_rm.info, Node: GNAT Memory_Dump g-memdum ads, Next: GNAT Most_Recent_Exception g-moreex ads, Prev: GNAT MD5 g-md5 ads, Up: The GNAT Library + + 12.92 ‘GNAT.Memory_Dump’ (‘g-memdum.ads’) + ========================================= + + Provides a convenient routine for dumping raw memory to either the + standard output or standard error files. Uses GNAT.IO for actual + output. + +  + File: gnat_rm.info, Node: GNAT Most_Recent_Exception g-moreex ads, Next: GNAT OS_Lib g-os_lib ads, Prev: GNAT Memory_Dump g-memdum ads, Up: The GNAT Library + + 12.93 ‘GNAT.Most_Recent_Exception’ (‘g-moreex.ads’) + =================================================== + + Provides access to the most recently raised exception. Can be used for + various logging purposes, including duplicating functionality of some + Ada 83 implementation dependent extensions. + +  + File: gnat_rm.info, Node: GNAT OS_Lib g-os_lib ads, Next: GNAT Perfect_Hash_Generators g-pehage ads, Prev: GNAT Most_Recent_Exception g-moreex ads, Up: The GNAT Library + + 12.94 ‘GNAT.OS_Lib’ (‘g-os_lib.ads’) + ==================================== + + Provides a range of target independent operating system interface + functions, including time/date management, file operations, subprocess + management, including a portable spawn procedure, and access to + environment variables and error return codes. + +  + File: gnat_rm.info, Node: GNAT Perfect_Hash_Generators g-pehage ads, Next: GNAT Random_Numbers g-rannum ads, Prev: GNAT OS_Lib g-os_lib ads, Up: The GNAT Library + + 12.95 ‘GNAT.Perfect_Hash_Generators’ (‘g-pehage.ads’) + ===================================================== + + Provides a generator of static minimal perfect hash functions. No + collisions occur and each item can be retrieved from the table in one + probe (perfect property). The hash table size corresponds to the exact + size of the key set and no larger (minimal property). The key set has + to be know in advance (static property). The hash functions are also + order preserving. If w2 is inserted after w1 in the generator, their + hashcode are in the same order. These hashing functions are very + convenient for use with realtime applications. + +  + File: gnat_rm.info, Node: GNAT Random_Numbers g-rannum ads, Next: GNAT Regexp g-regexp ads, Prev: GNAT Perfect_Hash_Generators g-pehage ads, Up: The GNAT Library + + 12.96 ‘GNAT.Random_Numbers’ (‘g-rannum.ads’) + ============================================ + + Provides random number capabilities which extend those available in the + standard Ada library and are more convenient to use. + +  + File: gnat_rm.info, Node: GNAT Regexp g-regexp ads, Next: GNAT Registry g-regist ads, Prev: GNAT Random_Numbers g-rannum ads, Up: The GNAT Library + + 12.97 ‘GNAT.Regexp’ (‘g-regexp.ads’) + ==================================== + + A simple implementation of regular expressions, using a subset of + regular expression syntax copied from familiar Unix style utilities. + This is the simplest of the three pattern matching packages provided, + and is particularly suitable for ‘file globbing’ applications. + +  + File: gnat_rm.info, Node: GNAT Registry g-regist ads, Next: GNAT Regpat g-regpat ads, Prev: GNAT Regexp g-regexp ads, Up: The GNAT Library + + 12.98 ‘GNAT.Registry’ (‘g-regist.ads’) + ====================================== + + This is a high level binding to the Windows registry. It is possible to + do simple things like reading a key value, creating a new key. For full + registry API, but at a lower level of abstraction, refer to the + Win32.Winreg package provided with the Win32Ada binding + +  + File: gnat_rm.info, Node: GNAT Regpat g-regpat ads, Next: GNAT Rewrite_Data g-rewdat ads, Prev: GNAT Registry g-regist ads, Up: The GNAT Library + + 12.99 ‘GNAT.Regpat’ (‘g-regpat.ads’) + ==================================== + + A complete implementation of Unix-style regular expression matching, + copied from the original V7 style regular expression library written in + C by Henry Spencer (and binary compatible with this C library). + +  + File: gnat_rm.info, Node: GNAT Rewrite_Data g-rewdat ads, Next: GNAT Secondary_Stack_Info g-sestin ads, Prev: GNAT Regpat g-regpat ads, Up: The GNAT Library + + 12.100 ‘GNAT.Rewrite_Data’ (‘g-rewdat.ads’) + =========================================== + + A unit to rewrite on-the-fly string occurrences in a stream of data. + The implementation has a very minimal memory footprint as the full + content to be processed is not loaded into memory all at once. This + makes this interface usable for large files or socket streams. + +  + File: gnat_rm.info, Node: GNAT Secondary_Stack_Info g-sestin ads, Next: GNAT Semaphores g-semaph ads, Prev: GNAT Rewrite_Data g-rewdat ads, Up: The GNAT Library + + 12.101 ‘GNAT.Secondary_Stack_Info’ (‘g-sestin.ads’) + =================================================== + + Provide the capability to query the high water mark of the current + task’s secondary stack. + +  + File: gnat_rm.info, Node: GNAT Semaphores g-semaph ads, Next: GNAT Serial_Communications g-sercom ads, Prev: GNAT Secondary_Stack_Info g-sestin ads, Up: The GNAT Library + + 12.102 ‘GNAT.Semaphores’ (‘g-semaph.ads’) + ========================================= + + Provides classic counting and binary semaphores using protected types. + +  + File: gnat_rm.info, Node: GNAT Serial_Communications g-sercom ads, Next: GNAT SHA1 g-sha1 ads, Prev: GNAT Semaphores g-semaph ads, Up: The GNAT Library + + 12.103 ‘GNAT.Serial_Communications’ (‘g-sercom.ads’) + ==================================================== + + Provides a simple interface to send and receive data over a serial port. + This is only supported on GNU/Linux and Windows. + +  + File: gnat_rm.info, Node: GNAT SHA1 g-sha1 ads, Next: GNAT SHA224 g-sha224 ads, Prev: GNAT Serial_Communications g-sercom ads, Up: The GNAT Library + + 12.104 ‘GNAT.SHA1’ (‘g-sha1.ads’) + ================================= + + Implements the SHA-1 Secure Hash Algorithm as described in FIPS PUB + 180-3 and RFC 3174, and the HMAC-SHA1 message authentication function as + described in RFC 2104 and FIPS PUB 198. + +  + File: gnat_rm.info, Node: GNAT SHA224 g-sha224 ads, Next: GNAT SHA256 g-sha256 ads, Prev: GNAT SHA1 g-sha1 ads, Up: The GNAT Library + + 12.105 ‘GNAT.SHA224’ (‘g-sha224.ads’) + ===================================== + + Implements the SHA-224 Secure Hash Algorithm as described in FIPS PUB + 180-3, and the HMAC-SHA224 message authentication function as described + in RFC 2104 and FIPS PUB 198. + +  + File: gnat_rm.info, Node: GNAT SHA256 g-sha256 ads, Next: GNAT SHA384 g-sha384 ads, Prev: GNAT SHA224 g-sha224 ads, Up: The GNAT Library + + 12.106 ‘GNAT.SHA256’ (‘g-sha256.ads’) + ===================================== + + Implements the SHA-256 Secure Hash Algorithm as described in FIPS PUB + 180-3, and the HMAC-SHA256 message authentication function as described + in RFC 2104 and FIPS PUB 198. + +  + File: gnat_rm.info, Node: GNAT SHA384 g-sha384 ads, Next: GNAT SHA512 g-sha512 ads, Prev: GNAT SHA256 g-sha256 ads, Up: The GNAT Library + + 12.107 ‘GNAT.SHA384’ (‘g-sha384.ads’) + ===================================== + + Implements the SHA-384 Secure Hash Algorithm as described in FIPS PUB + 180-3, and the HMAC-SHA384 message authentication function as described + in RFC 2104 and FIPS PUB 198. + +  + File: gnat_rm.info, Node: GNAT SHA512 g-sha512 ads, Next: GNAT Signals g-signal ads, Prev: GNAT SHA384 g-sha384 ads, Up: The GNAT Library + + 12.108 ‘GNAT.SHA512’ (‘g-sha512.ads’) + ===================================== + + Implements the SHA-512 Secure Hash Algorithm as described in FIPS PUB + 180-3, and the HMAC-SHA512 message authentication function as described + in RFC 2104 and FIPS PUB 198. + +  + File: gnat_rm.info, Node: GNAT Signals g-signal ads, Next: GNAT Sockets g-socket ads, Prev: GNAT SHA512 g-sha512 ads, Up: The GNAT Library + + 12.109 ‘GNAT.Signals’ (‘g-signal.ads’) + ====================================== + + Provides the ability to manipulate the blocked status of signals on + supported targets. + +  + File: gnat_rm.info, Node: GNAT Sockets g-socket ads, Next: GNAT Source_Info g-souinf ads, Prev: GNAT Signals g-signal ads, Up: The GNAT Library + + 12.110 ‘GNAT.Sockets’ (‘g-socket.ads’) + ====================================== + + A high level and portable interface to develop sockets based + applications. This package is based on the sockets thin binding found + in ‘GNAT.Sockets.Thin’. Currently ‘GNAT.Sockets’ is implemented on all + native GNAT ports and on VxWorks cross prots. It is not implemented for + the LynxOS cross port. + +  + File: gnat_rm.info, Node: GNAT Source_Info g-souinf ads, Next: GNAT Spelling_Checker g-speche ads, Prev: GNAT Sockets g-socket ads, Up: The GNAT Library + + 12.111 ‘GNAT.Source_Info’ (‘g-souinf.ads’) + ========================================== + + Provides subprograms that give access to source code information known + at compile time, such as the current file name and line number. Also + provides subprograms yielding the date and time of the current + compilation (like the C macros ‘__DATE__’ and ‘__TIME__’) + +  + File: gnat_rm.info, Node: GNAT Spelling_Checker g-speche ads, Next: GNAT Spelling_Checker_Generic g-spchge ads, Prev: GNAT Source_Info g-souinf ads, Up: The GNAT Library + + 12.112 ‘GNAT.Spelling_Checker’ (‘g-speche.ads’) + =============================================== + + Provides a function for determining whether one string is a plausible + near misspelling of another string. + +  + File: gnat_rm.info, Node: GNAT Spelling_Checker_Generic g-spchge ads, Next: GNAT Spitbol Patterns g-spipat ads, Prev: GNAT Spelling_Checker g-speche ads, Up: The GNAT Library + + 12.113 ‘GNAT.Spelling_Checker_Generic’ (‘g-spchge.ads’) + ======================================================= + + Provides a generic function that can be instantiated with a string type + for determining whether one string is a plausible near misspelling of + another string. + +  + File: gnat_rm.info, Node: GNAT Spitbol Patterns g-spipat ads, Next: GNAT Spitbol g-spitbo ads, Prev: GNAT Spelling_Checker_Generic g-spchge ads, Up: The GNAT Library + + 12.114 ‘GNAT.Spitbol.Patterns’ (‘g-spipat.ads’) + =============================================== + + A complete implementation of SNOBOL4 style pattern matching. This is + the most elaborate of the pattern matching packages provided. It fully + duplicates the SNOBOL4 dynamic pattern construction and matching + capabilities, using the efficient algorithm developed by Robert Dewar + for the SPITBOL system. + +  + File: gnat_rm.info, Node: GNAT Spitbol g-spitbo ads, Next: GNAT Spitbol Table_Boolean g-sptabo ads, Prev: GNAT Spitbol Patterns g-spipat ads, Up: The GNAT Library + + 12.115 ‘GNAT.Spitbol’ (‘g-spitbo.ads’) + ====================================== + + The top level package of the collection of SPITBOL-style functionality, + this package provides basic SNOBOL4 string manipulation functions, such + as Pad, Reverse, Trim, Substr capability, as well as a generic table + function useful for constructing arbitrary mappings from strings in the + style of the SNOBOL4 TABLE function. + +  + File: gnat_rm.info, Node: GNAT Spitbol Table_Boolean g-sptabo ads, Next: GNAT Spitbol Table_Integer g-sptain ads, Prev: GNAT Spitbol g-spitbo ads, Up: The GNAT Library + + 12.116 ‘GNAT.Spitbol.Table_Boolean’ (‘g-sptabo.ads’) + ==================================================== + + A library level of instantiation of ‘GNAT.Spitbol.Patterns.Table’ for + type ‘Standard.Boolean’, giving an implementation of sets of string + values. + +  + File: gnat_rm.info, Node: GNAT Spitbol Table_Integer g-sptain ads, Next: GNAT Spitbol Table_VString g-sptavs ads, Prev: GNAT Spitbol Table_Boolean g-sptabo ads, Up: The GNAT Library + + 12.117 ‘GNAT.Spitbol.Table_Integer’ (‘g-sptain.ads’) + ==================================================== + + A library level of instantiation of ‘GNAT.Spitbol.Patterns.Table’ for + type ‘Standard.Integer’, giving an implementation of maps from string to + integer values. + +  + File: gnat_rm.info, Node: GNAT Spitbol Table_VString g-sptavs ads, Next: GNAT SSE g-sse ads, Prev: GNAT Spitbol Table_Integer g-sptain ads, Up: The GNAT Library + + 12.118 ‘GNAT.Spitbol.Table_VString’ (‘g-sptavs.ads’) + ==================================================== + + A library level of instantiation of ‘GNAT.Spitbol.Patterns.Table’ for a + variable length string type, giving an implementation of general maps + from strings to strings. + +  + File: gnat_rm.info, Node: GNAT SSE g-sse ads, Next: GNAT SSE Vector_Types g-ssvety ads, Prev: GNAT Spitbol Table_VString g-sptavs ads, Up: The GNAT Library + + 12.119 ‘GNAT.SSE’ (‘g-sse.ads’) + =============================== + + Root of a set of units aimed at offering Ada bindings to a subset of the + Intel(r) Streaming SIMD Extensions with GNAT on the x86 family of + targets. It exposes vector component types together with a general + introduction to the binding contents and use. + +  + File: gnat_rm.info, Node: GNAT SSE Vector_Types g-ssvety ads, Next: GNAT String_Hash g-strhas ads, Prev: GNAT SSE g-sse ads, Up: The GNAT Library + + 12.120 ‘GNAT.SSE.Vector_Types’ (‘g-ssvety.ads’) + =============================================== + + SSE vector types for use with SSE related intrinsics. + +  + File: gnat_rm.info, Node: GNAT String_Hash g-strhas ads, Next: GNAT Strings g-string ads, Prev: GNAT SSE Vector_Types g-ssvety ads, Up: The GNAT Library + + 12.121 ‘GNAT.String_Hash’ (‘g-strhas.ads’) + ========================================== + + Provides a generic hash function working on arrays of scalars. Both the + scalar type and the hash result type are parameters. + +  + File: gnat_rm.info, Node: GNAT Strings g-string ads, Next: GNAT String_Split g-strspl ads, Prev: GNAT String_Hash g-strhas ads, Up: The GNAT Library + + 12.122 ‘GNAT.Strings’ (‘g-string.ads’) + ====================================== + + Common String access types and related subprograms. Basically it + defines a string access and an array of string access types. + +  + File: gnat_rm.info, Node: GNAT String_Split g-strspl ads, Next: GNAT Table g-table ads, Prev: GNAT Strings g-string ads, Up: The GNAT Library + + 12.123 ‘GNAT.String_Split’ (‘g-strspl.ads’) + =========================================== + + Useful string manipulation routines: given a set of separators, split a + string wherever the separators appear, and provide direct access to the + resulting slices. This package is instantiated from ‘GNAT.Array_Split’. + +  + File: gnat_rm.info, Node: GNAT Table g-table ads, Next: GNAT Task_Lock g-tasloc ads, Prev: GNAT String_Split g-strspl ads, Up: The GNAT Library + + 12.124 ‘GNAT.Table’ (‘g-table.ads’) + =================================== + + A generic package providing a single dimension array abstraction where + the length of the array can be dynamically modified. + + This package provides a facility similar to that of + ‘GNAT.Dynamic_Tables’, except that this package declares a single + instance of the table type, while an instantiation of + ‘GNAT.Dynamic_Tables’ creates a type that can be used to define dynamic + instances of the table. + +  + File: gnat_rm.info, Node: GNAT Task_Lock g-tasloc ads, Next: GNAT Time_Stamp g-timsta ads, Prev: GNAT Table g-table ads, Up: The GNAT Library + + 12.125 ‘GNAT.Task_Lock’ (‘g-tasloc.ads’) + ======================================== + + A very simple facility for locking and unlocking sections of code using + a single global task lock. Appropriate for use in situations where + contention between tasks is very rarely expected. + +  + File: gnat_rm.info, Node: GNAT Time_Stamp g-timsta ads, Next: GNAT Threads g-thread ads, Prev: GNAT Task_Lock g-tasloc ads, Up: The GNAT Library + + 12.126 ‘GNAT.Time_Stamp’ (‘g-timsta.ads’) + ========================================= + + Provides a simple function that returns a string YYYY-MM-DD HH:MM:SS.SS + that represents the current date and time in ISO 8601 format. This is a + very simple routine with minimal code and there are no dependencies on + any other unit. + +  + File: gnat_rm.info, Node: GNAT Threads g-thread ads, Next: GNAT Traceback g-traceb ads, Prev: GNAT Time_Stamp g-timsta ads, Up: The GNAT Library + + 12.127 ‘GNAT.Threads’ (‘g-thread.ads’) + ====================================== + + Provides facilities for dealing with foreign threads which need to be + known by the GNAT run-time system. Consult the documentation of this + package for further details if your program has threads that are created + by a non-Ada environment which then accesses Ada code. + +  + File: gnat_rm.info, Node: GNAT Traceback g-traceb ads, Next: GNAT Traceback Symbolic g-trasym ads, Prev: GNAT Threads g-thread ads, Up: The GNAT Library + + 12.128 ‘GNAT.Traceback’ (‘g-traceb.ads’) + ======================================== + + Provides a facility for obtaining non-symbolic traceback information, + useful in various debugging situations. + +  + File: gnat_rm.info, Node: GNAT Traceback Symbolic g-trasym ads, Next: GNAT UTF_32 g-table ads, Prev: GNAT Traceback g-traceb ads, Up: The GNAT Library + + 12.129 ‘GNAT.Traceback.Symbolic’ (‘g-trasym.ads’) + ================================================= + +  + File: gnat_rm.info, Node: GNAT UTF_32 g-table ads, Next: GNAT Wide_Spelling_Checker g-u3spch ads, Prev: GNAT Traceback Symbolic g-trasym ads, Up: The GNAT Library + + 12.130 ‘GNAT.UTF_32’ (‘g-table.ads’) + ==================================== + + This is a package intended to be used in conjunction with the + ‘Wide_Character’ type in Ada 95 and the ‘Wide_Wide_Character’ type in + Ada 2005 (available in ‘GNAT’ in Ada 2005 mode). This package contains + Unicode categorization routines, as well as lexical categorization + routines corresponding to the Ada 2005 lexical rules for identifiers and + strings, and also a lower case to upper case fold routine corresponding + to the Ada 2005 rules for identifier equivalence. + +  + File: gnat_rm.info, Node: GNAT Wide_Spelling_Checker g-u3spch ads, Next: GNAT Wide_Spelling_Checker g-wispch ads, Prev: GNAT UTF_32 g-table ads, Up: The GNAT Library + + 12.131 ‘GNAT.Wide_Spelling_Checker’ (‘g-u3spch.ads’) + ==================================================== + + Provides a function for determining whether one wide wide string is a + plausible near misspelling of another wide wide string, where the + strings are represented using the UTF_32_String type defined in + System.Wch_Cnv. + +  + File: gnat_rm.info, Node: GNAT Wide_Spelling_Checker g-wispch ads, Next: GNAT Wide_String_Split g-wistsp ads, Prev: GNAT Wide_Spelling_Checker g-u3spch ads, Up: The GNAT Library + + 12.132 ‘GNAT.Wide_Spelling_Checker’ (‘g-wispch.ads’) + ==================================================== + + Provides a function for determining whether one wide string is a + plausible near misspelling of another wide string. + +  + File: gnat_rm.info, Node: GNAT Wide_String_Split g-wistsp ads, Next: GNAT Wide_Wide_Spelling_Checker g-zspche ads, Prev: GNAT Wide_Spelling_Checker g-wispch ads, Up: The GNAT Library + + 12.133 ‘GNAT.Wide_String_Split’ (‘g-wistsp.ads’) + ================================================ + + Useful wide string manipulation routines: given a set of separators, + split a wide string wherever the separators appear, and provide direct + access to the resulting slices. This package is instantiated from + ‘GNAT.Array_Split’. + +  + File: gnat_rm.info, Node: GNAT Wide_Wide_Spelling_Checker g-zspche ads, Next: GNAT Wide_Wide_String_Split g-zistsp ads, Prev: GNAT Wide_String_Split g-wistsp ads, Up: The GNAT Library + + 12.134 ‘GNAT.Wide_Wide_Spelling_Checker’ (‘g-zspche.ads’) + ========================================================= + + Provides a function for determining whether one wide wide string is a + plausible near misspelling of another wide wide string. + +  + File: gnat_rm.info, Node: GNAT Wide_Wide_String_Split g-zistsp ads, Next: Interfaces C Extensions i-cexten ads, Prev: GNAT Wide_Wide_Spelling_Checker g-zspche ads, Up: The GNAT Library + + 12.135 ‘GNAT.Wide_Wide_String_Split’ (‘g-zistsp.ads’) + ===================================================== + + Useful wide wide string manipulation routines: given a set of + separators, split a wide wide string wherever the separators appear, and + provide direct access to the resulting slices. This package is + instantiated from ‘GNAT.Array_Split’. + +  + File: gnat_rm.info, Node: Interfaces C Extensions i-cexten ads, Next: Interfaces C Streams i-cstrea ads, Prev: GNAT Wide_Wide_String_Split g-zistsp ads, Up: The GNAT Library + + 12.136 ‘Interfaces.C.Extensions’ (‘i-cexten.ads’) + ================================================= + + This package contains additional C-related definitions, intended for use + with either manually or automatically generated bindings to C libraries. + +  + File: gnat_rm.info, Node: Interfaces C Streams i-cstrea ads, Next: Interfaces Packed_Decimal i-pacdec ads, Prev: Interfaces C Extensions i-cexten ads, Up: The GNAT Library + + 12.137 ‘Interfaces.C.Streams’ (‘i-cstrea.ads’) + ============================================== + + This package is a binding for the most commonly used operations on C + streams. + +  + File: gnat_rm.info, Node: Interfaces Packed_Decimal i-pacdec ads, Next: Interfaces VxWorks i-vxwork ads, Prev: Interfaces C Streams i-cstrea ads, Up: The GNAT Library + + 12.138 ‘Interfaces.Packed_Decimal’ (‘i-pacdec.ads’) + =================================================== + + This package provides a set of routines for conversions to and from a + packed decimal format compatible with that used on IBM mainframes. + +  + File: gnat_rm.info, Node: Interfaces VxWorks i-vxwork ads, Next: Interfaces VxWorks Int_Connection i-vxinco ads, Prev: Interfaces Packed_Decimal i-pacdec ads, Up: The GNAT Library + + 12.139 ‘Interfaces.VxWorks’ (‘i-vxwork.ads’) + ============================================ + + This package provides a limited binding to the VxWorks API. In + particular, it interfaces with the VxWorks hardware interrupt + facilities. + +  + File: gnat_rm.info, Node: Interfaces VxWorks Int_Connection i-vxinco ads, Next: Interfaces VxWorks IO i-vxwoio ads, Prev: Interfaces VxWorks i-vxwork ads, Up: The GNAT Library + + 12.140 ‘Interfaces.VxWorks.Int_Connection’ (‘i-vxinco.ads’) + =========================================================== + + This package provides a way for users to replace the use of intConnect() + with a custom routine for installing interrupt handlers. + +  + File: gnat_rm.info, Node: Interfaces VxWorks IO i-vxwoio ads, Next: System Address_Image s-addima ads, Prev: Interfaces VxWorks Int_Connection i-vxinco ads, Up: The GNAT Library + + 12.141 ‘Interfaces.VxWorks.IO’ (‘i-vxwoio.ads’) + =============================================== + + This package provides a binding to the ioctl (IO/Control) function of + VxWorks, defining a set of option values and function codes. A + particular use of this package is to enable the use of Get_Immediate + under VxWorks. + +  + File: gnat_rm.info, Node: System Address_Image s-addima ads, Next: System Assertions s-assert ads, Prev: Interfaces VxWorks IO i-vxwoio ads, Up: The GNAT Library + + 12.142 ‘System.Address_Image’ (‘s-addima.ads’) + ============================================== + + This function provides a useful debugging function that gives an + (implementation dependent) string which identifies an address. + +  + File: gnat_rm.info, Node: System Assertions s-assert ads, Next: System Atomic_Counters s-atocou ads, Prev: System Address_Image s-addima ads, Up: The GNAT Library + + 12.143 ‘System.Assertions’ (‘s-assert.ads’) + =========================================== + + This package provides the declaration of the exception raised by an + run-time assertion failure, as well as the routine that is used + internally to raise this assertion. + +  + File: gnat_rm.info, Node: System Atomic_Counters s-atocou ads, Next: System Memory s-memory ads, Prev: System Assertions s-assert ads, Up: The GNAT Library + + 12.144 ‘System.Atomic_Counters’ (‘s-atocou.ads’) + ================================================ + + This package provides the declaration of an atomic counter type, + together with efficient routines (using hardware synchronization + primitives) for incrementing, decrementing, and testing of these + counters. This package is implemented on most targets, including all + Alpha, AARCH64, ARM, ia64, PowerPC, SPARC V9, x86, and x86_64 platforms. + +  + File: gnat_rm.info, Node: System Memory s-memory ads, Next: System Multiprocessors s-multip ads, Prev: System Atomic_Counters s-atocou ads, Up: The GNAT Library + + 12.145 ‘System.Memory’ (‘s-memory.ads’) + ======================================= + + This package provides the interface to the low level routines used by + the generated code for allocation and freeing storage for the default + storage pool (analogous to the C routines malloc and free. It also + provides a reallocation interface analogous to the C routine realloc. + The body of this unit may be modified to provide alternative allocation + mechanisms for the default pool, and in addition, direct calls to this + unit may be made for low level allocation uses (for example see the body + of ‘GNAT.Tables’). + +  + File: gnat_rm.info, Node: System Multiprocessors s-multip ads, Next: System Multiprocessors Dispatching_Domains s-mudido ads, Prev: System Memory s-memory ads, Up: The GNAT Library + + 12.146 ‘System.Multiprocessors’ (‘s-multip.ads’) + ================================================ + + This is an Ada 2012 unit defined in the Ada 2012 Reference Manual, but + in GNAT we also make it available in Ada 95 and Ada 2005 (where it is + technically an implementation-defined addition). + +  + File: gnat_rm.info, Node: System Multiprocessors Dispatching_Domains s-mudido ads, Next: System Partition_Interface s-parint ads, Prev: System Multiprocessors s-multip ads, Up: The GNAT Library + + 12.147 ‘System.Multiprocessors.Dispatching_Domains’ (‘s-mudido.ads’) + ==================================================================== + + This is an Ada 2012 unit defined in the Ada 2012 Reference Manual, but + in GNAT we also make it available in Ada 95 and Ada 2005 (where it is + technically an implementation-defined addition). + +  + File: gnat_rm.info, Node: System Partition_Interface s-parint ads, Next: System Pool_Global s-pooglo ads, Prev: System Multiprocessors Dispatching_Domains s-mudido ads, Up: The GNAT Library + + 12.148 ‘System.Partition_Interface’ (‘s-parint.ads’) + ==================================================== + + This package provides facilities for partition interfacing. It is used + primarily in a distribution context when using Annex E with ‘GLADE’. + +  + File: gnat_rm.info, Node: System Pool_Global s-pooglo ads, Next: System Pool_Local s-pooloc ads, Prev: System Partition_Interface s-parint ads, Up: The GNAT Library + + 12.149 ‘System.Pool_Global’ (‘s-pooglo.ads’) + ============================================ + + This package provides a storage pool that is equivalent to the default + storage pool used for access types for which no pool is specifically + declared. It uses malloc/free to allocate/free and does not attempt to + do any automatic reclamation. + +  + File: gnat_rm.info, Node: System Pool_Local s-pooloc ads, Next: System Restrictions s-restri ads, Prev: System Pool_Global s-pooglo ads, Up: The GNAT Library + + 12.150 ‘System.Pool_Local’ (‘s-pooloc.ads’) + =========================================== + + This package provides a storage pool that is intended for use with + locally defined access types. It uses malloc/free for allocate/free, + and maintains a list of allocated blocks, so that all storage allocated + for the pool can be freed automatically when the pool is finalized. + +  + File: gnat_rm.info, Node: System Restrictions s-restri ads, Next: System Rident s-rident ads, Prev: System Pool_Local s-pooloc ads, Up: The GNAT Library + + 12.151 ‘System.Restrictions’ (‘s-restri.ads’) + ============================================= + + This package provides facilities for accessing at run time the status of + restrictions specified at compile time for the partition. Information + is available both with regard to actual restrictions specified, and with + regard to compiler determined information on which restrictions are + violated by one or more packages in the partition. + +  + File: gnat_rm.info, Node: System Rident s-rident ads, Next: System Strings Stream_Ops s-ststop ads, Prev: System Restrictions s-restri ads, Up: The GNAT Library + + 12.152 ‘System.Rident’ (‘s-rident.ads’) + ======================================= + + This package provides definitions of the restrictions identifiers + supported by GNAT, and also the format of the restrictions provided in + package System.Restrictions. It is not normally necessary to ‘with’ + this generic package since the necessary instantiation is included in + package System.Restrictions. + +  + File: gnat_rm.info, Node: System Strings Stream_Ops s-ststop ads, Next: System Unsigned_Types s-unstyp ads, Prev: System Rident s-rident ads, Up: The GNAT Library + + 12.153 ‘System.Strings.Stream_Ops’ (‘s-ststop.ads’) + =================================================== + + This package provides a set of stream subprograms for standard string + types. It is intended primarily to support implicit use of such + subprograms when stream attributes are applied to string types, but the + subprograms in this package can be used directly by application + programs. + +  + File: gnat_rm.info, Node: System Unsigned_Types s-unstyp ads, Next: System Wch_Cnv s-wchcnv ads, Prev: System Strings Stream_Ops s-ststop ads, Up: The GNAT Library + + 12.154 ‘System.Unsigned_Types’ (‘s-unstyp.ads’) + =============================================== + + This package contains definitions of standard unsigned types that + correspond in size to the standard signed types declared in Standard, + and (unlike the types in Interfaces) have corresponding names. It also + contains some related definitions for other specialized types used by + the compiler in connection with packed array types. + +  + File: gnat_rm.info, Node: System Wch_Cnv s-wchcnv ads, Next: System Wch_Con s-wchcon ads, Prev: System Unsigned_Types s-unstyp ads, Up: The GNAT Library + + 12.155 ‘System.Wch_Cnv’ (‘s-wchcnv.ads’) + ======================================== + + This package provides routines for converting between wide and wide wide + characters and a representation as a value of type ‘Standard.String’, + using a specified wide character encoding method. It uses definitions + in package ‘System.Wch_Con’. + +  + File: gnat_rm.info, Node: System Wch_Con s-wchcon ads, Prev: System Wch_Cnv s-wchcnv ads, Up: The GNAT Library + + 12.156 ‘System.Wch_Con’ (‘s-wchcon.ads’) + ======================================== + + This package provides definitions and descriptions of the various + methods used for encoding wide characters in ordinary strings. These + definitions are used by the package ‘System.Wch_Cnv’. + +  + File: gnat_rm.info, Node: Interfacing to Other Languages, Next: Specialized Needs Annexes, Prev: The GNAT Library, Up: Top + + 13 Interfacing to Other Languages + ********************************* + + The facilities in Annex B of the Ada Reference Manual are fully + implemented in GNAT, and in addition, a full interface to C++ is + provided. + + * Menu: + + * Interfacing to C:: + * Interfacing to C++:: + * Interfacing to COBOL:: + * Interfacing to Fortran:: + * Interfacing to non-GNAT Ada code:: + +  + File: gnat_rm.info, Node: Interfacing to C, Next: Interfacing to C++, Up: Interfacing to Other Languages + + 13.1 Interfacing to C + ===================== + + Interfacing to C with GNAT can use one of two approaches: + + * The types in the package ‘Interfaces.C’ may be used. + + * Standard Ada types may be used directly. This may be less portable + to other compilers, but will work on all GNAT compilers, which + guarantee correspondence between the C and Ada types. + + Pragma ‘Convention C’ may be applied to Ada types, but mostly has no + effect, since this is the default. The following table shows the + correspondence between Ada scalar types and the corresponding C types. + + Ada Type C Type + + ---------------------------------------------------------------------------------------------------- + + ‘Integer’ ‘int’ + + + ‘Short_Integer’ ‘short’ + + + ‘Short_Short_Integer’ ‘signed char’ + + + ‘Long_Integer’ ‘long’ + + + ‘Long_Long_Integer’ ‘long long’ + + + ‘Short_Float’ ‘float’ + + + ‘Float’ ‘float’ + + + ‘Long_Float’ ‘double’ + + + ‘Long_Long_Float’ This is the longest floating-point type supported by the hardware. + + + Additionally, there are the following general correspondences between + Ada and C types: + + * Ada enumeration types map to C enumeration types directly if pragma + ‘Convention C’ is specified, which causes them to have a length of + 32 bits, except for boolean types which map to C99 ‘bool’ and for + which the length is 8 bits. Without pragma ‘Convention C’, Ada + enumeration types map to 8, 16, or 32 bits (i.e., C types ‘signed + char’, ‘short’, ‘int’, respectively) depending on the number of + values passed. This is the only case in which pragma ‘Convention + C’ affects the representation of an Ada type. + + * Ada access types map to C pointers, except for the case of pointers + to unconstrained types in Ada, which have no direct C equivalent. + + * Ada arrays map directly to C arrays. + + * Ada records map directly to C structures. + + * Packed Ada records map to C structures where all members are bit + fields of the length corresponding to the ‘type'Size’ value in Ada. + +  + File: gnat_rm.info, Node: Interfacing to C++, Next: Interfacing to COBOL, Prev: Interfacing to C, Up: Interfacing to Other Languages + + 13.2 Interfacing to C++ + ======================= + + The interface to C++ makes use of the following pragmas, which are + primarily intended to be constructed automatically using a binding + generator tool, although it is possible to construct them by hand. + + Using these pragmas it is possible to achieve complete inter-operability + between Ada tagged types and C++ class definitions. See *note + Implementation Defined Pragmas: 7, for more details. + + ‘pragma CPP_Class ([Entity =>] `LOCAL_NAME')’ + + The argument denotes an entity in the current declarative region + that is declared as a tagged or untagged record type. It indicates + that the type corresponds to an externally declared C++ class type, + and is to be laid out the same way that C++ would lay out the type. + + Note: Pragma ‘CPP_Class’ is currently obsolete. It is supported + for backward compatibility but its functionality is available using + pragma ‘Import’ with ‘Convention’ = ‘CPP’. + + ‘pragma CPP_Constructor ([Entity =>] `LOCAL_NAME')’ + + This pragma identifies an imported function (imported in the usual + way with pragma ‘Import’) as corresponding to a C++ constructor. + + A few restrictions are placed on the use of the ‘Access’ attribute in + conjunction with subprograms subject to convention ‘CPP’: the attribute + may be used neither on primitive operations of a tagged record type with + convention ‘CPP’, imported or not, nor on subprograms imported with + pragma ‘CPP_Constructor’. + + In addition, C++ exceptions are propagated and can be handled in an + ‘others’ choice of an exception handler. The corresponding Ada + occurrence has no message, and the simple name of the exception identity + contains ‘Foreign_Exception’. Finalization and awaiting dependent tasks + works properly when such foreign exceptions are propagated. + + It is also possible to import a C++ exception using the following + syntax: + + LOCAL_NAME : exception; + pragma Import (Cpp, + [Entity =>] LOCAL_NAME, + [External_Name =>] static_string_EXPRESSION); + + The ‘External_Name’ is the name of the C++ RTTI symbol. You can then + cover a specific C++ exception in an exception handler. + +  + File: gnat_rm.info, Node: Interfacing to COBOL, Next: Interfacing to Fortran, Prev: Interfacing to C++, Up: Interfacing to Other Languages + + 13.3 Interfacing to COBOL + ========================= + + Interfacing to COBOL is achieved as described in section B.4 of the Ada + Reference Manual. + +  + File: gnat_rm.info, Node: Interfacing to Fortran, Next: Interfacing to non-GNAT Ada code, Prev: Interfacing to COBOL, Up: Interfacing to Other Languages + + 13.4 Interfacing to Fortran + =========================== + + Interfacing to Fortran is achieved as described in section B.5 of the + Ada Reference Manual. The pragma ‘Convention Fortran’, applied to a + multi-dimensional array causes the array to be stored in column-major + order as required for convenient interface to Fortran. + +  + File: gnat_rm.info, Node: Interfacing to non-GNAT Ada code, Prev: Interfacing to Fortran, Up: Interfacing to Other Languages + + 13.5 Interfacing to non-GNAT Ada code + ===================================== + + It is possible to specify the convention ‘Ada’ in a pragma ‘Import’ or + pragma ‘Export’. However this refers to the calling conventions used by + GNAT, which may or may not be similar enough to those used by some other + Ada 83 / Ada 95 / Ada 2005 compiler to allow interoperation. + + If arguments types are kept simple, and if the foreign compiler + generally follows system calling conventions, then it may be possible to + integrate files compiled by other Ada compilers, provided that the + elaboration issues are adequately addressed (for example by eliminating + the need for any load time elaboration). + + In particular, GNAT running on VMS is designed to be highly compatible + with the DEC Ada 83 compiler, so this is one case in which it is + possible to import foreign units of this type, provided that the data + items passed are restricted to simple scalar values or simple record + types without variants, or simple array types with fixed bounds. + +  + File: gnat_rm.info, Node: Specialized Needs Annexes, Next: Implementation of Specific Ada Features, Prev: Interfacing to Other Languages, Up: Top + + 14 Specialized Needs Annexes + **************************** + + Ada 95, Ada 2005, and Ada 2012 define a number of Specialized Needs + Annexes, which are not required in all implementations. However, as + described in this chapter, GNAT implements all of these annexes: + + `Systems Programming (Annex C)' + + The Systems Programming Annex is fully implemented. + + `Real-Time Systems (Annex D)' + + The Real-Time Systems Annex is fully implemented. + + `Distributed Systems (Annex E)' + + Stub generation is fully implemented in the GNAT compiler. In + addition, a complete compatible PCS is available as part of the + GLADE system, a separate product. When the two products are used + in conjunction, this annex is fully implemented. + + `Information Systems (Annex F)' + + The Information Systems annex is fully implemented. + + `Numerics (Annex G)' + + The Numerics Annex is fully implemented. + + `Safety and Security / High-Integrity Systems (Annex H)' + + The Safety and Security Annex (termed the High-Integrity Systems + Annex in Ada 2005) is fully implemented. + +  + File: gnat_rm.info, Node: Implementation of Specific Ada Features, Next: Implementation of Ada 2012 Features, Prev: Specialized Needs Annexes, Up: Top + + 15 Implementation of Specific Ada Features + ****************************************** + + This chapter describes the GNAT implementation of several Ada language + facilities. + + * Menu: + + * Machine Code Insertions:: + * GNAT Implementation of Tasking:: + * GNAT Implementation of Shared Passive Packages:: + * Code Generation for Array Aggregates:: + * The Size of Discriminated Records with Default Discriminants:: + * Image Values For Nonscalar Types:: + * Strict Conformance to the Ada Reference Manual:: + +  + File: gnat_rm.info, Node: Machine Code Insertions, Next: GNAT Implementation of Tasking, Up: Implementation of Specific Ada Features + + 15.1 Machine Code Insertions + ============================ + + Package ‘Machine_Code’ provides machine code support as described in the + Ada Reference Manual in two separate forms: + + * Machine code statements, consisting of qualified expressions that + fit the requirements of RM section 13.8. + + * An intrinsic callable procedure, providing an alternative mechanism + of including machine instructions in a subprogram. + + The two features are similar, and both are closely related to the + mechanism provided by the asm instruction in the GNU C compiler. Full + understanding and use of the facilities in this package requires + understanding the asm instruction, see the section on Extended Asm in + ‘Using_the_GNU_Compiler_Collection_(GCC)’. + + Calls to the function ‘Asm’ and the procedure ‘Asm’ have identical + semantic restrictions and effects as described below. Both are provided + so that the procedure call can be used as a statement, and the function + call can be used to form a code_statement. + + Consider this C ‘asm’ instruction: + + asm ("fsinx %1 %0" : "=f" (result) : "f" (angle)); + + The equivalent can be written for GNAT as: + + Asm ("fsinx %1 %0", + My_Float'Asm_Output ("=f", result), + My_Float'Asm_Input ("f", angle)); + + The first argument to ‘Asm’ is the assembler template, and is identical + to what is used in GNU C. This string must be a static expression. The + second argument is the output operand list. It is either a single + ‘Asm_Output’ attribute reference, or a list of such references enclosed + in parentheses (technically an array aggregate of such references). + + The ‘Asm_Output’ attribute denotes a function that takes two parameters. + The first is a string, the second is the name of a variable of the type + designated by the attribute prefix. The first (string) argument is + required to be a static expression and designates the constraint (see + the section on Constraints in ‘Using_the_GNU_Compiler_Collection_(GCC)’) + for the parameter; e.g., what kind of register is required. The second + argument is the variable to be written or updated with the result. The + possible values for constraint are the same as those used in the RTL, + and are dependent on the configuration file used to build the GCC back + end. If there are no output operands, then this argument may either be + omitted, or explicitly given as ‘No_Output_Operands’. No support is + provided for GNU C’s symbolic names for output parameters. + + The second argument of ‘my_float'Asm_Output’ functions as though it were + an ‘out’ parameter, which is a little curious, but all names have the + form of expressions, so there is no syntactic irregularity, even though + normally functions would not be permitted ‘out’ parameters. The third + argument is the list of input operands. It is either a single + ‘Asm_Input’ attribute reference, or a list of such references enclosed + in parentheses (technically an array aggregate of such references). + + The ‘Asm_Input’ attribute denotes a function that takes two parameters. + The first is a string, the second is an expression of the type + designated by the prefix. The first (string) argument is required to be + a static expression, and is the constraint for the parameter, (e.g., + what kind of register is required). The second argument is the value to + be used as the input argument. The possible values for the constraint + are the same as those used in the RTL, and are dependent on the + configuration file used to built the GCC back end. No support is + provided for GNU C’s symbolic names for input parameters. + + If there are no input operands, this argument may either be omitted, or + explicitly given as ‘No_Input_Operands’. The fourth argument, not + present in the above example, is a list of register names, called the + `clobber' argument. This argument, if given, must be a static string + expression, and is a space or comma separated list of names of registers + that must be considered destroyed as a result of the ‘Asm’ call. If + this argument is the null string (the default value), then the code + generator assumes that no additional registers are destroyed. In + addition to registers, the special clobbers ‘memory’ and ‘cc’ as + described in the GNU C docs are both supported. + + The fifth argument, not present in the above example, called the + `volatile' argument, is by default ‘False’. It can be set to the + literal value ‘True’ to indicate to the code generator that all + optimizations with respect to the instruction specified should be + suppressed, and in particular an instruction that has outputs will still + be generated, even if none of the outputs are used. See + ‘Using_the_GNU_Compiler_Collection_(GCC)’ for the full description. + Generally it is strongly advisable to use Volatile for any ASM statement + that is missing either input or output operands or to avoid unwanted + optimizations. A warning is generated if this advice is not followed. + + No support is provided for GNU C’s ‘asm goto’ feature. + + The ‘Asm’ subprograms may be used in two ways. First the procedure + forms can be used anywhere a procedure call would be valid, and + correspond to what the RM calls ‘intrinsic’ routines. Such calls can be + used to intersperse machine instructions with other Ada statements. + Second, the function forms, which return a dummy value of the limited + private type ‘Asm_Insn’, can be used in code statements, and indeed this + is the only context where such calls are allowed. Code statements + appear as aggregates of the form: + + Asm_Insn'(Asm (...)); + Asm_Insn'(Asm_Volatile (...)); + + In accordance with RM rules, such code statements are allowed only + within subprograms whose entire body consists of such statements. It is + not permissible to intermix such statements with other Ada statements. + + Typically the form using intrinsic procedure calls is more convenient + and more flexible. The code statement form is provided to meet the RM + suggestion that such a facility should be made available. The following + is the exact syntax of the call to ‘Asm’. As usual, if named notation + is used, the arguments may be given in arbitrary order, following the + normal rules for use of positional and named arguments: + + ASM_CALL ::= Asm ( + [Template =>] static_string_EXPRESSION + [,[Outputs =>] OUTPUT_OPERAND_LIST ] + [,[Inputs =>] INPUT_OPERAND_LIST ] + [,[Clobber =>] static_string_EXPRESSION ] + [,[Volatile =>] static_boolean_EXPRESSION] ) + + OUTPUT_OPERAND_LIST ::= + [PREFIX.]No_Output_Operands + | OUTPUT_OPERAND_ATTRIBUTE + | (OUTPUT_OPERAND_ATTRIBUTE {,OUTPUT_OPERAND_ATTRIBUTE}) + + OUTPUT_OPERAND_ATTRIBUTE ::= + SUBTYPE_MARK'Asm_Output (static_string_EXPRESSION, NAME) + + INPUT_OPERAND_LIST ::= + [PREFIX.]No_Input_Operands + | INPUT_OPERAND_ATTRIBUTE + | (INPUT_OPERAND_ATTRIBUTE {,INPUT_OPERAND_ATTRIBUTE}) + + INPUT_OPERAND_ATTRIBUTE ::= + SUBTYPE_MARK'Asm_Input (static_string_EXPRESSION, EXPRESSION) + + The identifiers ‘No_Input_Operands’ and ‘No_Output_Operands’ are + declared in the package ‘Machine_Code’ and must be referenced according + to normal visibility rules. In particular if there is no ‘use’ clause + for this package, then appropriate package name qualification is + required. + +  + File: gnat_rm.info, Node: GNAT Implementation of Tasking, Next: GNAT Implementation of Shared Passive Packages, Prev: Machine Code Insertions, Up: Implementation of Specific Ada Features + + 15.2 GNAT Implementation of Tasking + =================================== + + This chapter outlines the basic GNAT approach to tasking (in particular, + a multi-layered library for portability) and discusses issues related to + compliance with the Real-Time Systems Annex. + + * Menu: + + * Mapping Ada Tasks onto the Underlying Kernel Threads:: + * Ensuring Compliance with the Real-Time Annex:: + * Support for Locking Policies:: + +  + File: gnat_rm.info, Node: Mapping Ada Tasks onto the Underlying Kernel Threads, Next: Ensuring Compliance with the Real-Time Annex, Up: GNAT Implementation of Tasking + + 15.2.1 Mapping Ada Tasks onto the Underlying Kernel Threads + ----------------------------------------------------------- + + GNAT’s run-time support comprises two layers: + + * GNARL (GNAT Run-time Layer) + + * GNULL (GNAT Low-level Library) + + In GNAT, Ada’s tasking services rely on a platform and OS independent + layer known as GNARL. This code is responsible for implementing the + correct semantics of Ada’s task creation, rendezvous, protected + operations etc. + + GNARL decomposes Ada’s tasking semantics into simpler lower level + operations such as create a thread, set the priority of a thread, yield, + create a lock, lock/unlock, etc. The spec for these low-level + operations constitutes GNULLI, the GNULL Interface. This interface is + directly inspired from the POSIX real-time API. + + If the underlying executive or OS implements the POSIX standard + faithfully, the GNULL Interface maps as is to the services offered by + the underlying kernel. Otherwise, some target dependent glue code maps + the services offered by the underlying kernel to the semantics expected + by GNARL. + + Whatever the underlying OS (VxWorks, UNIX, Windows, etc.) the key point + is that each Ada task is mapped on a thread in the underlying kernel. + For example, in the case of VxWorks, one Ada task = one VxWorks task. + + In addition Ada task priorities map onto the underlying thread + priorities. Mapping Ada tasks onto the underlying kernel threads has + several advantages: + + * The underlying scheduler is used to schedule the Ada tasks. This + makes Ada tasks as efficient as kernel threads from a scheduling + standpoint. + + * Interaction with code written in C containing threads is eased + since at the lowest level Ada tasks and C threads map onto the same + underlying kernel concept. + + * When an Ada task is blocked during I/O the remaining Ada tasks are + able to proceed. + + * On multiprocessor systems Ada tasks can execute in parallel. + + Some threads libraries offer a mechanism to fork a new process, with the + child process duplicating the threads from the parent. GNAT does not + support this functionality when the parent contains more than one task. + +  + File: gnat_rm.info, Node: Ensuring Compliance with the Real-Time Annex, Next: Support for Locking Policies, Prev: Mapping Ada Tasks onto the Underlying Kernel Threads, Up: GNAT Implementation of Tasking + + 15.2.2 Ensuring Compliance with the Real-Time Annex + --------------------------------------------------- + + Although mapping Ada tasks onto the underlying threads has significant + advantages, it does create some complications when it comes to + respecting the scheduling semantics specified in the real-time annex + (Annex D). + + For instance the Annex D requirement for the ‘FIFO_Within_Priorities’ + scheduling policy states: + + `When the active priority of a ready task that is not running + changes, or the setting of its base priority takes effect, the task + is removed from the ready queue for its old active priority and is + added at the tail of the ready queue for its new active priority, + except in the case where the active priority is lowered due to the + loss of inherited priority, in which case the task is added at the + head of the ready queue for its new active priority.' + + While most kernels do put tasks at the end of the priority queue when a + task changes its priority, (which respects the main + FIFO_Within_Priorities requirement), almost none keep a thread at the + beginning of its priority queue when its priority drops from the loss of + inherited priority. + + As a result most vendors have provided incomplete Annex D + implementations. + + The GNAT run-time, has a nice cooperative solution to this problem which + ensures that accurate FIFO_Within_Priorities semantics are respected. + + The principle is as follows. When an Ada task T is about to start + running, it checks whether some other Ada task R with the same priority + as T has been suspended due to the loss of priority inheritance. If + this is the case, T yields and is placed at the end of its priority + queue. When R arrives at the front of the queue it executes. + + Note that this simple scheme preserves the relative order of the tasks + that were ready to execute in the priority queue where R has been placed + at the end. + +  + File: gnat_rm.info, Node: Support for Locking Policies, Prev: Ensuring Compliance with the Real-Time Annex, Up: GNAT Implementation of Tasking + + 15.2.3 Support for Locking Policies + ----------------------------------- + + This section specifies which policies specified by pragma Locking_Policy + are supported on which platforms. + + GNAT supports the standard ‘Ceiling_Locking’ policy, and the + implementation defined ‘Inheritance_Locking’ and + ‘Concurrent_Readers_Locking’ policies. + + ‘Ceiling_Locking’ is supported on all platforms if the operating system + supports it. In particular, ‘Ceiling_Locking’ is not supported on + VxWorks. ‘Inheritance_Locking’ is supported on Linux, Darwin (Mac OS + X), LynxOS 178, and VxWorks. ‘Concurrent_Readers_Locking’ is supported + on Linux. + + Notes about ‘Ceiling_Locking’ on Linux: If the process is running as + ‘root’, ceiling locking is used. If the capabilities facility is + installed (“sudo apt-get –assume-yes install libcap-dev” on Ubuntu, for + example), and the program is linked against that library (“-largs + -lcap”), and the executable file has the cap_sys_nice capability (“sudo + /sbin/setcap cap_sys_nice=ep executable_file_name”), then ceiling + locking is used. Otherwise, the ‘Ceiling_Locking’ policy is ignored. + +  + File: gnat_rm.info, Node: GNAT Implementation of Shared Passive Packages, Next: Code Generation for Array Aggregates, Prev: GNAT Implementation of Tasking, Up: Implementation of Specific Ada Features + + 15.3 GNAT Implementation of Shared Passive Packages + =================================================== + + GNAT fully implements the pragma ‘Shared_Passive’ for the purpose of + designating shared passive packages. This allows the use of passive + partitions in the context described in the Ada Reference Manual; i.e., + for communication between separate partitions of a distributed + application using the features in Annex E. + + However, the implementation approach used by GNAT provides for more + extensive usage as follows: + + `Communication between separate programs' + + This allows separate programs to access the data in passive + partitions, using protected objects for synchronization where + needed. The only requirement is that the two programs have a + common shared file system. It is even possible for programs + running on different machines with different architectures (e.g., + different endianness) to communicate via the data in a passive + partition. + + `Persistence between program runs' + + The data in a passive package can persist from one run of a program + to another, so that a later program sees the final values stored by + a previous run of the same program. + + The implementation approach used is to store the data in files. A + separate stream file is created for each object in the package, and an + access to an object causes the corresponding file to be read or written. + + The environment variable ‘SHARED_MEMORY_DIRECTORY’ should be set to the + directory to be used for these files. The files in this directory have + names that correspond to their fully qualified names. For example, if + we have the package + + package X is + pragma Shared_Passive (X); + Y : Integer; + Z : Float; + end X; + + and the environment variable is set to ‘/stemp/’, then the files created + will have the names: + + /stemp/x.y + /stemp/x.z + + These files are created when a value is initially written to the object, + and the files are retained until manually deleted. This provides the + persistence semantics. If no file exists, it means that no partition + has assigned a value to the variable; in this case the initial value + declared in the package will be used. This model ensures that there are + no issues in synchronizing the elaboration process, since elaboration of + passive packages elaborates the initial values, but does not create the + files. + + The files are written using normal ‘Stream_IO’ access. If you want to + be able to communicate between programs or partitions running on + different architectures, then you should use the XDR versions of the + stream attribute routines, since these are architecture independent. + + If active synchronization is required for access to the variables in the + shared passive package, then as described in the Ada Reference Manual, + the package may contain protected objects used for this purpose. In + this case a lock file (whose name is ‘___lock’ (three underscores) is + created in the shared memory directory. + + This is used to provide the required locking semantics for proper + protected object synchronization. + +  + File: gnat_rm.info, Node: Code Generation for Array Aggregates, Next: The Size of Discriminated Records with Default Discriminants, Prev: GNAT Implementation of Shared Passive Packages, Up: Implementation of Specific Ada Features + + 15.4 Code Generation for Array Aggregates + ========================================= + + Aggregates have a rich syntax and allow the user to specify the values + of complex data structures by means of a single construct. As a result, + the code generated for aggregates can be quite complex and involve + loops, case statements and multiple assignments. In the simplest cases, + however, the compiler will recognize aggregates whose components and + constraints are fully static, and in those cases the compiler will + generate little or no executable code. The following is an outline of + the code that GNAT generates for various aggregate constructs. For + further details, you will find it useful to examine the output produced + by the -gnatG flag to see the expanded source that is input to the code + generator. You may also want to examine the assembly code generated at + various levels of optimization. + + The code generated for aggregates depends on the context, the component + values, and the type. In the context of an object declaration the code + generated is generally simpler than in the case of an assignment. As a + general rule, static component values and static subtypes also lead to + simpler code. + + * Menu: + + * Static constant aggregates with static bounds:: + * Constant aggregates with unconstrained nominal types:: + * Aggregates with static bounds:: + * Aggregates with nonstatic bounds:: + * Aggregates in assignment statements:: + +  + File: gnat_rm.info, Node: Static constant aggregates with static bounds, Next: Constant aggregates with unconstrained nominal types, Up: Code Generation for Array Aggregates + + 15.4.1 Static constant aggregates with static bounds + ---------------------------------------------------- + + For the declarations: + + type One_Dim is array (1..10) of integer; + ar0 : constant One_Dim := (1, 2, 3, 4, 5, 6, 7, 8, 9, 0); + + GNAT generates no executable code: the constant ar0 is placed in static + memory. The same is true for constant aggregates with named + associations: + + Cr1 : constant One_Dim := (4 => 16, 2 => 4, 3 => 9, 1 => 1, 5 .. 10 => 0); + Cr3 : constant One_Dim := (others => 7777); + + The same is true for multidimensional constant arrays such as: + + type two_dim is array (1..3, 1..3) of integer; + Unit : constant two_dim := ( (1,0,0), (0,1,0), (0,0,1)); + + The same is true for arrays of one-dimensional arrays: the following are + static: + + type ar1b is array (1..3) of boolean; + type ar_ar is array (1..3) of ar1b; + None : constant ar1b := (others => false); -- fully static + None2 : constant ar_ar := (1..3 => None); -- fully static + + However, for multidimensional aggregates with named associations, GNAT + will generate assignments and loops, even if all associations are + static. The following two declarations generate a loop for the first + dimension, and individual component assignments for the second + dimension: + + Zero1: constant two_dim := (1..3 => (1..3 => 0)); + Zero2: constant two_dim := (others => (others => 0)); + +  + File: gnat_rm.info, Node: Constant aggregates with unconstrained nominal types, Next: Aggregates with static bounds, Prev: Static constant aggregates with static bounds, Up: Code Generation for Array Aggregates + + 15.4.2 Constant aggregates with unconstrained nominal types + ----------------------------------------------------------- + + In such cases the aggregate itself establishes the subtype, so that + associations with ‘others’ cannot be used. GNAT determines the bounds + for the actual subtype of the aggregate, and allocates the aggregate + statically as well. No code is generated for the following: + + type One_Unc is array (natural range <>) of integer; + Cr_Unc : constant One_Unc := (12,24,36); + +  + File: gnat_rm.info, Node: Aggregates with static bounds, Next: Aggregates with nonstatic bounds, Prev: Constant aggregates with unconstrained nominal types, Up: Code Generation for Array Aggregates + + 15.4.3 Aggregates with static bounds + ------------------------------------ + + In all previous examples the aggregate was the initial (and immutable) + value of a constant. If the aggregate initializes a variable, then code + is generated for it as a combination of individual assignments and loops + over the target object. The declarations + + Cr_Var1 : One_Dim := (2, 5, 7, 11, 0, 0, 0, 0, 0, 0); + Cr_Var2 : One_Dim := (others > -1); + + generate the equivalent of + + Cr_Var1 (1) := 2; + Cr_Var1 (2) := 3; + Cr_Var1 (3) := 5; + Cr_Var1 (4) := 11; + + for I in Cr_Var2'range loop + Cr_Var2 (I) := -1; + end loop; + +  + File: gnat_rm.info, Node: Aggregates with nonstatic bounds, Next: Aggregates in assignment statements, Prev: Aggregates with static bounds, Up: Code Generation for Array Aggregates + + 15.4.4 Aggregates with nonstatic bounds + --------------------------------------- + + If the bounds of the aggregate are not statically compatible with the + bounds of the nominal subtype of the target, then constraint checks have + to be generated on the bounds. For a multidimensional array, constraint + checks may have to be applied to sub-arrays individually, if they do not + have statically compatible subtypes. + +  + File: gnat_rm.info, Node: Aggregates in assignment statements, Prev: Aggregates with nonstatic bounds, Up: Code Generation for Array Aggregates + + 15.4.5 Aggregates in assignment statements + ------------------------------------------ + + In general, aggregate assignment requires the construction of a + temporary, and a copy from the temporary to the target of the + assignment. This is because it is not always possible to convert the + assignment into a series of individual component assignments. For + example, consider the simple case: + + A := (A(2), A(1)); + + This cannot be converted into: + + A(1) := A(2); + A(2) := A(1); + + So the aggregate has to be built first in a separate location, and then + copied into the target. GNAT recognizes simple cases where this + intermediate step is not required, and the assignments can be performed + in place, directly into the target. The following sufficient criteria + are applied: + + * The bounds of the aggregate are static, and the associations are + static. + + * The components of the aggregate are static constants, names of + simple variables that are not renamings, or expressions not + involving indexed components whose operands obey these rules. + + If any of these conditions are violated, the aggregate will be built in + a temporary (created either by the front-end or the code generator) and + then that temporary will be copied onto the target. + +  + File: gnat_rm.info, Node: The Size of Discriminated Records with Default Discriminants, Next: Image Values For Nonscalar Types, Prev: Code Generation for Array Aggregates, Up: Implementation of Specific Ada Features + + 15.5 The Size of Discriminated Records with Default Discriminants + ================================================================= + + If a discriminated type ‘T’ has discriminants with default values, it is + possible to declare an object of this type without providing an explicit + constraint: + + type Size is range 1..100; + + type Rec (D : Size := 15) is record + Name : String (1..D); + end T; + + Word : Rec; + + Such an object is said to be `unconstrained'. The discriminant of the + object can be modified by a full assignment to the object, as long as it + preserves the relation between the value of the discriminant, and the + value of the components that depend on it: + + Word := (3, "yes"); + + Word := (5, "maybe"); + + Word := (5, "no"); -- raises Constraint_Error + + In order to support this behavior efficiently, an unconstrained object + is given the maximum size that any value of the type requires. In the + case above, ‘Word’ has storage for the discriminant and for a ‘String’ + of length 100. It is important to note that unconstrained objects do + not require dynamic allocation. It would be an improper implementation + to place on the heap those components whose size depends on + discriminants. (This improper implementation was used by some Ada83 + compilers, where the ‘Name’ component above would have been stored as a + pointer to a dynamic string). Following the principle that dynamic + storage management should never be introduced implicitly, an Ada + compiler should reserve the full size for an unconstrained declared + object, and place it on the stack. + + This maximum size approach has been a source of surprise to some users, + who expect the default values of the discriminants to determine the size + reserved for an unconstrained object: “If the default is 15, why should + the object occupy a larger size?” The answer, of course, is that the + discriminant may be later modified, and its full range of values must be + taken into account. This is why the declaration: + + type Rec (D : Positive := 15) is record + Name : String (1..D); + end record; + + Too_Large : Rec; + + is flagged by the compiler with a warning: an attempt to create + ‘Too_Large’ will raise ‘Storage_Error’, because the required size + includes ‘Positive'Last’ bytes. As the first example indicates, the + proper approach is to declare an index type of ‘reasonable’ range so + that unconstrained objects are not too large. + + One final wrinkle: if the object is declared to be ‘aliased’, or if it + is created in the heap by means of an allocator, then it is `not' + unconstrained: it is constrained by the default values of the + discriminants, and those values cannot be modified by full assignment. + This is because in the presence of aliasing all views of the object + (which may be manipulated by different tasks, say) must be consistent, + so it is imperative that the object, once created, remain invariant. + +  + File: gnat_rm.info, Node: Image Values For Nonscalar Types, Next: Strict Conformance to the Ada Reference Manual, Prev: The Size of Discriminated Records with Default Discriminants, Up: Implementation of Specific Ada Features + + 15.6 Image Values For Nonscalar Types + ===================================== + + Ada 2022 defines the Image, Wide_Image, and Wide_Wide image attributes + for nonscalar types; earlier Ada versions defined these attributes only + for scalar types. Ada RM 4.10 provides some general guidance regarding + the default implementation of these attributes and the GNAT compiler + follows that guidance. However, beyond that the precise details of the + image text generated in these cases are deliberately not documented and + are subject to change. In particular, users should not rely on + formatting details (such as spaces or line breaking), record field + order, image values for access types, image values for types that have + ancestor or subcomponent types declared in non-Ada2022 code, image + values for predefined types, or the compiler’s choices regarding the + implementation permissions described in Ada RM 4.10. This list is not + intended to be exhaustive. If more precise control of image text is + required for some type T, then T’Put_Image should be explicitly + specified. + +  + File: gnat_rm.info, Node: Strict Conformance to the Ada Reference Manual, Prev: Image Values For Nonscalar Types, Up: Implementation of Specific Ada Features + + 15.7 Strict Conformance to the Ada Reference Manual + =================================================== + + The dynamic semantics defined by the Ada Reference Manual impose a set + of run-time checks to be generated. By default, the GNAT compiler will + insert many run-time checks into the compiled code, including most of + those required by the Ada Reference Manual. However, there are two + checks that are not enabled in the default mode for efficiency reasons: + checks for access before elaboration on subprogram calls, and stack + overflow checking (most operating systems do not perform this check by + default). + + Strict conformance to the Ada Reference Manual can be achieved by adding + two compiler options for dynamic checks for access-before-elaboration on + subprogram calls and generic instantiations (`-gnatE'), and stack + overflow checking (`-fstack-check'). + + Note that the result of a floating point arithmetic operation in + overflow and invalid situations, when the ‘Machine_Overflows’ attribute + of the result type is ‘False’, is to generate IEEE NaN and infinite + values. This is the case for machines compliant with the IEEE + floating-point standard, but on machines that are not fully compliant + with this standard, such as Alpha, the `-mieee' compiler flag must be + used for achieving IEEE confirming behavior (although at the cost of a + significant performance penalty), so infinite and NaN values are + properly generated. + +  + File: gnat_rm.info, Node: Implementation of Ada 2012 Features, Next: Security Hardening Features, Prev: Implementation of Specific Ada Features, Up: Top + + 16 Implementation of Ada 2012 Features + ************************************** + + This chapter contains a complete list of Ada 2012 features that have + been implemented. Generally, these features are only available if the + `-gnat12' (Ada 2012 features enabled) option is set, which is the + default behavior, or if the configuration pragma ‘Ada_2012’ is used. + + However, new pragmas, attributes, and restrictions are unconditionally + available, since the Ada 95 standard allows the addition of new pragmas, + attributes, and restrictions (there are exceptions, which are documented + in the individual descriptions), and also certain packages were made + available in earlier versions of Ada. + + An ISO date (YYYY-MM-DD) appears in parentheses on the description line. + This date shows the implementation date of the feature. Any wavefront + subsequent to this date will contain the indicated feature, as will any + subsequent releases. A date of 0000-00-00 means that GNAT has always + implemented the feature, or implemented it as soon as it appeared as a + binding interpretation. + + Each feature corresponds to an Ada Issue (‘AI’) approved by the Ada + standardization group (ISO/IEC JTC1/SC22/WG9) for inclusion in Ada 2012. + The features are ordered based on the relevant sections of the Ada + Reference Manual (“RM”). When a given AI relates to multiple points in + the RM, the earliest is used. + + A complete description of the AIs may be found in + ‘http://www.ada-auth.org/ai05-summary.html’. + + * `AI-0176 Quantified expressions (2010-09-29)' + + Both universally and existentially quantified expressions are + implemented. They use the new syntax for iterators proposed in + AI05-139-2, as well as the standard Ada loop syntax. + + RM References: 1.01.04 (12) 2.09 (2/2) 4.04 (7) 4.05.09 (0) + + * `AI-0079 Allow other_format characters in source (2010-07-10)' + + Wide characters in the unicode category `other_format' are now + allowed in source programs between tokens, but not within a token + such as an identifier. + + RM References: 2.01 (4/2) 2.02 (7) + + * `AI-0091 Do not allow other_format in identifiers (0000-00-00)' + + Wide characters in the unicode category `other_format' are not + permitted within an identifier, since this can be a security + problem. The error message for this case has been improved to be + more specific, but GNAT has never allowed such characters to appear + in identifiers. + + RM References: 2.03 (3.1/2) 2.03 (4/2) 2.03 (5/2) 2.03 (5.1/2) 2.03 + (5.2/2) 2.03 (5.3/2) 2.09 (2/2) + + * `AI-0100 Placement of pragmas (2010-07-01)' + + This AI is an earlier version of AI-163. It simplifies the rules + for legal placement of pragmas. In the case of lists that allow + pragmas, if the list may have no elements, then the list may + consist solely of pragmas. + + RM References: 2.08 (7) + + * `AI-0163 Pragmas in place of null (2010-07-01)' + + A statement sequence may be composed entirely of pragmas. It is no + longer necessary to add a dummy ‘null’ statement to make the + sequence legal. + + RM References: 2.08 (7) 2.08 (16) + + * `AI-0080 ‘View of’ not needed if clear from context (0000-00-00)' + + This is an editorial change only, described as non-testable in the + AI. + + RM References: 3.01 (7) + + * `AI-0183 Aspect specifications (2010-08-16)' + + Aspect specifications have been fully implemented except for pre + and post- conditions, and type invariants, which have their own + separate AI’s. All forms of declarations listed in the AI are + supported. The following is a list of the aspects supported (with + GNAT implementation aspects marked) + + Supported Aspect Source + + --------------------------------------------------------- + + ‘Ada_2005’ – GNAT + + + ‘Ada_2012’ – GNAT + + + ‘Address’ + + ‘Alignment’ + + ‘Atomic’ + + ‘Atomic_Components’ + + ‘Bit_Order’ + + ‘Component_Size’ + + ‘Contract_Cases’ – GNAT + + + ‘Discard_Names’ + + ‘External_Tag’ + + ‘Favor_Top_Level’ – GNAT + + + ‘Inline’ + + ‘Inline_Always’ – GNAT + + + ‘Invariant’ – GNAT + + + ‘Machine_Radix’ + + ‘No_Return’ + + ‘Object_Size’ – GNAT + + + ‘Pack’ + + ‘Persistent_BSS’ – GNAT + + + ‘Post’ + + ‘Pre’ + + ‘Predicate’ + + ‘Preelaborable_Initialization’ + + ‘Pure_Function’ – GNAT + + + ‘Remote_Access_Type’ – GNAT + + + ‘Shared’ – GNAT + + + ‘Size’ + + ‘Storage_Pool’ + + ‘Storage_Size’ + + ‘Stream_Size’ + + ‘Suppress’ + + ‘Suppress_Debug_Info’ – GNAT + + + ‘Test_Case’ – GNAT + + + ‘Thread_Local_Storage’ – GNAT + + + ‘Type_Invariant’ + + ‘Unchecked_Union’ + + ‘Universal_Aliasing’ – GNAT + + + ‘Unmodified’ – GNAT + + + ‘Unreferenced’ – GNAT + + + ‘Unreferenced_Objects’ – GNAT + + + ‘Unsuppress’ + + ‘Value_Size’ – GNAT + + + ‘Volatile’ + + ‘Volatile_Components’ + + ‘Warnings’ – GNAT + + + Note that for aspects with an expression, e.g. ‘Size’, the + expression is treated like a default expression (visibility is + analyzed at the point of occurrence of the aspect, but evaluation + of the expression occurs at the freeze point of the entity + involved). + + RM References: 3.02.01 (3) 3.02.02 (2) 3.03.01 (2/2) 3.08 (6) + 3.09.03 (1.1/2) 6.01 (2/2) 6.07 (2/2) 9.05.02 (2/2) 7.01 (3) 7.03 + (2) 7.03 (3) 9.01 (2/2) 9.01 (3/2) 9.04 (2/2) 9.04 (3/2) 9.05.02 + (2/2) 11.01 (2) 12.01 (3) 12.03 (2/2) 12.04 (2/2) 12.05 (2) 12.06 + (2.1/2) 12.06 (2.2/2) 12.07 (2) 13.01 (0.1/2) 13.03 (5/1) 13.03.01 + (0) + + * `AI-0128 Inequality is a primitive operation (0000-00-00)' + + If an equality operator (“=”) is declared for a type, then the + implicitly declared inequality operator (“/=”) is a primitive + operation of the type. This is the only reasonable interpretation, + and is the one always implemented by GNAT, but the RM was not + entirely clear in making this point. + + RM References: 3.02.03 (6) 6.06 (6) + + * `AI-0003 Qualified expressions as names (2010-07-11)' + + In Ada 2012, a qualified expression is considered to be + syntactically a name, meaning that constructs such as ‘A'(F(X)).B’ + are now legal. This is useful in disambiguating some cases of + overloading. + + RM References: 3.03 (11) 3.03 (21) 4.01 (2) 4.04 (7) 4.07 (3) 5.04 + (7) + + * `AI-0120 Constant instance of protected object (0000-00-00)' + + This is an RM editorial change only. The section that lists + objects that are constant failed to include the current instance of + a protected object within a protected function. This has always + been treated as a constant in GNAT. + + RM References: 3.03 (21) + + * `AI-0008 General access to constrained objects (0000-00-00)' + + The wording in the RM implied that if you have a general access to + a constrained object, it could be used to modify the discriminants. + This was obviously not intended. ‘Constraint_Error’ should be + raised, and GNAT has always done so in this situation. + + RM References: 3.03 (23) 3.10.02 (26/2) 4.01 (9) 6.04.01 (17) + 8.05.01 (5/2) + + * `AI-0093 Additional rules use immutably limited (0000-00-00)' + + This is an editorial change only, to make more widespread use of + the Ada 2012 ‘immutably limited’. + + RM References: 3.03 (23.4/3) + + * `AI-0096 Deriving from formal private types (2010-07-20)' + + In general it is illegal for a type derived from a formal limited + type to be nonlimited. This AI makes an exception to this rule: + derivation is legal if it appears in the private part of the + generic, and the formal type is not tagged. If the type is tagged, + the legality check must be applied to the private part of the + package. + + RM References: 3.04 (5.1/2) 6.02 (7) + + * `AI-0181 Soft hyphen is a non-graphic character (2010-07-23)' + + From Ada 2005 on, soft hyphen is considered a non-graphic + character, which means that it has a special name (‘SOFT_HYPHEN’) + in conjunction with the ‘Image’ and ‘Value’ attributes for the + character types. Strictly speaking this is an inconsistency with + Ada 95, but in practice the use of these attributes is so obscure + that it will not cause problems. + + RM References: 3.05.02 (2/2) A.01 (35/2) A.03.03 (21) + + * `AI-0182 Additional forms for' ‘Character'Value’ `(0000-00-00)' + + This AI allows ‘Character'Value’ to accept the string ‘'?'’ where + ‘?’ is any character including non-graphic control characters. + GNAT has always accepted such strings. It also allows strings such + as ‘HEX_00000041’ to be accepted, but GNAT does not take advantage + of this permission and raises ‘Constraint_Error’, as is certainly + still permitted. + + RM References: 3.05 (56/2) + + * `AI-0214 Defaulted discriminants for limited tagged (2010-10-01)' + + Ada 2012 relaxes the restriction that forbids discriminants of + tagged types to have default expressions by allowing them when the + type is limited. It is often useful to define a default value for + a discriminant even though it can’t be changed by assignment. + + RM References: 3.07 (9.1/2) 3.07.02 (3) + + * `AI-0102 Some implicit conversions are illegal (0000-00-00)' + + It is illegal to assign an anonymous access constant to an + anonymous access variable. The RM did not have a clear rule to + prevent this, but GNAT has always generated an error for this + usage. + + RM References: 3.07 (16) 3.07.01 (9) 6.04.01 (6) 8.06 (27/2) + + * `AI-0158 Generalizing membership tests (2010-09-16)' + + This AI extends the syntax of membership tests to simplify complex + conditions that can be expressed as membership in a subset of + values of any type. It introduces syntax for a list of expressions + that may be used in loop contexts as well. + + RM References: 3.08.01 (5) 4.04 (3) 4.05.02 (3) 4.05.02 (5) 4.05.02 + (27) + + * `AI-0173 Testing if tags represent abstract types (2010-07-03)' + + The function ‘Ada.Tags.Type_Is_Abstract’ returns ‘True’ if invoked + with the tag of an abstract type, and ‘False’ otherwise. + + RM References: 3.09 (7.4/2) 3.09 (12.4/2) + + * `AI-0076 function with controlling result (0000-00-00)' + + This is an editorial change only. The RM defines calls with + controlling results, but uses the term ‘function with controlling + result’ without an explicit definition. + + RM References: 3.09.02 (2/2) + + * `AI-0126 Dispatching with no declared operation (0000-00-00)' + + This AI clarifies dispatching rules, and simply confirms that + dispatching executes the operation of the parent type when there is + no explicitly or implicitly declared operation for the descendant + type. This has always been the case in all versions of GNAT. + + RM References: 3.09.02 (20/2) 3.09.02 (20.1/2) 3.09.02 (20.2/2) + + * `AI-0097 Treatment of abstract null extension (2010-07-19)' + + The RM as written implied that in some cases it was possible to + create an object of an abstract type, by having an abstract + extension inherit a non- abstract constructor from its parent type. + This mistake has been corrected in GNAT and in the RM, and this + construct is now illegal. + + RM References: 3.09.03 (4/2) + + * `AI-0203 Extended return cannot be abstract (0000-00-00)' + + A return_subtype_indication cannot denote an abstract subtype. + GNAT has never permitted such usage. + + RM References: 3.09.03 (8/3) + + * `AI-0198 Inheriting abstract operators (0000-00-00)' + + This AI resolves a conflict between two rules involving inherited + abstract operations and predefined operators. If a derived numeric + type inherits an abstract operator, it overrides the predefined + one. This interpretation was always the one implemented in GNAT. + + RM References: 3.09.03 (4/3) + + * `AI-0073 Functions returning abstract types (2010-07-10)' + + This AI covers a number of issues regarding returning abstract + types. In particular generic functions cannot have abstract result + types or access result types designated an abstract type. There + are some other cases which are detailed in the AI. Note that this + binding interpretation has not been retrofitted to operate before + Ada 2012 mode, since it caused a significant number of regressions. + + RM References: 3.09.03 (8) 3.09.03 (10) 6.05 (8/2) + + * `AI-0070 Elaboration of interface types (0000-00-00)' + + This is an editorial change only, there are no testable + consequences short of checking for the absence of generated code + for an interface declaration. + + RM References: 3.09.04 (18/2) + + * `AI-0208 Characteristics of incomplete views (0000-00-00)' + + The wording in the Ada 2005 RM concerning characteristics of + incomplete views was incorrect and implied that some programs + intended to be legal were now illegal. GNAT had never considered + such programs illegal, so it has always implemented the intent of + this AI. + + RM References: 3.10.01 (2.4/2) 3.10.01 (2.6/2) + + * `AI-0162 Incomplete type completed by partial view (2010-09-15)' + + Incomplete types are made more useful by allowing them to be + completed by private types and private extensions. + + RM References: 3.10.01 (2.5/2) 3.10.01 (2.6/2) 3.10.01 (3) 3.10.01 + (4/2) + + * `AI-0098 Anonymous subprogram access restrictions (0000-00-00)' + + An unintentional omission in the RM implied some inconsistent + restrictions on the use of anonymous access to subprogram values. + These restrictions were not intentional, and have never been + enforced by GNAT. + + RM References: 3.10.01 (6) 3.10.01 (9.2/2) + + * `AI-0199 Aggregate with anonymous access components (2010-07-14)' + + A choice list in a record aggregate can include several components + of (distinct) anonymous access types as long as they have matching + designated subtypes. + + RM References: 4.03.01 (16) + + * `AI-0220 Needed components for aggregates (0000-00-00)' + + This AI addresses a wording problem in the RM that appears to + permit some complex cases of aggregates with nonstatic + discriminants. GNAT has always implemented the intended semantics. + + RM References: 4.03.01 (17) + + * `AI-0147 Conditional expressions (2009-03-29)' + + Conditional expressions are permitted. The form of such an + expression is: + + (if expr then expr {elsif expr then expr} [else expr]) + + The parentheses can be omitted in contexts where parentheses are + present anyway, such as subprogram arguments and pragma arguments. + If the `else' clause is omitted, `else' `True' is assumed; thus + ‘(if A then B)’ is a way to conveniently represent `(A implies B)' + in standard logic. + + RM References: 4.03.03 (15) 4.04 (1) 4.04 (7) 4.05.07 (0) 4.07 (2) + 4.07 (3) 4.09 (12) 4.09 (33) 5.03 (3) 5.03 (4) 7.05 (2.1/2) + + * `AI-0037 Out-of-range box associations in aggregate (0000-00-00)' + + This AI confirms that an association of the form ‘Indx => <>’ in an + array aggregate must raise ‘Constraint_Error’ if ‘Indx’ is out of + range. The RM specified a range check on other associations, but + not when the value of the association was defaulted. GNAT has + always inserted a constraint check on the index value. + + RM References: 4.03.03 (29) + + * `AI-0123 Composability of equality (2010-04-13)' + + Equality of untagged record composes, so that the predefined + equality for a composite type that includes a component of some + untagged record type ‘R’ uses the equality operation of ‘R’ (which + may be user-defined or predefined). This makes the behavior of + untagged records identical to that of tagged types in this respect. + + This change is an incompatibility with previous versions of Ada, + but it corrects a non-uniformity that was often a source of + confusion. Analysis of a large number of industrial programs + indicates that in those rare cases where a composite type had an + untagged record component with a user-defined equality, either + there was no use of the composite equality, or else the code + expected the same composability as for tagged types, and thus had a + bug that would be fixed by this change. + + RM References: 4.05.02 (9.7/2) 4.05.02 (14) 4.05.02 (15) 4.05.02 + (24) 8.05.04 (8) + + * `AI-0088 The value of exponentiation (0000-00-00)' + + This AI clarifies the equivalence rule given for the dynamic + semantics of exponentiation: the value of the operation can be + obtained by repeated multiplication, but the operation can be + implemented otherwise (for example using the familiar + divide-by-two-and-square algorithm, even if this is less accurate), + and does not imply repeated reads of a volatile base. + + RM References: 4.05.06 (11) + + * `AI-0188 Case expressions (2010-01-09)' + + Case expressions are permitted. This allows use of constructs such + as: + + X := (case Y is when 1 => 2, when 2 => 3, when others => 31) + + RM References: 4.05.07 (0) 4.05.08 (0) 4.09 (12) 4.09 (33) + + * `AI-0104 Null exclusion and uninitialized allocator (2010-07-15)' + + The assignment ‘Ptr := new not null Some_Ptr;’ will raise + ‘Constraint_Error’ because the default value of the allocated + object is `null'. This useless construct is illegal in Ada 2012. + + RM References: 4.08 (2) + + * `AI-0157 Allocation/Deallocation from empty pool (2010-07-11)' + + Allocation and Deallocation from an empty storage pool (i.e. + allocation or deallocation of a pointer for which a static storage + size clause of zero has been given) is now illegal and is detected + as such. GNAT previously gave a warning but not an error. + + RM References: 4.08 (5.3/2) 13.11.02 (4) 13.11.02 (17) + + * `AI-0179 Statement not required after label (2010-04-10)' + + It is not necessary to have a statement following a label, so a + label can appear at the end of a statement sequence without the + need for putting a null statement afterwards, but it is not + allowable to have only labels and no real statements in a statement + sequence. + + RM References: 5.01 (2) + + * `AI-0139-2 Syntactic sugar for iterators (2010-09-29)' + + The new syntax for iterating over arrays and containers is now + implemented. Iteration over containers is for now limited to + read-only iterators. Only default iterators are supported, with + the syntax: ‘for Elem of C’. + + RM References: 5.05 + + * `AI-0134 Profiles must match for full conformance (0000-00-00)' + + For full conformance, the profiles of + anonymous-access-to-subprogram parameters must match. GNAT has + always enforced this rule. + + RM References: 6.03.01 (18) + + * `AI-0207 Mode conformance and access constant (0000-00-00)' + + This AI confirms that access_to_constant indication must match for + mode conformance. This was implemented in GNAT when the qualifier + was originally introduced in Ada 2005. + + RM References: 6.03.01 (16/2) + + * `AI-0046 Null exclusion match for full conformance (2010-07-17)' + + For full conformance, in the case of access parameters, the null + exclusion must match (either both or neither must have ‘not null’). + + RM References: 6.03.02 (18) + + * `AI-0118 The association of parameter associations (0000-00-00)' + + This AI clarifies the rules for named associations in subprogram + calls and generic instantiations. The rules have been in place + since Ada 83. + + RM References: 6.04.01 (2) 12.03 (9) + + * `AI-0196 Null exclusion tests for out parameters (0000-00-00)' + + Null exclusion checks are not made for ‘out’ parameters when + evaluating the actual parameters. GNAT has never generated these + checks. + + RM References: 6.04.01 (13) + + * `AI-0015 Constant return objects (0000-00-00)' + + The return object declared in an `extended_return_statement' may be + declared constant. This was always intended, and GNAT has always + allowed it. + + RM References: 6.05 (2.1/2) 3.03 (10/2) 3.03 (21) 6.05 (5/2) 6.05 + (5.7/2) + + * `AI-0032 Extended return for class-wide functions (0000-00-00)' + + If a function returns a class-wide type, the object of an extended + return statement can be declared with a specific type that is + covered by the class- wide type. This has been implemented in GNAT + since the introduction of extended returns. Note AI-0103 + complements this AI by imposing matching rules for constrained + return types. + + RM References: 6.05 (5.2/2) 6.05 (5.3/2) 6.05 (5.6/2) 6.05 (5.8/2) + 6.05 (8/2) + + * `AI-0103 Static matching for extended return (2010-07-23)' + + If the return subtype of a function is an elementary type or a + constrained type, the subtype indication in an extended return + statement must match statically this return subtype. + + RM References: 6.05 (5.2/2) + + * `AI-0058 Abnormal completion of an extended return (0000-00-00)' + + The RM had some incorrect wording implying wrong treatment of + abnormal completion in an extended return. GNAT has always + implemented the intended correct semantics as described by this AI. + + RM References: 6.05 (22/2) + + * `AI-0050 Raising Constraint_Error early for function call + (0000-00-00)' + + The implementation permissions for raising ‘Constraint_Error’ early + on a function call when it was clear an exception would be raised + were over-permissive and allowed mishandling of discriminants in + some cases. GNAT did not take advantage of these incorrect + permissions in any case. + + RM References: 6.05 (24/2) + + * `AI-0125 Nonoverridable operations of an ancestor (2010-09-28)' + + In Ada 2012, the declaration of a primitive operation of a type + extension or private extension can also override an inherited + primitive that is not visible at the point of this declaration. + + RM References: 7.03.01 (6) 8.03 (23) 8.03.01 (5/2) 8.03.01 (6/2) + + * `AI-0062 Null exclusions and deferred constants (0000-00-00)' + + A full constant may have a null exclusion even if its associated + deferred constant does not. GNAT has always allowed this. + + RM References: 7.04 (6/2) 7.04 (7.1/2) + + * `AI-0178 Incomplete views are limited (0000-00-00)' + + This AI clarifies the role of incomplete views and plugs an + omission in the RM. GNAT always correctly restricted the use of + incomplete views and types. + + RM References: 7.05 (3/2) 7.05 (6/2) + + * `AI-0087 Actual for formal nonlimited derived type (2010-07-15)' + + The actual for a formal nonlimited derived type cannot be limited. + In particular, a formal derived type that extends a limited + interface but which is not explicitly limited cannot be + instantiated with a limited type. + + RM References: 7.05 (5/2) 12.05.01 (5.1/2) + + * `AI-0099 Tag determines whether finalization needed (0000-00-00)' + + This AI clarifies that ‘needs finalization’ is part of dynamic + semantics, and therefore depends on the run-time characteristics of + an object (i.e. its tag) and not on its nominal type. As the AI + indicates: “we do not expect this to affect any implementation’’. + + RM References: 7.06.01 (6) 7.06.01 (7) 7.06.01 (8) 7.06.01 (9/2) + + * `AI-0064 Redundant finalization rule (0000-00-00)' + + This is an editorial change only. The intended behavior is already + checked by an existing ACATS test, which GNAT has always executed + correctly. + + RM References: 7.06.01 (17.1/1) + + * `AI-0026 Missing rules for Unchecked_Union (2010-07-07)' + + Record representation clauses concerning Unchecked_Union types + cannot mention the discriminant of the type. The type of a + component declared in the variant part of an Unchecked_Union cannot + be controlled, have controlled components, nor have protected or + task parts. If an Unchecked_Union type is declared within the body + of a generic unit or its descendants, then the type of a component + declared in the variant part cannot be a formal private type or a + formal private extension declared within the same generic unit. + + RM References: 7.06 (9.4/2) B.03.03 (9/2) B.03.03 (10/2) + + * `AI-0205 Extended return declares visible name (0000-00-00)' + + This AI corrects a simple omission in the RM. Return objects have + always been visible within an extended return statement. + + RM References: 8.03 (17) + + * `AI-0042 Overriding versus implemented-by (0000-00-00)' + + This AI fixes a wording gap in the RM. An operation of a + synchronized interface can be implemented by a protected or task + entry, but the abstract operation is not being overridden in the + usual sense, and it must be stated separately that this + implementation is legal. This has always been the case in GNAT. + + RM References: 9.01 (9.2/2) 9.04 (11.1/2) + + * `AI-0030 Requeue on synchronized interfaces (2010-07-19)' + + Requeue is permitted to a protected, synchronized or task interface + primitive providing it is known that the overriding operation is an + entry. Otherwise the requeue statement has the same effect as a + procedure call. Use of pragma ‘Implemented’ provides a way to + impose a static requirement on the overriding operation by adhering + to one of the implementation kinds: entry, protected procedure or + any of the above. + + RM References: 9.05 (9) 9.05.04 (2) 9.05.04 (3) 9.05.04 (5) 9.05.04 + (6) 9.05.04 (7) 9.05.04 (12) + + * `AI-0201 Independence of atomic object components (2010-07-22)' + + If an Atomic object has a pragma ‘Pack’ or a ‘Component_Size’ + attribute, then individual components may not be addressable by + independent tasks. However, if the representation clause has no + effect (is confirming), then independence is not compromised. + Furthermore, in GNAT, specification of other appropriately + addressable component sizes (e.g. 16 for 8-bit characters) also + preserves independence. GNAT now gives very clear warnings both + for the declaration of such a type, and for any assignment to its + components. + + RM References: 9.10 (1/3) C.06 (22/2) C.06 (23/2) + + * `AI-0009 Pragma Independent[_Components] (2010-07-23)' + + This AI introduces the new pragmas ‘Independent’ and + ‘Independent_Components’, which control guaranteeing independence + of access to objects and components. The AI also requires + independence not unaffected by confirming rep clauses. + + RM References: 9.10 (1) 13.01 (15/1) 13.02 (9) 13.03 (13) C.06 (2) + C.06 (4) C.06 (6) C.06 (9) C.06 (13) C.06 (14) + + * `AI-0072 Task signalling using ‘Terminated (0000-00-00)' + + This AI clarifies that task signalling for reading ‘'Terminated’ + only occurs if the result is True. GNAT semantics has always been + consistent with this notion of task signalling. + + RM References: 9.10 (6.1/1) + + * `AI-0108 Limited incomplete view and discriminants (0000-00-00)' + + This AI confirms that an incomplete type from a limited view does + not have discriminants. This has always been the case in GNAT. + + RM References: 10.01.01 (12.3/2) + + * `AI-0129 Limited views and incomplete types (0000-00-00)' + + This AI clarifies the description of limited views: a limited view + of a package includes only one view of a type that has an + incomplete declaration and a full declaration (there is no possible + ambiguity in a client package). This AI also fixes an omission: a + nested package in the private part has no limited view. GNAT + always implemented this correctly. + + RM References: 10.01.01 (12.2/2) 10.01.01 (12.3/2) + + * `AI-0077 Limited withs and scope of declarations (0000-00-00)' + + This AI clarifies that a declaration does not include a context + clause, and confirms that it is illegal to have a context in which + both a limited and a nonlimited view of a package are accessible. + Such double visibility was always rejected by GNAT. + + RM References: 10.01.02 (12/2) 10.01.02 (21/2) 10.01.02 (22/2) + + * `AI-0122 Private with and children of generics (0000-00-00)' + + This AI clarifies the visibility of private children of generic + units within instantiations of a parent. GNAT has always handled + this correctly. + + RM References: 10.01.02 (12/2) + + * `AI-0040 Limited with clauses on descendant (0000-00-00)' + + This AI confirms that a limited with clause in a child unit cannot + name an ancestor of the unit. This has always been checked in + GNAT. + + RM References: 10.01.02 (20/2) + + * `AI-0132 Placement of library unit pragmas (0000-00-00)' + + This AI fills a gap in the description of library unit pragmas. + The pragma clearly must apply to a library unit, even if it does + not carry the name of the enclosing unit. GNAT has always enforced + the required check. + + RM References: 10.01.05 (7) + + * `AI-0034 Categorization of limited views (0000-00-00)' + + The RM makes certain limited with clauses illegal because of + categorization considerations, when the corresponding normal with + would be legal. This is not intended, and GNAT has always + implemented the recommended behavior. + + RM References: 10.02.01 (11/1) 10.02.01 (17/2) + + * `AI-0035 Inconsistencies with Pure units (0000-00-00)' + + This AI remedies some inconsistencies in the legality rules for + Pure units. Derived access types are legal in a pure unit (on the + assumption that the rule for a zero storage pool size has been + enforced on the ancestor type). The rules are enforced in generic + instances and in subunits. GNAT has always implemented the + recommended behavior. + + RM References: 10.02.01 (15.1/2) 10.02.01 (15.4/2) 10.02.01 + (15.5/2) 10.02.01 (17/2) + + * `AI-0219 Pure permissions and limited parameters (2010-05-25)' + + This AI refines the rules for the cases with limited parameters + which do not allow the implementations to omit ‘redundant’. GNAT + now properly conforms to the requirements of this binding + interpretation. + + RM References: 10.02.01 (18/2) + + * `AI-0043 Rules about raising exceptions (0000-00-00)' + + This AI covers various omissions in the RM regarding the raising of + exceptions. GNAT has always implemented the intended semantics. + + RM References: 11.04.01 (10.1/2) 11 (2) + + * `AI-0200 Mismatches in formal package declarations (0000-00-00)' + + This AI plugs a gap in the RM which appeared to allow some + obviously intended illegal instantiations. GNAT has never allowed + these instantiations. + + RM References: 12.07 (16) + + * `AI-0112 Detection of duplicate pragmas (2010-07-24)' + + This AI concerns giving names to various representation aspects, + but the practical effect is simply to make the use of duplicate + ‘Atomic[_Components]’, ‘Volatile[_Components]’, and + ‘Independent[_Components]’ pragmas illegal, and GNAT now performs + this required check. + + RM References: 13.01 (8) + + * `AI-0106 No representation pragmas on generic formals (0000-00-00)' + + The RM appeared to allow representation pragmas on generic formal + parameters, but this was not intended, and GNAT has never permitted + this usage. + + RM References: 13.01 (9.1/1) + + * `AI-0012 Pack/Component_Size for aliased/atomic (2010-07-15)' + + It is now illegal to give an inappropriate component size or a + pragma ‘Pack’ that attempts to change the component size in the + case of atomic or aliased components. Previously GNAT ignored such + an attempt with a warning. + + RM References: 13.02 (6.1/2) 13.02 (7) C.06 (10) C.06 (11) C.06 + (21) + + * `AI-0039 Stream attributes cannot be dynamic (0000-00-00)' + + The RM permitted the use of dynamic expressions (such as + ‘ptr.all’)‘ for stream attributes, but these were never useful and + are now illegal. GNAT has always regarded such expressions as + illegal. + + RM References: 13.03 (4) 13.03 (6) 13.13.02 (38/2) + + * `AI-0095 Address of intrinsic subprograms (0000-00-00)' + + The prefix of ‘'Address’ cannot statically denote a subprogram with + convention ‘Intrinsic’. The use of the ‘Address’ attribute raises + ‘Program_Error’ if the prefix denotes a subprogram with convention + ‘Intrinsic’. + + RM References: 13.03 (11/1) + + * `AI-0116 Alignment of class-wide objects (0000-00-00)' + + This AI requires that the alignment of a class-wide object be no + greater than the alignment of any type in the class. GNAT has + always followed this recommendation. + + RM References: 13.03 (29) 13.11 (16) + + * `AI-0146 Type invariants (2009-09-21)' + + Type invariants may be specified for private types using the aspect + notation. Aspect ‘Type_Invariant’ may be specified for any private + type, ‘Type_Invariant'Class’ can only be specified for tagged + types, and is inherited by any descendent of the tagged types. The + invariant is a boolean expression that is tested for being true in + the following situations: conversions to the private type, object + declarations for the private type that are default initialized, and + [`in'] `out' parameters and returned result on return from any + primitive operation for the type that is visible to a client. GNAT + defines the synonyms ‘Invariant’ for ‘Type_Invariant’ and + ‘Invariant'Class’ for ‘Type_Invariant'Class’. + + RM References: 13.03.03 (00) + + * `AI-0078 Relax Unchecked_Conversion alignment rules (0000-00-00)' + + In Ada 2012, compilers are required to support unchecked conversion + where the target alignment is a multiple of the source alignment. + GNAT always supported this case (and indeed all cases of differing + alignments, doing copies where required if the alignment was + reduced). + + RM References: 13.09 (7) + + * `AI-0195 Invalid value handling is implementation defined + (2010-07-03)' + + The handling of invalid values is now designated to be + implementation defined. This is a documentation change only, + requiring Annex M in the GNAT Reference Manual to document this + handling. In GNAT, checks for invalid values are made only when + necessary to avoid erroneous behavior. Operations like assignments + which cannot cause erroneous behavior ignore the possibility of + invalid values and do not do a check. The date given above applies + only to the documentation change, this behavior has always been + implemented by GNAT. + + RM References: 13.09.01 (10) + + * `AI-0193 Alignment of allocators (2010-09-16)' + + This AI introduces a new attribute ‘Max_Alignment_For_Allocation’, + analogous to ‘Max_Size_In_Storage_Elements’, but for alignment + instead of size. + + RM References: 13.11 (16) 13.11 (21) 13.11.01 (0) 13.11.01 (1) + 13.11.01 (2) 13.11.01 (3) + + * `AI-0177 Parameterized expressions (2010-07-10)' + + The new Ada 2012 notion of parameterized expressions is + implemented. The form is: + + function-specification is (expression) + + This is exactly equivalent to the corresponding function body that + returns the expression, but it can appear in a package spec. Note + that the expression must be parenthesized. + + RM References: 13.11.01 (3/2) + + * `AI-0033 Attach/Interrupt_Handler in generic (2010-07-24)' + + Neither of these two pragmas may appear within a generic template, + because the generic might be instantiated at other than the library + level. + + RM References: 13.11.02 (16) C.03.01 (7/2) C.03.01 (8/2) + + * `AI-0161 Restriction No_Default_Stream_Attributes (2010-09-11)' + + A new restriction ‘No_Default_Stream_Attributes’ prevents the use + of any of the default stream attributes for elementary types. If + this restriction is in force, then it is necessary to provide + explicit subprograms for any stream attributes used. + + RM References: 13.12.01 (4/2) 13.13.02 (40/2) 13.13.02 (52/2) + + * `AI-0194 Value of Stream_Size attribute (0000-00-00)' + + The ‘Stream_Size’ attribute returns the default number of bits in + the stream representation of the given type. This value is not + affected by the presence of stream subprogram attributes for the + type. GNAT has always implemented this interpretation. + + RM References: 13.13.02 (1.2/2) + + * `AI-0109 Redundant check in S’Class’Input (0000-00-00)' + + This AI is an editorial change only. It removes the need for a tag + check that can never fail. + + RM References: 13.13.02 (34/2) + + * `AI-0007 Stream read and private scalar types (0000-00-00)' + + The RM as written appeared to limit the possibilities of declaring + read attribute procedures for private scalar types. This + limitation was not intended, and has never been enforced by GNAT. + + RM References: 13.13.02 (50/2) 13.13.02 (51/2) + + * `AI-0065 Remote access types and external streaming (0000-00-00)' + + This AI clarifies the fact that all remote access types support + external streaming. This fixes an obvious oversight in the + definition of the language, and GNAT always implemented the + intended correct rules. + + RM References: 13.13.02 (52/2) + + * `AI-0019 Freezing of primitives for tagged types (0000-00-00)' + + The RM suggests that primitive subprograms of a specific tagged + type are frozen when the tagged type is frozen. This would be an + incompatible change and is not intended. GNAT has never attempted + this kind of freezing and its behavior is consistent with the + recommendation of this AI. + + RM References: 13.14 (2) 13.14 (3/1) 13.14 (8.1/1) 13.14 (10) 13.14 + (14) 13.14 (15.1/2) + + * `AI-0017 Freezing and incomplete types (0000-00-00)' + + So-called ‘Taft-amendment types’ (i.e., types that are completed in + package bodies) are not frozen by the occurrence of bodies in the + enclosing declarative part. GNAT always implemented this properly. + + RM References: 13.14 (3/1) + + * `AI-0060 Extended definition of remote access types (0000-00-00)' + + This AI extends the definition of remote access types to include + access to limited, synchronized, protected or task class-wide + interface types. GNAT already implemented this extension. + + RM References: A (4) E.02.02 (9/1) E.02.02 (9.2/1) E.02.02 (14/2) + E.02.02 (18) + + * `AI-0114 Classification of letters (0000-00-00)' + + The code points 170 (‘FEMININE ORDINAL INDICATOR’), 181 (‘MICRO + SIGN’), and 186 (‘MASCULINE ORDINAL INDICATOR’) are technically + considered lower case letters by Unicode. However, they are not + allowed in identifiers, and they return ‘False’ to + ‘Ada.Characters.Handling.Is_Letter/Is_Lower’. This behavior is + consistent with that defined in Ada 95. + + RM References: A.03.02 (59) A.04.06 (7) + + * `AI-0185 Ada.Wide_[Wide_]Characters.Handling (2010-07-06)' + + Two new packages ‘Ada.Wide_[Wide_]Characters.Handling’ provide + classification functions for ‘Wide_Character’ and + ‘Wide_Wide_Character’, as well as providing case folding routines + for ‘Wide_[Wide_]Character’ and ‘Wide_[Wide_]String’. + + RM References: A.03.05 (0) A.03.06 (0) + + * `AI-0031 Add From parameter to Find_Token (2010-07-25)' + + A new version of ‘Find_Token’ is added to all relevant string + packages, with an extra parameter ‘From’. Instead of starting at + the first character of the string, the search for a matching Token + starts at the character indexed by the value of ‘From’. These + procedures are available in all versions of Ada but if used in + versions earlier than Ada 2012 they will generate a warning that an + Ada 2012 subprogram is being used. + + RM References: A.04.03 (16) A.04.03 (67) A.04.03 (68/1) A.04.04 + (51) A.04.05 (46) + + * `AI-0056 Index on null string returns zero (0000-00-00)' + + The wording in the Ada 2005 RM implied an incompatible handling of + the ‘Index’ functions, resulting in raising an exception instead of + returning zero in some situations. This was not intended and has + been corrected. GNAT always returned zero, and is thus consistent + with this AI. + + RM References: A.04.03 (56.2/2) A.04.03 (58.5/2) + + * `AI-0137 String encoding package (2010-03-25)' + + The packages ‘Ada.Strings.UTF_Encoding’, together with its child + packages, ‘Conversions’, ‘Strings’, ‘Wide_Strings’, and + ‘Wide_Wide_Strings’ have been implemented. These packages (whose + documentation can be found in the spec files ‘a-stuten.ads’, + ‘a-suenco.ads’, ‘a-suenst.ads’, ‘a-suewst.ads’, ‘a-suezst.ads’) + allow encoding and decoding of ‘String’, ‘Wide_String’, and + ‘Wide_Wide_String’ values using UTF coding schemes (including + UTF-8, UTF-16LE, UTF-16BE, and UTF-16), as well as conversions + between the different UTF encodings. With the exception of + ‘Wide_Wide_Strings’, these packages are available in Ada 95 and Ada + 2005 mode as well as Ada 2012 mode. The ‘Wide_Wide_Strings’ + package is available in Ada 2005 mode as well as Ada 2012 mode (but + not in Ada 95 mode since it uses ‘Wide_Wide_Character’). + + RM References: A.04.11 + + * `AI-0038 Minor errors in Text_IO (0000-00-00)' + + These are minor errors in the description on three points. The + intent on all these points has always been clear, and GNAT has + always implemented the correct intended semantics. + + RM References: A.10.05 (37) A.10.07 (8/1) A.10.07 (10) A.10.07 (12) + A.10.08 (10) A.10.08 (24) + + * `AI-0044 Restrictions on container instantiations (0000-00-00)' + + This AI places restrictions on allowed instantiations of generic + containers. These restrictions are not checked by the compiler, so + there is nothing to change in the implementation. This affects + only the RM documentation. + + RM References: A.18 (4/2) A.18.02 (231/2) A.18.03 (145/2) A.18.06 + (56/2) A.18.08 (66/2) A.18.09 (79/2) A.18.26 (5/2) A.18.26 (9/2) + + * `AI-0127 Adding Locale Capabilities (2010-09-29)' + + This package provides an interface for identifying the current + locale. + + RM References: A.19 A.19.01 A.19.02 A.19.03 A.19.05 A.19.06 A.19.07 + A.19.08 A.19.09 A.19.10 A.19.11 A.19.12 A.19.13 + + * `AI-0002 Export C with unconstrained arrays (0000-00-00)' + + The compiler is not required to support exporting an Ada subprogram + with convention C if there are parameters or a return type of an + unconstrained array type (such as ‘String’). GNAT allows such + declarations but generates warnings. It is possible, but + complicated, to write the corresponding C code and certainly such + code would be specific to GNAT and non-portable. + + RM References: B.01 (17) B.03 (62) B.03 (71.1/2) + + * `AI-0216 No_Task_Hierarchy forbids local tasks (0000-00-00)' + + It is clearly the intention that ‘No_Task_Hierarchy’ is intended to + forbid tasks declared locally within subprograms, or functions + returning task objects, and that is the implementation that GNAT + has always provided. However the language in the RM was not + sufficiently clear on this point. Thus this is a documentation + change in the RM only. + + RM References: D.07 (3/3) + + * `AI-0211 No_Relative_Delays forbids Set_Handler use (2010-07-09)' + + The restriction ‘No_Relative_Delays’ forbids any calls to the + subprogram ‘Ada.Real_Time.Timing_Events.Set_Handler’. + + RM References: D.07 (5) D.07 (10/2) D.07 (10.4/2) D.07 (10.7/2) + + * `AI-0190 pragma Default_Storage_Pool (2010-09-15)' + + This AI introduces a new pragma ‘Default_Storage_Pool’, which can + be used to control storage pools globally. In particular, you can + force every access type that is used for allocation (`new') to have + an explicit storage pool, or you can declare a pool globally to be + used for all access types that lack an explicit one. + + RM References: D.07 (8) + + * `AI-0189 No_Allocators_After_Elaboration (2010-01-23)' + + This AI introduces a new restriction + ‘No_Allocators_After_Elaboration’, which says that no dynamic + allocation will occur once elaboration is completed. In general + this requires a run-time check, which is not required, and which + GNAT does not attempt. But the static cases of allocators in a + task body or in the body of the main program are detected and + flagged at compile or bind time. + + RM References: D.07 (19.1/2) H.04 (23.3/2) + + * `AI-0171 Pragma CPU and Ravenscar Profile (2010-09-24)' + + A new package ‘System.Multiprocessors’ is added, together with the + definition of pragma ‘CPU’ for controlling task affinity. A new no + dependence restriction, on + ‘System.Multiprocessors.Dispatching_Domains’, is added to the + Ravenscar profile. + + RM References: D.13.01 (4/2) D.16 + + * `AI-0210 Correct Timing_Events metric (0000-00-00)' + + This is a documentation only issue regarding wording of metric + requirements, that does not affect the implementation of the + compiler. + + RM References: D.15 (24/2) + + * `AI-0206 Remote types packages and preelaborate (2010-07-24)' + + Remote types packages are now allowed to depend on preelaborated + packages. This was formerly considered illegal. + + RM References: E.02.02 (6) + + * `AI-0152 Restriction No_Anonymous_Allocators (2010-09-08)' + + Restriction ‘No_Anonymous_Allocators’ prevents the use of + allocators where the type of the returned value is an anonymous + access type. + + RM References: H.04 (8/1) + +  + File: gnat_rm.info, Node: Security Hardening Features, Next: Obsolescent Features, Prev: Implementation of Ada 2012 Features, Up: Top + + 17 Security Hardening Features + ****************************** + + This chapter describes Ada extensions aimed at security hardening that + are provided by GNAT. + + * Menu: + + * Register Scrubbing:: + * Stack Scrubbing:: + * Hardened Conditionals:: + +  + File: gnat_rm.info, Node: Register Scrubbing, Next: Stack Scrubbing, Up: Security Hardening Features + + 17.1 Register Scrubbing + ======================= + + GNAT can generate code to zero-out hardware registers before returning + from a subprogram. + + It can be enabled with the `-fzero-call-used-regs' command line option, + to affect all subprograms in a compilation, and with a + ‘Machine_Attribute’ pragma, to affect only specific subprograms. + + procedure Foo; + pragma Machine_Attribute (Foo, "zero_call_used_regs", "used"); + -- Before returning, Foo scrubs only call-clobbered registers + -- that it uses itself. + + function Bar return Integer; + pragma Machine_Attribute (Bar, "zero_call_used_regs", "all"); + -- Before returning, Bar scrubs all call-clobbered registers. + + For usage and more details on the command line option, and on the + ‘zero_call_used_regs’ attribute, see ‘Using the GNU Compiler Collection + (GCC)’. + +  + File: gnat_rm.info, Node: Stack Scrubbing, Next: Hardened Conditionals, Prev: Register Scrubbing, Up: Security Hardening Features + + 17.2 Stack Scrubbing + ==================== + + GNAT can generate code to zero-out stack frames used by subprograms. + + It can be activated with the ‘Machine_Attribute’ pragma, on specific + subprograms and variables. + + function Foo returns Integer; + pragma Machine_Attribute (Foo, "strub"); + -- Foo and its callers are modified so as to scrub the stack + -- space used by Foo after it returns. + + procedure Bar; + pragma Machine_Attribute (Bar, "strub", "internal"); + -- Bar is turned into a wrapper for its original body, + -- and they scrub the stack used by the original body. + + Var : Integer; + pragma Machine_Attribute (Var, "strub"); + -- Reading from Var in a subprogram enables stack scrubbing + -- of the stack space used by the subprogram. + + There are also `-fstrub' command line options to control default + settings. For usage and more details on the command line option, and on + the ‘strub’ attribute, see ‘Using the GNU Compiler Collection (GCC)’. + + Note that Ada secondary stacks are not scrubbed. The restriction + ‘No_Secondary_Stack’ avoids their use, and thus their accidental + preservation of data that should be scrubbed. + + Attributes ‘Access’ and ‘Unconstrained_Access’ of variables and + constants with ‘strub’ enabled require types with ‘strub’ enabled; there + is no way to express an access-to-strub type otherwise. + ‘Unchecked_Access’ bypasses this constraint, but the resulting access + type designates a non-strub type. + + VI : Integer; + XsVI : access Integer := VI'Access; -- Error. + UXsVI : access Integer := VI'Unchecked_Access; -- OK, + -- UXsVI.all does not enable strub in the enclosing subprogram. + + type Strub_Int is new Integer; + pragma Machine_Attribute (Strub_Int, "strub"); + VSI : Strub_Int; + XsVSI : access Strub_Int := VSI'Access; -- OK. + -- XsVSI.all enables strub in the enclosing subprogram. + + Every access-to-subprogram type, renaming, and overriding and overridden + dispatching operations that may refer to a subprogram with an + attribute-modified interface must be annotated with the same + interface-modifying attribute. Access-to-subprogram types can be + explicitly converted to different strub modes, as long as they are + interface-compatible (i.e., adding or removing ‘at-calls’ is not + allowed). For example, a ‘strub’-‘disabled’ subprogram can be turned + ‘callable’ through such an explicit conversion: + + type TBar is access procedure; + + type TBar_Callable is access procedure; + pragma Machine_Attribute (TBar_Callable, "strub", "callable"); + + Bar_Callable_Ptr : constant TBar_Callable + := TBar_Callable (TBar'(Bar'Access)); + + procedure Bar_Callable renames Bar_Callable_Ptr.all; + pragma Machine_Attribute (Bar_Callable, "strub", "callable"); + + Note that the renaming declaration is expanded to a full subprogram + body, it won’t be just an alias. Only if it is inlined will it be as + efficient as a call by dereferencing the access-to-subprogram constant + Bar_Callable_Ptr. + +  + File: gnat_rm.info, Node: Hardened Conditionals, Prev: Stack Scrubbing, Up: Security Hardening Features + + 17.3 Hardened Conditionals + ========================== + + GNAT can harden conditionals to protect against control flow attacks. + + This is accomplished by two complementary transformations, each + activated by a separate command-line option. + + The option `-fharden-compares' enables hardening of compares that + compute results stored in variables, adding verification that the + reversed compare yields the opposite result. + + The option `-fharden-conditional-branches' enables hardening of compares + that guard conditional branches, adding verification of the reversed + compare to both execution paths. + + These transformations are introduced late in the compilation pipeline, + long after boolean expressions are decomposed into separate compares, + each one turned into either a conditional branch or a compare whose + result is stored in a boolean variable or temporary. Compiler + optimizations, if enabled, may also turn conditional branches into + stored compares, and vice-versa, or into operations with implied + conditionals (e.g. MIN and MAX). Conditionals may also be optimized out + entirely, if their value can be determined at compile time, and + occasionally multiple compares can be combined into one. + + It is thus difficult to predict which of these two options will affect a + specific compare operation expressed in source code. Using both options + ensures that every compare that is neither optimized out nor optimized + into implied conditionals will be hardened. + + The addition of reversed compares can be observed by enabling the dump + files of the corresponding passes, through command line options + `-fdump-tree-hardcmp' and `-fdump-tree-hardcbr', respectively. + + They are separate options, however, because of the significantly + different performance impact of the hardening transformations. + +  + File: gnat_rm.info, Node: Obsolescent Features, Next: Compatibility and Porting Guide, Prev: Security Hardening Features, Up: Top + + 18 Obsolescent Features + *********************** + + This chapter describes features that are provided by GNAT, but are + considered obsolescent since there are preferred ways of achieving the + same effect. These features are provided solely for historical + compatibility purposes. + + * Menu: + + * pragma No_Run_Time:: + * pragma Ravenscar:: + * pragma Restricted_Run_Time:: + * pragma Task_Info:: + * package System.Task_Info (s-tasinf.ads): package System Task_Info s-tasinf ads. + +  + File: gnat_rm.info, Node: pragma No_Run_Time, Next: pragma Ravenscar, Up: Obsolescent Features + + 18.1 pragma No_Run_Time + ======================= + + The pragma ‘No_Run_Time’ is used to achieve an affect similar to the use + of the “Zero Foot Print” configurable run time, but without requiring a + specially configured run time. The result of using this pragma, which + must be used for all units in a partition, is to restrict the use of any + language features requiring run-time support code. The preferred usage + is to use an appropriately configured run-time that includes just those + features that are to be made accessible. + +  + File: gnat_rm.info, Node: pragma Ravenscar, Next: pragma Restricted_Run_Time, Prev: pragma No_Run_Time, Up: Obsolescent Features + + 18.2 pragma Ravenscar + ===================== + + The pragma ‘Ravenscar’ has exactly the same effect as pragma ‘Profile + (Ravenscar)’. The latter usage is preferred since it is part of the new + Ada 2005 standard. + +  + File: gnat_rm.info, Node: pragma Restricted_Run_Time, Next: pragma Task_Info, Prev: pragma Ravenscar, Up: Obsolescent Features + + 18.3 pragma Restricted_Run_Time + =============================== + + The pragma ‘Restricted_Run_Time’ has exactly the same effect as pragma + ‘Profile (Restricted)’. The latter usage is preferred since the Ada + 2005 pragma ‘Profile’ is intended for this kind of implementation + dependent addition. + +  + File: gnat_rm.info, Node: pragma Task_Info, Next: package System Task_Info s-tasinf ads, Prev: pragma Restricted_Run_Time, Up: Obsolescent Features + + 18.4 pragma Task_Info + ===================== + + The functionality provided by pragma ‘Task_Info’ is now part of the Ada + language. The ‘CPU’ aspect and the package ‘System.Multiprocessors’ + offer a less system-dependent way to specify task affinity or to query + the number of processors. + + Syntax + + pragma Task_Info (EXPRESSION); + + This pragma appears within a task definition (like pragma ‘Priority’) + and applies to the task in which it appears. The argument must be of + type ‘System.Task_Info.Task_Info_Type’. The ‘Task_Info’ pragma provides + system dependent control over aspects of tasking implementation, for + example, the ability to map tasks to specific processors. For details + on the facilities available for the version of GNAT that you are using, + see the documentation in the spec of package System.Task_Info in the + runtime library. + +  + File: gnat_rm.info, Node: package System Task_Info s-tasinf ads, Prev: pragma Task_Info, Up: Obsolescent Features + + 18.5 package System.Task_Info (‘s-tasinf.ads’) + ============================================== + + This package provides target dependent functionality that is used to + support the ‘Task_Info’ pragma. The predefined Ada package + ‘System.Multiprocessors’ and the ‘CPU’ aspect now provide a standard + replacement for GNAT’s ‘Task_Info’ functionality. + +  + File: gnat_rm.info, Node: Compatibility and Porting Guide, Next: GNU Free Documentation License, Prev: Obsolescent Features, Up: Top + + 19 Compatibility and Porting Guide + ********************************** + + This chapter presents some guidelines for developing portable Ada code, + describes the compatibility issues that may arise between GNAT and other + Ada compilation systems (including those for Ada 83), and shows how GNAT + can expedite porting applications developed in other Ada environments. + + * Menu: + + * Writing Portable Fixed-Point Declarations:: + * Compatibility with Ada 83:: + * Compatibility between Ada 95 and Ada 2005:: + * Implementation-dependent characteristics:: + * Compatibility with Other Ada Systems:: + * Representation Clauses:: + * Compatibility with HP Ada 83:: + +  + File: gnat_rm.info, Node: Writing Portable Fixed-Point Declarations, Next: Compatibility with Ada 83, Up: Compatibility and Porting Guide + + 19.1 Writing Portable Fixed-Point Declarations + ============================================== + + The Ada Reference Manual gives an implementation freedom to choose + bounds that are narrower by ‘Small’ from the given bounds. For example, + if we write + + type F1 is delta 1.0 range -128.0 .. +128.0; + + then the implementation is allowed to choose -128.0 .. +127.0 if it + likes, but is not required to do so. + + This leads to possible portability problems, so let’s have a closer look + at this, and figure out how to avoid these problems. + + First, why does this freedom exist, and why would an implementation take + advantage of it? To answer this, take a closer look at the type + declaration for ‘F1’ above. If the compiler uses the given bounds, it + would need 9 bits to hold the largest positive value (and typically that + means 16 bits on all machines). But if the implementation chooses the + +127.0 bound then it can fit values of the type in 8 bits. + + Why not make the user write +127.0 if that’s what is wanted? The + rationale is that if you are thinking of fixed point as a kind of ‘poor + man’s floating-point’, then you don’t want to be thinking about the + scaled integers that are used in its representation. Let’s take another + example: + + type F2 is delta 2.0**(-15) range -1.0 .. +1.0; + + Looking at this declaration, it seems casually as though it should fit + in 16 bits, but again that extra positive value +1.0 has the scaled + integer equivalent of 2**15 which is one too big for signed 16 bits. + The implementation can treat this as: + + type F2 is delta 2.0**(-15) range -1.0 .. +1.0-(2.0**(-15)); + + and the Ada language design team felt that this was too annoying to + require. We don’t need to debate this decision at this point, since it + is well established (the rule about narrowing the ranges dates to Ada + 83). + + But the important point is that an implementation is not required to do + this narrowing, so we have a potential portability problem. We could + imagine three types of implementation: + + a. those that narrow the range automatically if they can figure out + that the narrower range will allow storage in a smaller machine + unit, + + b. those that will narrow only if forced to by a ‘'Size’ clause, and + + c. those that will never narrow. + + Now if we are language theoreticians, we can imagine a fourth approach: + to narrow all the time, e.g. to treat + + type F3 is delta 1.0 range -10.0 .. +23.0; + + as though it had been written: + + type F3 is delta 1.0 range -9.0 .. +22.0; + + But although technically allowed, such a behavior would be hostile and + silly, and no real compiler would do this. All real compilers will fall + into one of the categories (a), (b) or (c) above. + + So, how do you get the compiler to do what you want? The answer is give + the actual bounds you want, and then use a ‘'Small’ clause and a ‘'Size’ + clause to absolutely pin down what the compiler does. E.g., for ‘F2’ + above, we will write: + + My_Small : constant := 2.0**(-15); + My_First : constant := -1.0; + My_Last : constant := +1.0 - My_Small; + + type F2 is delta My_Small range My_First .. My_Last; + + and then add + + for F2'Small use my_Small; + for F2'Size use 16; + + In practice all compilers will do the same thing here and will give you + what you want, so the above declarations are fully portable. If you + really want to play language lawyer and guard against ludicrous behavior + by the compiler you could add + + Test1 : constant := 1 / Boolean'Pos (F2'First = My_First); + Test2 : constant := 1 / Boolean'Pos (F2'Last = My_Last); + + One or other or both are allowed to be illegal if the compiler is + behaving in a silly manner, but at least the silly compiler will not get + away with silently messing with your (very clear) intentions. + + If you follow this scheme you will be guaranteed that your fixed-point + types will be portable. + +  + File: gnat_rm.info, Node: Compatibility with Ada 83, Next: Compatibility between Ada 95 and Ada 2005, Prev: Writing Portable Fixed-Point Declarations, Up: Compatibility and Porting Guide + + 19.2 Compatibility with Ada 83 + ============================== + + Ada 95 and the subsequent revisions Ada 2005 and Ada 2012 are highly + upwards compatible with Ada 83. In particular, the design intention was + that the difficulties associated with moving from Ada 83 to later + versions of the standard should be no greater than those that occur when + moving from one Ada 83 system to another. + + However, there are a number of points at which there are minor + incompatibilities. The ‘Ada 95 Annotated Reference Manual’ contains + full details of these issues as they relate to Ada 95, and should be + consulted for a complete treatment. In practice the following + subsections treat the most likely issues to be encountered. + + * Menu: + + * Legal Ada 83 programs that are illegal in Ada 95:: + * More deterministic semantics:: + * Changed semantics:: + * Other language compatibility issues:: + +  + File: gnat_rm.info, Node: Legal Ada 83 programs that are illegal in Ada 95, Next: More deterministic semantics, Up: Compatibility with Ada 83 + + 19.2.1 Legal Ada 83 programs that are illegal in Ada 95 + ------------------------------------------------------- + + Some legal Ada 83 programs are illegal (i.e., they will fail to compile) + in Ada 95 and later versions of the standard: + + * `Character literals' + + Some uses of character literals are ambiguous. Since Ada 95 has + introduced ‘Wide_Character’ as a new predefined character type, + some uses of character literals that were legal in Ada 83 are + illegal in Ada 95. For example: + + for Char in 'A' .. 'Z' loop ... end loop; + + The problem is that ‘A’ and ‘Z’ could be from either ‘Character’ or + ‘Wide_Character’. The simplest correction is to make the type + explicit; e.g.: + + for Char in Character range 'A' .. 'Z' loop ... end loop; + + * `New reserved words' + + The identifiers ‘abstract’, ‘aliased’, ‘protected’, ‘requeue’, + ‘tagged’, and ‘until’ are reserved in Ada 95. Existing Ada 83 code + using any of these identifiers must be edited to use some + alternative name. + + * `Freezing rules' + + The rules in Ada 95 are slightly different with regard to the point + at which entities are frozen, and representation pragmas and + clauses are not permitted past the freeze point. This shows up + most typically in the form of an error message complaining that a + representation item appears too late, and the appropriate + corrective action is to move the item nearer to the declaration of + the entity to which it refers. + + A particular case is that representation pragmas cannot be applied + to a subprogram body. If necessary, a separate subprogram + declaration must be introduced to which the pragma can be applied. + + * `Optional bodies for library packages' + + In Ada 83, a package that did not require a package body was + nevertheless allowed to have one. This lead to certain surprises + in compiling large systems (situations in which the body could be + unexpectedly ignored by the binder). In Ada 95, if a package does + not require a body then it is not permitted to have a body. To fix + this problem, simply remove a redundant body if it is empty, or, if + it is non-empty, introduce a dummy declaration into the spec that + makes the body required. One approach is to add a private part to + the package declaration (if necessary), and define a parameterless + procedure called ‘Requires_Body’, which must then be given a dummy + procedure body in the package body, which then becomes required. + Another approach (assuming that this does not introduce elaboration + circularities) is to add an ‘Elaborate_Body’ pragma to the package + spec, since one effect of this pragma is to require the presence of + a package body. + + * `Numeric_Error is the same exception as Constraint_Error' + + In Ada 95, the exception ‘Numeric_Error’ is a renaming of + ‘Constraint_Error’. This means that it is illegal to have separate + exception handlers for the two exceptions. The fix is simply to + remove the handler for the ‘Numeric_Error’ case (since even in Ada + 83, a compiler was free to raise ‘Constraint_Error’ in place of + ‘Numeric_Error’ in all cases). + + * `Indefinite subtypes in generics' + + In Ada 83, it was permissible to pass an indefinite type (e.g, + ‘String’) as the actual for a generic formal private type, but then + the instantiation would be illegal if there were any instances of + declarations of variables of this type in the generic body. In Ada + 95, to avoid this clear violation of the methodological principle + known as the ‘contract model’, the generic declaration explicitly + indicates whether or not such instantiations are permitted. If a + generic formal parameter has explicit unknown discriminants, + indicated by using ‘(<>)’ after the subtype name, then it can be + instantiated with indefinite types, but no stand-alone variables + can be declared of this type. Any attempt to declare such a + variable will result in an illegality at the time the generic is + declared. If the ‘(<>)’ notation is not used, then it is illegal + to instantiate the generic with an indefinite type. This is the + potential incompatibility issue when porting Ada 83 code to Ada 95. + It will show up as a compile time error, and the fix is usually + simply to add the ‘(<>)’ to the generic declaration. + +  + File: gnat_rm.info, Node: More deterministic semantics, Next: Changed semantics, Prev: Legal Ada 83 programs that are illegal in Ada 95, Up: Compatibility with Ada 83 + + 19.2.2 More deterministic semantics + ----------------------------------- + + * `Conversions' + + Conversions from real types to integer types round away from 0. In + Ada 83 the conversion Integer(2.5) could deliver either 2 or 3 as + its value. This implementation freedom was intended to support + unbiased rounding in statistical applications, but in practice it + interfered with portability. In Ada 95 the conversion semantics + are unambiguous, and rounding away from 0 is required. Numeric + code may be affected by this change in semantics. Note, though, + that this issue is no worse than already existed in Ada 83 when + porting code from one vendor to another. + + * `Tasking' + + The Real-Time Annex introduces a set of policies that define the + behavior of features that were implementation dependent in Ada 83, + such as the order in which open select branches are executed. + +  + File: gnat_rm.info, Node: Changed semantics, Next: Other language compatibility issues, Prev: More deterministic semantics, Up: Compatibility with Ada 83 + + 19.2.3 Changed semantics + ------------------------ + + The worst kind of incompatibility is one where a program that is legal + in Ada 83 is also legal in Ada 95 but can have an effect in Ada 95 that + was not possible in Ada 83. Fortunately this is extremely rare, but the + one situation that you should be alert to is the change in the + predefined type ‘Character’ from 7-bit ASCII to 8-bit Latin-1. + + * `Range of type ‘‘Character‘‘' + + The range of ‘Standard.Character’ is now the full 256 characters of + Latin-1, whereas in most Ada 83 implementations it was restricted + to 128 characters. Although some of the effects of this change + will be manifest in compile-time rejection of legal Ada 83 programs + it is possible for a working Ada 83 program to have a different + effect in Ada 95, one that was not permitted in Ada 83. As an + example, the expression ‘Character'Pos(Character'Last)’ returned + ‘127’ in Ada 83 and now delivers ‘255’ as its value. In general, + you should look at the logic of any character-processing Ada 83 + program and see whether it needs to be adapted to work correctly + with Latin-1. Note that the predefined Ada 95 API has a character + handling package that may be relevant if code needs to be adapted + to account for the additional Latin-1 elements. The desirable fix + is to modify the program to accommodate the full character set, but + in some cases it may be convenient to define a subtype or derived + type of Character that covers only the restricted range. + +  + File: gnat_rm.info, Node: Other language compatibility issues, Prev: Changed semantics, Up: Compatibility with Ada 83 + + 19.2.4 Other language compatibility issues + ------------------------------------------ + + * `-gnat83' switch + + All implementations of GNAT provide a switch that causes GNAT to + operate in Ada 83 mode. In this mode, some but not all + compatibility problems of the type described above are handled + automatically. For example, the new reserved words introduced in + Ada 95 and Ada 2005 are treated simply as identifiers as in Ada 83. + However, in practice, it is usually advisable to make the necessary + modifications to the program to remove the need for using this + switch. See the ‘Compiling Different Versions of Ada’ section in + the ‘GNAT User’s Guide’. + + * Support for removed Ada 83 pragmas and attributes + + A number of pragmas and attributes from Ada 83 were removed from + Ada 95, generally because they were replaced by other mechanisms. + Ada 95 and Ada 2005 compilers are allowed, but not required, to + implement these missing elements. In contrast with some other + compilers, GNAT implements all such pragmas and attributes, + eliminating this compatibility concern. These include ‘pragma + Interface’ and the floating point type attributes (‘Emax’, + ‘Mantissa’, etc.), among other items. + +  + File: gnat_rm.info, Node: Compatibility between Ada 95 and Ada 2005, Next: Implementation-dependent characteristics, Prev: Compatibility with Ada 83, Up: Compatibility and Porting Guide + + 19.3 Compatibility between Ada 95 and Ada 2005 + ============================================== + + Although Ada 2005 was designed to be upwards compatible with Ada 95, + there are a number of incompatibilities. Several are enumerated below; + for a complete description please see the ‘Annotated Ada 2005 Reference + Manual’, or section 9.1.1 in ‘Rationale for Ada 2005’. + + * `New reserved words.' + + The words ‘interface’, ‘overriding’ and ‘synchronized’ are reserved + in Ada 2005. A pre-Ada 2005 program that uses any of these as an + identifier will be illegal. + + * `New declarations in predefined packages.' + + A number of packages in the predefined environment contain new + declarations: ‘Ada.Exceptions’, ‘Ada.Real_Time’, ‘Ada.Strings’, + ‘Ada.Strings.Fixed’, ‘Ada.Strings.Bounded’, + ‘Ada.Strings.Unbounded’, ‘Ada.Strings.Wide_Fixed’, + ‘Ada.Strings.Wide_Bounded’, ‘Ada.Strings.Wide_Unbounded’, + ‘Ada.Tags’, ‘Ada.Text_IO’, and ‘Interfaces.C’. If an Ada 95 + program does a ‘with’ and ‘use’ of any of these packages, the new + declarations may cause name clashes. + + * `Access parameters.' + + A nondispatching subprogram with an access parameter cannot be + renamed as a dispatching operation. This was permitted in Ada 95. + + * `Access types, discriminants, and constraints.' + + Rule changes in this area have led to some incompatibilities; for + example, constrained subtypes of some access types are not + permitted in Ada 2005. + + * `Aggregates for limited types.' + + The allowance of aggregates for limited types in Ada 2005 raises + the possibility of ambiguities in legal Ada 95 programs, since + additional types now need to be considered in expression + resolution. + + * `Fixed-point multiplication and division.' + + Certain expressions involving ‘*’ or ‘/’ for a fixed-point type, + which were legal in Ada 95 and invoked the predefined versions of + these operations, are now ambiguous. The ambiguity may be resolved + either by applying a type conversion to the expression, or by + explicitly invoking the operation from package ‘Standard’. + + * `Return-by-reference types.' + + The Ada 95 return-by-reference mechanism has been removed. + Instead, the user can declare a function returning a value from an + anonymous access type. + +  + File: gnat_rm.info, Node: Implementation-dependent characteristics, Next: Compatibility with Other Ada Systems, Prev: Compatibility between Ada 95 and Ada 2005, Up: Compatibility and Porting Guide + + 19.4 Implementation-dependent characteristics + ============================================= + + Although the Ada language defines the semantics of each construct as + precisely as practical, in some situations (for example for reasons of + efficiency, or where the effect is heavily dependent on the host or + target platform) the implementation is allowed some freedom. In porting + Ada 83 code to GNAT, you need to be aware of whether / how the existing + code exercised such implementation dependencies. Such characteristics + fall into several categories, and GNAT offers specific support in + assisting the transition from certain Ada 83 compilers. + + * Menu: + + * Implementation-defined pragmas:: + * Implementation-defined attributes:: + * Libraries:: + * Elaboration order:: + * Target-specific aspects:: + +  + File: gnat_rm.info, Node: Implementation-defined pragmas, Next: Implementation-defined attributes, Up: Implementation-dependent characteristics + + 19.4.1 Implementation-defined pragmas + ------------------------------------- + + Ada compilers are allowed to supplement the language-defined pragmas, + and these are a potential source of non-portability. All GNAT-defined + pragmas are described in *note Implementation Defined Pragmas: 7, and + these include several that are specifically intended to correspond to + other vendors’ Ada 83 pragmas. For migrating from VADS, the pragma + ‘Use_VADS_Size’ may be useful. For compatibility with HP Ada 83, GNAT + supplies the pragmas ‘Extend_System’, ‘Ident’, ‘Inline_Generic’, + ‘Interface_Name’, ‘Passive’, ‘Suppress_All’, and ‘Volatile’. Other + relevant pragmas include ‘External’ and ‘Link_With’. Some + vendor-specific Ada 83 pragmas (‘Share_Generic’, ‘Subtitle’, and + ‘Title’) are recognized, thus avoiding compiler rejection of units that + contain such pragmas; they are not relevant in a GNAT context and hence + are not otherwise implemented. + +  + File: gnat_rm.info, Node: Implementation-defined attributes, Next: Libraries, Prev: Implementation-defined pragmas, Up: Implementation-dependent characteristics + + 19.4.2 Implementation-defined attributes + ---------------------------------------- + + Analogous to pragmas, the set of attributes may be extended by an + implementation. All GNAT-defined attributes are described in *note + Implementation Defined Attributes: 8, and these include several that are + specifically intended to correspond to other vendors’ Ada 83 attributes. + For migrating from VADS, the attribute ‘VADS_Size’ may be useful. For + compatibility with HP Ada 83, GNAT supplies the attributes ‘Bit’, + ‘Machine_Size’ and ‘Type_Class’. + +  + File: gnat_rm.info, Node: Libraries, Next: Elaboration order, Prev: Implementation-defined attributes, Up: Implementation-dependent characteristics + + 19.4.3 Libraries + ---------------- + + Vendors may supply libraries to supplement the standard Ada API. If Ada + 83 code uses vendor-specific libraries then there are several ways to + manage this in Ada 95 and later versions of the standard: + + * If the source code for the libraries (specs and bodies) are + available, then the libraries can be migrated in the same way as + the application. + + * If the source code for the specs but not the bodies are available, + then you can reimplement the bodies. + + * Some features introduced by Ada 95 obviate the need for library + support. For example most Ada 83 vendors supplied a package for + unsigned integers. The Ada 95 modular type feature is the + preferred way to handle this need, so instead of migrating or + reimplementing the unsigned integer package it may be preferable to + retrofit the application using modular types. + +  + File: gnat_rm.info, Node: Elaboration order, Next: Target-specific aspects, Prev: Libraries, Up: Implementation-dependent characteristics + + 19.4.4 Elaboration order + ------------------------ + + The implementation can choose any elaboration order consistent with the + unit dependency relationship. This freedom means that some orders can + result in Program_Error being raised due to an ‘Access Before + Elaboration’: an attempt to invoke a subprogram before its body has been + elaborated, or to instantiate a generic before the generic body has been + elaborated. By default GNAT attempts to choose a safe order (one that + will not encounter access before elaboration problems) by implicitly + inserting ‘Elaborate’ or ‘Elaborate_All’ pragmas where needed. However, + this can lead to the creation of elaboration circularities and a + resulting rejection of the program by gnatbind. This issue is + thoroughly described in the `Elaboration Order Handling in GNAT' + appendix in the ‘GNAT User’s Guide’. In brief, there are several ways + to deal with this situation: + + * Modify the program to eliminate the circularities, e.g., by moving + elaboration-time code into explicitly-invoked procedures + + * Constrain the elaboration order by including explicit + ‘Elaborate_Body’ or ‘Elaborate’ pragmas, and then inhibit the + generation of implicit ‘Elaborate_All’ pragmas either globally (as + an effect of the `-gnatE' switch) or locally (by selectively + suppressing elaboration checks via pragma + ‘Suppress(Elaboration_Check)’ when it is safe to do so). + +  + File: gnat_rm.info, Node: Target-specific aspects, Prev: Elaboration order, Up: Implementation-dependent characteristics + + 19.4.5 Target-specific aspects + ------------------------------ + + Low-level applications need to deal with machine addresses, data + representations, interfacing with assembler code, and similar issues. + If such an Ada 83 application is being ported to different target + hardware (for example where the byte endianness has changed) then you + will need to carefully examine the program logic; the porting effort + will heavily depend on the robustness of the original design. Moreover, + Ada 95 (and thus Ada 2005 and Ada 2012) are sometimes incompatible with + typical Ada 83 compiler practices regarding implicit packing, the + meaning of the Size attribute, and the size of access values. GNAT’s + approach to these issues is described in *note Representation Clauses: + 467. + +  + File: gnat_rm.info, Node: Compatibility with Other Ada Systems, Next: Representation Clauses, Prev: Implementation-dependent characteristics, Up: Compatibility and Porting Guide + + 19.5 Compatibility with Other Ada Systems + ========================================= + + If programs avoid the use of implementation dependent and implementation + defined features, as documented in the ‘Ada Reference Manual’, there + should be a high degree of portability between GNAT and other Ada + systems. The following are specific items which have proved troublesome + in moving Ada 95 programs from GNAT to other Ada 95 compilers, but do + not affect porting code to GNAT. (As of January 2007, GNAT is the only + compiler available for Ada 2005; the following issues may or may not + arise for Ada 2005 programs when other compilers appear.) + + * `Ada 83 Pragmas and Attributes' + + Ada 95 compilers are allowed, but not required, to implement the + missing Ada 83 pragmas and attributes that are no longer defined in + Ada 95. GNAT implements all such pragmas and attributes, + eliminating this as a compatibility concern, but some other Ada 95 + compilers reject these pragmas and attributes. + + * `Specialized Needs Annexes' + + GNAT implements the full set of special needs annexes. At the + current time, it is the only Ada 95 compiler to do so. This means + that programs making use of these features may not be portable to + other Ada 95 compilation systems. + + * `Representation Clauses' + + Some other Ada 95 compilers implement only the minimal set of + representation clauses required by the Ada 95 reference manual. + GNAT goes far beyond this minimal set, as described in the next + section. + +  + File: gnat_rm.info, Node: Representation Clauses, Next: Compatibility with HP Ada 83, Prev: Compatibility with Other Ada Systems, Up: Compatibility and Porting Guide + + 19.6 Representation Clauses + =========================== + + The Ada 83 reference manual was quite vague in describing both the + minimal required implementation of representation clauses, and also + their precise effects. Ada 95 (and thus also Ada 2005) are much more + explicit, but the minimal set of capabilities required is still quite + limited. + + GNAT implements the full required set of capabilities in Ada 95 and Ada + 2005, but also goes much further, and in particular an effort has been + made to be compatible with existing Ada 83 usage to the greatest extent + possible. + + A few cases exist in which Ada 83 compiler behavior is incompatible with + the requirements in Ada 95 (and thus also Ada 2005). These are + instances of intentional or accidental dependence on specific + implementation dependent characteristics of these Ada 83 compilers. The + following is a list of the cases most likely to arise in existing Ada 83 + code. + + * `Implicit Packing' + + Some Ada 83 compilers allowed a Size specification to cause + implicit packing of an array or record. This could cause expensive + implicit conversions for change of representation in the presence + of derived types, and the Ada design intends to avoid this + possibility. Subsequent AI’s were issued to make it clear that + such implicit change of representation in response to a Size clause + is inadvisable, and this recommendation is represented explicitly + in the Ada 95 (and Ada 2005) Reference Manuals as implementation + advice that is followed by GNAT. The problem will show up as an + error message rejecting the size clause. The fix is simply to + provide the explicit pragma ‘Pack’, or for more fine tuned control, + provide a Component_Size clause. + + * `Meaning of Size Attribute' + + The Size attribute in Ada 95 (and Ada 2005) for discrete types is + defined as the minimal number of bits required to hold values of + the type. For example, on a 32-bit machine, the size of ‘Natural’ + will typically be 31 and not 32 (since no sign bit is required). + Some Ada 83 compilers gave 31, and some 32 in this situation. This + problem will usually show up as a compile time error, but not + always. It is a good idea to check all uses of the ‘Size attribute + when porting Ada 83 code. The GNAT specific attribute Object_Size + can provide a useful way of duplicating the behavior of some Ada 83 + compiler systems. + + * `Size of Access Types' + + A common assumption in Ada 83 code is that an access type is in + fact a pointer, and that therefore it will be the same size as a + System.Address value. This assumption is true for GNAT in most + cases with one exception. For the case of a pointer to an + unconstrained array type (where the bounds may vary from one value + of the access type to another), the default is to use a ‘fat + pointer’, which is represented as two separate pointers, one to the + bounds, and one to the array. This representation has a number of + advantages, including improved efficiency. However, it may cause + some difficulties in porting existing Ada 83 code which makes the + assumption that, for example, pointers fit in 32 bits on a machine + with 32-bit addressing. + + To get around this problem, GNAT also permits the use of ‘thin + pointers’ for access types in this case (where the designated type + is an unconstrained array type). These thin pointers are indeed + the same size as a System.Address value. To specify a thin + pointer, use a size clause for the type, for example: + + type X is access all String; + for X'Size use Standard'Address_Size; + + which will cause the type X to be represented using a single + pointer. When using this representation, the bounds are right + behind the array. This representation is slightly less efficient, + and does not allow quite such flexibility in the use of foreign + pointers or in using the Unrestricted_Access attribute to create + pointers to non-aliased objects. But for any standard portable use + of the access type it will work in a functionally correct manner + and allow porting of existing code. Note that another way of + forcing a thin pointer representation is to use a component size + clause for the element size in an array, or a record representation + clause for an access field in a record. + + See the documentation of Unrestricted_Access in the GNAT RM for a + full discussion of possible problems using this attribute in + conjunction with thin pointers. + +  + File: gnat_rm.info, Node: Compatibility with HP Ada 83, Prev: Representation Clauses, Up: Compatibility and Porting Guide + + 19.7 Compatibility with HP Ada 83 + ================================= + + All the HP Ada 83 pragmas and attributes are recognized, although only a + subset of them can sensibly be implemented. The description of pragmas + in *note Implementation Defined Pragmas: 7. indicates whether or not + they are applicable to GNAT. + + * `Default floating-point representation' + + In GNAT, the default floating-point format is IEEE, whereas in HP + Ada 83, it is VMS format. + + * `System' + + the package System in GNAT exactly corresponds to the definition in + the Ada 95 reference manual, which means that it excludes many of + the HP Ada 83 extensions. However, a separate package Aux_DEC is + provided that contains the additional definitions, and a special + pragma, Extend_System allows this package to be treated + transparently as an extension of package System. + +  + File: gnat_rm.info, Node: GNU Free Documentation License, Next: Index, Prev: Compatibility and Porting Guide, Up: Top + + 20 GNU Free Documentation License + ********************************* + + Version 1.3, 3 November 2008 + + Copyright 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc + ‘https://fsf.org/’ + + Everyone is permitted to copy and distribute verbatim copies of this + license document, but changing it is not allowed. + + `Preamble' + + The purpose of this License is to make a manual, textbook, or other + functional and useful document “free” in the sense of freedom: to assure + everyone the effective freedom to copy and redistribute it, with or + without modifying it, either commercially or noncommercially. + Secondarily, this License preserves for the author and publisher a way + to get credit for their work, while not being considered responsible for + modifications made by others. + + This License is a kind of “copyleft”, which means that derivative works + of the document must themselves be free in the same sense. It + complements the GNU General Public License, which is a copyleft license + designed for free software. + + We have designed this License in order to use it for manuals for free + software, because free software needs free documentation: a free program + should come with manuals providing the same freedoms that the software + does. But this License is not limited to software manuals; it can be + used for any textual work, regardless of subject matter or whether it is + published as a printed book. We recommend this License principally for + works whose purpose is instruction or reference. + + `1. APPLICABILITY AND DEFINITIONS' + + This License applies to any manual or other work, in any medium, that + contains a notice placed by the copyright holder saying it can be + distributed under the terms of this License. Such a notice grants a + world-wide, royalty-free license, unlimited in duration, to use that + work under the conditions stated herein. The `Document', below, refers + to any such manual or work. Any member of the public is a licensee, and + is addressed as “`you'”. You accept the license if you copy, modify or + distribute the work in a way requiring permission under copyright law. + + A “`Modified Version'” of the Document means any work containing the + Document or a portion of it, either copied verbatim, or with + modifications and/or translated into another language. + + A “`Secondary Section'” is a named appendix or a front-matter section of + the Document that deals exclusively with the relationship of the + publishers or authors of the Document to the Document’s overall subject + (or to related matters) and contains nothing that could fall directly + within that overall subject. (Thus, if the Document is in part a + textbook of mathematics, a Secondary Section may not explain any + mathematics.) The relationship could be a matter of historical + connection with the subject or with related matters, or of legal, + commercial, philosophical, ethical or political position regarding them. + + The “`Invariant Sections'” are certain Secondary Sections whose titles + are designated, as being those of Invariant Sections, in the notice that + says that the Document is released under this License. If a section + does not fit the above definition of Secondary then it is not allowed to + be designated as Invariant. The Document may contain zero Invariant + Sections. If the Document does not identify any Invariant Sections then + there are none. + + The “`Cover Texts'” are certain short passages of text that are listed, + as Front-Cover Texts or Back-Cover Texts, in the notice that says that + the Document is released under this License. A Front-Cover Text may be + at most 5 words, and a Back-Cover Text may be at most 25 words. + + A “`Transparent'” copy of the Document means a machine-readable copy, + represented in a format whose specification is available to the general + public, that is suitable for revising the document straightforwardly + with generic text editors or (for images composed of pixels) generic + paint programs or (for drawings) some widely available drawing editor, + and that is suitable for input to text formatters or for automatic + translation to a variety of formats suitable for input to text + formatters. A copy made in an otherwise Transparent file format whose + markup, or absence of markup, has been arranged to thwart or discourage + subsequent modification by readers is not Transparent. An image format + is not Transparent if used for any substantial amount of text. A copy + that is not “Transparent” is called `Opaque'. + + Examples of suitable formats for Transparent copies include plain ASCII + without markup, Texinfo input format, LaTeX input format, SGML or XML + using a publicly available DTD, and standard-conforming simple HTML, + PostScript or PDF designed for human modification. Examples of + transparent image formats include PNG, XCF and JPG. Opaque formats + include proprietary formats that can be read and edited only by + proprietary word processors, SGML or XML for which the DTD and/or + processing tools are not generally available, and the machine-generated + HTML, PostScript or PDF produced by some word processors for output + purposes only. + + The “`Title Page'” means, for a printed book, the title page itself, + plus such following pages as are needed to hold, legibly, the material + this License requires to appear in the title page. For works in formats + which do not have any title page as such, “Title Page” means the text + near the most prominent appearance of the work’s title, preceding the + beginning of the body of the text. + + The “`publisher'” means any person or entity that distributes copies of + the Document to the public. + + A section “`Entitled XYZ'” means a named subunit of the Document whose + title either is precisely XYZ or contains XYZ in parentheses following + text that translates XYZ in another language. (Here XYZ stands for a + specific section name mentioned below, such as “`Acknowledgements'”, + “`Dedications'”, “`Endorsements'”, or “`History'”.) To “`Preserve the + Title'” of such a section when you modify the Document means that it + remains a section “Entitled XYZ” according to this definition. + + The Document may include Warranty Disclaimers next to the notice which + states that this License applies to the Document. These Warranty + Disclaimers are considered to be included by reference in this License, + but only as regards disclaiming warranties: any other implication that + these Warranty Disclaimers may have is void and has no effect on the + meaning of this License. + + `2. VERBATIM COPYING' + + You may copy and distribute the Document in any medium, either + commercially or noncommercially, provided that this License, the + copyright notices, and the license notice saying this License applies to + the Document are reproduced in all copies, and that you add no other + conditions whatsoever to those of this License. You may not use + technical measures to obstruct or control the reading or further copying + of the copies you make or distribute. However, you may accept + compensation in exchange for copies. If you distribute a large enough + number of copies you must also follow the conditions in section 3. + + You may also lend copies, under the same conditions stated above, and + you may publicly display copies. + + `3. COPYING IN QUANTITY' + + If you publish printed copies (or copies in media that commonly have + printed covers) of the Document, numbering more than 100, and the + Document’s license notice requires Cover Texts, you must enclose the + copies in covers that carry, clearly and legibly, all these Cover Texts: + Front-Cover Texts on the front cover, and Back-Cover Texts on the back + cover. Both covers must also clearly and legibly identify you as the + publisher of these copies. The front cover must present the full title + with all words of the title equally prominent and visible. You may add + other material on the covers in addition. Copying with changes limited + to the covers, as long as they preserve the title of the Document and + satisfy these conditions, can be treated as verbatim copying in other + respects. + + If the required texts for either cover are too voluminous to fit + legibly, you should put the first ones listed (as many as fit + reasonably) on the actual cover, and continue the rest onto adjacent + pages. + + If you publish or distribute Opaque copies of the Document numbering + more than 100, you must either include a machine-readable Transparent + copy along with each Opaque copy, or state in or with each Opaque copy a + computer-network location from which the general network-using public + has access to download using public-standard network protocols a + complete Transparent copy of the Document, free of added material. If + you use the latter option, you must take reasonably prudent steps, when + you begin distribution of Opaque copies in quantity, to ensure that this + Transparent copy will remain thus accessible at the stated location + until at least one year after the last time you distribute an Opaque + copy (directly or through your agents or retailers) of that edition to + the public. + + It is requested, but not required, that you contact the authors of the + Document well before redistributing any large number of copies, to give + them a chance to provide you with an updated version of the Document. + + `4. MODIFICATIONS' + + You may copy and distribute a Modified Version of the Document under the + conditions of sections 2 and 3 above, provided that you release the + Modified Version under precisely this License, with the Modified Version + filling the role of the Document, thus licensing distribution and + modification of the Modified Version to whoever possesses a copy of it. + In addition, you must do these things in the Modified Version: + + A. Use in the Title Page (and on the covers, if any) a title distinct + from that of the Document, and from those of previous versions + (which should, if there were any, be listed in the History section + of the Document). You may use the same title as a previous version + if the original publisher of that version gives permission. + + B. List on the Title Page, as authors, one or more persons or entities + responsible for authorship of the modifications in the Modified + Version, together with at least five of the principal authors of + the Document (all of its principal authors, if it has fewer than + five), unless they release you from this requirement. + + C. State on the Title page the name of the publisher of the Modified + Version, as the publisher. + + D. Preserve all the copyright notices of the Document. + + E. Add an appropriate copyright notice for your modifications adjacent + to the other copyright notices. + + F. Include, immediately after the copyright notices, a license notice + giving the public permission to use the Modified Version under the + terms of this License, in the form shown in the Addendum below. + + G. Preserve in that license notice the full lists of Invariant + Sections and required Cover Texts given in the Document’s license + notice. + + H. Include an unaltered copy of this License. + + I. Preserve the section Entitled “History”, Preserve its Title, and + add to it an item stating at least the title, year, new authors, + and publisher of the Modified Version as given on the Title Page. + If there is no section Entitled “History” in the Document, create + one stating the title, year, authors, and publisher of the Document + as given on its Title Page, then add an item describing the + Modified Version as stated in the previous sentence. + + J. Preserve the network location, if any, given in the Document for + public access to a Transparent copy of the Document, and likewise + the network locations given in the Document for previous versions + it was based on. These may be placed in the “History” section. + You may omit a network location for a work that was published at + least four years before the Document itself, or if the original + publisher of the version it refers to gives permission. + + K. For any section Entitled “Acknowledgements” or “Dedications”, + Preserve the Title of the section, and preserve in the section all + the substance and tone of each of the contributor acknowledgements + and/or dedications given therein. + + L. Preserve all the Invariant Sections of the Document, unaltered in + their text and in their titles. Section numbers or the equivalent + are not considered part of the section titles. + + M. Delete any section Entitled “Endorsements”. Such a section may not + be included in the Modified Version. + + N. Do not retitle any existing section to be Entitled “Endorsements” + or to conflict in title with any Invariant Section. + + O. Preserve any Warranty Disclaimers. + + If the Modified Version includes new front-matter sections or appendices + that qualify as Secondary Sections and contain no material copied from + the Document, you may at your option designate some or all of these + sections as invariant. To do this, add their titles to the list of + Invariant Sections in the Modified Version’s license notice. These + titles must be distinct from any other section titles. + + You may add a section Entitled “Endorsements”, provided it contains + nothing but endorsements of your Modified Version by various parties—for + example, statements of peer review or that the text has been approved by + an organization as the authoritative definition of a standard. + + You may add a passage of up to five words as a Front-Cover Text, and a + passage of up to 25 words as a Back-Cover Text, to the end of the list + of Cover Texts in the Modified Version. Only one passage of Front-Cover + Text and one of Back-Cover Text may be added by (or through arrangements + made by) any one entity. If the Document already includes a cover text + for the same cover, previously added by you or by arrangement made by + the same entity you are acting on behalf of, you may not add another; + but you may replace the old one, on explicit permission from the + previous publisher that added the old one. + + The author(s) and publisher(s) of the Document do not by this License + give permission to use their names for publicity for or to assert or + imply endorsement of any Modified Version. + + `5. COMBINING DOCUMENTS' + + You may combine the Document with other documents released under this + License, under the terms defined in section 4 above for modified + versions, provided that you include in the combination all of the + Invariant Sections of all of the original documents, unmodified, and + list them all as Invariant Sections of your combined work in its license + notice, and that you preserve all their Warranty Disclaimers. + + The combined work need only contain one copy of this License, and + multiple identical Invariant Sections may be replaced with a single + copy. If there are multiple Invariant Sections with the same name but + different contents, make the title of each such section unique by adding + at the end of it, in parentheses, the name of the original author or + publisher of that section if known, or else a unique number. Make the + same adjustment to the section titles in the list of Invariant Sections + in the license notice of the combined work. + + In the combination, you must combine any sections Entitled “History” in + the various original documents, forming one section Entitled “History”; + likewise combine any sections Entitled “Acknowledgements”, and any + sections Entitled “Dedications”. You must delete all sections Entitled + “Endorsements”. + + `6. COLLECTIONS OF DOCUMENTS' + + You may make a collection consisting of the Document and other documents + released under this License, and replace the individual copies of this + License in the various documents with a single copy that is included in + the collection, provided that you follow the rules of this License for + verbatim copying of each of the documents in all other respects. + + You may extract a single document from such a collection, and distribute + it individually under this License, provided you insert a copy of this + License into the extracted document, and follow this License in all + other respects regarding verbatim copying of that document. + + `7. AGGREGATION WITH INDEPENDENT WORKS' + + A compilation of the Document or its derivatives with other separate and + independent documents or works, in or on a volume of a storage or + distribution medium, is called an “aggregate” if the copyright resulting + from the compilation is not used to limit the legal rights of the + compilation’s users beyond what the individual works permit. When the + Document is included in an aggregate, this License does not apply to the + other works in the aggregate which are not themselves derivative works + of the Document. + + If the Cover Text requirement of section 3 is applicable to these copies + of the Document, then if the Document is less than one half of the + entire aggregate, the Document’s Cover Texts may be placed on covers + that bracket the Document within the aggregate, or the electronic + equivalent of covers if the Document is in electronic form. Otherwise + they must appear on printed covers that bracket the whole aggregate. + + `8. TRANSLATION' + + Translation is considered a kind of modification, so you may distribute + translations of the Document under the terms of section 4. Replacing + Invariant Sections with translations requires special permission from + their copyright holders, but you may include translations of some or all + Invariant Sections in addition to the original versions of these + Invariant Sections. You may include a translation of this License, and + all the license notices in the Document, and any Warranty Disclaimers, + provided that you also include the original English version of this + License and the original versions of those notices and disclaimers. In + case of a disagreement between the translation and the original version + of this License or a notice or disclaimer, the original version will + prevail. + + If a section in the Document is Entitled “Acknowledgements”, + “Dedications”, or “History”, the requirement (section 4) to Preserve its + Title (section 1) will typically require changing the actual title. + + `9. TERMINATION' + + You may not copy, modify, sublicense, or distribute the Document except + as expressly provided under this License. Any attempt otherwise to + copy, modify, sublicense, or distribute it is void, and will + automatically terminate your rights under this License. + + However, if you cease all violation of this License, then your license + from a particular copyright holder is reinstated (a) provisionally, + unless and until the copyright holder explicitly and finally terminates + your license, and (b) permanently, if the copyright holder fails to + notify you of the violation by some reasonable means prior to 60 days + after the cessation. + + Moreover, your license from a particular copyright holder is reinstated + permanently if the copyright holder notifies you of the violation by + some reasonable means, this is the first time you have received notice + of violation of this License (for any work) from that copyright holder, + and you cure the violation prior to 30 days after your receipt of the + notice. + + Termination of your rights under this section does not terminate the + licenses of parties who have received copies or rights from you under + this License. If your rights have been terminated and not permanently + reinstated, receipt of a copy of some or all of the same material does + not give you any rights to use it. + + `10. FUTURE REVISIONS OF THIS LICENSE' + + The Free Software Foundation may publish new, revised versions of the + GNU Free Documentation License from time to time. Such new versions + will be similar in spirit to the present version, but may differ in + detail to address new problems or concerns. See + ‘https://www.gnu.org/copyleft/’. + + Each version of the License is given a distinguishing version number. + If the Document specifies that a particular numbered version of this + License “or any later version” applies to it, you have the option of + following the terms and conditions either of that specified version or + of any later version that has been published (not as a draft) by the + Free Software Foundation. If the Document does not specify a version + number of this License, you may choose any version ever published (not + as a draft) by the Free Software Foundation. If the Document specifies + that a proxy can decide which future versions of this License can be + used, that proxy’s public statement of acceptance of a version + permanently authorizes you to choose that version for the Document. + + `11. RELICENSING' + + “Massive Multiauthor Collaboration Site” (or “MMC Site”) means any World + Wide Web server that publishes copyrightable works and also provides + prominent facilities for anybody to edit those works. A public wiki + that anybody can edit is an example of such a server. A “Massive + Multiauthor Collaboration” (or “MMC”) contained in the site means any + set of copyrightable works thus published on the MMC site. + + “CC-BY-SA” means the Creative Commons Attribution-Share Alike 3.0 + license published by Creative Commons Corporation, a not-for-profit + corporation with a principal place of business in San Francisco, + California, as well as future copyleft versions of that license + published by that same organization. + + “Incorporate” means to publish or republish a Document, in whole or in + part, as part of another Document. + + An MMC is “eligible for relicensing” if it is licensed under this + License, and if all works that were first published under this License + somewhere other than this MMC, and subsequently incorporated in whole or + in part into the MMC, (1) had no cover texts or invariant sections, and + (2) were thus incorporated prior to November 1, 2008. + + The operator of an MMC Site may republish an MMC contained in the site + under CC-BY-SA on the same site at any time before August 1, 2009, + provided the MMC is eligible for relicensing. + + `ADDENDUM: How to use this License for your documents' + + To use this License in a document you have written, include a copy of + the License in the document and put the following copyright and license + notices just after the title page: + + Copyright © YEAR YOUR NAME. Permission is granted to copy, + distribute and/or modify this document under the terms of the GNU + Free Documentation License, Version 1.3 or any later version + published by the Free Software Foundation; with no Invariant + Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of + the license is included in the section entitled “GNU Free + Documentation License”. + + If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, + replace the “with … Texts.” line with this: + + with the Invariant Sections being LIST THEIR TITLES, with the + Front-Cover Texts being LIST, and with the Back-Cover Texts being + LIST. + + If you have Invariant Sections without Cover Texts, or some other + combination of the three, merge those two alternatives to suit the + situation. + + If your document contains nontrivial examples of program code, we + recommend releasing these examples in parallel under your choice of free + software license, such as the GNU General Public License, to permit + their use in free software. + +  + File: gnat_rm.info, Node: Index, Prev: GNU Free Documentation License, Up: Top + + Index + ***** + + [index] + * Menu: + + * -gnat12 option (gcc): Implementation of Ada 2012 Features. + (line 6) + * -gnatR (gcc): Determining the Representations chosen by GNAT. + (line 6) + * ___lock file (for shared passive packages): GNAT Implementation of Shared Passive Packages. + (line 72) + * Abort_Signal: Attribute Abort_Signal. + (line 6) + * Abstract_State: Aspect Abstract_State. + (line 6) + * Access: Attribute Unrestricted_Access. + (line 6) + * Access values: Attribute Has_Access_Values. + (line 6) + * Accuracy: RM G 2 4 19 Accuracy Requirements. + (line 17) + * Accuracy requirements: RM G 1 2 49 Complex Elementary Functions. + (line 17) + * Ada 2005 Language Reference Manual: What This Reference Manual Contains. + (line 79) + * Ada 2012 implementation status: Implementation of Ada 2012 Features. + (line 6) + * Ada 83 attributes: Attribute Emax. (line 6) + * Ada 83 attributes <1>: Attribute Epsilon. (line 6) + * Ada 83 attributes <2>: Attribute Large. (line 6) + * Ada 83 attributes <3>: Attribute Mantissa. (line 6) + * Ada 83 attributes <4>: Attribute Safe_Emax. + (line 6) + * Ada 83 attributes <5>: Attribute Safe_Large. + (line 6) + * Ada 83 attributes <6>: Attribute Safe_Small. + (line 6) + * Ada 83 attributes <7>: Attribute Small. (line 6) + * Ada 95 Language Reference Manual: What This Reference Manual Contains. + (line 79) + * Ada Extensions: Pragma Extensions_Allowed. + (line 6) + * Ada.Characters.Handling: RM A 1 52 Names of Predefined Numeric Types. + (line 13) + * Ada.Characters.Latin_9 (a-chlat9.ads): Ada Characters Latin_9 a-chlat9 ads. + (line 6) + * Ada.Characters.Wide_Latin_1 (a-cwila1.ads): Ada Characters Wide_Latin_1 a-cwila1 ads. + (line 6) + * Ada.Characters.Wide_Latin_9 (a-cwila1.ads): Ada Characters Wide_Latin_9 a-cwila1 ads. + (line 6) + * Ada.Characters.Wide_Wide_Latin_1 (a-chzla1.ads): Ada Characters Wide_Wide_Latin_1 a-chzla1 ads. + (line 6) + * Ada.Characters.Wide_Wide_Latin_9 (a-chzla9.ads): Ada Characters Wide_Wide_Latin_9 a-chzla9 ads. + (line 6) + * Ada.Command_Line.Environment (a-colien.ads): Ada Command_Line Environment a-colien ads. + (line 6) + * Ada.Command_Line.Remove (a-colire.ads): Ada Command_Line Remove a-colire ads. + (line 6) + * Ada.Command_Line.Response_File (a-clrefi.ads): Ada Command_Line Response_File a-clrefi ads. + (line 6) + * Ada.Containers.Bounded_Holders (a-coboho.ads): Ada Containers Bounded_Holders a-coboho ads. + (line 6) + * Ada.Containers.Formal_Doubly_Linked_Lists (a-cfdlli.ads): Ada Containers Formal_Doubly_Linked_Lists a-cfdlli ads. + (line 6) + * Ada.Containers.Formal_Hashed_Maps (a-cfhama.ads): Ada Containers Formal_Hashed_Maps a-cfhama ads. + (line 6) + * Ada.Containers.Formal_Hashed_Sets (a-cfhase.ads): Ada Containers Formal_Hashed_Sets a-cfhase ads. + (line 6) + * Ada.Containers.Formal_Indefinite_Vectors (a-cfinve.ads): Ada Containers Formal_Indefinite_Vectors a-cfinve ads. + (line 6) + * Ada.Containers.Formal_Ordered_Maps (a-cforma.ads): Ada Containers Formal_Ordered_Maps a-cforma ads. + (line 6) + * Ada.Containers.Formal_Ordered_Sets (a-cforse.ads): Ada Containers Formal_Ordered_Sets a-cforse ads. + (line 6) + * Ada.Containers.Formal_Vectors (a-cofove.ads): Ada Containers Formal_Vectors a-cofove ads. + (line 6) + * Ada.Containers.Functional_Maps (a-cofuma.ads): Ada Containers Functional_Maps a-cofuma ads. + (line 6) + * Ada.Containers.Functional_Sets (a-cofuse.ads): Ada Containers Functional_Sets a-cofuse ads. + (line 6) + * Ada.Containers.Functional_Vectors (a-cofuve.ads): Ada Containers Functional_Vectors a-cofuve ads. + (line 6) + * Ada.Direct_IO.C_Streams (a-diocst.ads): Ada Direct_IO C_Streams a-diocst ads. + (line 6) + * Ada.Exceptions.Is_Null_Occurrence (a-einuoc.ads): Ada Exceptions Is_Null_Occurrence a-einuoc ads. + (line 6) + * Ada.Exceptions.Last_Chance_Handler (a-elchha.ads): Ada Exceptions Last_Chance_Handler a-elchha ads. + (line 6) + * Ada.Exceptions.Traceback (a-exctra.ads): Ada Exceptions Traceback a-exctra ads. + (line 6) + * Ada.Sequential_IO.C_Streams (a-siocst.ads): Ada Sequential_IO C_Streams a-siocst ads. + (line 6) + * Ada.Streams.Stream_IO.C_Streams (a-ssicst.ads): Ada Streams Stream_IO C_Streams a-ssicst ads. + (line 6) + * Ada.Strings.Unbounded.Text_IO (a-suteio.ads): Ada Strings Unbounded Text_IO a-suteio ads. + (line 6) + * Ada.Strings.Wide_Unbounded.Wide_Text_IO (a-swuwti.ads): Ada Strings Wide_Unbounded Wide_Text_IO a-swuwti ads. + (line 6) + * Ada.Strings.Wide_Wide_Unbounded.Wide_Wide_Text_IO (a-szuzti.ads): Ada Strings Wide_Wide_Unbounded Wide_Wide_Text_IO a-szuzti ads. + (line 6) + * Ada.Task_Initialization (a-tasini.ads): Ada Task_Initialization a-tasini ads. + (line 6) + * Ada.Text_IO.C_Streams (a-tiocst.ads): Ada Text_IO C_Streams a-tiocst ads. + (line 6) + * Ada.Text_IO.Reset_Standard_Files (a-tirsfi.ads): Ada Text_IO Reset_Standard_Files a-tirsfi ads. + (line 6) + * Ada.Wide_Characters.Unicode (a-wichun.ads): Ada Wide_Characters Unicode a-wichun ads. + (line 6) + * Ada.Wide_Text_IO.C_Streams (a-wtcstr.ads): Ada Wide_Text_IO C_Streams a-wtcstr ads. + (line 6) + * Ada.Wide_Text_IO.Reset_Standard_Files (a-wrstfi.ads): Ada Wide_Text_IO Reset_Standard_Files a-wrstfi ads. + (line 6) + * Ada.Wide_Wide_Characters.Unicode (a-zchuni.ads): Ada Wide_Wide_Characters Unicode a-zchuni ads. + (line 6) + * Ada.Wide_Wide_Text_IO.C_Streams (a-ztcstr.ads): Ada Wide_Wide_Text_IO C_Streams a-ztcstr ads. + (line 6) + * Ada.Wide_Wide_Text_IO.Reset_Standard_Files (a-zrstfi.ads): Ada Wide_Wide_Text_IO Reset_Standard_Files a-zrstfi ads. + (line 6) + * Ada_2012 configuration pragma: Implementation of Ada 2012 Features. + (line 6) + * Address: RM 13 5 3 7-8 Bit Ordering. + (line 16) + * Address <1>: RM 13 7 37 Address as Private. + (line 10) + * Address Clause: Address Clauses. (line 6) + * Address clauses: RM 13 2 6-8 Packed Types. + (line 32) + * Address image: System Address_Image s-addima ads. + (line 6) + * Address of subprogram code: Attribute Code_Address. + (line 6) + * Address_Size: Attribute Address_Size. + (line 6) + * AI-0002 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 1133) + * AI-0003 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 231) + * AI-0007 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 1000) + * AI-0008 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 250) + * AI-0009 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 735) + * AI-0012 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 868) + * AI-0015 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 581) + * AI-0017 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 1028) + * AI-0019 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 1017) + * AI-0026 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 678) + * AI-0030 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 708) + * AI-0031 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 1065) + * AI-0032 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 590) + * AI-0033 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 967) + * AI-0034 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 805) + * AI-0035 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 814) + * AI-0037 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 456) + * AI-0038 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 1106) + * AI-0039 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 878) + * AI-0040 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 788) + * AI-0042 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 698) + * AI-0043 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 835) + * AI-0044 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 1115) + * AI-0046 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 558) + * AI-0050 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 618) + * AI-0056 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 1078) + * AI-0058 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 610) + * AI-0060 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 1036) + * AI-0062 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 637) + * AI-0064 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 670) + * AI-0065 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 1008) + * AI-0070 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 389) + * AI-0072 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 745) + * AI-0073 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 378) + * AI-0076 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 335) + * AI-0077 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 771) + * AI-0078 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 920) + * AI-0079 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 41) + * AI-0080 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 77) + * AI-0087 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 652) + * AI-0088 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 486) + * AI-0091 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 49) + * AI-0093 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 260) + * AI-0095 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 887) + * AI-0096 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 267) + * AI-0097 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 352) + * AI-0098 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 415) + * AI-0099 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 661) + * AI-0100 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 60) + * AI-0102 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 309) + * AI-0103 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 602) + * AI-0104 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 506) + * AI-0106 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 860) + * AI-0108 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 753) + * AI-0109 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 993) + * AI-0112 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 850) + * AI-0114 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 1045) + * AI-0116 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 896) + * AI-0118 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 565) + * AI-0120 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 241) + * AI-0122 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 780) + * AI-0123 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 466) + * AI-0125 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 629) + * AI-0126 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 343) + * AI-0127 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 1125) + * AI-0128 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 221) + * AI-0129 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 760) + * AI-0132 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 796) + * AI-0134 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 542) + * AI-0137 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 1088) + * AI-0139-2 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 533) + * AI-0146 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 904) + * AI-0147 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 440) + * AI-0152 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 1209) + * AI-0157 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 514) + * AI-0158 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 318) + * AI-0161 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 975) + * AI-0162 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 407) + * AI-0163 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 69) + * AI-0171 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 1184) + * AI-0173 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 328) + * AI-0176 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 33) + * AI-0177 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 954) + * AI-0178 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 644) + * AI-0179 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 523) + * AI-0181 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 278) + * AI-0182 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 289) + * AI-0183 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 84) + * AI-0185 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 1056) + * AI-0188 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 497) + * AI-0189 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 1172) + * AI-0190 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 1162) + * AI-0193 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 945) + * AI-0194 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 984) + * AI-0195 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 930) + * AI-0196 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 573) + * AI-0198 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 369) + * AI-0199 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 424) + * AI-0200 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 842) + * AI-0201 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 721) + * AI-0203 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 362) + * AI-0205 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 691) + * AI-0206 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 1202) + * AI-0207 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 550) + * AI-0208 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 397) + * AI-0210 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 1194) + * AI-0211 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 1155) + * AI-0214 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 300) + * AI-0219 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 826) + * AI-0220 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 432) + * AI05-0216 (Ada 2012 feature): Implementation of Ada 2012 Features. + (line 1144) + * Alignment: Pragma Optimize_Alignment. + (line 6) + * Alignment <1>: Attribute Maximum_Alignment. + (line 6) + * Alignment <2>: Attribute System_Allocator_Alignment. + (line 6) + * Alignment <3>: Alignment Clauses. (line 83) + * Alignment <4>: Alignment Clauses. (line 87) + * Alignment Clause: Alignment Clauses. (line 6) + * Alignment clauses: RM 13 3 14-19 Address Clauses. + (line 37) + * Alignments of components: Pragma Component_Alignment. + (line 6) + * allocator: Attribute System_Allocator_Alignment. + (line 6) + * Alternative Character Sets: RM 2 8 17-19 Pragmas. + (line 16) + * AltiVec: GNAT Altivec g-altive ads. + (line 6) + * AltiVec <1>: GNAT Altivec Conversions g-altcon ads. + (line 6) + * AltiVec <2>: GNAT Altivec Vector_Operations g-alveop ads. + (line 6) + * AltiVec <3>: GNAT Altivec Vector_Types g-alvety ads. + (line 6) + * AltiVec <4>: GNAT Altivec Vector_Views g-alvevi ads. + (line 6) + * Annex E: GNAT Implementation of Shared Passive Packages. + (line 12) + * Annotate: Aspect Annotate. (line 6) + * Anonymous access types: Conventions and Anonymous Access Types. + (line 6) + * Argument passing mechanisms: Pragma Export_Function. + (line 6) + * argument removal: Ada Command_Line Remove a-colire ads. + (line 6) + * Array packing: Pragma Implicit_Packing. + (line 35) + * Array splitter: GNAT Array_Split g-arrspl ads. + (line 6) + * Arrays: RM 3 5 7 17 Float Types. + (line 24) + * Arrays <1>: GNAT Dynamic_Tables g-dyntab ads. + (line 6) + * Arrays <2>: GNAT Table g-table ads. + (line 6) + * as private type: RM 13 5 3 7-8 Bit Ordering. + (line 15) + * Asm_Input: Attribute Asm_Input. + (line 6) + * Asm_Output: Attribute Asm_Output. + (line 6) + * Assertions: Pragma Check. (line 6) + * Assertions <1>: Pragma Check_Policy. + (line 6) + * Assertions <2>: System Assertions s-assert ads. + (line 6) + * Assert_Failure: System Assertions s-assert ads. + (line 6) + * Async_Readers: Aspect Async_Readers. + (line 6) + * Async_Writers: Aspect Async_Writers. + (line 6) + * Atomic Synchronization: Pragma Disable_Atomic_Synchronization. + (line 6) + * Atomic Synchronization <1>: Pragma Enable_Atomic_Synchronization. + (line 6) + * Atomic_Always_Lock_Free: Attribute Atomic_Always_Lock_Free. + (line 6) + * Attribute: Address Clauses. (line 73) + * Attribute Loop_Entry: Pragma Unevaluated_Use_Of_Old. + (line 6) + * Attribute Old: Pragma Unevaluated_Use_Of_Old. + (line 6) + * AWK: GNAT AWK g-awk ads. (line 6) + * Biased representation: Biased Representation. + (line 6) + * Big endian: Attribute Default_Bit_Order. + (line 6) + * Big endian <1>: Attribute Default_Scalar_Storage_Order. + (line 6) + * Bind environment: GNAT Bind_Environment g-binenv ads. + (line 6) + * Bit: Attribute Bit. (line 6) + * Bit ordering: RM 13 5 2 5 Storage Place Attributes. + (line 15) + * bit ordering: Bit_Order Clauses. (line 6) + * Bit_Order Clause: Bit_Order Clauses. (line 6) + * Bit_Position: Attribute Bit_Position. + (line 6) + * Boolean_Entry_Barriers: Simple_Barriers. (line 12) + * Bounded Buffers: GNAT Bounded_Buffers g-boubuf ads. + (line 6) + * Bounded errors: RM 1 1 3 31 Child Units. + (line 11) + * Bounded-length strings: RM A 3 2 49 Ada Characters Handling. + (line 12) + * Branch Prediction: GNAT Branch_Prediction g-brapre ads. + (line 6) + * Bubble sort: GNAT Bubble_Sort g-bubsor ads. + (line 6) + * Bubble sort <1>: GNAT Bubble_Sort_A g-busora ads. + (line 6) + * Bubble sort <2>: GNAT Bubble_Sort_G g-busorg ads. + (line 6) + * byte ordering: Effect of Bit_Order on Byte Ordering. + (line 6) + * Byte swapping: GNAT Byte_Swapping g-bytswa ads. + (line 6) + * C: RM B 2 12-13 Package Interfaces. + (line 22) + * C Streams: Ada Direct_IO C_Streams a-diocst ads. + (line 6) + * C Streams <1>: Ada Sequential_IO C_Streams a-siocst ads. + (line 6) + * C Streams <2>: Ada Streams Stream_IO C_Streams a-ssicst ads. + (line 6) + * C Streams <3>: Ada Text_IO C_Streams a-tiocst ads. + (line 6) + * C Streams <4>: Ada Wide_Text_IO C_Streams a-wtcstr ads. + (line 6) + * C Streams <5>: Ada Wide_Wide_Text_IO C_Streams a-ztcstr ads. + (line 6) + * C streams: Interfaces C Streams i-cstrea ads. + (line 6) + * Calendar: GNAT Calendar g-calend ads. + (line 6) + * Calendar <1>: GNAT Calendar Time_IO g-catiio ads. + (line 6) + * casing: Pragma External_Name_Casing. + (line 6) + * Casing of External names: Pragma External_Name_Casing. + (line 6) + * Casing utilities: GNAT Case_Util g-casuti ads. + (line 6) + * CGI (Common Gateway Interface): GNAT CGI g-cgi ads. (line 6) + * CGI (Common Gateway Interface) cookie support: GNAT CGI Cookie g-cgicoo ads. + (line 6) + * CGI (Common Gateway Interface) debugging: GNAT CGI Debug g-cgideb ads. + (line 6) + * Character handling (‘‘GNAT.Case_Util‘‘): GNAT Case_Util g-casuti ads. + (line 6) + * Character Sets: RM 2 8 17-19 Pragmas. + (line 17) + * Check names: Pragma Check_Name. (line 6) + * Check pragma control: Pragma Check_Policy. + (line 6) + * Checks: Pragma Post. (line 6) + * Checks <1>: Pragma Postcondition. + (line 6) + * Checks <2>: Pragma Post_Class. (line 6) + * Checks <3>: Pragma Pre. (line 6) + * Checks <4>: Pragma Precondition. + (line 6) + * Checks <5>: Pragma Pre_Class. (line 6) + * Checks <6>: RM 11 4 1 19 Exception Information. + (line 23) + * Child Units: RM 1 1 3 20 Error Detection. + (line 12) + * COBOL: RM B 3 63-71 Interfacing with C. + (line 58) + * COBOL support: RM E 5 28-29 Partition Communication Subsystem. + (line 18) + * Code_Address: Attribute Code_Address. + (line 6) + * Command line: Ada Command_Line Remove a-colire ads. + (line 6) + * Command line <1>: Ada Command_Line Response_File a-clrefi ads. + (line 6) + * Command line <2>: Ada Command_Line Response_File a-clrefi ads. + (line 6) + * Command line <3>: GNAT Command_Line g-comlin ads. + (line 6) + * Compatibility (between Ada 83 and Ada 95 / Ada 2005 / Ada 2012): Compatibility with Ada 83. + (line 6) + * Compatibility between Ada 95 and Ada 2005: Compatibility between Ada 95 and Ada 2005. + (line 6) + * Compilation_Date: Compilation_Date. (line 6) + * Compilation_ISO_Date: Compilation_ISO_Date. + (line 6) + * Compilation_Time: Compilation_Time. (line 6) + * Compiler Version: GNAT Compiler_Version g-comver ads. + (line 6) + * Compiler_Version: Attribute Compiler_Version. + (line 6) + * complex arithmetic: RM G 2 4 19 Accuracy Requirements. + (line 16) + * Complex arithmetic accuracy: RM G 2 4 19 Accuracy Requirements. + (line 17) + * Complex elementary functions: RM G 1 1 56-58 Complex Types. + (line 53) + * Complex types: RM G Numerics. (line 15) + * Component Clause: Record Representation Clauses. + (line 11) + * Component_Size (in pragma Component_Alignment): Pragma Component_Alignment. + (line 21) + * Component_Size Clause: Component_Size Clauses. + (line 6) + * Component_Size clauses: RM 13 3 50-56 Size Clauses. + (line 39) + * Component_Size_4 (in pragma Component_Alignment): Pragma Component_Alignment. + (line 31) + * configuration pragma Ada_2012: Implementation of Ada 2012 Features. + (line 6) + * Constant_After_Elaboration: Aspect Constant_After_Elaboration. + (line 6) + * Constrained: Attribute Constrained. + (line 6) + * Containers: RM A 10 7 23 Get_Immediate. + (line 19) + * Contract cases: Pragma Contract_Cases. + (line 6) + * Contract_Cases: Aspect Contract_Cases. + (line 6) + * control: Pragma Check_Policy. + (line 6) + * Controlling assertions: Pragma Check_Policy. + (line 6) + * Convention: Effect of Convention on Representation. + (line 6) + * Convention for anonymous access types: Conventions and Anonymous Access Types. + (line 6) + * Conventions: Conventions. (line 6) + * Conventions <1>: Pragma Convention_Identifier. + (line 6) + * Conversion: System Wch_Cnv s-wchcnv ads. + (line 6) + * Cookie support in CGI: GNAT CGI Cookie g-cgicoo ads. + (line 6) + * CRC32: GNAT CRC32 g-crc32 ads. + (line 6) + * Current exception: GNAT Current_Exception g-curexc ads. + (line 6) + * Current time: GNAT Time_Stamp g-timsta ads. + (line 6) + * Cyclic Redundancy Check: GNAT CRC32 g-crc32 ads. + (line 6) + * Debug pools: GNAT Debug_Pools g-debpoo ads. + (line 6) + * Debugging: GNAT Debug_Pools g-debpoo ads. + (line 6) + * Debugging <1>: GNAT Debug_Utilities g-debuti ads. + (line 6) + * Debugging <2>: GNAT Exception_Traces g-exctra ads. + (line 6) + * debugging with Initialize_Scalars: Pragma Initialize_Scalars. + (line 6) + * DEC Ada 83: Pragma Extend_System. + (line 6) + * Dec Ada 83 casing compatibility: Pragma External_Name_Casing. + (line 6) + * Decimal radix support: RM F 7 COBOL Support. + (line 15) + * Decoding strings: GNAT Decode_String g-decstr ads. + (line 6) + * Decoding strings <1>: GNAT Decode_UTF8_String g-deutst ads. + (line 6) + * Decoding UTF-8 strings: GNAT Decode_UTF8_String g-deutst ads. + (line 6) + * default: Alignment Clauses. (line 83) + * Default (in pragma Component_Alignment): Pragma Component_Alignment. + (line 43) + * default settings: Pragma Optimize_Alignment. + (line 6) + * Default_Bit_Order: Attribute Default_Bit_Order. + (line 6) + * Default_Initial_Condition: Aspect Default_Initial_Condition. + (line 6) + * Default_Scalar_Storage_Order: Pragma Default_Scalar_Storage_Order. + (line 6) + * Default_Scalar_Storage_Order <1>: Attribute Default_Scalar_Storage_Order. + (line 6) + * Default_Storage_Pool: Pragma Default_Storage_Pool. + (line 6) + * Deferring aborts: Pragma Abort_Defer. (line 6) + * defining: Pragma Check_Name. (line 6) + * Defining check names: Pragma Check_Name. (line 6) + * Depends: Aspect Depends. (line 6) + * Deref: Attribute Deref. (line 6) + * Descriptor: Attribute Descriptor_Size. + (line 6) + * Descriptor_Size: Attribute Descriptor_Size. + (line 6) + * determination of: Determining the Representations chosen by GNAT. + (line 6) + * Dimension: Aspect Dimension. (line 6) + * Dimension_System: Aspect Dimension_System. + (line 6) + * Directory operations: GNAT Directory_Operations g-dirope ads. + (line 6) + * Directory operations iteration: GNAT Directory_Operations Iteration g-diopit ads. + (line 6) + * Disable_Controlled: Aspect Disable_Controlled. + (line 6) + * Discriminants: Attribute Has_Discriminants. + (line 6) + * Distribution Systems Annex: GNAT Implementation of Shared Passive Packages. + (line 12) + * Dope vector: Attribute Descriptor_Size. + (line 6) + * Dump Memory: GNAT Memory_Dump g-memdum ads. + (line 6) + * Duration’Small: RM 3 6 2 11 Multidimensional Arrays. + (line 14) + * effect on representation: Effect of Convention on Representation. + (line 6) + * Effective_Reads: Aspect Effective_Reads. + (line 6) + * Effective_Writes: Aspect Effective_Writes. + (line 6) + * Elaborated: Attribute Elaborated. + (line 6) + * Elaboration control: Pragma Elaboration_Checks. + (line 6) + * Elab_Body: Attribute Elab_Body. + (line 6) + * Elab_Spec: Attribute Elab_Spec. + (line 6) + * Elab_Subp_Body: Attribute Elab_Subp_Body. + (line 6) + * Elimination of unused subprograms: Pragma Eliminate. (line 6) + * Emax: Attribute Emax. (line 6) + * Enabled: Attribute Enabled. (line 6) + * Enclosing_Entity: Enclosing_Entity. (line 6) + * Encoding strings: GNAT Encode_String g-encstr ads. + (line 6) + * Encoding strings <1>: GNAT Encode_UTF8_String g-enutst ads. + (line 6) + * Encoding UTF-8 strings: GNAT Encode_UTF8_String g-enutst ads. + (line 6) + * Endianness: Attribute Scalar_Storage_Order. + (line 6) + * Endianness <1>: GNAT Byte_Swapping g-bytswa ads. + (line 6) + * Entry queuing policies: RM D 3 17 Locking Policies. + (line 12) + * enumeration: RM 13 3 71-73 Component Size Clauses. + (line 23) + * Enumeration representation clauses: RM 13 3 71-73 Component Size Clauses. + (line 24) + * Enumeration values: RM 3 5 4 29 Integer Types. + (line 12) + * Enum_Rep: Attribute Enum_Rep. (line 6) + * Enum_Val: Attribute Enum_Val. (line 6) + * Environment entries: Ada Command_Line Environment a-colien ads. + (line 6) + * Epsilon: Attribute Epsilon. (line 6) + * Error detection: Implementation Advice. + (line 28) + * exception: Pragma Prefix_Exception_Messages. + (line 6) + * Exception: GNAT Most_Recent_Exception g-moreex ads. + (line 6) + * exception <1>: System Assertions s-assert ads. + (line 6) + * Exception actions: GNAT Exception_Actions g-excact ads. + (line 6) + * Exception information: RM 10 2 1 12 Consistent Representation. + (line 18) + * Exception retrieval: GNAT Current_Exception g-curexc ads. + (line 6) + * Exception traces: GNAT Exception_Traces g-exctra ads. + (line 6) + * Exceptions: GNAT Exceptions g-except ads. + (line 6) + * exceptions: GNAT Exceptions g-except ads. + (line 6) + * Exception_Information’: Exception_Information. + (line 6) + * Exception_Message: Pragma Prefix_Exception_Messages. + (line 6) + * Exception_Message <1>: Exception_Message. (line 6) + * Exception_Name: Exception_Name. (line 6) + * Export: RM A 18 Containers. (line 17) + * Export <1>: Address Clauses. (line 106) + * extendable: GNAT Dynamic_Tables g-dyntab ads. + (line 6) + * extendable <1>: GNAT Table g-table ads. + (line 6) + * extending: Pragma Extend_System. + (line 6) + * extensions for unbounded strings: Ada Strings Unbounded Text_IO a-suteio ads. + (line 6) + * extensions for unbounded wide strings: Ada Strings Wide_Unbounded Wide_Text_IO a-swuwti ads. + (line 6) + * extensions for unbounded wide wide strings: Ada Strings Wide_Wide_Unbounded Wide_Wide_Text_IO a-szuzti ads. + (line 6) + * Extensions_Visible: Aspect Extensions_Visible. + (line 6) + * External Names: Pragma External_Name_Casing. + (line 6) + * Fast_Math: Attribute Fast_Math. + (line 6) + * Favor_Top_Level: Aspect Favor_Top_Level. + (line 6) + * File: File. (line 6) + * File locking: GNAT Lock_Files g-locfil ads. + (line 6) + * Finalization_Size: Attribute Finalization_Size. + (line 6) + * Fixed_Value: Attribute Fixed_Value. + (line 6) + * Float types: RM 3 5 5 8 Enumeration Values. + (line 15) + * Floating-point overflow: Pragma Check_Float_Overflow. + (line 6) + * Floating-Point Processor: GNAT Float_Control g-flocon ads. + (line 6) + * foreign: GNAT Threads g-thread ads. + (line 6) + * Foreign threads: GNAT Threads g-thread ads. + (line 6) + * Forking a new process: Mapping Ada Tasks onto the Underlying Kernel Threads. + (line 53) + * Formal container for doubly linked lists: Ada Containers Formal_Doubly_Linked_Lists a-cfdlli ads. + (line 6) + * Formal container for hashed maps: Ada Containers Formal_Hashed_Maps a-cfhama ads. + (line 6) + * Formal container for hashed sets: Ada Containers Formal_Hashed_Sets a-cfhase ads. + (line 6) + * Formal container for ordered maps: Ada Containers Formal_Ordered_Maps a-cforma ads. + (line 6) + * Formal container for ordered sets: Ada Containers Formal_Ordered_Sets a-cforse ads. + (line 6) + * Formal container for vectors: Ada Containers Formal_Vectors a-cofove ads. + (line 6) + * Formal container for vectors <1>: Ada Containers Formal_Indefinite_Vectors a-cfinve ads. + (line 6) + * Formal container for vectors <2>: Ada Containers Bounded_Holders a-coboho ads. + (line 6) + * Formatted String: GNAT Formatted_String g-forstr ads. + (line 6) + * Fortran: RM B 4 95-98 Interfacing with COBOL. + (line 28) + * From_Any: Attribute From_Any. (line 6) + * Functional maps: Ada Containers Functional_Maps a-cofuma ads. + (line 6) + * Functional sets: Ada Containers Functional_Sets a-cofuse ads. + (line 6) + * Functional vectors: Ada Containers Functional_Vectors a-cofuve ads. + (line 6) + * Get_Immediate: RM A 5 2 46-47 Random Number Generation. + (line 21) + * Get_Immediate <1>: Get_Immediate. (line 6) + * Get_Immediate <2>: Interfaces VxWorks IO i-vxwoio ads. + (line 6) + * Get_Immediate <3>: Interfaces VxWorks IO i-vxwoio ads. + (line 6) + * Ghost: Aspect Ghost. (line 6) + * Global: Aspect Global. (line 6) + * global: System Pool_Global s-pooglo ads. + (line 6) + * Global storage pool: System Pool_Global s-pooglo ads. + (line 6) + * GNAT Extensions: Pragma Extensions_Allowed. + (line 6) + * GNAT.Altivec (g-altive.ads): GNAT Altivec g-altive ads. + (line 6) + * GNAT.Altivec.Conversions (g-altcon.ads): GNAT Altivec Conversions g-altcon ads. + (line 6) + * GNAT.Altivec.Vector_Operations (g-alveop.ads): GNAT Altivec Vector_Operations g-alveop ads. + (line 6) + * GNAT.Altivec.Vector_Types (g-alvety.ads): GNAT Altivec Vector_Types g-alvety ads. + (line 6) + * GNAT.Altivec.Vector_Views (g-alvevi.ads): GNAT Altivec Vector_Views g-alvevi ads. + (line 6) + * GNAT.Array_Split (g-arrspl.ads): GNAT Array_Split g-arrspl ads. + (line 6) + * GNAT.AWK (g-awk.ads): GNAT AWK g-awk ads. (line 6) + * GNAT.Bind_Environment (g-binenv.ads): GNAT Bind_Environment g-binenv ads. + (line 6) + * GNAT.Bounded_Buffers (g-boubuf.ads): GNAT Bounded_Buffers g-boubuf ads. + (line 6) + * GNAT.Bounded_Mailboxes (g-boumai.ads): GNAT Bounded_Mailboxes g-boumai ads. + (line 6) + * GNAT.Branch_Prediction (g-brapre.ads): GNAT Branch_Prediction g-brapre ads. + (line 6) + * GNAT.Bubble_Sort (g-bubsor.ads): GNAT Bubble_Sort g-bubsor ads. + (line 6) + * GNAT.Bubble_Sort_A (g-busora.ads): GNAT Bubble_Sort_A g-busora ads. + (line 6) + * GNAT.Bubble_Sort_G (g-busorg.ads): GNAT Bubble_Sort_G g-busorg ads. + (line 6) + * GNAT.Byte_Order_Mark (g-byorma.ads): GNAT Byte_Order_Mark g-byorma ads. + (line 6) + * GNAT.Byte_Swapping (g-bytswa.ads): GNAT Byte_Swapping g-bytswa ads. + (line 6) + * GNAT.Calendar (g-calend.ads): GNAT Calendar g-calend ads. + (line 6) + * GNAT.Calendar.Time_IO (g-catiio.ads): GNAT Calendar Time_IO g-catiio ads. + (line 5) + * GNAT.Case_Util (g-casuti.ads): GNAT Case_Util g-casuti ads. + (line 6) + * GNAT.CGI (g-cgi.ads): GNAT CGI g-cgi ads. (line 6) + * GNAT.CGI.Cookie (g-cgicoo.ads): GNAT CGI Cookie g-cgicoo ads. + (line 6) + * GNAT.CGI.Debug (g-cgideb.ads): GNAT CGI Debug g-cgideb ads. + (line 6) + * GNAT.Command_Line (g-comlin.ads): GNAT Command_Line g-comlin ads. + (line 6) + * GNAT.Compiler_Version (g-comver.ads): GNAT Compiler_Version g-comver ads. + (line 6) + * GNAT.CRC32 (g-crc32.ads): GNAT CRC32 g-crc32 ads. + (line 6) + * GNAT.Ctrl_C (g-ctrl_c.ads): GNAT Ctrl_C g-ctrl_c ads. + (line 6) + * GNAT.Current_Exception (g-curexc.ads): GNAT Current_Exception g-curexc ads. + (line 6) + * GNAT.Debug_Pools (g-debpoo.ads): GNAT Debug_Pools g-debpoo ads. + (line 6) + * GNAT.Debug_Utilities (g-debuti.ads): GNAT Debug_Utilities g-debuti ads. + (line 6) + * GNAT.Decode_String (g-decstr.ads): GNAT Decode_String g-decstr ads. + (line 6) + * GNAT.Decode_UTF8_String (g-deutst.ads): GNAT Decode_UTF8_String g-deutst ads. + (line 6) + * GNAT.Directory_Operations (g-dirope.ads): GNAT Directory_Operations g-dirope ads. + (line 6) + * GNAT.Directory_Operations.Iteration (g-diopit.ads): GNAT Directory_Operations Iteration g-diopit ads. + (line 6) + * GNAT.Dynamic_HTables (g-dynhta.ads): GNAT Dynamic_HTables g-dynhta ads. + (line 6) + * GNAT.Dynamic_Tables (g-dyntab.ads): GNAT Dynamic_Tables g-dyntab ads. + (line 6) + * GNAT.Encode_String (g-encstr.ads): GNAT Encode_String g-encstr ads. + (line 6) + * GNAT.Encode_UTF8_String (g-enutst.ads): GNAT Encode_UTF8_String g-enutst ads. + (line 6) + * GNAT.Exceptions (g-except.ads): GNAT Exceptions g-except ads. + (line 6) + * GNAT.Exception_Actions (g-excact.ads): GNAT Exception_Actions g-excact ads. + (line 6) + * GNAT.Exception_Traces (g-exctra.ads): GNAT Exception_Traces g-exctra ads. + (line 6) + * GNAT.Expect (g-expect.ads): GNAT Expect g-expect ads. + (line 6) + * GNAT.Expect.TTY (g-exptty.ads): GNAT Expect TTY g-exptty ads. + (line 6) + * GNAT.Float_Control (g-flocon.ads): GNAT Float_Control g-flocon ads. + (line 6) + * GNAT.Formatted_String (g-forstr.ads): GNAT Formatted_String g-forstr ads. + (line 6) + * GNAT.Heap_Sort (g-heasor.ads): GNAT Heap_Sort g-heasor ads. + (line 6) + * GNAT.Heap_Sort_A (g-hesora.ads): GNAT Heap_Sort_A g-hesora ads. + (line 6) + * GNAT.Heap_Sort_G (g-hesorg.ads): GNAT Heap_Sort_G g-hesorg ads. + (line 6) + * GNAT.HTable (g-htable.ads): GNAT HTable g-htable ads. + (line 6) + * GNAT.IO (g-io.ads): GNAT IO g-io ads. (line 6) + * GNAT.IO_Aux (g-io_aux.ads): GNAT IO_Aux g-io_aux ads. + (line 6) + * GNAT.Lock_Files (g-locfil.ads): GNAT Lock_Files g-locfil ads. + (line 6) + * GNAT.MBBS_Discrete_Random (g-mbdira.ads): GNAT MBBS_Discrete_Random g-mbdira ads. + (line 6) + * GNAT.MBBS_Float_Random (g-mbflra.ads): GNAT MBBS_Float_Random g-mbflra ads. + (line 6) + * GNAT.MD5 (g-md5.ads): GNAT MD5 g-md5 ads. (line 6) + * GNAT.Memory_Dump (g-memdum.ads): GNAT Memory_Dump g-memdum ads. + (line 6) + * GNAT.Most_Recent_Exception (g-moreex.ads): GNAT Most_Recent_Exception g-moreex ads. + (line 6) + * GNAT.OS_Lib (g-os_lib.ads): GNAT OS_Lib g-os_lib ads. + (line 6) + * GNAT.Perfect_Hash_Generators (g-pehage.ads): GNAT Perfect_Hash_Generators g-pehage ads. + (line 6) + * GNAT.Random_Numbers (g-rannum.ads): GNAT Random_Numbers g-rannum ads. + (line 6) + * GNAT.Regexp (g-regexp.ads): GNAT Regexp g-regexp ads. + (line 6) + * GNAT.Registry (g-regist.ads): GNAT Registry g-regist ads. + (line 6) + * GNAT.Regpat (g-regpat.ads): GNAT Regpat g-regpat ads. + (line 6) + * GNAT.Rewrite_Data (g-rewdat.ads): GNAT Rewrite_Data g-rewdat ads. + (line 6) + * GNAT.Secondary_Stack_Info (g-sestin.ads): GNAT Secondary_Stack_Info g-sestin ads. + (line 6) + * GNAT.Semaphores (g-semaph.ads): GNAT Semaphores g-semaph ads. + (line 6) + * GNAT.Serial_Communications (g-sercom.ads): GNAT Serial_Communications g-sercom ads. + (line 6) + * GNAT.SHA1 (g-sha1.ads): GNAT SHA1 g-sha1 ads. + (line 6) + * GNAT.SHA224 (g-sha224.ads): GNAT SHA224 g-sha224 ads. + (line 6) + * GNAT.SHA256 (g-sha256.ads): GNAT SHA256 g-sha256 ads. + (line 6) + * GNAT.SHA384 (g-sha384.ads): GNAT SHA384 g-sha384 ads. + (line 6) + * GNAT.SHA512 (g-sha512.ads): GNAT SHA512 g-sha512 ads. + (line 6) + * GNAT.Signals (g-signal.ads): GNAT Signals g-signal ads. + (line 6) + * GNAT.Sockets (g-socket.ads): GNAT Sockets g-socket ads. + (line 6) + * GNAT.Source_Info (g-souinf.ads): GNAT Source_Info g-souinf ads. + (line 6) + * GNAT.Spelling_Checker (g-speche.ads): GNAT Spelling_Checker g-speche ads. + (line 6) + * GNAT.Spelling_Checker_Generic (g-spchge.ads): GNAT Spelling_Checker_Generic g-spchge ads. + (line 6) + * GNAT.Spitbol (g-spitbo.ads): GNAT Spitbol g-spitbo ads. + (line 6) + * GNAT.Spitbol.Patterns (g-spipat.ads): GNAT Spitbol Patterns g-spipat ads. + (line 6) + * GNAT.Spitbol.Table_Boolean (g-sptabo.ads): GNAT Spitbol Table_Boolean g-sptabo ads. + (line 6) + * GNAT.Spitbol.Table_Integer (g-sptain.ads): GNAT Spitbol Table_Integer g-sptain ads. + (line 6) + * GNAT.Spitbol.Table_VString (g-sptavs.ads): GNAT Spitbol Table_VString g-sptavs ads. + (line 6) + * GNAT.SSE (g-sse.ads): GNAT SSE g-sse ads. (line 6) + * GNAT.SSE.Vector_Types (g-ssvety.ads): GNAT SSE Vector_Types g-ssvety ads. + (line 6) + * GNAT.Strings (g-string.ads): GNAT Strings g-string ads. + (line 6) + * GNAT.String_Hash (g-strhas.ads): GNAT String_Hash g-strhas ads. + (line 6) + * GNAT.String_Split (g-strspl.ads): GNAT String_Split g-strspl ads. + (line 6) + * GNAT.Table (g-table.ads): GNAT Table g-table ads. + (line 6) + * GNAT.Task_Lock (g-tasloc.ads): GNAT Task_Lock g-tasloc ads. + (line 6) + * GNAT.Threads (g-thread.ads): GNAT Threads g-thread ads. + (line 6) + * GNAT.Time_Stamp (g-timsta.ads): GNAT Time_Stamp g-timsta ads. + (line 6) + * GNAT.Traceback (g-traceb.ads): GNAT Traceback g-traceb ads. + (line 6) + * GNAT.Traceback.Symbolic (g-trasym.ads): GNAT Traceback Symbolic g-trasym ads. + (line 6) + * GNAT.UTF_32 (g-table.ads): GNAT UTF_32 g-table ads. + (line 6) + * GNAT.Wide_Spelling_Checker (g-u3spch.ads): GNAT Wide_Spelling_Checker g-u3spch ads. + (line 6) + * GNAT.Wide_Spelling_Checker (g-wispch.ads): GNAT Wide_Spelling_Checker g-wispch ads. + (line 6) + * GNAT.Wide_String_Split (g-wistsp.ads): GNAT Wide_String_Split g-wistsp ads. + (line 6) + * GNAT.Wide_Wide_Spelling_Checker (g-zspche.ads): GNAT Wide_Wide_Spelling_Checker g-zspche ads. + (line 6) + * GNAT.Wide_Wide_String_Split (g-zistsp.ads): GNAT Wide_Wide_String_Split g-zistsp ads. + (line 6) + * handling long command lines: Ada Command_Line Response_File a-clrefi ads. + (line 6) + * Handling of Records with Holes: Handling of Records with Holes. + (line 6) + * Hash functions: GNAT Perfect_Hash_Generators g-pehage ads. + (line 6) + * Hash functions <1>: GNAT String_Hash g-strhas ads. + (line 6) + * Hash tables: GNAT Dynamic_HTables g-dynhta ads. + (line 6) + * Hash tables <1>: GNAT HTable g-htable ads. + (line 6) + * Has_Access_Values: Attribute Has_Access_Values. + (line 6) + * Has_Discriminants: Attribute Has_Discriminants. + (line 6) + * Has_Tagged_Values: Attribute Has_Tagged_Values. + (line 6) + * Heap usage: RM 13 9 14-17 Unchecked Conversion. + (line 34) + * I/O interfacing: Interfaces VxWorks IO i-vxwoio ads. + (line 6) + * IBM Packed Format: Interfaces Packed_Decimal i-pacdec ads. + (line 6) + * Image: System Address_Image s-addima ads. + (line 6) + * Img: Attribute Img. (line 6) + * Immediate_Reclamation: Immediate_Reclamation. + (line 6) + * Implementation-dependent features: About This Guide. (line 24) + * implicit: RM 13 9 14-17 Unchecked Conversion. + (line 33) + * Import: Address Clauses. (line 111) + * Initialization: Pragma Suppress_Initialization. + (line 6) + * Initialized: Attribute Initialized. + (line 6) + * Initializes: Aspect Initializes. (line 6) + * Initial_Condition: Aspect Initial_Condition. + (line 6) + * Inline_Always: Aspect Inline_Always. + (line 6) + * Input/Output facilities: GNAT IO g-io ads. (line 6) + * Input/Output facilities <1>: GNAT IO_Aux g-io_aux ads. + (line 6) + * Integer maps: GNAT Spitbol Table_Integer g-sptain ads. + (line 6) + * Integer types: RM 3 5 2 5 Alternative Character Sets. + (line 23) + * Integer_Value: Attribute Integer_Value. + (line 6) + * Interfaces: RM B 1 39-41 Pragma Export. + (line 34) + * Interfaces.C.Extensions (i-cexten.ads): Interfaces C Extensions i-cexten ads. + (line 6) + * Interfaces.C.Streams (i-cstrea.ads): Interfaces C Streams i-cstrea ads. + (line 6) + * Interfaces.Packed_Decimal (i-pacdec.ads): Interfaces Packed_Decimal i-pacdec ads. + (line 6) + * Interfaces.VxWorks (i-vxwork.ads): Interfaces VxWorks i-vxwork ads. + (line 6) + * Interfaces.VxWorks.Int_Connection (i-vxinco.ads): Interfaces VxWorks Int_Connection i-vxinco ads. + (line 6) + * Interfaces.VxWorks.IO (i-vxwoio.ads): Interfaces VxWorks IO i-vxwoio ads. + (line 6) + * interfacing: Interfaces C Streams i-cstrea ads. + (line 6) + * interfacing <1>: Interfaces VxWorks i-vxwork ads. + (line 6) + * interfacing <2>: Interfaces VxWorks Int_Connection i-vxinco ads. + (line 6) + * Interfacing to C++: Pragma CPP_Virtual. (line 6) + * Interfacing to C++ <1>: Pragma Propagate_Exceptions. + (line 6) + * Interfacing to VxWorks: Interfaces VxWorks i-vxwork ads. + (line 6) + * Interfacing to VxWorks <1>: Interfaces VxWorks Int_Connection i-vxinco ads. + (line 6) + * Interfacing to VxWorks’ I/O: Interfaces VxWorks IO i-vxwoio ads. + (line 6) + * interfacing with: RM B 2 12-13 Package Interfaces. + (line 21) + * interfacing with <1>: RM B 3 63-71 Interfacing with C. + (line 57) + * interfacing with <2>: RM B 4 95-98 Interfacing with COBOL. + (line 27) + * Interfacing with C++: Pragma CPP_Class. (line 6) + * Interfacing with C++ <1>: Pragma CPP_Constructor. + (line 6) + * Interfacing with C++ <2>: Pragma CPP_Vtable. (line 6) + * Interfacing with Direct_IO: Ada Direct_IO C_Streams a-diocst ads. + (line 6) + * Interfacing with Sequential_IO: Ada Sequential_IO C_Streams a-siocst ads. + (line 6) + * Interfacing with Stream_IO: Ada Streams Stream_IO C_Streams a-ssicst ads. + (line 6) + * Interfacing with ‘‘Text_IO‘‘: Ada Text_IO C_Streams a-tiocst ads. + (line 6) + * Interfacing with ‘‘Wide_Text_IO‘‘: Ada Wide_Text_IO C_Streams a-wtcstr ads. + (line 6) + * Interfacing with ‘‘Wide_Wide_Text_IO‘‘: Ada Wide_Wide_Text_IO C_Streams a-ztcstr ads. + (line 6) + * Interrupt: GNAT Ctrl_C g-ctrl_c ads. + (line 6) + * Interrupt support: RM C 1 10-16 Access to Machine Operations. + (line 39) + * Interrupts: RM C 3 1 20-21 Protected Procedure Handlers. + (line 16) + * Intrinsic operator: Intrinsic Operators. + (line 6) + * Intrinsic Subprograms: Intrinsic Subprograms. + (line 6) + * Invalid representations: Pragma Assume_No_Invalid_Values. + (line 6) + * Invalid values: Pragma Assume_No_Invalid_Values. + (line 6) + * Invalid_Value: Attribute Invalid_Value. + (line 6) + * Invariant: Aspect Invariant. (line 6) + * Invariant’Class: Aspect Invariant’Class. + (line 6) + * IO support: Ada Strings Unbounded Text_IO a-suteio ads. + (line 6) + * IO support <1>: Ada Strings Wide_Unbounded Wide_Text_IO a-swuwti ads. + (line 6) + * IO support <2>: Ada Strings Wide_Wide_Unbounded Wide_Wide_Text_IO a-szuzti ads. + (line 6) + * Iterable: Aspect Iterable. (line 6) + * Iterable <1>: Attribute Iterable. (line 6) + * Large: Attribute Large. (line 6) + * Latin-1: Changed semantics. (line 12) + * Latin_1 constants for Wide_Character: Ada Characters Wide_Latin_1 a-cwila1 ads. + (line 6) + * Latin_1 constants for Wide_Wide_Character: Ada Characters Wide_Wide_Latin_1 a-chzla1 ads. + (line 6) + * Latin_9 constants for Character: Ada Characters Latin_9 a-chlat9 ads. + (line 6) + * Latin_9 constants for Wide_Character: Ada Characters Wide_Latin_9 a-cwila1 ads. + (line 6) + * Latin_9 constants for Wide_Wide_Character: Ada Characters Wide_Wide_Latin_9 a-chzla9 ads. + (line 6) + * Library_Level: Attribute Library_Level. + (line 6) + * License checking: Pragma License. (line 6) + * Line: Line. (line 6) + * Linker_Section: Aspect Linker_Section. + (line 6) + * Little endian: Attribute Default_Bit_Order. + (line 6) + * Little endian <1>: Attribute Default_Scalar_Storage_Order. + (line 6) + * local: System Pool_Local s-pooloc ads. + (line 6) + * Local storage pool: System Pool_Local s-pooloc ads. + (line 6) + * Locking: GNAT Task_Lock g-tasloc ads. + (line 6) + * Locking Policies: RM C 7 2 30 The Package Task_Attributes. + (line 17) + * Locking using files: GNAT Lock_Files g-locfil ads. + (line 6) + * Lock_Free: Aspect Lock_Free. (line 6) + * Lock_Free <1>: Attribute Lock_Free. + (line 6) + * Loop_Entry: Attribute Loop_Entry. + (line 6) + * Machine Code insertions: Machine Code Insertions. + (line 6) + * Machine operations: RM B 5 22-26 Interfacing with Fortran. + (line 34) + * Machine_Size: Attribute Machine_Size. + (line 6) + * Mailboxes: GNAT Bounded_Mailboxes g-boumai ads. + (line 6) + * Mantissa: Attribute Mantissa. (line 6) + * Maps: GNAT Spitbol Table_Integer g-sptain ads. + (line 6) + * Maps <1>: GNAT Spitbol Table_VString g-sptavs ads. + (line 6) + * maximum: Attribute Maximum_Alignment. + (line 6) + * Maximum_Alignment: Attribute Maximum_Alignment. + (line 6) + * Maximum_Alignment attribute: Alignment Clauses. (line 21) + * Max_Asynchronous_Select_Nesting: Max_Asynchronous_Select_Nesting. + (line 6) + * Max_Entry_Queue_Depth: Max_Entry_Queue_Length. + (line 13) + * Max_Entry_Queue_Length: Max_Entry_Queue_Length. + (line 6) + * Max_Integer_Size: Attribute Max_Integer_Size. + (line 6) + * Max_Protected_Entries: Max_Protected_Entries. + (line 6) + * Max_Queue_Length: Aspect Max_Queue_Length. + (line 6) + * Max_Select_Alternatives: Max_Select_Alternatives. + (line 6) + * Max_Storage_At_Blocking: Max_Storage_At_Blocking. + (line 6) + * Max_Tasks: Max_Tasks. (line 6) + * Max_Task_Entries: Max_Task_Entries. (line 6) + * Mechanism_Code: Attribute Mechanism_Code. + (line 6) + * Memory allocation: System Memory s-memory ads. + (line 6) + * Memory corruption debugging: GNAT Debug_Pools g-debpoo ads. + (line 6) + * Memory-mapped I/O: Use of Address Clauses for Memory-Mapped I/O. + (line 6) + * Message Digest MD5: GNAT MD5 g-md5 ads. (line 6) + * monotonic: RM D 7 21 Tasking Restrictions. + (line 13) + * multidimensional: RM 3 5 7 17 Float Types. + (line 23) + * Multidimensional arrays: RM 3 5 7 17 Float Types. + (line 24) + * Multiprocessor interface: System Multiprocessors s-multip ads. + (line 6) + * Multiprocessor interface <1>: System Multiprocessors Dispatching_Domains s-mudido ads. + (line 6) + * Named assertions: Pragma Check. (line 6) + * Named assertions <1>: Pragma Check_Policy. + (line 6) + * Named numbers: Attribute Universal_Literal_String. + (line 6) + * No_Abort_Statements: No_Abort_Statements. + (line 6) + * No_Access_Parameter_Allocators: No_Access_Parameter_Allocators. + (line 6) + * No_Access_Subprograms: No_Access_Subprograms. + (line 6) + * No_Allocators: No_Allocators. (line 6) + * No_Anonymous_Allocators: No_Anonymous_Allocators. + (line 6) + * No_Asynchronous_Control: No_Asynchronous_Control. + (line 6) + * No_Caching: Aspect No_Caching. (line 6) + * No_Calendar: No_Calendar. (line 6) + * No_Coextensions: No_Coextensions. (line 6) + * No_Default_Initialization: No_Default_Initialization. + (line 6) + * No_Delay: No_Delay. (line 6) + * No_Dependence: No_Dependence. (line 6) + * No_Direct_Boolean_Operators: No_Direct_Boolean_Operators. + (line 6) + * No_Dispatch: No_Dispatch. (line 6) + * No_Dispatching_Calls: No_Dispatching_Calls. + (line 6) + * No_Dynamic_Accessibility_Checks: No_Dynamic_Accessibility_Checks. + (line 6) + * No_Dynamic_Attachment: No_Dynamic_Attachment. + (line 6) + * No_Dynamic_Interrupts: No_Dynamic_Attachment. + (line 11) + * No_Dynamic_Priorities: No_Dynamic_Priorities. + (line 6) + * No_Dynamic_Sized_Objects: No_Dynamic_Sized_Objects. + (line 6) + * No_Elaboration_Code: No_Elaboration_Code. + (line 6) + * No_Elaboration_Code_All: Aspect No_Elaboration_Code_All. + (line 6) + * No_Entry_Calls_In_Elaboration_Code: No_Entry_Calls_In_Elaboration_Code. + (line 6) + * No_Entry_Queue: No_Entry_Queue. (line 6) + * No_Enumeration_Maps: No_Enumeration_Maps. + (line 6) + * No_Exceptions: No_Exceptions. (line 6) + * No_Exception_Handlers: No_Exception_Handlers. + (line 6) + * No_Exception_Propagation: No_Exception_Propagation. + (line 6) + * No_Exception_Registration: No_Exception_Registration. + (line 6) + * No_Finalization: No_Finalization. (line 6) + * No_Fixed_Point: No_Fixed_Point. (line 6) + * No_Floating_Point: No_Floating_Point. (line 6) + * No_Implementation_Aspect_Specifications: No_Implementation_Aspect_Specifications. + (line 6) + * No_Implementation_Attributes: No_Implementation_Attributes. + (line 6) + * No_Implementation_Identifiers: No_Implementation_Identifiers. + (line 6) + * No_Implementation_Pragmas: No_Implementation_Pragmas. + (line 6) + * No_Implementation_Restrictions: No_Implementation_Restrictions. + (line 6) + * No_Implementation_Units: No_Implementation_Units. + (line 6) + * No_Implicit_Aliasing: No_Implicit_Aliasing. + (line 6) + * No_Implicit_Conditionals: No_Implicit_Conditionals. + (line 6) + * No_Implicit_Dynamic_Code: No_Implicit_Dynamic_Code. + (line 6) + * No_Implicit_Heap_Allocations: No_Implicit_Heap_Allocations. + (line 6) + * No_Implicit_Loops: No_Implicit_Loops. (line 6) + * No_Implicit_Protected_Object_Allocations: No_Implicit_Protected_Object_Allocations. + (line 6) + * No_Implicit_Task_Allocations: No_Implicit_Task_Allocations. + (line 6) + * No_Initialize_Scalars: No_Initialize_Scalars. + (line 6) + * No_Inline: Aspect No_Inline. (line 6) + * No_IO: No_IO. (line 6) + * No_Local_Allocators: No_Local_Allocators. + (line 6) + * No_Local_Protected_Objects: No_Local_Protected_Objects. + (line 6) + * No_Local_Timing_Events: No_Local_Timing_Events. + (line 6) + * No_Long_Long_Integers: No_Long_Long_Integers. + (line 6) + * No_Multiple_Elaboration: No_Multiple_Elaboration. + (line 6) + * No_Nested_Finalization: No_Nested_Finalization. + (line 6) + * No_Obsolescent_Features: No_Obsolescent_Features. + (line 6) + * No_Protected_Types: No_Protected_Types. (line 6) + * No_Protected_Type_Allocators: No_Protected_Type_Allocators. + (line 6) + * No_Recursion: No_Recursion. (line 6) + * No_Reentrancy: No_Reentrancy. (line 6) + * No_Relative_Delay: No_Relative_Delay. (line 6) + * No_Requeue: No_Requeue_Statements. + (line 10) + * No_Requeue_Statements: No_Requeue_Statements. + (line 6) + * No_Secondary_Stack: No_Secondary_Stack. (line 6) + * No_Select_Statements: No_Select_Statements. + (line 6) + * No_Specification_of_Aspect: No_Specification_of_Aspect. + (line 6) + * No_Specific_Termination_Handlers: No_Specific_Termination_Handlers. + (line 6) + * No_Standard_Allocators_After_Elaboration: No_Standard_Allocators_After_Elaboration. + (line 6) + * No_Standard_Storage_Pools: No_Standard_Storage_Pools. + (line 6) + * No_Streams: No_Streams. (line 6) + * No_Stream_Optimizations: No_Stream_Optimizations. + (line 6) + * No_Tagged_Streams: Aspect No_Tagged_Streams. + (line 6) + * No_Tagged_Type_Registration: No_Tagged_Type_Registration. + (line 6) + * No_Tasking: No_Tasking. (line 6) + * No_Task_Allocators: No_Task_Allocators. (line 6) + * No_Task_Attributes: No_Task_Attributes_Package. + (line 9) + * No_Task_Attributes_Package: No_Task_Attributes_Package. + (line 6) + * No_Task_At_Interrupt_Priority: No_Task_At_Interrupt_Priority. + (line 6) + * No_Task_Hierarchy: No_Task_Hierarchy. (line 6) + * No_Task_Parts: Aspect No_Task_Parts. + (line 6) + * No_Task_Termination: No_Task_Termination. + (line 6) + * No_Terminate_Alternatives: No_Terminate_Alternatives. + (line 6) + * No_Unchecked_Access: No_Unchecked_Access. + (line 6) + * No_Unchecked_Conversion: No_Unchecked_Conversion. + (line 6) + * No_Unchecked_Deallocation: No_Unchecked_Deallocation. + (line 6) + * No_Use_Of_Entity: No_Use_Of_Entity. (line 6) + * No_Wide_Characters: No_Wide_Characters. (line 6) + * Null_Occurrence: Ada Exceptions Is_Null_Occurrence a-einuoc ads. + (line 6) + * Null_Occurrence <1>: Ada Exceptions Last_Chance_Handler a-elchha ads. + (line 6) + * Null_Parameter: Attribute Null_Parameter. + (line 6) + * Numerics: RM F 1 2 Decimal Radix Support. + (line 11) + * Object_Size: Aspect Object_Size. (line 6) + * Object_Size <1>: Attribute Object_Size. + (line 6) + * Object_Size <2>: Value_Size and Object_Size Clauses. + (line 6) + * Obsolsecent: Aspect Obsolescent. (line 6) + * obtaining most recent: GNAT Most_Recent_Exception g-moreex ads. + (line 6) + * of an address: System Address_Image s-addima ads. + (line 6) + * of bits: Bit_Order Clauses. (line 6) + * of bytes: Effect of Bit_Order on Byte Ordering. + (line 6) + * of compiler: GNAT Compiler_Version g-comver ads. + (line 6) + * of objects: Value_Size and Object_Size Clauses. + (line 6) + * Old: Attribute Old. (line 6) + * on ‘‘Address‘‘: RM 13 7 37 Address as Private. + (line 10) + * Operating System interface: GNAT OS_Lib g-os_lib ads. + (line 6) + * Operations: RM 13 7 37 Address as Private. + (line 10) + * operations of: RM 13 7 37 Address as Private. + (line 9) + * ordering: Bit_Order Clauses. (line 6) + * ordering <1>: Effect of Bit_Order on Byte Ordering. + (line 6) + * Overlaying of objects: Address Clauses. (line 160) + * Package Interfaces: RM B 1 39-41 Pragma Export. + (line 35) + * Package Task_Attributes: RM C 5 8 Pragma Discard_Names. + (line 12) + * Package ‘‘Interrupts‘‘: RM C 3 1 20-21 Protected Procedure Handlers. + (line 17) + * Packed Decimal: Interfaces Packed_Decimal i-pacdec ads. + (line 6) + * Packed types: RM 13 1 21-24 Representation Clauses. + (line 38) + * Parameters: Attribute Mechanism_Code. + (line 6) + * Parameters <1>: Attribute Passed_By_Reference. + (line 6) + * Parsing: GNAT AWK g-awk ads. (line 6) + * Parsing <1>: GNAT Bounded_Buffers g-boubuf ads. + (line 6) + * Parsing <2>: GNAT Bounded_Mailboxes g-boumai ads. + (line 6) + * Partition communication subsystem: RM D 8 47-49 Monotonic Time. + (line 23) + * Partition interfacing functions: System Partition_Interface s-parint ads. + (line 6) + * Part_Of: Aspect Part_Of. (line 6) + * Passed_By_Reference: Attribute Passed_By_Reference. + (line 6) + * passing: Attribute Null_Parameter. + (line 6) + * Passing by copy: Pragma C_Pass_By_Copy. + (line 6) + * passing mechanism: Attribute Mechanism_Code. + (line 6) + * passing mechanism <1>: Attribute Mechanism_Code. + (line 6) + * Pattern matching: GNAT Regexp g-regexp ads. + (line 6) + * Pattern matching <1>: GNAT Regpat g-regpat ads. + (line 6) + * Pattern matching <2>: GNAT Spitbol Patterns g-spipat ads. + (line 6) + * PCS: RM D 8 47-49 Monotonic Time. + (line 22) + * Persistent_BSS: Aspect Persistent_BSS. + (line 6) + * Pool_Address: Attribute Pool_Address. + (line 6) + * Portability: About This Guide. (line 24) + * Post: Pragma Post. (line 6) + * Post <1>: Pragma Post_Class. (line 6) + * Postcondition: Pragma Postcondition. + (line 6) + * postconditions: Pragma Post. (line 6) + * postconditions <1>: Pragma Postcondition. + (line 6) + * postconditions <2>: Pragma Post_Class. (line 6) + * Pragma: Representation Clauses and Pragmas. + (line 6) + * pragma Ada_2012: Implementation of Ada 2012 Features. + (line 6) + * Pragma Component_Alignment: Pragma Component_Alignment. + (line 6) + * Pragma Pack (for arrays): Pragma Pack for Arrays. + (line 6) + * Pragma Pack (for records): Pragma Pack for Records. + (line 6) + * Pragma Pack (for type Natural): Pragma Pack for Arrays. + (line 79) + * Pragma Pack warning: Pragma Pack for Arrays. + (line 79) + * pragma Shared_Passive: GNAT Implementation of Shared Passive Packages. + (line 6) + * Pragmas: Pragma Rename_Pragma. + (line 6) + * Pragmas <1>: RM 1 1 5 12 Bounded Errors. + (line 12) + * Pre: Pragma Pre. (line 6) + * Pre-elaboration requirements: RM C 3 2 25 Package Interrupts. + (line 14) + * preconditions: Pragma Pre. (line 6) + * Preconditions: Pragma Precondition. + (line 6) + * preconditions <1>: Pragma Precondition. + (line 6) + * preconditions <2>: Pragma Pre_Class. (line 6) + * Predicate: Aspect Predicate. (line 6) + * Preemptive abort: RM D 4 16 Entry Queuing Policies. + (line 10) + * Prefix_Exception_Messages: Pragma Prefix_Exception_Messages. + (line 6) + * Pre_Class: Pragma Pre_Class. (line 6) + * Protected procedure handlers: RM C 3 28 Interrupt Support. + (line 14) + * Pure: GNAT Exceptions g-except ads. + (line 6) + * Pure packages: GNAT Exceptions g-except ads. + (line 6) + * Pure_Barriers: Pure_Barriers. (line 6) + * Pure_Function: Aspect Pure_Function. + (line 6) + * Random number generation: RM A 4 4 106 Bounded-Length String Handling. + (line 10) + * Random number generation <1>: GNAT MBBS_Discrete_Random g-mbdira ads. + (line 6) + * Random number generation <2>: GNAT MBBS_Float_Random g-mbflra ads. + (line 6) + * Random number generation <3>: GNAT Random_Numbers g-rannum ads. + (line 6) + * Range_Length: Attribute Range_Length. + (line 6) + * Rational compatibility: Pragma Overriding_Renamings. + (line 6) + * Rational Profile: Pragma Implicit_Packing. + (line 6) + * Rational profile: Pragma Overriding_Renamings. + (line 6) + * Rational profile <1>: Pragma Use_VADS_Size. + (line 6) + * Read attribute: RM 13 13 2 1 6 Stream Oriented Attributes. + (line 22) + * Real-Time Systems Annex compliance: Ensuring Compliance with the Real-Time Annex. + (line 6) + * Record Representation Clause: Record Representation Clauses. + (line 6) + * Record representation clauses: RM 13 4 9-10 Enumeration Representation Clauses. + (line 15) + * records: RM 13 4 9-10 Enumeration Representation Clauses. + (line 14) + * Refined_Depends: Aspect Refined_Depends. + (line 6) + * Refined_Global: Aspect Refined_Global. + (line 6) + * Refined_Initialization: Aspect Relaxed_Initialization. + (line 6) + * Refined_Post: Aspect Refined_Post. + (line 6) + * Refined_State: Aspect Refined_State. + (line 6) + * Regular expressions: GNAT Regexp g-regexp ads. + (line 6) + * Regular expressions <1>: GNAT Regpat g-regpat ads. + (line 6) + * Remote_Access_Type: Aspect Remote_Access_Type. + (line 6) + * Removing command line arguments: Ada Command_Line Remove a-colire ads. + (line 6) + * representation: Representation Clauses and Pragmas. + (line 6) + * Representation: Determining the Representations chosen by GNAT. + (line 6) + * Representation <1>: System Wch_Cnv s-wchcnv ads. + (line 6) + * Representation Clause: Representation Clauses and Pragmas. + (line 6) + * Representation clauses: RM 11 5 28 Suppression of Checks. + (line 10) + * Representation clauses <1>: RM 13 3 71-73 Component Size Clauses. + (line 24) + * Representation clauses <2>: RM 13 4 9-10 Enumeration Representation Clauses. + (line 15) + * Representation Clauses: Representation Clauses and Pragmas. + (line 6) + * representation of: Attribute Universal_Literal_String. + (line 6) + * Representation of enums: Attribute Enum_Rep. (line 6) + * Representation of enums <1>: Attribute Enum_Val. (line 6) + * Representation of wide characters: System Wch_Cnv s-wchcnv ads. + (line 6) + * Representation Pragma: Representation Clauses and Pragmas. + (line 6) + * response file: Ada Command_Line Response_File a-clrefi ads. + (line 6) + * Response file for command line: Ada Command_Line Response_File a-clrefi ads. + (line 6) + * Restrictions: Attribute Restriction_Set. + (line 6) + * Restrictions definitions: System Rident s-rident ads. + (line 6) + * Restriction_Set: Attribute Restriction_Set. + (line 6) + * Result: Attribute Result. (line 6) + * Return values: Attribute Mechanism_Code. + (line 6) + * Rewrite data: GNAT Rewrite_Data g-rewdat ads. + (line 6) + * Rotate_Left: Shifts and Rotates. (line 6) + * Rotate_Right: Shifts and Rotates. (line 6) + * Run-time restrictions access: System Restrictions s-restri ads. + (line 6) + * Safe_Emax: Attribute Safe_Emax. + (line 6) + * Safe_Large: Attribute Safe_Large. + (line 6) + * Safe_Small: Attribute Safe_Small. + (line 6) + * Scalar storage order: Attribute Scalar_Storage_Order. + (line 6) + * Scalar_Storage_Order: Pragma Default_Scalar_Storage_Order. + (line 6) + * Scalar_Storage_Order <1>: Aspect Scalar_Storage_Order. + (line 6) + * Scalar_Storage_Order <2>: Attribute Scalar_Storage_Order. + (line 6) + * Secondary Stack Info: GNAT Secondary_Stack_Info g-sestin ads. + (line 6) + * Secondary_Stack_Size: Aspect Secondary_Stack_Size. + (line 6) + * Secure Hash Algorithm SHA-1: GNAT SHA1 g-sha1 ads. + (line 6) + * Secure Hash Algorithm SHA-224: GNAT SHA224 g-sha224 ads. + (line 6) + * Secure Hash Algorithm SHA-256: GNAT SHA256 g-sha256 ads. + (line 6) + * Secure Hash Algorithm SHA-384: GNAT SHA384 g-sha384 ads. + (line 6) + * Secure Hash Algorithm SHA-512: GNAT SHA512 g-sha512 ads. + (line 6) + * Semaphores: GNAT Semaphores g-semaph ads. + (line 6) + * Sequential elaboration policy: RM G 2 6 15 Complex Arithmetic Accuracy. + (line 13) + * Serial_Communications: GNAT Serial_Communications g-sercom ads. + (line 6) + * Sets of strings: GNAT Spitbol Table_Boolean g-sptabo ads. + (line 6) + * setting for not-first subtype: Attribute Value_Size. + (line 6) + * Shared: Aspect Shared. (line 6) + * Shared passive packages: GNAT Implementation of Shared Passive Packages. + (line 6) + * SHARED_MEMORY_DIRECTORY environment variable: GNAT Implementation of Shared Passive Packages. + (line 35) + * Shift operators: Pragma Provide_Shift_Operators. + (line 6) + * Shift_Left: Shifts and Rotates. (line 6) + * Shift_Right: Shifts and Rotates. (line 6) + * Shift_Right_Arithmetic: Shifts and Rotates. (line 6) + * Signals: GNAT Signals g-signal ads. + (line 6) + * simple: Pragma Simple_Storage_Pool_Type. + (line 6) + * simple <1>: Attribute Simple_Storage_Pool. + (line 6) + * Simple I/O: GNAT IO g-io ads. (line 6) + * Simple storage pool: Pragma Simple_Storage_Pool_Type. + (line 6) + * Simple storage pool <1>: Attribute Simple_Storage_Pool. + (line 6) + * Simple_Barriers: Simple_Barriers. (line 6) + * Simple_Storage_Pool: Aspect Simple_Storage_Pool. + (line 6) + * Simple_Storage_Pool <1>: Attribute Simple_Storage_Pool. + (line 6) + * Simple_Storage_Pool_Type: Aspect Simple_Storage_Pool_Type. + (line 6) + * Size: Pragma Use_VADS_Size. + (line 6) + * Size <1>: Attribute Object_Size. + (line 6) + * Size <2>: Attribute VADS_Size. + (line 6) + * Size <3>: Attribute Value_Size. + (line 6) + * Size <4>: Size of Variant Record Objects. + (line 6) + * size: Size of Variant Record Objects. + (line 6) + * Size <5>: Value_Size and Object_Size Clauses. + (line 6) + * Size Clause: Size Clauses. (line 6) + * Size clauses: RM 13 3 29-35 Alignment Clauses. + (line 40) + * Size for biased representation: Biased Representation. + (line 6) + * Size of ‘‘Address‘‘: Attribute Address_Size. + (line 6) + * Small: Attribute Small. (line 6) + * Small <1>: Attribute Small_Denominator. + (line 6) + * Small <2>: Attribute Small_Numerator. + (line 6) + * Small_Denominator: Attribute Small_Denominator. + (line 6) + * Small_Numerator: Attribute Small_Numerator. + (line 6) + * Sockets: GNAT Sockets g-socket ads. + (line 6) + * Sorting: GNAT Bubble_Sort g-bubsor ads. + (line 6) + * Sorting <1>: GNAT Bubble_Sort_A g-busora ads. + (line 6) + * Sorting <2>: GNAT Bubble_Sort_G g-busorg ads. + (line 6) + * Sorting <3>: GNAT Heap_Sort g-heasor ads. + (line 6) + * Sorting <4>: GNAT Heap_Sort_A g-hesora ads. + (line 6) + * Sorting <5>: GNAT Heap_Sort_G g-hesorg ads. + (line 6) + * Source Information: GNAT Source_Info g-souinf ads. + (line 6) + * Source_Location: Source_Location. (line 6) + * SPARK_05: SPARK_05. (line 6) + * SPARK_Mode: Aspect SPARK_Mode. (line 6) + * Spawn capability: GNAT OS_Lib g-os_lib ads. + (line 6) + * Spell checking: GNAT Spelling_Checker g-speche ads. + (line 6) + * Spell checking <1>: GNAT Spelling_Checker_Generic g-spchge ads. + (line 6) + * Spell checking <2>: GNAT Wide_Spelling_Checker g-u3spch ads. + (line 6) + * Spell checking <3>: GNAT Wide_Spelling_Checker g-wispch ads. + (line 6) + * Spell checking <4>: GNAT Wide_Wide_Spelling_Checker g-zspche ads. + (line 6) + * SPITBOL interface: GNAT Spitbol g-spitbo ads. + (line 6) + * SPITBOL pattern matching: GNAT Spitbol Patterns g-spipat ads. + (line 6) + * SPITBOL Tables: GNAT Spitbol Table_Boolean g-sptabo ads. + (line 6) + * SPITBOL Tables <1>: GNAT Spitbol Table_Integer g-sptain ads. + (line 6) + * SPITBOL Tables <2>: GNAT Spitbol Table_VString g-sptavs ads. + (line 6) + * Static_Dispatch_Tables: Static_Dispatch_Tables. + (line 6) + * Static_Priorities: Static_Priorities. (line 6) + * Static_Storage_Size: Static_Storage_Size. + (line 6) + * Storage place attributes: RM 13 5 1 17-22 Record Representation Clauses. + (line 44) + * Storage pool: Pragma Simple_Storage_Pool_Type. + (line 6) + * Storage pool <1>: Attribute Simple_Storage_Pool. + (line 6) + * Storage pool <2>: System Pool_Global s-pooglo ads. + (line 6) + * Storage pool <3>: System Pool_Local s-pooloc ads. + (line 6) + * Storage_Size Clause: Storage_Size Clauses. + (line 6) + * Storage_Unit: Attribute Storage_Unit. + (line 6) + * Storage_Unit (in pragma Component_Alignment): Pragma Component_Alignment. + (line 37) + * Stream files: Treating Text_IO Files as Streams. + (line 6) + * Stream operations: System Strings Stream_Ops s-ststop ads. + (line 6) + * Stream oriented attributes: RM 13 11 2 17 Unchecked Deallocation. + (line 10) + * Stream oriented attributes <1>: RM 13 13 2 1 6 Stream Oriented Attributes. + (line 21) + * String decoding: GNAT Decode_String g-decstr ads. + (line 6) + * String encoding: GNAT Encode_String g-encstr ads. + (line 6) + * String maps: GNAT Spitbol Table_VString g-sptavs ads. + (line 6) + * String splitter: GNAT String_Split g-strspl ads. + (line 6) + * String stream operations: System Strings Stream_Ops s-ststop ads. + (line 6) + * Stub_Type: Attribute Stub_Type. + (line 6) + * Subprogram address: Attribute Code_Address. + (line 6) + * subtypes: Alignment Clauses. (line 87) + * Suppressing external name: Pragma Export_Function. + (line 59) + * Suppressing external name <1>: Pragma Export_Procedure. + (line 44) + * Suppressing external name <2>: Pragma Export_Valued_Procedure. + (line 49) + * Suppressing initialization: Pragma Suppress_Initialization. + (line 6) + * suppression of: Pragma Suppress_Initialization. + (line 6) + * suppression of <1>: RM 11 4 1 19 Exception Information. + (line 22) + * Suppression of checks: RM 11 4 1 19 Exception Information. + (line 23) + * Suppress_Debug_Info: Aspect Suppress_Debug_Info. + (line 6) + * Suppress_Initialization: Aspect Suppress_Initialization. + (line 6) + * synonyms: Pragma Convention_Identifier. + (line 6) + * synonyms <1>: Pragma Rename_Pragma. + (line 6) + * System: Pragma Extend_System. + (line 6) + * System.Address_Image (s-addima.ads): System Address_Image s-addima ads. + (line 6) + * System.Assertions (s-assert.ads): System Assertions s-assert ads. + (line 6) + * System.Atomic_Counters (s-atocou.ads): System Atomic_Counters s-atocou ads. + (line 6) + * System.Memory (s-memory.ads): System Memory s-memory ads. + (line 6) + * System.Multiprocessors (s-multip.ads): System Multiprocessors s-multip ads. + (line 6) + * System.Multiprocessors.Dispatching_Domains (s-mudido.ads): System Multiprocessors Dispatching_Domains s-mudido ads. + (line 6) + * System.Partition_Interface (s-parint.ads): System Partition_Interface s-parint ads. + (line 6) + * System.Pool_Global (s-pooglo.ads): System Pool_Global s-pooglo ads. + (line 6) + * System.Pool_Local (s-pooloc.ads): System Pool_Local s-pooloc ads. + (line 6) + * System.Restrictions (s-restri.ads): System Restrictions s-restri ads. + (line 6) + * System.Rident (s-rident.ads): System Rident s-rident ads. + (line 6) + * System.Strings.Stream_Ops (s-ststop.ads): System Strings Stream_Ops s-ststop ads. + (line 6) + * System.Unsigned_Types (s-unstyp.ads): System Unsigned_Types s-unstyp ads. + (line 6) + * System.Wch_Cnv (s-wchcnv.ads): System Wch_Cnv s-wchcnv ads. + (line 6) + * System.Wch_Con (s-wchcon.ads): System Wch_Con s-wchcon ads. + (line 6) + * System_Allocator_Alignment: Attribute System_Allocator_Alignment. + (line 6) + * Table implementation: GNAT Dynamic_Tables g-dyntab ads. + (line 6) + * Table implementation <1>: GNAT Table g-table ads. + (line 6) + * Tagged values: Attribute Has_Tagged_Values. + (line 6) + * Target_Name: Attribute Target_Name. + (line 6) + * Task locking: GNAT Task_Lock g-tasloc ads. + (line 6) + * Task specific storage: Pragma Thread_Local_Storage. + (line 6) + * Task synchronization: GNAT Task_Lock g-tasloc ads. + (line 6) + * Tasking restrictions: RM D 6 9-10 Preemptive Abort. + (line 18) + * Task_Attributes: Pragma Thread_Local_Storage. + (line 6) + * Task_Attributes <1>: RM C 5 8 Pragma Discard_Names. + (line 11) + * Test cases: Pragma Test_Case. (line 6) + * testing for: Attribute Has_Access_Values. + (line 6) + * testing for <1>: Attribute Has_Discriminants. + (line 6) + * testing for <2>: Attribute Has_Tagged_Values. + (line 6) + * testing for <3>: Ada Exceptions Is_Null_Occurrence a-einuoc ads. + (line 6) + * testing for <4>: Ada Exceptions Last_Chance_Handler a-elchha ads. + (line 6) + * Test_Case: Aspect Test_Case. (line 6) + * Text_IO: Ada Strings Unbounded Text_IO a-suteio ads. + (line 6) + * Text_IO <1>: Ada Strings Wide_Unbounded Wide_Text_IO a-swuwti ads. + (line 6) + * Text_IO <2>: Ada Strings Wide_Wide_Unbounded Wide_Wide_Text_IO a-szuzti ads. + (line 6) + * Text_IO <3>: GNAT IO_Aux g-io_aux ads. + (line 6) + * Text_IO extensions: Text_IO Extensions. (line 6) + * Text_IO for unbounded strings: Text_IO Facilities for Unbounded Strings. + (line 6) + * Text_IO operations: Text_IO Facilities for Unbounded Strings. + (line 6) + * Text_IO resetting standard files: Ada Text_IO Reset_Standard_Files a-tirsfi ads. + (line 6) + * Threads: GNAT Threads g-thread ads. + (line 6) + * Thread_Local_Storage: Aspect Thread_Local_Storage. + (line 6) + * Time: RM D 7 21 Tasking Restrictions. + (line 14) + * Time <1>: GNAT Calendar Time_IO g-catiio ads. + (line 6) + * Time stamp: GNAT Time_Stamp g-timsta ads. + (line 6) + * TLS (Thread Local Storage): Pragma Thread_Local_Storage. + (line 6) + * To_Address: Attribute To_Address. + (line 6) + * To_Address <1>: Address Clauses. (line 73) + * To_Any: Attribute To_Any. (line 6) + * Trace back facilities: GNAT Traceback g-traceb ads. + (line 6) + * Trace back facilities <1>: GNAT Traceback Symbolic g-trasym ads. + (line 5) + * Traceback for Exception Occurrence: Ada Exceptions Traceback a-exctra ads. + (line 6) + * trampoline: No_Implicit_Dynamic_Code. + (line 6) + * TypeCode: Attribute TypeCode. (line 6) + * Type_Class: Attribute Type_Class. + (line 6) + * Type_Key: Attribute Type_Key. (line 6) + * typographical: Conventions. (line 6) + * Typographical conventions: Conventions. (line 6) + * Unbounded_String: Text_IO Facilities for Unbounded Strings. + (line 6) + * Unbounded_String <1>: Ada Strings Unbounded Text_IO a-suteio ads. + (line 6) + * Unbounded_Wide_String: Ada Strings Wide_Unbounded Wide_Text_IO a-swuwti ads. + (line 6) + * Unbounded_Wide_Wide_String: Ada Strings Wide_Wide_Unbounded Wide_Wide_Text_IO a-szuzti ads. + (line 6) + * Unchecked conversion: RM 13 7 1 16 Address Operations. + (line 14) + * Unchecked deallocation: RM 13 11 23-25 Implicit Heap Usage. + (line 32) + * Unconstrained_Array: Attribute Unconstrained_Array. + (line 6) + * Unevaluated_Use_Of_Old: Pragma Unevaluated_Use_Of_Old. + (line 6) + * Unicode: GNAT Decode_String g-decstr ads. + (line 6) + * Unicode <1>: GNAT Decode_UTF8_String g-deutst ads. + (line 6) + * Unicode <2>: GNAT Encode_String g-encstr ads. + (line 6) + * Unicode <3>: GNAT Encode_UTF8_String g-enutst ads. + (line 6) + * Unicode categorization: Ada Wide_Characters Unicode a-wichun ads. + (line 6) + * Unicode categorization <1>: Ada Wide_Wide_Characters Unicode a-zchuni ads. + (line 6) + * Unions in C: Pragma Unchecked_Union. + (line 6) + * Universal_Aliasing: Aspect Universal_Aliasing. + (line 6) + * Universal_Literal_String: Attribute Universal_Literal_String. + (line 6) + * unmodified: Pragma Unmodified. (line 6) + * Unmodified: Aspect Unmodified. (line 6) + * unreferenced: Pragma Unreferenced. + (line 6) + * unreferenced <1>: Pragma Unreferenced_Objects. + (line 6) + * Unreferenced: Aspect Unreferenced. + (line 6) + * Unreferenced_Objects: Aspect Unreferenced_Objects. + (line 6) + * unrestricted: Attribute Unrestricted_Access. + (line 6) + * Unrestricted_Access: Attribute Unrestricted_Access. + (line 6) + * unused: Pragma Unused. (line 6) + * Update: Attribute Update. (line 6) + * used for objects: Attribute Object_Size. + (line 6) + * UTF-8: GNAT Decode_String g-decstr ads. + (line 6) + * UTF-8 <1>: GNAT Decode_UTF8_String g-deutst ads. + (line 6) + * UTF-8 <2>: GNAT Encode_String g-encstr ads. + (line 6) + * UTF-8 <3>: GNAT Encode_UTF8_String g-enutst ads. + (line 6) + * UTF-8 representation: GNAT Byte_Order_Mark g-byorma ads. + (line 6) + * UTF-8 string decoding: GNAT Decode_UTF8_String g-deutst ads. + (line 6) + * UTF-8 string encoding: GNAT Encode_UTF8_String g-enutst ads. + (line 6) + * VADS compatibility: Pragma Use_VADS_Size. + (line 6) + * VADS compatibility <1>: Attribute VADS_Size. + (line 6) + * VADS_Size: Attribute VADS_Size. + (line 6) + * Valid_Image: Attribute Valid_Image. + (line 6) + * Valid_Scalars: Attribute Valid_Scalars. + (line 6) + * Value_Size: Aspect Value_Size. (line 6) + * Value_Size <1>: Attribute Value_Size. + (line 6) + * Value_Size <2>: Value_Size and Object_Size Clauses. + (line 6) + * variant record objects: Size of Variant Record Objects. + (line 6) + * Variant record objects: Size of Variant Record Objects. + (line 6) + * Version: GNAT Compiler_Version g-comver ads. + (line 6) + * Volatile_Full_Access: Aspect Volatile_Full_Access. + (line 6) + * Volatile_Function: Aspect Volatile_Function. + (line 6) + * VxWorks: Interfaces VxWorks i-vxwork ads. + (line 6) + * VxWorks <1>: Interfaces VxWorks Int_Connection i-vxinco ads. + (line 6) + * VxWorks <2>: Interfaces VxWorks IO i-vxwoio ads. + (line 6) + * VxWorks <3>: Interfaces VxWorks IO i-vxwoio ads. + (line 6) + * VxWorks <4>: Interfaces VxWorks IO i-vxwoio ads. + (line 6) + * Warnings: Pragma Unmodified. (line 6) + * Warnings <1>: Pragma Unreferenced. + (line 6) + * Warnings <2>: Pragma Unreferenced_Objects. + (line 6) + * Warnings <3>: Pragma Unused. (line 6) + * Warnings <4>: Aspect Warnings. (line 6) + * Wchar_T_Size: Attribute Wchar_T_Size. + (line 6) + * when passed by reference: Attribute Passed_By_Reference. + (line 6) + * Wide characte representations: GNAT Byte_Order_Mark g-byorma ads. + (line 6) + * Wide Character: System Wch_Cnv s-wchcnv ads. + (line 6) + * Wide character codes: GNAT UTF_32 g-table ads. + (line 6) + * Wide character decoding: GNAT Decode_UTF8_String g-deutst ads. + (line 6) + * Wide character encoding: GNAT Decode_String g-decstr ads. + (line 6) + * Wide character encoding <1>: GNAT Encode_String g-encstr ads. + (line 6) + * Wide character encoding <2>: GNAT Encode_UTF8_String g-enutst ads. + (line 6) + * Wide String: System Wch_Cnv s-wchcnv ads. + (line 6) + * Wide_Character: Ada Wide_Characters Unicode a-wichun ads. + (line 6) + * Wide_String splitter: GNAT Wide_String_Split g-wistsp ads. + (line 6) + * Wide_Text_IO resetting standard files: Ada Wide_Text_IO Reset_Standard_Files a-wrstfi ads. + (line 6) + * Wide_Wide_Character: Ada Wide_Wide_Characters Unicode a-zchuni ads. + (line 6) + * Wide_Wide_String splitter: GNAT Wide_Wide_String_Split g-zistsp ads. + (line 6) + * Wide_Wide_Text_IO resetting standard files: Ada Wide_Wide_Text_IO Reset_Standard_Files a-zrstfi ads. + (line 6) + * Windows Registry: GNAT Registry g-regist ads. + (line 6) + * Word_Size: Attribute Word_Size. + (line 6) + * Write attribute: RM 13 13 2 1 6 Stream Oriented Attributes. + (line 22) + * XDR representation: RM 13 13 2 1 6 Stream Oriented Attributes. + (line 22) + * Zero address: Attribute Null_Parameter. + (line 6) + + +  + Tag Table: + Node: Top326 + Ref: gnat_rm doc554 + Ref: 0554 + Node: About This Guide33904 + Ref: gnat_rm/about_this_guide doc34012 + Ref: 234012 + Ref: gnat_rm/about_this_guide about-this-guide34012 + Ref: 334012 + Ref: gnat_rm/about_this_guide gnat-reference-manual34012 + Ref: 434012 + Ref: gnat_rm/about_this_guide id134012 + Ref: 534012 + Node: What This Reference Manual Contains35402 + Ref: gnat_rm/about_this_guide what-this-reference-manual-contains35511 + Ref: 635511 + Node: Conventions39184 + Ref: gnat_rm/about_this_guide conventions39321 + Ref: 1839321 + Node: Related Information39888 + Ref: gnat_rm/about_this_guide related-information39981 + Ref: 1939981 + Node: Implementation Defined Pragmas41275 + Ref: gnat_rm/implementation_defined_pragmas doc41410 + Ref: 1a41410 + Ref: gnat_rm/implementation_defined_pragmas id141410 + Ref: 1b41410 + Ref: gnat_rm/implementation_defined_pragmas implementation-defined-pragmas41410 + Ref: 741410 + Node: Pragma Abort_Defer47582 + Ref: gnat_rm/implementation_defined_pragmas pragma-abort-defer47698 + Ref: 1c47698 + Node: Pragma Abstract_State48569 + Ref: gnat_rm/implementation_defined_pragmas id248707 + Ref: 1d48707 + Ref: gnat_rm/implementation_defined_pragmas pragma-abstract-state48707 + Ref: 1e48707 + Node: Pragma Ada_8349910 + Ref: gnat_rm/implementation_defined_pragmas pragma-ada-8350043 + Ref: 1f50043 + Node: Pragma Ada_9551134 + Ref: gnat_rm/implementation_defined_pragmas pragma-ada-9551259 + Ref: 2051259 + Node: Pragma Ada_0551777 + Ref: gnat_rm/implementation_defined_pragmas pragma-ada-0551904 + Ref: 2151904 + Node: Pragma Ada_200552930 + Ref: gnat_rm/implementation_defined_pragmas pragma-ada-200553057 + Ref: 2253057 + Node: Pragma Ada_1253224 + Ref: gnat_rm/implementation_defined_pragmas pragma-ada-1253353 + Ref: 2353353 + Node: Pragma Ada_201254528 + Ref: gnat_rm/implementation_defined_pragmas pragma-ada-201254678 + Ref: 2454678 + Node: Pragma Aggregate_Individually_Assign54845 + Ref: gnat_rm/implementation_defined_pragmas pragma-aggregate-individually-assign55010 + Ref: 2555010 + Node: Pragma Allow_Integer_Address55415 + Ref: gnat_rm/implementation_defined_pragmas pragma-allow-integer-address55580 + Ref: 2655580 + Node: Pragma Annotate57193 + Ref: gnat_rm/implementation_defined_pragmas id357335 + Ref: 2757335 + Ref: gnat_rm/implementation_defined_pragmas pragma-annotate57335 + Ref: 2857335 + Node: Pragma Assert58783 + Ref: gnat_rm/implementation_defined_pragmas pragma-assert58918 + Ref: 2958918 + Node: Pragma Assert_And_Cut61424 + Ref: gnat_rm/implementation_defined_pragmas pragma-assert-and-cut61567 + Ref: 2a61567 + Node: Pragma Assertion_Policy62379 + Ref: gnat_rm/implementation_defined_pragmas pragma-assertion-policy62522 + Ref: 2b62522 + Node: Pragma Assume66253 + Ref: gnat_rm/implementation_defined_pragmas pragma-assume66406 + Ref: 2c66406 + Node: Pragma Assume_No_Invalid_Values67385 + Ref: gnat_rm/implementation_defined_pragmas pragma-assume-no-invalid-values67535 + Ref: 2d67535 + Node: Pragma Async_Readers69318 + Ref: gnat_rm/implementation_defined_pragmas id469475 + Ref: 2e69475 + Ref: gnat_rm/implementation_defined_pragmas pragma-async-readers69475 + Ref: 2f69475 + Node: Pragma Async_Writers69721 + Ref: gnat_rm/implementation_defined_pragmas id569874 + Ref: 3069874 + Ref: gnat_rm/implementation_defined_pragmas pragma-async-writers69874 + Ref: 3169874 + Node: Pragma Attribute_Definition70120 + Ref: gnat_rm/implementation_defined_pragmas pragma-attribute-definition70274 + Ref: 3270274 + Node: Pragma C_Pass_By_Copy70901 + Ref: gnat_rm/implementation_defined_pragmas pragma-c-pass-by-copy71047 + Ref: 3371047 + Node: Pragma Check72229 + Ref: gnat_rm/implementation_defined_pragmas pragma-check72375 + Ref: 3472375 + Node: Pragma Check_Float_Overflow73629 + Ref: gnat_rm/implementation_defined_pragmas pragma-check-float-overflow73771 + Ref: 3573771 + Node: Pragma Check_Name75822 + Ref: gnat_rm/implementation_defined_pragmas pragma-check-name75971 + Ref: 3675971 + Node: Pragma Check_Policy77091 + Ref: gnat_rm/implementation_defined_pragmas pragma-check-policy77227 + Ref: 3777227 + Node: Pragma Comment80040 + Ref: gnat_rm/implementation_defined_pragmas pragma-comment80179 + Ref: 3880179 + Node: Pragma Common_Object80697 + Ref: gnat_rm/implementation_defined_pragmas pragma-common-object80842 + Ref: 3980842 + Node: Pragma Compile_Time_Error81725 + Ref: gnat_rm/implementation_defined_pragmas compile-time-error81883 + Ref: 3a81883 + Ref: gnat_rm/implementation_defined_pragmas pragma-compile-time-error81883 + Ref: 3b81883 + Node: Pragma Compile_Time_Warning82953 + Ref: gnat_rm/implementation_defined_pragmas pragma-compile-time-warning83121 + Ref: 3c83121 + Node: Pragma Complete_Representation84354 + Ref: gnat_rm/implementation_defined_pragmas pragma-complete-representation84526 + Ref: 3d84526 + Node: Pragma Complex_Representation85075 + Ref: gnat_rm/implementation_defined_pragmas pragma-complex-representation85246 + Ref: 3e85246 + Node: Pragma Component_Alignment86002 + Ref: gnat_rm/implementation_defined_pragmas pragma-component-alignment86176 + Ref: 3f86176 + Node: Pragma Constant_After_Elaboration88894 + Ref: gnat_rm/implementation_defined_pragmas id689060 + Ref: 4089060 + Ref: gnat_rm/implementation_defined_pragmas pragma-constant-after-elaboration89060 + Ref: 4189060 + Node: Pragma Contract_Cases89358 + Ref: gnat_rm/implementation_defined_pragmas id789526 + Ref: 4289526 + Ref: gnat_rm/implementation_defined_pragmas pragma-contract-cases89526 + Ref: 4389526 + Node: Pragma Convention_Identifier92362 + Ref: gnat_rm/implementation_defined_pragmas pragma-convention-identifier92513 + Ref: 4492513 + Node: Pragma CPP_Class93697 + Ref: gnat_rm/implementation_defined_pragmas pragma-cpp-class93849 + Ref: 4593849 + Node: Pragma CPP_Constructor94963 + Ref: gnat_rm/implementation_defined_pragmas pragma-cpp-constructor95105 + Ref: 4795105 + Node: Pragma CPP_Virtual97033 + Ref: gnat_rm/implementation_defined_pragmas pragma-cpp-virtual97176 + Ref: 4897176 + Node: Pragma CPP_Vtable97647 + Ref: gnat_rm/implementation_defined_pragmas pragma-cpp-vtable97778 + Ref: 4997778 + Node: Pragma CPU98202 + Ref: gnat_rm/implementation_defined_pragmas pragma-cpu98336 + Ref: 4a98336 + Node: Pragma Deadline_Floor98576 + Ref: gnat_rm/implementation_defined_pragmas pragma-deadline-floor98725 + Ref: 4b98725 + Node: Pragma Default_Initial_Condition99041 + Ref: gnat_rm/implementation_defined_pragmas id899192 + Ref: 4c99192 + Ref: gnat_rm/implementation_defined_pragmas pragma-default-initial-condition99192 + Ref: 4d99192 + Node: Pragma Debug99493 + Ref: gnat_rm/implementation_defined_pragmas pragma-debug99642 + Ref: 4e99642 + Node: Pragma Debug_Policy100594 + Ref: gnat_rm/implementation_defined_pragmas pragma-debug-policy100746 + Ref: 4f100746 + Node: Pragma Default_Scalar_Storage_Order101035 + Ref: gnat_rm/implementation_defined_pragmas pragma-default-scalar-storage-order101202 + Ref: 50101202 + Node: Pragma Default_Storage_Pool103494 + Ref: gnat_rm/implementation_defined_pragmas pragma-default-storage-pool103656 + Ref: 51103656 + Node: Pragma Depends103961 + Ref: gnat_rm/implementation_defined_pragmas id9104110 + Ref: 52104110 + Ref: gnat_rm/implementation_defined_pragmas pragma-depends104110 + Ref: 53104110 + Node: Pragma Detect_Blocking104810 + Ref: gnat_rm/implementation_defined_pragmas pragma-detect-blocking104969 + Ref: 54104969 + Node: Pragma Disable_Atomic_Synchronization105358 + Ref: gnat_rm/implementation_defined_pragmas pragma-disable-atomic-synchronization105528 + Ref: 55105528 + Node: Pragma Dispatching_Domain106345 + Ref: gnat_rm/implementation_defined_pragmas pragma-dispatching-domain106515 + Ref: 56106515 + Node: Pragma Effective_Reads106800 + Ref: gnat_rm/implementation_defined_pragmas id10106956 + Ref: 57106956 + Ref: gnat_rm/implementation_defined_pragmas pragma-effective-reads106956 + Ref: 58106956 + Node: Pragma Effective_Writes107210 + Ref: gnat_rm/implementation_defined_pragmas id11107366 + Ref: 59107366 + Ref: gnat_rm/implementation_defined_pragmas pragma-effective-writes107366 + Ref: 5a107366 + Node: Pragma Elaboration_Checks107624 + Ref: gnat_rm/implementation_defined_pragmas pragma-elaboration-checks107774 + Ref: 5b107774 + Node: Pragma Eliminate108602 + Ref: gnat_rm/implementation_defined_pragmas pragma-eliminate108765 + Ref: 5c108765 + Node: Pragma Enable_Atomic_Synchronization114487 + Ref: gnat_rm/implementation_defined_pragmas pragma-enable-atomic-synchronization114647 + Ref: 5d114647 + Node: Pragma Export_Function115563 + Ref: gnat_rm/implementation_defined_pragmas pragma-export-function115727 + Ref: 5e115727 + Node: Pragma Export_Object118183 + Ref: gnat_rm/implementation_defined_pragmas pragma-export-object118334 + Ref: 5f118334 + Node: Pragma Export_Procedure119001 + Ref: gnat_rm/implementation_defined_pragmas pragma-export-procedure119160 + Ref: 60119160 + Node: Pragma Export_Valued_Procedure120658 + Ref: gnat_rm/implementation_defined_pragmas pragma-export-valued-procedure120817 + Ref: 61120817 + Node: Pragma Extend_System122670 + Ref: gnat_rm/implementation_defined_pragmas pragma-extend-system122831 + Ref: 62122831 + Node: Pragma Extensions_Allowed124893 + Ref: gnat_rm/implementation_defined_pragmas pragma-extensions-allowed125049 + Ref: 63125049 + Node: Pragma Extensions_Visible135709 + Ref: gnat_rm/implementation_defined_pragmas id12135860 + Ref: 64135860 + Ref: gnat_rm/implementation_defined_pragmas pragma-extensions-visible135860 + Ref: 65135860 + Node: Pragma External136126 + Ref: gnat_rm/implementation_defined_pragmas pragma-external136279 + Ref: 66136279 + Node: Pragma External_Name_Casing136846 + Ref: gnat_rm/implementation_defined_pragmas pragma-external-name-casing136990 + Ref: 67136990 + Node: Pragma Fast_Math139998 + Ref: gnat_rm/implementation_defined_pragmas pragma-fast-math140149 + Ref: 68140149 + Node: Pragma Favor_Top_Level141018 + Ref: gnat_rm/implementation_defined_pragmas id13141170 + Ref: 69141170 + Ref: gnat_rm/implementation_defined_pragmas pragma-favor-top-level141170 + Ref: 6a141170 + Node: Pragma Finalize_Storage_Only141843 + Ref: gnat_rm/implementation_defined_pragmas pragma-finalize-storage-only142006 + Ref: 6b142006 + Node: Pragma Float_Representation142768 + Ref: gnat_rm/implementation_defined_pragmas pragma-float-representation142921 + Ref: 6c142921 + Node: Pragma Ghost143776 + Ref: gnat_rm/implementation_defined_pragmas id14143914 + Ref: 6d143914 + Ref: gnat_rm/implementation_defined_pragmas pragma-ghost143914 + Ref: 6e143914 + Node: Pragma Global144126 + Ref: gnat_rm/implementation_defined_pragmas id15144249 + Ref: 6f144249 + Ref: gnat_rm/implementation_defined_pragmas pragma-global144249 + Ref: 70144249 + Node: Pragma Ident144796 + Ref: gnat_rm/implementation_defined_pragmas pragma-ident144927 + Ref: 71144927 + Node: Pragma Ignore_Pragma145163 + Ref: gnat_rm/implementation_defined_pragmas pragma-ignore-pragma145310 + Ref: 72145310 + Node: Pragma Implementation_Defined145930 + Ref: gnat_rm/implementation_defined_pragmas pragma-implementation-defined146083 + Ref: 73146083 + Node: Pragma Implemented146795 + Ref: gnat_rm/implementation_defined_pragmas pragma-implemented146951 + Ref: 74146951 + Node: Pragma Implicit_Packing148570 + Ref: gnat_rm/implementation_defined_pragmas pragma-implicit-packing148719 + Ref: 75148719 + Node: Pragma Import_Function150542 + Ref: gnat_rm/implementation_defined_pragmas pragma-import-function150693 + Ref: 76150693 + Node: Pragma Import_Object152854 + Ref: gnat_rm/implementation_defined_pragmas pragma-import-object153005 + Ref: 77153005 + Node: Pragma Import_Procedure153707 + Ref: gnat_rm/implementation_defined_pragmas pragma-import-procedure153866 + Ref: 78153866 + Node: Pragma Import_Valued_Procedure154834 + Ref: gnat_rm/implementation_defined_pragmas pragma-import-valued-procedure154991 + Ref: 79154991 + Node: Pragma Independent156804 + Ref: gnat_rm/implementation_defined_pragmas pragma-independent156967 + Ref: 7a156967 + Node: Pragma Independent_Components157644 + Ref: gnat_rm/implementation_defined_pragmas pragma-independent-components157801 + Ref: 7b157801 + Node: Pragma Initial_Condition158463 + Ref: gnat_rm/implementation_defined_pragmas id16158627 + Ref: 7c158627 + Ref: gnat_rm/implementation_defined_pragmas pragma-initial-condition158627 + Ref: 7d158627 + Node: Pragma Initialize_Scalars158885 + Ref: gnat_rm/implementation_defined_pragmas pragma-initialize-scalars159038 + Ref: 7e159038 + Node: Pragma Initializes162718 + Ref: gnat_rm/implementation_defined_pragmas id17162867 + Ref: 7f162867 + Ref: gnat_rm/implementation_defined_pragmas pragma-initializes162867 + Ref: 80162867 + Node: Pragma Inline_Always163353 + Ref: gnat_rm/implementation_defined_pragmas id18163498 + Ref: 81163498 + Ref: gnat_rm/implementation_defined_pragmas pragma-inline-always163498 + Ref: 82163498 + Node: Pragma Inline_Generic164130 + Ref: gnat_rm/implementation_defined_pragmas pragma-inline-generic164273 + Ref: 83164273 + Node: Pragma Interface164655 + Ref: gnat_rm/implementation_defined_pragmas pragma-interface164799 + Ref: 84164799 + Node: Pragma Interface_Name165771 + Ref: gnat_rm/implementation_defined_pragmas pragma-interface-name165918 + Ref: 85165918 + Node: Pragma Interrupt_Handler166436 + Ref: gnat_rm/implementation_defined_pragmas pragma-interrupt-handler166589 + Ref: 86166589 + Node: Pragma Interrupt_State166845 + Ref: gnat_rm/implementation_defined_pragmas pragma-interrupt-state166993 + Ref: 87166993 + Node: Pragma Invariant170193 + Ref: gnat_rm/implementation_defined_pragmas id19170334 + Ref: 88170334 + Ref: gnat_rm/implementation_defined_pragmas pragma-invariant170334 + Ref: 89170334 + Node: Pragma Keep_Names171990 + Ref: gnat_rm/implementation_defined_pragmas pragma-keep-names172123 + Ref: 8a172123 + Node: Pragma License172739 + Ref: gnat_rm/implementation_defined_pragmas pragma-license172872 + Ref: 8b172872 + Node: Pragma Link_With175970 + Ref: gnat_rm/implementation_defined_pragmas pragma-link-with176105 + Ref: 8c176105 + Node: Pragma Linker_Alias176746 + Ref: gnat_rm/implementation_defined_pragmas pragma-linker-alias176892 + Ref: 8d176892 + Node: Pragma Linker_Constructor178171 + Ref: gnat_rm/implementation_defined_pragmas pragma-linker-constructor178325 + Ref: 8e178325 + Node: Pragma Linker_Destructor179554 + Ref: gnat_rm/implementation_defined_pragmas pragma-linker-destructor179710 + Ref: 8f179710 + Node: Pragma Linker_Section180489 + Ref: gnat_rm/implementation_defined_pragmas id20180636 + Ref: 90180636 + Ref: gnat_rm/implementation_defined_pragmas pragma-linker-section180636 + Ref: 91180636 + Node: Pragma Lock_Free183685 + Ref: gnat_rm/implementation_defined_pragmas id21183829 + Ref: 92183829 + Ref: gnat_rm/implementation_defined_pragmas pragma-lock-free183829 + Ref: 93183829 + Node: Pragma Loop_Invariant184849 + Ref: gnat_rm/implementation_defined_pragmas pragma-loop-invariant184992 + Ref: 94184992 + Node: Pragma Loop_Optimize186182 + Ref: gnat_rm/implementation_defined_pragmas pragma-loop-optimize186328 + Ref: 95186328 + Node: Pragma Loop_Variant188062 + Ref: gnat_rm/implementation_defined_pragmas pragma-loop-variant188211 + Ref: 96188211 + Node: Pragma Machine_Attribute190019 + Ref: gnat_rm/implementation_defined_pragmas pragma-machine-attribute190159 + Ref: 97190159 + Node: Pragma Main191132 + Ref: gnat_rm/implementation_defined_pragmas pragma-main191272 + Ref: 98191272 + Node: Pragma Main_Storage191710 + Ref: gnat_rm/implementation_defined_pragmas pragma-main-storage191849 + Ref: 99191849 + Node: Pragma Max_Queue_Length192256 + Ref: gnat_rm/implementation_defined_pragmas id22192398 + Ref: 9a192398 + Ref: gnat_rm/implementation_defined_pragmas pragma-max-queue-length192398 + Ref: 9b192398 + Node: Pragma No_Body192824 + Ref: gnat_rm/implementation_defined_pragmas pragma-no-body192964 + Ref: 9c192964 + Node: Pragma No_Caching193747 + Ref: gnat_rm/implementation_defined_pragmas id23193894 + Ref: 9d193894 + Ref: gnat_rm/implementation_defined_pragmas pragma-no-caching193894 + Ref: 9e193894 + Node: Pragma No_Component_Reordering194130 + Ref: gnat_rm/implementation_defined_pragmas pragma-no-component-reordering194293 + Ref: 9f194293 + Node: Pragma No_Elaboration_Code_All194953 + Ref: gnat_rm/implementation_defined_pragmas id24195126 + Ref: a0195126 + Ref: gnat_rm/implementation_defined_pragmas pragma-no-elaboration-code-all195126 + Ref: a1195126 + Node: Pragma No_Heap_Finalization195781 + Ref: gnat_rm/implementation_defined_pragmas pragma-no-heap-finalization195940 + Ref: a2195940 + Node: Pragma No_Inline197092 + Ref: gnat_rm/implementation_defined_pragmas id25197237 + Ref: a3197237 + Ref: gnat_rm/implementation_defined_pragmas pragma-no-inline197237 + Ref: a4197237 + Node: Pragma No_Return197743 + Ref: gnat_rm/implementation_defined_pragmas pragma-no-return197886 + Ref: a5197886 + Node: Pragma No_Strict_Aliasing198859 + Ref: gnat_rm/implementation_defined_pragmas pragma-no-strict-aliasing199010 + Ref: a6199010 + Node: Pragma No_Tagged_Streams199736 + Ref: gnat_rm/implementation_defined_pragmas id26199895 + Ref: a7199895 + Ref: gnat_rm/implementation_defined_pragmas pragma-no-tagged-streams199895 + Ref: a8199895 + Node: Pragma Normalize_Scalars201670 + Ref: gnat_rm/implementation_defined_pragmas pragma-normalize-scalars201822 + Ref: a9201822 + Node: Pragma Obsolescent204760 + Ref: gnat_rm/implementation_defined_pragmas id27204913 + Ref: aa204913 + Ref: gnat_rm/implementation_defined_pragmas pragma-obsolescent204913 + Ref: ab204913 + Node: Pragma Optimize_Alignment208370 + Ref: gnat_rm/implementation_defined_pragmas pragma-optimize-alignment208513 + Ref: ac208513 + Node: Pragma Ordered212024 + Ref: gnat_rm/implementation_defined_pragmas pragma-ordered212169 + Ref: ad212169 + Node: Pragma Overflow_Mode215273 + Ref: gnat_rm/implementation_defined_pragmas pragma-overflow-mode215420 + Ref: ae215420 + Node: Pragma Overriding_Renamings216758 + Ref: gnat_rm/implementation_defined_pragmas pragma-overriding-renamings216926 + Ref: af216926 + Node: Pragma Partition_Elaboration_Policy217588 + Ref: gnat_rm/implementation_defined_pragmas pragma-partition-elaboration-policy217750 + Ref: b0217750 + Node: Pragma Part_Of218126 + Ref: gnat_rm/implementation_defined_pragmas id28218275 + Ref: b1218275 + Ref: gnat_rm/implementation_defined_pragmas pragma-part-of218275 + Ref: b2218275 + Node: Pragma Passive218521 + Ref: gnat_rm/implementation_defined_pragmas pragma-passive218656 + Ref: b3218656 + Node: Pragma Persistent_BSS219514 + Ref: gnat_rm/implementation_defined_pragmas id29219646 + Ref: b4219646 + Ref: gnat_rm/implementation_defined_pragmas pragma-persistent-bss219646 + Ref: b5219646 + Node: Pragma Post220842 + Ref: gnat_rm/implementation_defined_pragmas pragma-post220980 + Ref: b6220980 + Node: Pragma Postcondition221495 + Ref: gnat_rm/implementation_defined_pragmas pragma-postcondition221629 + Ref: b7221629 + Node: Pragma Post_Class227373 + Ref: gnat_rm/implementation_defined_pragmas pragma-post-class227506 + Ref: b8227506 + Node: Pragma Pre228564 + Ref: gnat_rm/implementation_defined_pragmas pragma-pre228696 + Ref: b9228696 + Node: Pragma Precondition229206 + Ref: gnat_rm/implementation_defined_pragmas pragma-precondition229337 + Ref: ba229337 + Node: Pragma Predicate231284 + Ref: gnat_rm/implementation_defined_pragmas id30231429 + Ref: bb231429 + Ref: gnat_rm/implementation_defined_pragmas pragma-predicate231429 + Ref: bc231429 + Node: Pragma Predicate_Failure233185 + Ref: gnat_rm/implementation_defined_pragmas pragma-predicate-failure233346 + Ref: bd233346 + Node: Pragma Preelaborable_Initialization233703 + Ref: gnat_rm/implementation_defined_pragmas pragma-preelaborable-initialization233880 + Ref: be233880 + Node: Pragma Prefix_Exception_Messages234198 + Ref: gnat_rm/implementation_defined_pragmas pragma-prefix-exception-messages234367 + Ref: bf234367 + Node: Pragma Pre_Class235288 + Ref: gnat_rm/implementation_defined_pragmas pragma-pre-class235458 + Ref: c0235458 + Node: Pragma Priority_Specific_Dispatching236506 + Ref: gnat_rm/implementation_defined_pragmas pragma-priority-specific-dispatching236658 + Ref: c1236658 + Node: Pragma Profile237257 + Ref: gnat_rm/implementation_defined_pragmas pragma-profile237416 + Ref: c2237416 + Node: Pragma Profile_Warnings244353 + Ref: gnat_rm/implementation_defined_pragmas pragma-profile-warnings244503 + Ref: c3244503 + Node: Pragma Propagate_Exceptions244942 + Ref: gnat_rm/implementation_defined_pragmas pragma-propagate-exceptions245108 + Ref: c4245108 + Node: Pragma Provide_Shift_Operators245506 + Ref: gnat_rm/implementation_defined_pragmas pragma-provide-shift-operators245668 + Ref: c5245668 + Node: Pragma Psect_Object246231 + Ref: gnat_rm/implementation_defined_pragmas pragma-psect-object246386 + Ref: c6246386 + Node: Pragma Pure_Function246739 + Ref: gnat_rm/implementation_defined_pragmas id31246879 + Ref: c7246879 + Ref: gnat_rm/implementation_defined_pragmas pragma-pure-function246879 + Ref: c8246879 + Node: Pragma Rational249920 + Ref: gnat_rm/implementation_defined_pragmas pragma-rational250057 + Ref: c9250057 + Node: Pragma Ravenscar250273 + Ref: gnat_rm/implementation_defined_pragmas pragma-ravenscar250412 + Ref: ca250412 + Node: Pragma Refined_Depends250703 + Ref: gnat_rm/implementation_defined_pragmas id32250848 + Ref: cb250848 + Ref: gnat_rm/implementation_defined_pragmas pragma-refined-depends250848 + Ref: cc250848 + Node: Pragma Refined_Global251582 + Ref: gnat_rm/implementation_defined_pragmas id33251730 + Ref: cd251730 + Ref: gnat_rm/implementation_defined_pragmas pragma-refined-global251730 + Ref: ce251730 + Node: Pragma Refined_Post252311 + Ref: gnat_rm/implementation_defined_pragmas id34252457 + Ref: cf252457 + Ref: gnat_rm/implementation_defined_pragmas pragma-refined-post252457 + Ref: d0252457 + Node: Pragma Refined_State252697 + Ref: gnat_rm/implementation_defined_pragmas id35252846 + Ref: d1252846 + Ref: gnat_rm/implementation_defined_pragmas pragma-refined-state252846 + Ref: d2252846 + Node: Pragma Relative_Deadline253371 + Ref: gnat_rm/implementation_defined_pragmas pragma-relative-deadline253526 + Ref: d3253526 + Node: Pragma Remote_Access_Type253820 + Ref: gnat_rm/implementation_defined_pragmas id36253975 + Ref: d4253975 + Ref: gnat_rm/implementation_defined_pragmas pragma-remote-access-type253975 + Ref: d5253975 + Node: Pragma Rename_Pragma254853 + Ref: gnat_rm/implementation_defined_pragmas pragma-rename-pragma255010 + Ref: d6255010 + Node: Pragma Restricted_Run_Time256173 + Ref: gnat_rm/implementation_defined_pragmas pragma-restricted-run-time256332 + Ref: d7256332 + Node: Pragma Restriction_Warnings256658 + Ref: gnat_rm/implementation_defined_pragmas pragma-restriction-warnings256814 + Ref: d8256814 + Node: Pragma Reviewable258102 + Ref: gnat_rm/implementation_defined_pragmas pragma-reviewable258259 + Ref: d9258259 + Node: Pragma Secondary_Stack_Size260783 + Ref: gnat_rm/implementation_defined_pragmas id37260933 + Ref: da260933 + Ref: gnat_rm/implementation_defined_pragmas pragma-secondary-stack-size260933 + Ref: db260933 + Node: Pragma Share_Generic262409 + Ref: gnat_rm/implementation_defined_pragmas pragma-share-generic262555 + Ref: dc262555 + Node: Pragma Shared262947 + Ref: gnat_rm/implementation_defined_pragmas id38263093 + Ref: dd263093 + Ref: gnat_rm/implementation_defined_pragmas pragma-shared263093 + Ref: de263093 + Node: Pragma Short_Circuit_And_Or263248 + Ref: gnat_rm/implementation_defined_pragmas pragma-short-circuit-and-or263398 + Ref: df263398 + Node: Pragma Short_Descriptors264052 + Ref: gnat_rm/implementation_defined_pragmas pragma-short-descriptors264220 + Ref: e0264220 + Node: Pragma Simple_Storage_Pool_Type264461 + Ref: gnat_rm/implementation_defined_pragmas id39264625 + Ref: e1264625 + Ref: gnat_rm/implementation_defined_pragmas pragma-simple-storage-pool-type264625 + Ref: e2264625 + Node: Pragma Source_File_Name266915 + Ref: gnat_rm/implementation_defined_pragmas id40267086 + Ref: e4267086 + Ref: gnat_rm/implementation_defined_pragmas pragma-source-file-name267086 + Ref: e5267086 + Node: Pragma Source_File_Name_Project270555 + Ref: gnat_rm/implementation_defined_pragmas id41270718 + Ref: e7270718 + Ref: gnat_rm/implementation_defined_pragmas pragma-source-file-name-project270718 + Ref: e6270718 + Node: Pragma Source_Reference271493 + Ref: gnat_rm/implementation_defined_pragmas pragma-source-reference271650 + Ref: e8271650 + Node: Pragma SPARK_Mode272491 + Ref: gnat_rm/implementation_defined_pragmas id42272650 + Ref: e9272650 + Ref: gnat_rm/implementation_defined_pragmas pragma-spark-mode272650 + Ref: ea272650 + Node: Pragma Static_Elaboration_Desired274667 + Ref: gnat_rm/implementation_defined_pragmas pragma-static-elaboration-desired274824 + Ref: eb274824 + Node: Pragma Stream_Convert275834 + Ref: gnat_rm/implementation_defined_pragmas pragma-stream-convert275993 + Ref: ec275993 + Node: Pragma Style_Checks279162 + Ref: gnat_rm/implementation_defined_pragmas pragma-style-checks279303 + Ref: ed279303 + Node: Pragma Subtitle281631 + Ref: gnat_rm/implementation_defined_pragmas pragma-subtitle281766 + Ref: ee281766 + Node: Pragma Suppress281968 + Ref: gnat_rm/implementation_defined_pragmas pragma-suppress282103 + Ref: ef282103 + Node: Pragma Suppress_All284974 + Ref: gnat_rm/implementation_defined_pragmas pragma-suppress-all285120 + Ref: f0285120 + Node: Pragma Suppress_Debug_Info285662 + Ref: gnat_rm/implementation_defined_pragmas id43285828 + Ref: f1285828 + Ref: gnat_rm/implementation_defined_pragmas pragma-suppress-debug-info285828 + Ref: f2285828 + Node: Pragma Suppress_Exception_Locations286160 + Ref: gnat_rm/implementation_defined_pragmas pragma-suppress-exception-locations286337 + Ref: f3286337 + Node: Pragma Suppress_Initialization287268 + Ref: gnat_rm/implementation_defined_pragmas id44287435 + Ref: f4287435 + Ref: gnat_rm/implementation_defined_pragmas pragma-suppress-initialization287435 + Ref: f5287435 + Node: Pragma Task_Name288999 + Ref: gnat_rm/implementation_defined_pragmas pragma-task-name289150 + Ref: f6289150 + Node: Pragma Task_Storage290729 + Ref: gnat_rm/implementation_defined_pragmas pragma-task-storage290866 + Ref: f7290866 + Node: Pragma Test_Case291401 + Ref: gnat_rm/implementation_defined_pragmas id45291549 + Ref: f8291549 + Ref: gnat_rm/implementation_defined_pragmas pragma-test-case291549 + Ref: f9291549 + Node: Pragma Thread_Local_Storage293643 + Ref: gnat_rm/implementation_defined_pragmas id46293789 + Ref: fa293789 + Ref: gnat_rm/implementation_defined_pragmas pragma-thread-local-storage293789 + Ref: fb293789 + Node: Pragma Time_Slice295004 + Ref: gnat_rm/implementation_defined_pragmas pragma-time-slice295146 + Ref: fc295146 + Node: Pragma Title295530 + Ref: gnat_rm/implementation_defined_pragmas pragma-title295666 + Ref: fd295666 + Node: Pragma Type_Invariant296383 + Ref: gnat_rm/implementation_defined_pragmas pragma-type-invariant296529 + Ref: fe296529 + Node: Pragma Type_Invariant_Class297069 + Ref: gnat_rm/implementation_defined_pragmas id47297225 + Ref: ff297225 + Ref: gnat_rm/implementation_defined_pragmas pragma-type-invariant-class297225 + Ref: 100297225 + Node: Pragma Unchecked_Union298140 + Ref: gnat_rm/implementation_defined_pragmas pragma-unchecked-union298304 + Ref: 101298304 + Node: Pragma Unevaluated_Use_Of_Old298870 + Ref: gnat_rm/implementation_defined_pragmas pragma-unevaluated-use-of-old299032 + Ref: 102299032 + Node: Pragma Unimplemented_Unit300959 + Ref: gnat_rm/implementation_defined_pragmas pragma-unimplemented-unit301124 + Ref: 103301124 + Node: Pragma Universal_Aliasing301659 + Ref: gnat_rm/implementation_defined_pragmas id48301812 + Ref: 104301812 + Ref: gnat_rm/implementation_defined_pragmas pragma-universal-aliasing301812 + Ref: 105301812 + Node: Pragma Unmodified302453 + Ref: gnat_rm/implementation_defined_pragmas id49302600 + Ref: 106302600 + Ref: gnat_rm/implementation_defined_pragmas pragma-unmodified302600 + Ref: 107302600 + Node: Pragma Unreferenced303668 + Ref: gnat_rm/implementation_defined_pragmas id50303817 + Ref: 108303817 + Ref: gnat_rm/implementation_defined_pragmas pragma-unreferenced303817 + Ref: 109303817 + Node: Pragma Unreferenced_Objects306494 + Ref: gnat_rm/implementation_defined_pragmas id51306657 + Ref: 10a306657 + Ref: gnat_rm/implementation_defined_pragmas pragma-unreferenced-objects306657 + Ref: 10b306657 + Node: Pragma Unreserve_All_Interrupts307434 + Ref: gnat_rm/implementation_defined_pragmas pragma-unreserve-all-interrupts307595 + Ref: 10c307595 + Node: Pragma Unsuppress309100 + Ref: gnat_rm/implementation_defined_pragmas pragma-unsuppress309254 + Ref: 10d309254 + Node: Pragma Use_VADS_Size310523 + Ref: gnat_rm/implementation_defined_pragmas pragma-use-vads-size310659 + Ref: 10e310659 + Node: Pragma Unused311220 + Ref: gnat_rm/implementation_defined_pragmas id52311361 + Ref: 10f311361 + Ref: gnat_rm/implementation_defined_pragmas pragma-unused311361 + Ref: 110311361 + Node: Pragma Validity_Checks312541 + Ref: gnat_rm/implementation_defined_pragmas pragma-validity-checks312677 + Ref: 111312677 + Node: Pragma Volatile314444 + Ref: gnat_rm/implementation_defined_pragmas id53314594 + Ref: 112314594 + Ref: gnat_rm/implementation_defined_pragmas pragma-volatile314594 + Ref: 113314594 + Node: Pragma Volatile_Full_Access315064 + Ref: gnat_rm/implementation_defined_pragmas id54315216 + Ref: 114315216 + Ref: gnat_rm/implementation_defined_pragmas pragma-volatile-full-access315216 + Ref: 115315216 + Node: Pragma Volatile_Function316284 + Ref: gnat_rm/implementation_defined_pragmas id55316444 + Ref: 116316444 + Ref: gnat_rm/implementation_defined_pragmas pragma-volatile-function316444 + Ref: 117316444 + Node: Pragma Warning_As_Error316708 + Ref: gnat_rm/implementation_defined_pragmas pragma-warning-as-error316856 + Ref: 118316856 + Node: Pragma Warnings320212 + Ref: gnat_rm/implementation_defined_pragmas id56320356 + Ref: 11a320356 + Ref: gnat_rm/implementation_defined_pragmas pragma-warnings320356 + Ref: 119320356 + Node: Pragma Weak_External327810 + Ref: gnat_rm/implementation_defined_pragmas pragma-weak-external327961 + Ref: 11b327961 + Node: Pragma Wide_Character_Encoding329642 + Ref: gnat_rm/implementation_defined_pragmas pragma-wide-character-encoding329769 + Ref: 11c329769 + Node: Implementation Defined Aspects330901 + Ref: gnat_rm/implementation_defined_aspects doc331053 + Ref: 11d331053 + Ref: gnat_rm/implementation_defined_aspects id1331053 + Ref: 11e331053 + Ref: gnat_rm/implementation_defined_aspects implementation-defined-aspects331053 + Ref: 11f331053 + Node: Aspect Abstract_State334269 + Ref: gnat_rm/implementation_defined_aspects aspect-abstract-state334382 + Ref: 120334382 + Node: Aspect Annotate334498 + Ref: gnat_rm/implementation_defined_aspects aspect-annotate334640 + Ref: 121334640 + Node: Aspect Async_Readers335099 + Ref: gnat_rm/implementation_defined_aspects aspect-async-readers335240 + Ref: 122335240 + Node: Aspect Async_Writers335361 + Ref: gnat_rm/implementation_defined_aspects aspect-async-writers335520 + Ref: 123335520 + Node: Aspect Constant_After_Elaboration335641 + Ref: gnat_rm/implementation_defined_aspects aspect-constant-after-elaboration335801 + Ref: 124335801 + Node: Aspect Contract_Cases335953 + Ref: gnat_rm/implementation_defined_aspects aspect-contract-cases336107 + Ref: 125336107 + Node: Aspect Depends336319 + Ref: gnat_rm/implementation_defined_aspects aspect-depends336472 + Ref: 126336472 + Node: Aspect Default_Initial_Condition336567 + Ref: gnat_rm/implementation_defined_aspects aspect-default-initial-condition336715 + Ref: 127336715 + Node: Aspect Dimension336864 + Ref: gnat_rm/implementation_defined_aspects aspect-dimension337021 + Ref: 128337021 + Node: Aspect Dimension_System338241 + Ref: gnat_rm/implementation_defined_aspects aspect-dimension-system338391 + Ref: 129338391 + Node: Aspect Disable_Controlled340941 + Ref: gnat_rm/implementation_defined_aspects aspect-disable-controlled341097 + Ref: 12a341097 + Node: Aspect Effective_Reads341538 + Ref: gnat_rm/implementation_defined_aspects aspect-effective-reads341694 + Ref: 12b341694 + Node: Aspect Effective_Writes341815 + Ref: gnat_rm/implementation_defined_aspects aspect-effective-writes341971 + Ref: 12c341971 + Node: Aspect Extensions_Visible342095 + Ref: gnat_rm/implementation_defined_aspects aspect-extensions-visible342251 + Ref: 12d342251 + Node: Aspect Favor_Top_Level342381 + Ref: gnat_rm/implementation_defined_aspects aspect-favor-top-level342526 + Ref: 12e342526 + Node: Aspect Ghost342655 + Ref: gnat_rm/implementation_defined_aspects aspect-ghost342788 + Ref: 12f342788 + Node: Aspect Global342879 + Ref: gnat_rm/implementation_defined_aspects aspect-global343014 + Ref: 130343014 + Node: Aspect Initial_Condition343108 + Ref: gnat_rm/implementation_defined_aspects aspect-initial-condition343249 + Ref: 131343249 + Node: Aspect Initializes343376 + Ref: gnat_rm/implementation_defined_aspects aspect-initializes343524 + Ref: 132343524 + Node: Aspect Inline_Always343633 + Ref: gnat_rm/implementation_defined_aspects aspect-inline-always343773 + Ref: 133343773 + Node: Aspect Invariant343896 + Ref: gnat_rm/implementation_defined_aspects aspect-invariant344042 + Ref: 134344042 + Node: Aspect Invariant’Class344294 + Ref: gnat_rm/implementation_defined_aspects aspect-invariant-class344435 + Ref: 135344435 + Node: Aspect Iterable344719 + Ref: gnat_rm/implementation_defined_aspects aspect-iterable344865 + Ref: 136344865 + Node: Aspect Linker_Section347231 + Ref: gnat_rm/implementation_defined_aspects aspect-linker-section347369 + Ref: 137347369 + Node: Aspect Lock_Free347487 + Ref: gnat_rm/implementation_defined_aspects aspect-lock-free347633 + Ref: 138347633 + Node: Aspect Max_Queue_Length347744 + Ref: gnat_rm/implementation_defined_aspects aspect-max-queue-length347886 + Ref: 139347886 + Node: Aspect No_Caching348010 + Ref: gnat_rm/implementation_defined_aspects aspect-no-caching348166 + Ref: 13a348166 + Node: Aspect No_Elaboration_Code_All348280 + Ref: gnat_rm/implementation_defined_aspects aspect-no-elaboration-code-all348429 + Ref: 13b348429 + Node: Aspect No_Inline348594 + Ref: gnat_rm/implementation_defined_aspects aspect-no-inline348750 + Ref: 13c348750 + Node: Aspect No_Tagged_Streams348861 + Ref: gnat_rm/implementation_defined_aspects aspect-no-tagged-streams349007 + Ref: 13d349007 + Node: Aspect No_Task_Parts349236 + Ref: gnat_rm/implementation_defined_aspects aspect-no-task-parts349384 + Ref: 13e349384 + Node: Aspect Object_Size349890 + Ref: gnat_rm/implementation_defined_aspects aspect-object-size350032 + Ref: 13f350032 + Node: Aspect Obsolescent350145 + Ref: gnat_rm/implementation_defined_aspects aspect-obsolescent350281 + Ref: 141350281 + Node: Aspect Part_Of350509 + Ref: gnat_rm/implementation_defined_aspects aspect-part-of350648 + Ref: 142350648 + Node: Aspect Persistent_BSS350745 + Ref: gnat_rm/implementation_defined_aspects aspect-persistent-bss350882 + Ref: 143350882 + Node: Aspect Predicate351008 + Ref: gnat_rm/implementation_defined_aspects aspect-predicate351151 + Ref: 144351151 + Node: Aspect Pure_Function351540 + Ref: gnat_rm/implementation_defined_aspects aspect-pure-function351684 + Ref: 145351684 + Node: Aspect Refined_Depends351807 + Ref: gnat_rm/implementation_defined_aspects aspect-refined-depends351956 + Ref: 146351956 + Node: Aspect Refined_Global352077 + Ref: gnat_rm/implementation_defined_aspects aspect-refined-global352225 + Ref: 147352225 + Node: Aspect Refined_Post352343 + Ref: gnat_rm/implementation_defined_aspects aspect-refined-post352489 + Ref: 148352489 + Node: Aspect Refined_State352601 + Ref: gnat_rm/implementation_defined_aspects aspect-refined-state352755 + Ref: 149352755 + Node: Aspect Relaxed_Initialization352870 + Ref: gnat_rm/implementation_defined_aspects aspect-relaxed-initialization353030 + Ref: 14a353030 + Node: Aspect Remote_Access_Type353198 + Ref: gnat_rm/implementation_defined_aspects aspect-remote-access-type353365 + Ref: 14b353365 + Node: Aspect Secondary_Stack_Size353495 + Ref: gnat_rm/implementation_defined_aspects aspect-secondary-stack-size353660 + Ref: 14c353660 + Node: Aspect Scalar_Storage_Order353796 + Ref: gnat_rm/implementation_defined_aspects aspect-scalar-storage-order353949 + Ref: 14d353949 + Node: Aspect Shared354091 + Ref: gnat_rm/implementation_defined_aspects aspect-shared354243 + Ref: 14f354243 + Node: Aspect Simple_Storage_Pool354392 + Ref: gnat_rm/implementation_defined_aspects aspect-simple-storage-pool354548 + Ref: 150354548 + Node: Aspect Simple_Storage_Pool_Type354684 + Ref: gnat_rm/implementation_defined_aspects aspect-simple-storage-pool-type354844 + Ref: 151354844 + Node: Aspect SPARK_Mode355000 + Ref: gnat_rm/implementation_defined_aspects aspect-spark-mode355160 + Ref: 152355160 + Node: Aspect Suppress_Debug_Info355364 + Ref: gnat_rm/implementation_defined_aspects aspect-suppress-debug-info355523 + Ref: 153355523 + Node: Aspect Suppress_Initialization355664 + Ref: gnat_rm/implementation_defined_aspects aspect-suppress-initialization355822 + Ref: 154355822 + Node: Aspect Test_Case355975 + Ref: gnat_rm/implementation_defined_aspects aspect-test-case356134 + Ref: 155356134 + Node: Aspect Thread_Local_Storage356237 + Ref: gnat_rm/implementation_defined_aspects aspect-thread-local-storage356391 + Ref: 156356391 + Node: Aspect Universal_Aliasing356535 + Ref: gnat_rm/implementation_defined_aspects aspect-universal-aliasing356690 + Ref: 157356690 + Node: Aspect Unmodified356829 + Ref: gnat_rm/implementation_defined_aspects aspect-unmodified356976 + Ref: 158356976 + Node: Aspect Unreferenced357091 + Ref: gnat_rm/implementation_defined_aspects aspect-unreferenced357240 + Ref: 159357240 + Node: Aspect Unreferenced_Objects357525 + Ref: gnat_rm/implementation_defined_aspects aspect-unreferenced-objects357674 + Ref: 15a357674 + Node: Aspect Value_Size357819 + Ref: gnat_rm/implementation_defined_aspects aspect-value-size357976 + Ref: 15b357976 + Node: Aspect Volatile_Full_Access358086 + Ref: gnat_rm/implementation_defined_aspects aspect-volatile-full-access358240 + Ref: 15d358240 + Node: Aspect Volatile_Function358385 + Ref: gnat_rm/implementation_defined_aspects aspect-volatile-function358537 + Ref: 15e358537 + Node: Aspect Warnings358673 + Ref: gnat_rm/implementation_defined_aspects aspect-warnings358789 + Ref: 15f358789 + Node: Implementation Defined Attributes359004 + Ref: gnat_rm/implementation_defined_attributes doc359174 + Ref: 160359174 + Ref: gnat_rm/implementation_defined_attributes id1359174 + Ref: 161359174 + Ref: gnat_rm/implementation_defined_attributes implementation-defined-attributes359174 + Ref: 8359174 + Node: Attribute Abort_Signal362390 + Ref: gnat_rm/implementation_defined_attributes attribute-abort-signal362514 + Ref: 162362514 + Node: Attribute Address_Size362949 + Ref: gnat_rm/implementation_defined_attributes attribute-address-size363101 + Ref: 163363101 + Node: Attribute Asm_Input363482 + Ref: gnat_rm/implementation_defined_attributes attribute-asm-input363632 + Ref: 164363632 + Node: Attribute Asm_Output364257 + Ref: gnat_rm/implementation_defined_attributes attribute-asm-output364418 + Ref: 166364418 + Node: Attribute Atomic_Always_Lock_Free365194 + Ref: gnat_rm/implementation_defined_attributes attribute-atomic-always-lock-free365349 + Ref: 167365349 + Node: Attribute Bit365688 + Ref: gnat_rm/implementation_defined_attributes attribute-bit365845 + Ref: 168365845 + Node: Attribute Bit_Position366926 + Ref: gnat_rm/implementation_defined_attributes attribute-bit-position367072 + Ref: 169367072 + Node: Attribute Code_Address367518 + Ref: gnat_rm/implementation_defined_attributes attribute-code-address367677 + Ref: 16a367677 + Node: Attribute Compiler_Version369011 + Ref: gnat_rm/implementation_defined_attributes attribute-compiler-version369169 + Ref: 16b369169 + Node: Attribute Constrained369439 + Ref: gnat_rm/implementation_defined_attributes attribute-constrained369602 + Ref: 16c369602 + Node: Attribute Default_Bit_Order370076 + Ref: gnat_rm/implementation_defined_attributes attribute-default-bit-order370251 + Ref: 16d370251 + Node: Attribute Default_Scalar_Storage_Order370623 + Ref: gnat_rm/implementation_defined_attributes attribute-default-scalar-storage-order370792 + Ref: 16e370792 + Node: Attribute Deref371213 + Ref: gnat_rm/implementation_defined_attributes attribute-deref371380 + Ref: 16f371380 + Node: Attribute Descriptor_Size371810 + Ref: gnat_rm/implementation_defined_attributes attribute-descriptor-size371959 + Ref: 170371959 + Node: Attribute Elaborated372961 + Ref: gnat_rm/implementation_defined_attributes attribute-elaborated373114 + Ref: 171373114 + Node: Attribute Elab_Body373656 + Ref: gnat_rm/implementation_defined_attributes attribute-elab-body373803 + Ref: 172373803 + Node: Attribute Elab_Spec374353 + Ref: gnat_rm/implementation_defined_attributes attribute-elab-spec374504 + Ref: 173374504 + Node: Attribute Elab_Subp_Body375054 + Ref: gnat_rm/implementation_defined_attributes attribute-elab-subp-body375200 + Ref: 174375200 + Node: Attribute Emax375622 + Ref: gnat_rm/implementation_defined_attributes attribute-emax375766 + Ref: 175375766 + Node: Attribute Enabled375970 + Ref: gnat_rm/implementation_defined_attributes attribute-enabled376108 + Ref: 176376108 + Node: Attribute Enum_Rep377230 + Ref: gnat_rm/implementation_defined_attributes attribute-enum-rep377372 + Ref: 177377372 + Node: Attribute Enum_Val378865 + Ref: gnat_rm/implementation_defined_attributes attribute-enum-val379007 + Ref: 178379007 + Node: Attribute Epsilon379733 + Ref: gnat_rm/implementation_defined_attributes attribute-epsilon379876 + Ref: 179379876 + Node: Attribute Fast_Math380089 + Ref: gnat_rm/implementation_defined_attributes attribute-fast-math380241 + Ref: 17a380241 + Node: Attribute Finalization_Size380463 + Ref: gnat_rm/implementation_defined_attributes attribute-finalization-size380619 + Ref: 17b380619 + Node: Attribute Fixed_Value381229 + Ref: gnat_rm/implementation_defined_attributes attribute-fixed-value381384 + Ref: 17c381384 + Node: Attribute From_Any382086 + Ref: gnat_rm/implementation_defined_attributes attribute-from-any382241 + Ref: 17d382241 + Node: Attribute Has_Access_Values382418 + Ref: gnat_rm/implementation_defined_attributes attribute-has-access-values382579 + Ref: 17e382579 + Node: Attribute Has_Discriminants383105 + Ref: gnat_rm/implementation_defined_attributes attribute-has-discriminants383275 + Ref: 17f383275 + Node: Attribute Has_Tagged_Values383716 + Ref: gnat_rm/implementation_defined_attributes attribute-has-tagged-values383872 + Ref: 180383872 + Node: Attribute Img384402 + Ref: gnat_rm/implementation_defined_attributes attribute-img384552 + Ref: 181384552 + Node: Attribute Initialized385219 + Ref: gnat_rm/implementation_defined_attributes attribute-initialized385365 + Ref: 182385365 + Node: Attribute Integer_Value385520 + Ref: gnat_rm/implementation_defined_attributes attribute-integer-value385676 + Ref: 183385676 + Node: Attribute Invalid_Value386440 + Ref: gnat_rm/implementation_defined_attributes attribute-invalid-value386593 + Ref: 184386593 + Node: Attribute Iterable387067 + Ref: gnat_rm/implementation_defined_attributes attribute-iterable387212 + Ref: 185387212 + Node: Attribute Large387293 + Ref: gnat_rm/implementation_defined_attributes attribute-large387438 + Ref: 186387438 + Node: Attribute Library_Level387645 + Ref: gnat_rm/implementation_defined_attributes attribute-library-level387791 + Ref: 187387791 + Node: Attribute Lock_Free388426 + Ref: gnat_rm/implementation_defined_attributes attribute-lock-free388577 + Ref: 188388577 + Node: Attribute Loop_Entry388734 + Ref: gnat_rm/implementation_defined_attributes attribute-loop-entry388884 + Ref: 189388884 + Node: Attribute Machine_Size389889 + Ref: gnat_rm/implementation_defined_attributes attribute-machine-size390038 + Ref: 18a390038 + Node: Attribute Mantissa390238 + Ref: gnat_rm/implementation_defined_attributes attribute-mantissa390394 + Ref: 18b390394 + Node: Attribute Maximum_Alignment390610 + Ref: gnat_rm/implementation_defined_attributes attribute-maximum-alignment390770 + Ref: 18c390770 + Ref: gnat_rm/implementation_defined_attributes id2390770 + Ref: 18d390770 + Node: Attribute Max_Integer_Size391111 + Ref: gnat_rm/implementation_defined_attributes attribute-max-integer-size391277 + Ref: 18e391277 + Node: Attribute Mechanism_Code391524 + Ref: gnat_rm/implementation_defined_attributes attribute-mechanism-code391687 + Ref: 18f391687 + Node: Attribute Null_Parameter392119 + Ref: gnat_rm/implementation_defined_attributes attribute-null-parameter392277 + Ref: 190392277 + Node: Attribute Object_Size393002 + Ref: gnat_rm/implementation_defined_attributes attribute-object-size393149 + Ref: 140393149 + Ref: gnat_rm/implementation_defined_attributes id3393149 + Ref: 191393149 + Node: Attribute Old395381 + Ref: gnat_rm/implementation_defined_attributes attribute-old395533 + Ref: 192395533 + Node: Attribute Passed_By_Reference395991 + Ref: gnat_rm/implementation_defined_attributes attribute-passed-by-reference396144 + Ref: 193396144 + Node: Attribute Pool_Address396558 + Ref: gnat_rm/implementation_defined_attributes attribute-pool-address396720 + Ref: 194396720 + Node: Attribute Range_Length397476 + Ref: gnat_rm/implementation_defined_attributes attribute-range-length397634 + Ref: 195397634 + Node: Attribute Restriction_Set398020 + Ref: gnat_rm/implementation_defined_attributes attribute-restriction-set398172 + Ref: 196398172 + Node: Attribute Result400646 + Ref: gnat_rm/implementation_defined_attributes attribute-result400795 + Ref: 197400795 + Node: Attribute Safe_Emax401197 + Ref: gnat_rm/implementation_defined_attributes attribute-safe-emax401341 + Ref: 198401341 + Node: Attribute Safe_Large401559 + Ref: gnat_rm/implementation_defined_attributes attribute-safe-large401707 + Ref: 199401707 + Node: Attribute Safe_Small401928 + Ref: gnat_rm/implementation_defined_attributes attribute-safe-small402087 + Ref: 19a402087 + Node: Attribute Scalar_Storage_Order402308 + Ref: gnat_rm/implementation_defined_attributes attribute-scalar-storage-order402476 + Ref: 14e402476 + Ref: gnat_rm/implementation_defined_attributes id4402476 + Ref: 19b402476 + Node: Attribute Simple_Storage_Pool408297 + Ref: gnat_rm/implementation_defined_attributes attribute-simple-storage-pool408460 + Ref: e3408460 + Ref: gnat_rm/implementation_defined_attributes id5408460 + Ref: 19c408460 + Node: Attribute Small411077 + Ref: gnat_rm/implementation_defined_attributes attribute-small411237 + Ref: 19d411237 + Node: Attribute Small_Denominator411604 + Ref: gnat_rm/implementation_defined_attributes attribute-small-denominator411760 + Ref: 19e411760 + Node: Attribute Small_Numerator412036 + Ref: gnat_rm/implementation_defined_attributes attribute-small-numerator412199 + Ref: 19f412199 + Node: Attribute Storage_Unit412467 + Ref: gnat_rm/implementation_defined_attributes attribute-storage-unit412622 + Ref: 1a0412622 + Node: Attribute Stub_Type412806 + Ref: gnat_rm/implementation_defined_attributes attribute-stub-type412972 + Ref: 1a1412972 + Node: Attribute System_Allocator_Alignment413927 + Ref: gnat_rm/implementation_defined_attributes attribute-system-allocator-alignment414092 + Ref: 1a2414092 + Node: Attribute Target_Name414567 + Ref: gnat_rm/implementation_defined_attributes attribute-target-name414733 + Ref: 1a3414733 + Node: Attribute To_Address415108 + Ref: gnat_rm/implementation_defined_attributes attribute-to-address415254 + Ref: 1a4415254 + Node: Attribute To_Any416077 + Ref: gnat_rm/implementation_defined_attributes attribute-to-any416222 + Ref: 1a5416222 + Node: Attribute Type_Class416395 + Ref: gnat_rm/implementation_defined_attributes attribute-type-class416538 + Ref: 1a6416538 + Node: Attribute Type_Key417403 + Ref: gnat_rm/implementation_defined_attributes attribute-type-key417548 + Ref: 1a7417548 + Node: Attribute TypeCode417857 + Ref: gnat_rm/implementation_defined_attributes attribute-typecode418011 + Ref: 1a8418011 + Node: Attribute Unconstrained_Array418188 + Ref: gnat_rm/implementation_defined_attributes attribute-unconstrained-array418358 + Ref: 1a9418358 + Node: Attribute Universal_Literal_String418774 + Ref: gnat_rm/implementation_defined_attributes attribute-universal-literal-string418955 + Ref: 1aa418955 + Node: Attribute Unrestricted_Access419647 + Ref: gnat_rm/implementation_defined_attributes attribute-unrestricted-access419815 + Ref: 1ab419815 + Node: Attribute Update426135 + Ref: gnat_rm/implementation_defined_attributes attribute-update426290 + Ref: 1ac426290 + Node: Attribute Valid_Image429121 + Ref: gnat_rm/implementation_defined_attributes attribute-valid-image429270 + Ref: 1ad429270 + Node: Attribute Valid_Scalars429607 + Ref: gnat_rm/implementation_defined_attributes attribute-valid-scalars429759 + Ref: 1ae429759 + Node: Attribute VADS_Size431417 + Ref: gnat_rm/implementation_defined_attributes attribute-vads-size431568 + Ref: 1af431568 + Node: Attribute Value_Size432209 + Ref: gnat_rm/implementation_defined_attributes attribute-value-size432359 + Ref: 15c432359 + Ref: gnat_rm/implementation_defined_attributes id6432359 + Ref: 1b0432359 + Node: Attribute Wchar_T_Size432604 + Ref: gnat_rm/implementation_defined_attributes attribute-wchar-t-size432754 + Ref: 1b1432754 + Node: Attribute Word_Size433058 + Ref: gnat_rm/implementation_defined_attributes attribute-word-size433179 + Ref: 1b2433179 + Node: Standard and Implementation Defined Restrictions433377 + Ref: gnat_rm/standard_and_implementation_defined_restrictions doc433538 + Ref: 1b3433538 + Ref: gnat_rm/standard_and_implementation_defined_restrictions id1433538 + Ref: 1b4433538 + Ref: gnat_rm/standard_and_implementation_defined_restrictions standard-and-implementation-defined-restrictions433538 + Ref: 9433538 + Node: Partition-Wide Restrictions434069 + Ref: gnat_rm/standard_and_implementation_defined_restrictions id2434222 + Ref: 1b5434222 + Ref: gnat_rm/standard_and_implementation_defined_restrictions partition-wide-restrictions434222 + Ref: 1b6434222 + Node: Immediate_Reclamation436537 + Ref: gnat_rm/standard_and_implementation_defined_restrictions immediate-reclamation436663 + Ref: 1b7436663 + Node: Max_Asynchronous_Select_Nesting436976 + Ref: gnat_rm/standard_and_implementation_defined_restrictions max-asynchronous-select-nesting437133 + Ref: 1b8437133 + Node: Max_Entry_Queue_Length437466 + Ref: gnat_rm/standard_and_implementation_defined_restrictions max-entry-queue-length437623 + Ref: 1b9437623 + Node: Max_Protected_Entries438319 + Ref: gnat_rm/standard_and_implementation_defined_restrictions max-protected-entries438468 + Ref: 1ba438468 + Node: Max_Select_Alternatives438753 + Ref: gnat_rm/standard_and_implementation_defined_restrictions max-select-alternatives438903 + Ref: 1bb438903 + Node: Max_Storage_At_Blocking439042 + Ref: gnat_rm/standard_and_implementation_defined_restrictions max-storage-at-blocking439187 + Ref: 1bc439187 + Node: Max_Task_Entries439445 + Ref: gnat_rm/standard_and_implementation_defined_restrictions max-task-entries439576 + Ref: 1bd439576 + Node: Max_Tasks439837 + Ref: gnat_rm/standard_and_implementation_defined_restrictions max-tasks439964 + Ref: 1be439964 + Node: No_Abort_Statements440292 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-abort-statements440433 + Ref: 1bf440433 + Node: No_Access_Parameter_Allocators440585 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-access-parameter-allocators440738 + Ref: 1c0440738 + Node: No_Access_Subprograms440960 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-access-subprograms441107 + Ref: 1c1441107 + Node: No_Allocators441279 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-allocators441419 + Ref: 1c2441419 + Node: No_Anonymous_Allocators441560 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-anonymous-allocators441702 + Ref: 1c3441702 + Node: No_Asynchronous_Control441888 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-asynchronous-control442028 + Ref: 1c4442028 + Node: No_Calendar442235 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-calendar442367 + Ref: 1c5442367 + Node: No_Coextensions442515 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-coextensions442649 + Ref: 1c6442649 + Node: No_Default_Initialization442792 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-default-initialization442923 + Ref: 1c7442923 + Node: No_Delay443623 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-delay443752 + Ref: 1c8443752 + Node: No_Dependence443920 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-dependence444051 + Ref: 1c9444051 + Node: No_Direct_Boolean_Operators444198 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-direct-boolean-operators444332 + Ref: 1ca444332 + Node: No_Dispatch444732 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-dispatch444873 + Ref: 1cb444873 + Node: No_Dispatching_Calls445045 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-dispatching-calls445180 + Ref: 1cc445180 + Node: No_Dynamic_Attachment447276 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-attachment447421 + Ref: 1cd447421 + Node: No_Dynamic_Priorities447964 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-priorities448123 + Ref: 1ce448123 + Node: No_Entry_Calls_In_Elaboration_Code448262 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-entry-calls-in-elaboration-code448419 + Ref: 1cf448419 + Node: No_Enumeration_Maps448779 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-enumeration-maps448936 + Ref: 1d0448936 + Node: No_Exception_Handlers449162 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-exception-handlers449309 + Ref: 1d1449309 + Node: No_Exception_Propagation450182 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-exception-propagation450335 + Ref: 1d2450335 + Node: No_Exception_Registration451008 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-exception-registration451153 + Ref: 1d3451153 + Node: No_Exceptions451634 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-exceptions451770 + Ref: 1d4451770 + Node: No_Finalization451997 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-finalization452122 + Ref: 1d5452122 + Node: No_Fixed_Point452954 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-fixed-point453083 + Ref: 1d6453083 + Node: No_Floating_Point453246 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-floating-point453384 + Ref: 1d7453384 + Node: No_Implicit_Conditionals453556 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-implicit-conditionals453704 + Ref: 1d8453704 + Node: No_Implicit_Dynamic_Code454339 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-implicit-dynamic-code454498 + Ref: 1d9454498 + Node: No_Implicit_Heap_Allocations455719 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-implicit-heap-allocations455894 + Ref: 1da455894 + Node: No_Implicit_Protected_Object_Allocations456038 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-implicit-protected-object-allocations456217 + Ref: 1db456217 + Node: No_Implicit_Task_Allocations456405 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-implicit-task-allocations456577 + Ref: 1dc456577 + Node: No_Initialize_Scalars456729 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-initialize-scalars456866 + Ref: 1dd456866 + Node: No_IO457210 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-io457338 + Ref: 1de457338 + Node: No_Local_Allocators457556 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-local-allocators457689 + Ref: 1df457689 + Node: No_Local_Protected_Objects457903 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-local-protected-objects458053 + Ref: 1e0458053 + Node: No_Local_Timing_Events458236 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-local-timing-events458388 + Ref: 1e1458388 + Node: No_Long_Long_Integers458555 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-long-long-integers458704 + Ref: 1e2458704 + Node: No_Multiple_Elaboration459014 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-multiple-elaboration459163 + Ref: 1e3459163 + Node: No_Nested_Finalization459806 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-nested-finalization459962 + Ref: 1e4459962 + Node: No_Protected_Type_Allocators460103 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-protected-type-allocators460254 + Ref: 1e5460254 + Node: No_Protected_Types460462 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-protected-types460603 + Ref: 1e6460603 + Node: No_Recursion460779 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-recursion460905 + Ref: 1e7460905 + Node: No_Reentrancy461042 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-reentrancy461167 + Ref: 1e8461167 + Node: No_Relative_Delay461312 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-relative-delay461446 + Ref: 1e9461446 + Node: No_Requeue_Statements461674 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-requeue-statements461813 + Ref: 1ea461813 + Node: No_Secondary_Stack462280 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-secondary-stack462422 + Ref: 1eb462422 + Node: No_Select_Statements462827 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-select-statements462980 + Ref: 1ec462980 + Node: No_Specific_Termination_Handlers463185 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-specific-termination-handlers463346 + Ref: 1ed463346 + Node: No_Specification_of_Aspect463546 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-specification-of-aspect463727 + Ref: 1ee463727 + Node: No_Standard_Allocators_After_Elaboration463948 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-standard-allocators-after-elaboration464122 + Ref: 1ef464122 + Node: No_Standard_Storage_Pools464437 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-standard-storage-pools464608 + Ref: 1f0464608 + Node: No_Stream_Optimizations464903 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-stream-optimizations465044 + Ref: 1f1465044 + Node: No_Streams465477 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-streams465620 + Ref: 1f2465620 + Node: No_Tagged_Type_Registration466341 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-tagged-type-registration466479 + Ref: 1f3466479 + Node: No_Task_Allocators466961 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-task-allocators467118 + Ref: 1f4467118 + Node: No_Task_At_Interrupt_Priority467260 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-task-at-interrupt-priority467416 + Ref: 1f5467416 + Node: No_Task_Attributes_Package467718 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-task-attributes-package467873 + Ref: 1f6467873 + Node: No_Task_Hierarchy468345 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-task-hierarchy468490 + Ref: 1f7468490 + Node: No_Task_Termination468637 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-task-termination468766 + Ref: 1f8468766 + Node: No_Tasking468867 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-tasking469004 + Ref: 1f9469004 + Node: No_Terminate_Alternatives469324 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-terminate-alternatives469461 + Ref: 1fa469461 + Node: No_Unchecked_Access469598 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-access469748 + Ref: 1fb469748 + Node: No_Unchecked_Conversion469919 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-conversion470069 + Ref: 1fc470069 + Node: No_Unchecked_Deallocation470280 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-unchecked-deallocation470427 + Ref: 1fd470427 + Node: No_Use_Of_Entity470645 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-use-of-entity470782 + Ref: 1fe470782 + Node: Pure_Barriers471080 + Ref: gnat_rm/standard_and_implementation_defined_restrictions pure-barriers471207 + Ref: 1ff471207 + Node: Simple_Barriers471912 + Ref: gnat_rm/standard_and_implementation_defined_restrictions simple-barriers472040 + Ref: 200472040 + Node: Static_Priorities472639 + Ref: gnat_rm/standard_and_implementation_defined_restrictions static-priorities472773 + Ref: 201472773 + Node: Static_Storage_Size472994 + Ref: gnat_rm/standard_and_implementation_defined_restrictions static-storage-size473104 + Ref: 202473104 + Node: Program Unit Level Restrictions473305 + Ref: gnat_rm/standard_and_implementation_defined_restrictions id3473458 + Ref: 203473458 + Ref: gnat_rm/standard_and_implementation_defined_restrictions program-unit-level-restrictions473458 + Ref: 204473458 + Node: No_Elaboration_Code474217 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-elaboration-code474345 + Ref: 205474345 + Node: No_Dynamic_Accessibility_Checks476944 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-accessibility-checks477105 + Ref: 206477105 + Node: No_Dynamic_Sized_Objects478915 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-dynamic-sized-objects479071 + Ref: 207479071 + Node: No_Entry_Queue479793 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-entry-queue479957 + Ref: 208479957 + Node: No_Implementation_Aspect_Specifications480343 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-implementation-aspect-specifications480511 + Ref: 209480511 + Node: No_Implementation_Attributes480805 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-implementation-attributes480988 + Ref: 20a480988 + Node: No_Implementation_Identifiers481266 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-implementation-identifiers481435 + Ref: 20b481435 + Node: No_Implementation_Pragmas481689 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-implementation-pragmas481860 + Ref: 20c481860 + Node: No_Implementation_Restrictions482126 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-implementation-restrictions482291 + Ref: 20d482291 + Node: No_Implementation_Units482656 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-implementation-units482816 + Ref: 20e482816 + Node: No_Implicit_Aliasing483062 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-implicit-aliasing483209 + Ref: 20f483209 + Node: No_Implicit_Loops483763 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-implicit-loops483910 + Ref: 210483910 + Node: No_Obsolescent_Features484646 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-obsolescent-features484791 + Ref: 211484791 + Node: No_Wide_Characters484998 + Ref: gnat_rm/standard_and_implementation_defined_restrictions no-wide-characters485148 + Ref: 212485148 + Node: Static_Dispatch_Tables485512 + Ref: gnat_rm/standard_and_implementation_defined_restrictions static-dispatch-tables485647 + Ref: 213485647 + Node: SPARK_05485846 + Ref: gnat_rm/standard_and_implementation_defined_restrictions spark-05485954 + Ref: 214485954 + Node: Implementation Advice486413 + Ref: gnat_rm/implementation_advice doc486579 + Ref: 215486579 + Ref: gnat_rm/implementation_advice id1486579 + Ref: 216486579 + Ref: gnat_rm/implementation_advice implementation-advice486579 + Ref: a486579 + Node: RM 1 1 3 20 Error Detection492484 + Ref: gnat_rm/implementation_advice rm-1-1-3-20-error-detection492602 + Ref: 217492602 + Node: RM 1 1 3 31 Child Units492947 + Ref: gnat_rm/implementation_advice rm-1-1-3-31-child-units493100 + Ref: 218493100 + Node: RM 1 1 5 12 Bounded Errors493389 + Ref: gnat_rm/implementation_advice rm-1-1-5-12-bounded-errors493532 + Ref: 219493532 + Node: RM 2 8 16 Pragmas493871 + Ref: gnat_rm/implementation_advice id2494011 + Ref: 21a494011 + Ref: gnat_rm/implementation_advice rm-2-8-16-pragmas494011 + Ref: 21b494011 + Node: RM 2 8 17-19 Pragmas495652 + Ref: gnat_rm/implementation_advice rm-2-8-17-19-pragmas495803 + Ref: 21c495803 + Node: RM 3 5 2 5 Alternative Character Sets496237 + Ref: gnat_rm/implementation_advice rm-3-5-2-5-alternative-character-sets496396 + Ref: 21d496396 + Node: RM 3 5 4 28 Integer Types497553 + Ref: gnat_rm/implementation_advice rm-3-5-4-28-integer-types497717 + Ref: 21e497717 + Node: RM 3 5 4 29 Integer Types498391 + Ref: gnat_rm/implementation_advice rm-3-5-4-29-integer-types498547 + Ref: 21f498547 + Node: RM 3 5 5 8 Enumeration Values498865 + Ref: gnat_rm/implementation_advice rm-3-5-5-8-enumeration-values499019 + Ref: 220499019 + Node: RM 3 5 7 17 Float Types499568 + Ref: gnat_rm/implementation_advice rm-3-5-7-17-float-types499732 + Ref: 221499732 + Node: RM 3 6 2 11 Multidimensional Arrays500841 + Ref: gnat_rm/implementation_advice rm-3-6-2-11-multidimensional-arrays501005 + Ref: 222501005 + Node: RM 9 6 30-31 Duration’Small501501 + Ref: gnat_rm/implementation_advice rm-9-6-30-31-duration-small501680 + Ref: 223501680 + Node: RM 10 2 1 12 Consistent Representation502102 + Ref: gnat_rm/implementation_advice rm-10-2-1-12-consistent-representation502280 + Ref: 224502280 + Node: RM 11 4 1 19 Exception Information503070 + Ref: gnat_rm/implementation_advice rm-11-4-1-19-exception-information503251 + Ref: 225503251 + Node: RM 11 5 28 Suppression of Checks504393 + Ref: gnat_rm/implementation_advice rm-11-5-28-suppression-of-checks504572 + Ref: 226504572 + Node: RM 13 1 21-24 Representation Clauses504772 + Ref: gnat_rm/implementation_advice rm-13-1-21-24-representation-clauses504941 + Ref: 227504941 + Node: RM 13 2 6-8 Packed Types506355 + Ref: gnat_rm/implementation_advice rm-13-2-6-8-packed-types506521 + Ref: 228506521 + Node: RM 13 3 14-19 Address Clauses507853 + Ref: gnat_rm/implementation_advice rm-13-3-14-19-address-clauses508014 + Ref: 229508014 + Node: RM 13 3 29-35 Alignment Clauses509149 + Ref: gnat_rm/implementation_advice rm-13-3-29-35-alignment-clauses509312 + Ref: 22a509312 + Node: RM 13 3 42-43 Size Clauses510513 + Ref: gnat_rm/implementation_advice rm-13-3-42-43-size-clauses510673 + Ref: 22b510673 + Node: RM 13 3 50-56 Size Clauses511138 + Ref: gnat_rm/implementation_advice rm-13-3-50-56-size-clauses511303 + Ref: 22c511303 + Node: RM 13 3 71-73 Component Size Clauses512677 + Ref: gnat_rm/implementation_advice rm-13-3-71-73-component-size-clauses512863 + Ref: 22d512863 + Node: RM 13 4 9-10 Enumeration Representation Clauses513671 + Ref: gnat_rm/implementation_advice rm-13-4-9-10-enumeration-representation-clauses513876 + Ref: 22e513876 + Node: RM 13 5 1 17-22 Record Representation Clauses514298 + Ref: gnat_rm/implementation_advice rm-13-5-1-17-22-record-representation-clauses514503 + Ref: 22f514503 + Node: RM 13 5 2 5 Storage Place Attributes516198 + Ref: gnat_rm/implementation_advice rm-13-5-2-5-storage-place-attributes516382 + Ref: 230516382 + Node: RM 13 5 3 7-8 Bit Ordering516994 + Ref: gnat_rm/implementation_advice rm-13-5-3-7-8-bit-ordering517162 + Ref: 231517162 + Node: RM 13 7 37 Address as Private517606 + Ref: gnat_rm/implementation_advice rm-13-7-37-address-as-private517769 + Ref: 232517769 + Node: RM 13 7 1 16 Address Operations517910 + Ref: gnat_rm/implementation_advice rm-13-7-1-16-address-operations518081 + Ref: 233518081 + Node: RM 13 9 14-17 Unchecked Conversion518620 + Ref: gnat_rm/implementation_advice rm-13-9-14-17-unchecked-conversion518796 + Ref: 234518796 + Node: RM 13 11 23-25 Implicit Heap Usage520188 + Ref: gnat_rm/implementation_advice rm-13-11-23-25-implicit-heap-usage520369 + Ref: 235520369 + Node: RM 13 11 2 17 Unchecked Deallocation521388 + Ref: gnat_rm/implementation_advice rm-13-11-2-17-unchecked-deallocation521576 + Ref: 236521576 + Node: RM 13 13 2 1 6 Stream Oriented Attributes521770 + Ref: gnat_rm/implementation_advice rm-13-13-2-1-6-stream-oriented-attributes521967 + Ref: 237521967 + Node: RM A 1 52 Names of Predefined Numeric Types522931 + Ref: gnat_rm/implementation_advice rm-a-1-52-names-of-predefined-numeric-types523127 + Ref: 238523127 + Node: RM A 3 2 49 Ada Characters Handling523565 + Ref: gnat_rm/implementation_advice rm-a-3-2-49-ada-characters-handling523763 + Ref: 239523763 + Node: RM A 4 4 106 Bounded-Length String Handling524155 + Ref: gnat_rm/implementation_advice rm-a-4-4-106-bounded-length-string-handling524349 + Ref: 23a524349 + Node: RM A 5 2 46-47 Random Number Generation524628 + Ref: gnat_rm/implementation_advice rm-a-5-2-46-47-random-number-generation524813 + Ref: 23b524813 + Node: RM A 10 7 23 Get_Immediate525645 + Ref: gnat_rm/implementation_advice rm-a-10-7-23-get-immediate525805 + Ref: 23c525805 + Node: RM A 18 Containers526657 + Ref: gnat_rm/implementation_advice rm-a-18-containers526804 + Ref: 23d526804 + Node: RM B 1 39-41 Pragma Export527435 + Ref: gnat_rm/implementation_advice rm-b-1-39-41-pragma-export527587 + Ref: 23e527587 + Node: RM B 2 12-13 Package Interfaces529115 + Ref: gnat_rm/implementation_advice rm-b-2-12-13-package-interfaces529280 + Ref: 23f529280 + Node: RM B 3 63-71 Interfacing with C530093 + Ref: gnat_rm/implementation_advice rm-b-3-63-71-interfacing-with-c530267 + Ref: 240530267 + Node: RM B 4 95-98 Interfacing with COBOL532202 + Ref: gnat_rm/implementation_advice rm-b-4-95-98-interfacing-with-cobol532382 + Ref: 241532382 + Node: RM B 5 22-26 Interfacing with Fortran533116 + Ref: gnat_rm/implementation_advice rm-b-5-22-26-interfacing-with-fortran533304 + Ref: 242533304 + Node: RM C 1 3-5 Access to Machine Operations534392 + Ref: gnat_rm/implementation_advice rm-c-1-3-5-access-to-machine-operations534586 + Ref: 243534586 + Node: RM C 1 10-16 Access to Machine Operations535562 + Ref: gnat_rm/implementation_advice rm-c-1-10-16-access-to-machine-operations535746 + Ref: 244535746 + Node: RM C 3 28 Interrupt Support537016 + Ref: gnat_rm/implementation_advice rm-c-3-28-interrupt-support537204 + Ref: 245537204 + Node: RM C 3 1 20-21 Protected Procedure Handlers537670 + Ref: gnat_rm/implementation_advice rm-c-3-1-20-21-protected-procedure-handlers537847 + Ref: 246537847 + Node: RM C 3 2 25 Package Interrupts538351 + Ref: gnat_rm/implementation_advice rm-c-3-2-25-package-interrupts538539 + Ref: 247538539 + Node: RM C 4 14 Pre-elaboration Requirements539009 + Ref: gnat_rm/implementation_advice rm-c-4-14-pre-elaboration-requirements539183 + Ref: 248539183 + Node: RM C 5 8 Pragma Discard_Names539623 + Ref: gnat_rm/implementation_advice rm-c-5-8-pragma-discard-names539806 + Ref: 249539806 + Node: RM C 7 2 30 The Package Task_Attributes540070 + Ref: gnat_rm/implementation_advice rm-c-7-2-30-the-package-task-attributes540241 + Ref: 24a540241 + Node: RM D 3 17 Locking Policies540977 + Ref: gnat_rm/implementation_advice rm-d-3-17-locking-policies541151 + Ref: 24b541151 + Node: RM D 4 16 Entry Queuing Policies541524 + Ref: gnat_rm/implementation_advice rm-d-4-16-entry-queuing-policies541687 + Ref: 24c541687 + Node: RM D 6 9-10 Preemptive Abort541951 + Ref: gnat_rm/implementation_advice rm-d-6-9-10-preemptive-abort542118 + Ref: 24d542118 + Node: RM D 7 21 Tasking Restrictions542684 + Ref: gnat_rm/implementation_advice rm-d-7-21-tasking-restrictions542846 + Ref: 24e542846 + Node: RM D 8 47-49 Monotonic Time543348 + Ref: gnat_rm/implementation_advice rm-d-8-47-49-monotonic-time543528 + Ref: 24f543528 + Node: RM E 5 28-29 Partition Communication Subsystem544203 + Ref: gnat_rm/implementation_advice rm-e-5-28-29-partition-communication-subsystem544373 + Ref: 250544373 + Node: RM F 7 COBOL Support545067 + Ref: gnat_rm/implementation_advice rm-f-7-cobol-support545240 + Ref: 251545240 + Node: RM F 1 2 Decimal Radix Support545791 + Ref: gnat_rm/implementation_advice rm-f-1-2-decimal-radix-support545931 + Ref: 252545931 + Node: RM G Numerics546245 + Ref: gnat_rm/implementation_advice rm-g-numerics546393 + Ref: 253546393 + Node: RM G 1 1 56-58 Complex Types546923 + Ref: gnat_rm/implementation_advice rm-g-1-1-56-58-complex-types547081 + Ref: 254547081 + Node: RM G 1 2 49 Complex Elementary Functions549910 + Ref: gnat_rm/implementation_advice rm-g-1-2-49-complex-elementary-functions550088 + Ref: 255550088 + Node: RM G 2 4 19 Accuracy Requirements550821 + Ref: gnat_rm/implementation_advice rm-g-2-4-19-accuracy-requirements551010 + Ref: 256551010 + Node: RM G 2 6 15 Complex Arithmetic Accuracy551625 + Ref: gnat_rm/implementation_advice rm-g-2-6-15-complex-arithmetic-accuracy551821 + Ref: 257551821 + Node: RM H 6 15/2 Pragma Partition_Elaboration_Policy552244 + Ref: gnat_rm/implementation_advice rm-h-6-15-2-pragma-partition-elaboration-policy552398 + Ref: 258552398 + Node: Implementation Defined Characteristics552780 + Ref: gnat_rm/implementation_defined_characteristics doc552919 + Ref: 259552919 + Ref: gnat_rm/implementation_defined_characteristics id1552919 + Ref: 25a552919 + Ref: gnat_rm/implementation_defined_characteristics implementation-defined-characteristics552919 + Ref: b552919 + Node: Intrinsic Subprograms604750 + Ref: gnat_rm/intrinsic_subprograms doc604902 + Ref: 25c604902 + Ref: gnat_rm/intrinsic_subprograms id1604902 + Ref: 25d604902 + Ref: gnat_rm/intrinsic_subprograms intrinsic-subprograms604902 + Ref: c604902 + Node: Intrinsic Operators605882 + Ref: gnat_rm/intrinsic_subprograms id2605989 + Ref: 25e605989 + Ref: gnat_rm/intrinsic_subprograms intrinsic-operators605989 + Ref: 25f605989 + Node: Compilation_ISO_Date606988 + Ref: gnat_rm/intrinsic_subprograms compilation-iso-date607120 + Ref: 260607120 + Ref: gnat_rm/intrinsic_subprograms id3607120 + Ref: 261607120 + Node: Compilation_Date607541 + Ref: gnat_rm/intrinsic_subprograms compilation-date607670 + Ref: 262607670 + Ref: gnat_rm/intrinsic_subprograms id4607670 + Ref: 263607670 + Node: Compilation_Time607790 + Ref: gnat_rm/intrinsic_subprograms compilation-time607915 + Ref: 264607915 + Ref: gnat_rm/intrinsic_subprograms id5607915 + Ref: 265607915 + Node: Enclosing_Entity608322 + Ref: gnat_rm/intrinsic_subprograms enclosing-entity608452 + Ref: 266608452 + Ref: gnat_rm/intrinsic_subprograms id6608452 + Ref: 267608452 + Node: Exception_Information608873 + Ref: gnat_rm/intrinsic_subprograms exception-information609004 + Ref: 268609004 + Ref: gnat_rm/intrinsic_subprograms id7609004 + Ref: 269609004 + Node: Exception_Message609434 + Ref: gnat_rm/intrinsic_subprograms exception-message609563 + Ref: 26a609563 + Ref: gnat_rm/intrinsic_subprograms id8609563 + Ref: 26b609563 + Node: Exception_Name609967 + Ref: gnat_rm/intrinsic_subprograms exception-name610079 + Ref: 26c610079 + Ref: gnat_rm/intrinsic_subprograms id9610079 + Ref: 26d610079 + Node: File610458 + Ref: gnat_rm/intrinsic_subprograms file610557 + Ref: 26e610557 + Ref: gnat_rm/intrinsic_subprograms id10610557 + Ref: 26f610557 + Node: Line610889 + Ref: gnat_rm/intrinsic_subprograms id11610992 + Ref: 270610992 + Ref: gnat_rm/intrinsic_subprograms line610992 + Ref: 271610992 + Node: Shifts and Rotates611335 + Ref: gnat_rm/intrinsic_subprograms id12611449 + Ref: 272611449 + Ref: gnat_rm/intrinsic_subprograms shifts-and-rotates611449 + Ref: 273611449 + Node: Source_Location612687 + Ref: gnat_rm/intrinsic_subprograms id13612788 + Ref: 274612788 + Ref: gnat_rm/intrinsic_subprograms source-location612788 + Ref: 275612788 + Node: Representation Clauses and Pragmas613159 + Ref: gnat_rm/representation_clauses_and_pragmas doc613298 + Ref: 276613298 + Ref: gnat_rm/representation_clauses_and_pragmas id1613298 + Ref: 277613298 + Ref: gnat_rm/representation_clauses_and_pragmas representation-clauses-and-pragmas613298 + Ref: d613298 + Node: Alignment Clauses614484 + Ref: gnat_rm/representation_clauses_and_pragmas alignment-clauses614594 + Ref: 278614594 + Ref: gnat_rm/representation_clauses_and_pragmas id2614594 + Ref: 279614594 + Node: Size Clauses619028 + Ref: gnat_rm/representation_clauses_and_pragmas id3619167 + Ref: 27a619167 + Ref: gnat_rm/representation_clauses_and_pragmas size-clauses619167 + Ref: 27b619167 + Node: Storage_Size Clauses621951 + Ref: gnat_rm/representation_clauses_and_pragmas id4622103 + Ref: 27c622103 + Ref: gnat_rm/representation_clauses_and_pragmas storage-size-clauses622103 + Ref: 27d622103 + Node: Size of Variant Record Objects624631 + Ref: gnat_rm/representation_clauses_and_pragmas id5624792 + Ref: 27e624792 + Ref: gnat_rm/representation_clauses_and_pragmas size-of-variant-record-objects624792 + Ref: 27f624792 + Node: Biased Representation627904 + Ref: gnat_rm/representation_clauses_and_pragmas biased-representation628079 + Ref: 280628079 + Ref: gnat_rm/representation_clauses_and_pragmas id6628079 + Ref: 281628079 + Node: Value_Size and Object_Size Clauses629123 + Ref: gnat_rm/representation_clauses_and_pragmas id7629290 + Ref: 282629290 + Ref: gnat_rm/representation_clauses_and_pragmas value-size-and-object-size-clauses629290 + Ref: 283629290 + Node: Component_Size Clauses638942 + Ref: gnat_rm/representation_clauses_and_pragmas component-size-clauses639105 + Ref: 284639105 + Ref: gnat_rm/representation_clauses_and_pragmas id8639105 + Ref: 285639105 + Node: Bit_Order Clauses640739 + Ref: gnat_rm/representation_clauses_and_pragmas bit-order-clauses640904 + Ref: 286640904 + Ref: gnat_rm/representation_clauses_and_pragmas id9640904 + Ref: 287640904 + Node: Effect of Bit_Order on Byte Ordering644349 + Ref: gnat_rm/representation_clauses_and_pragmas effect-of-bit-order-on-byte-ordering644514 + Ref: 288644514 + Ref: gnat_rm/representation_clauses_and_pragmas id10644514 + Ref: 289644514 + Node: Pragma Pack for Arrays653968 + Ref: gnat_rm/representation_clauses_and_pragmas id11654139 + Ref: 28a654139 + Ref: gnat_rm/representation_clauses_and_pragmas pragma-pack-for-arrays654139 + Ref: 28b654139 + Node: Pragma Pack for Records658636 + Ref: gnat_rm/representation_clauses_and_pragmas id12658800 + Ref: 28c658800 + Ref: gnat_rm/representation_clauses_and_pragmas pragma-pack-for-records658800 + Ref: 28d658800 + Node: Record Representation Clauses661352 + Ref: gnat_rm/representation_clauses_and_pragmas id13661524 + Ref: 28e661524 + Ref: gnat_rm/representation_clauses_and_pragmas record-representation-clauses661524 + Ref: 28f661524 + Node: Handling of Records with Holes664412 + Ref: gnat_rm/representation_clauses_and_pragmas handling-of-records-with-holes664580 + Ref: 290664580 + Ref: gnat_rm/representation_clauses_and_pragmas id14664580 + Ref: 291664580 + Node: Enumeration Clauses666842 + Ref: gnat_rm/representation_clauses_and_pragmas enumeration-clauses666996 + Ref: 292666996 + Ref: gnat_rm/representation_clauses_and_pragmas id15666996 + Ref: 293666996 + Node: Address Clauses668428 + Ref: gnat_rm/representation_clauses_and_pragmas address-clauses668596 + Ref: 294668596 + Ref: gnat_rm/representation_clauses_and_pragmas id16668596 + Ref: 295668596 + Node: Use of Address Clauses for Memory-Mapped I/O679623 + Ref: gnat_rm/representation_clauses_and_pragmas id17679810 + Ref: 296679810 + Ref: gnat_rm/representation_clauses_and_pragmas use-of-address-clauses-for-memory-mapped-i-o679810 + Ref: 297679810 + Node: Effect of Convention on Representation681678 + Ref: gnat_rm/representation_clauses_and_pragmas effect-of-convention-on-representation681888 + Ref: 298681888 + Ref: gnat_rm/representation_clauses_and_pragmas id18681888 + Ref: 299681888 + Node: Conventions and Anonymous Access Types685001 + Ref: gnat_rm/representation_clauses_and_pragmas conventions-and-anonymous-access-types685213 + Ref: 29a685213 + Ref: gnat_rm/representation_clauses_and_pragmas id19685213 + Ref: 29b685213 + Node: Determining the Representations chosen by GNAT687704 + Ref: gnat_rm/representation_clauses_and_pragmas determining-the-representations-chosen-by-gnat687869 + Ref: 29c687869 + Ref: gnat_rm/representation_clauses_and_pragmas id20687869 + Ref: 29d687869 + Node: Standard Library Routines692459 + Ref: gnat_rm/standard_library_routines doc692611 + Ref: 29e692611 + Ref: gnat_rm/standard_library_routines id1692611 + Ref: 29f692611 + Ref: gnat_rm/standard_library_routines standard-library-routines692611 + Ref: e692611 + Node: The Implementation of Standard I/O719257 + Ref: gnat_rm/the_implementation_of_standard_i_o doc719391 + Ref: 2a0719391 + Ref: gnat_rm/the_implementation_of_standard_i_o id1719391 + Ref: 2a1719391 + Ref: gnat_rm/the_implementation_of_standard_i_o the-implementation-of-standard-i-o719391 + Ref: f719391 + Node: Standard I/O Packages721441 + Ref: gnat_rm/the_implementation_of_standard_i_o id2721555 + Ref: 2a2721555 + Ref: gnat_rm/the_implementation_of_standard_i_o standard-i-o-packages721555 + Ref: 2a3721555 + Node: FORM Strings722894 + Ref: gnat_rm/the_implementation_of_standard_i_o form-strings723026 + Ref: 2a4723026 + Ref: gnat_rm/the_implementation_of_standard_i_o id3723026 + Ref: 2a5723026 + Node: Direct_IO723640 + Ref: gnat_rm/the_implementation_of_standard_i_o direct-io723764 + Ref: 2a6723764 + Ref: gnat_rm/the_implementation_of_standard_i_o id4723764 + Ref: 2a7723764 + Node: Sequential_IO724541 + Ref: gnat_rm/the_implementation_of_standard_i_o id5724660 + Ref: 2a8724660 + Ref: gnat_rm/the_implementation_of_standard_i_o sequential-io724660 + Ref: 2a9724660 + Node: Text_IO726497 + Ref: gnat_rm/the_implementation_of_standard_i_o id6726619 + Ref: 2aa726619 + Ref: gnat_rm/the_implementation_of_standard_i_o text-io726619 + Ref: 2ab726619 + Node: Stream Pointer Positioning729107 + Ref: gnat_rm/the_implementation_of_standard_i_o id7729224 + Ref: 2ac729224 + Ref: gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning729224 + Ref: 2ad729224 + Node: Reading and Writing Non-Regular Files730671 + Ref: gnat_rm/the_implementation_of_standard_i_o id8730810 + Ref: 2ae730810 + Ref: gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files730810 + Ref: 2af730810 + Node: Get_Immediate732584 + Ref: gnat_rm/the_implementation_of_standard_i_o get-immediate732730 + Ref: 2b0732730 + Ref: gnat_rm/the_implementation_of_standard_i_o id9732730 + Ref: 2b1732730 + Node: Treating Text_IO Files as Streams733423 + Ref: gnat_rm/the_implementation_of_standard_i_o id10733550 + Ref: 2b2733550 + Ref: gnat_rm/the_implementation_of_standard_i_o treating-text-io-files-as-streams733550 + Ref: 2b3733550 + Node: Text_IO Extensions734138 + Ref: gnat_rm/the_implementation_of_standard_i_o id11734292 + Ref: 2b4734292 + Ref: gnat_rm/the_implementation_of_standard_i_o text-io-extensions734292 + Ref: 2b5734292 + Node: Text_IO Facilities for Unbounded Strings734909 + Ref: gnat_rm/the_implementation_of_standard_i_o id12735021 + Ref: 2b6735021 + Ref: gnat_rm/the_implementation_of_standard_i_o text-io-facilities-for-unbounded-strings735021 + Ref: 2b7735021 + Node: Wide_Text_IO736595 + Ref: gnat_rm/the_implementation_of_standard_i_o id13736721 + Ref: 2b8736721 + Ref: gnat_rm/the_implementation_of_standard_i_o wide-text-io736721 + Ref: 2b9736721 + Node: Stream Pointer Positioning<2>743650 + Ref: gnat_rm/the_implementation_of_standard_i_o id14743778 + Ref: 2ba743778 + Ref: gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning-1743778 + Ref: 2bb743778 + Node: Reading and Writing Non-Regular Files<2>744696 + Ref: gnat_rm/the_implementation_of_standard_i_o id15744824 + Ref: 2bc744824 + Ref: gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files-1744824 + Ref: 2bd744824 + Node: Wide_Wide_Text_IO745233 + Ref: gnat_rm/the_implementation_of_standard_i_o id16745361 + Ref: 2be745361 + Ref: gnat_rm/the_implementation_of_standard_i_o wide-wide-text-io745361 + Ref: 2bf745361 + Node: Stream Pointer Positioning<3>749010 + Ref: gnat_rm/the_implementation_of_standard_i_o id17749143 + Ref: 2c0749143 + Ref: gnat_rm/the_implementation_of_standard_i_o stream-pointer-positioning-2749143 + Ref: 2c1749143 + Node: Reading and Writing Non-Regular Files<3>750093 + Ref: gnat_rm/the_implementation_of_standard_i_o id18750226 + Ref: 2c2750226 + Ref: gnat_rm/the_implementation_of_standard_i_o reading-and-writing-non-regular-files-2750226 + Ref: 2c3750226 + Node: Stream_IO750635 + Ref: gnat_rm/the_implementation_of_standard_i_o id19750767 + Ref: 2c4750767 + Ref: gnat_rm/the_implementation_of_standard_i_o stream-io750767 + Ref: 2c5750767 + Node: Text Translation751284 + Ref: gnat_rm/the_implementation_of_standard_i_o id20751411 + Ref: 2c6751411 + Ref: gnat_rm/the_implementation_of_standard_i_o text-translation751411 + Ref: 2c7751411 + Node: Shared Files752211 + Ref: gnat_rm/the_implementation_of_standard_i_o id21752347 + Ref: 2c8752347 + Ref: gnat_rm/the_implementation_of_standard_i_o shared-files752347 + Ref: 2c9752347 + Node: Filenames encoding755093 + Ref: gnat_rm/the_implementation_of_standard_i_o filenames-encoding755234 + Ref: 2ca755234 + Ref: gnat_rm/the_implementation_of_standard_i_o id22755234 + Ref: 2cb755234 + Node: File content encoding756036 + Ref: gnat_rm/the_implementation_of_standard_i_o file-content-encoding756175 + Ref: 2cc756175 + Ref: gnat_rm/the_implementation_of_standard_i_o id23756175 + Ref: 2cd756175 + Node: Open Modes756683 + Ref: gnat_rm/the_implementation_of_standard_i_o id24756827 + Ref: 2ce756827 + Ref: gnat_rm/the_implementation_of_standard_i_o open-modes756827 + Ref: 2cf756827 + Node: Operations on C Streams758813 + Ref: gnat_rm/the_implementation_of_standard_i_o id25758960 + Ref: 2d0758960 + Ref: gnat_rm/the_implementation_of_standard_i_o operations-on-c-streams758960 + Ref: 2d1758960 + Node: Interfacing to C Streams765764 + Ref: gnat_rm/the_implementation_of_standard_i_o id26765892 + Ref: 2d2765892 + Ref: gnat_rm/the_implementation_of_standard_i_o interfacing-to-c-streams765892 + Ref: 2d3765892 + Node: The GNAT Library769204 + Ref: gnat_rm/the_gnat_library doc769343 + Ref: 2d4769343 + Ref: gnat_rm/the_gnat_library id1769343 + Ref: 2d5769343 + Ref: gnat_rm/the_gnat_library the-gnat-library769343 + Ref: 10769343 + Node: Ada Characters Latin_9 a-chlat9 ads783063 + Ref: gnat_rm/the_gnat_library ada-characters-latin-9-a-chlat9-ads783201 + Ref: 2d6783201 + Ref: gnat_rm/the_gnat_library id2783201 + Ref: 2d7783201 + Node: Ada Characters Wide_Latin_1 a-cwila1 ads783609 + Ref: gnat_rm/the_gnat_library ada-characters-wide-latin-1-a-cwila1-ads783796 + Ref: 2d8783796 + Ref: gnat_rm/the_gnat_library id3783796 + Ref: 2d9783796 + Node: Ada Characters Wide_Latin_9 a-cwila1 ads784248 + Ref: gnat_rm/the_gnat_library ada-characters-wide-latin-9-a-cwila1-ads784445 + Ref: 2da784445 + Ref: gnat_rm/the_gnat_library id4784445 + Ref: 2db784445 + Node: Ada Characters Wide_Wide_Latin_1 a-chzla1 ads784899 + Ref: gnat_rm/the_gnat_library ada-characters-wide-wide-latin-1-a-chzla1-ads785101 + Ref: 2dc785101 + Ref: gnat_rm/the_gnat_library id5785101 + Ref: 2dd785101 + Node: Ada Characters Wide_Wide_Latin_9 a-chzla9 ads785568 + Ref: gnat_rm/the_gnat_library ada-characters-wide-wide-latin-9-a-chzla9-ads785784 + Ref: 2de785784 + Ref: gnat_rm/the_gnat_library id6785784 + Ref: 2df785784 + Node: Ada Containers Formal_Doubly_Linked_Lists a-cfdlli ads786253 + Ref: gnat_rm/the_gnat_library ada-containers-formal-doubly-linked-lists-a-cfdlli-ads786470 + Ref: 2e0786470 + Ref: gnat_rm/the_gnat_library id7786470 + Ref: 2e1786470 + Node: Ada Containers Formal_Hashed_Maps a-cfhama ads787151 + Ref: gnat_rm/the_gnat_library ada-containers-formal-hashed-maps-a-cfhama-ads787369 + Ref: 2e2787369 + Ref: gnat_rm/the_gnat_library id8787369 + Ref: 2e3787369 + Node: Ada Containers Formal_Hashed_Sets a-cfhase ads788026 + Ref: gnat_rm/the_gnat_library ada-containers-formal-hashed-sets-a-cfhase-ads788237 + Ref: 2e4788237 + Ref: gnat_rm/the_gnat_library id9788237 + Ref: 2e5788237 + Node: Ada Containers Formal_Ordered_Maps a-cforma ads788894 + Ref: gnat_rm/the_gnat_library ada-containers-formal-ordered-maps-a-cforma-ads789106 + Ref: 2e6789106 + Ref: gnat_rm/the_gnat_library id10789106 + Ref: 2e7789106 + Node: Ada Containers Formal_Ordered_Sets a-cforse ads789766 + Ref: gnat_rm/the_gnat_library ada-containers-formal-ordered-sets-a-cforse-ads789974 + Ref: 2e8789974 + Ref: gnat_rm/the_gnat_library id11789974 + Ref: 2e9789974 + Node: Ada Containers Formal_Vectors a-cofove ads790636 + Ref: gnat_rm/the_gnat_library ada-containers-formal-vectors-a-cofove-ads790850 + Ref: 2ea790850 + Ref: gnat_rm/the_gnat_library id12790850 + Ref: 2eb790850 + Node: Ada Containers Formal_Indefinite_Vectors a-cfinve ads791497 + Ref: gnat_rm/the_gnat_library ada-containers-formal-indefinite-vectors-a-cfinve-ads791710 + Ref: 2ec791710 + Ref: gnat_rm/the_gnat_library id13791710 + Ref: 2ed791710 + Node: Ada Containers Functional_Vectors a-cofuve ads792402 + Ref: gnat_rm/the_gnat_library ada-containers-functional-vectors-a-cofuve-ads792616 + Ref: 2ee792616 + Ref: gnat_rm/the_gnat_library id14792616 + Ref: 2ef792616 + Node: Ada Containers Functional_Sets a-cofuse ads793553 + Ref: gnat_rm/the_gnat_library ada-containers-functional-sets-a-cofuse-ads793757 + Ref: 2f0793757 + Ref: gnat_rm/the_gnat_library id15793757 + Ref: 2f1793757 + Node: Ada Containers Functional_Maps a-cofuma ads794686 + Ref: gnat_rm/the_gnat_library ada-containers-functional-maps-a-cofuma-ads794887 + Ref: 2f2794887 + Ref: gnat_rm/the_gnat_library id16794887 + Ref: 2f3794887 + Node: Ada Containers Bounded_Holders a-coboho ads795816 + Ref: gnat_rm/the_gnat_library ada-containers-bounded-holders-a-coboho-ads796015 + Ref: 2f4796015 + Ref: gnat_rm/the_gnat_library id17796015 + Ref: 2f5796015 + Node: Ada Command_Line Environment a-colien ads796250 + Ref: gnat_rm/the_gnat_library ada-command-line-environment-a-colien-ads796442 + Ref: 2f6796442 + Ref: gnat_rm/the_gnat_library id18796442 + Ref: 2f7796442 + Node: Ada Command_Line Remove a-colire ads796694 + Ref: gnat_rm/the_gnat_library ada-command-line-remove-a-colire-ads796886 + Ref: 2f8796886 + Ref: gnat_rm/the_gnat_library id19796886 + Ref: 2f9796886 + Node: Ada Command_Line Response_File a-clrefi ads797248 + Ref: gnat_rm/the_gnat_library ada-command-line-response-file-a-clrefi-ads797435 + Ref: 2fa797435 + Ref: gnat_rm/the_gnat_library id20797435 + Ref: 2fb797435 + Node: Ada Direct_IO C_Streams a-diocst ads797849 + Ref: gnat_rm/the_gnat_library ada-direct-io-c-streams-a-diocst-ads798046 + Ref: 2fc798046 + Ref: gnat_rm/the_gnat_library id21798046 + Ref: 2fd798046 + Node: Ada Exceptions Is_Null_Occurrence a-einuoc ads798397 + Ref: gnat_rm/the_gnat_library ada-exceptions-is-null-occurrence-a-einuoc-ads798598 + Ref: 2fe798598 + Ref: gnat_rm/the_gnat_library id22798598 + Ref: 2ff798598 + Node: Ada Exceptions Last_Chance_Handler a-elchha ads798862 + Ref: gnat_rm/the_gnat_library ada-exceptions-last-chance-handler-a-elchha-ads799064 + Ref: 300799064 + Ref: gnat_rm/the_gnat_library id23799064 + Ref: 301799064 + Node: Ada Exceptions Traceback a-exctra ads799394 + Ref: gnat_rm/the_gnat_library ada-exceptions-traceback-a-exctra-ads799590 + Ref: 302799590 + Ref: gnat_rm/the_gnat_library id24799590 + Ref: 303799590 + Node: Ada Sequential_IO C_Streams a-siocst ads799835 + Ref: gnat_rm/the_gnat_library ada-sequential-io-c-streams-a-siocst-ads800028 + Ref: 304800028 + Ref: gnat_rm/the_gnat_library id25800028 + Ref: 305800028 + Node: Ada Streams Stream_IO C_Streams a-ssicst ads800391 + Ref: gnat_rm/the_gnat_library ada-streams-stream-io-c-streams-a-ssicst-ads800589 + Ref: 306800589 + Ref: gnat_rm/the_gnat_library id26800589 + Ref: 307800589 + Node: Ada Strings Unbounded Text_IO a-suteio ads800956 + Ref: gnat_rm/the_gnat_library ada-strings-unbounded-text-io-a-suteio-ads801166 + Ref: 308801166 + Ref: gnat_rm/the_gnat_library id27801166 + Ref: 309801166 + Node: Ada Strings Wide_Unbounded Wide_Text_IO a-swuwti ads801431 + Ref: gnat_rm/the_gnat_library ada-strings-wide-unbounded-wide-text-io-a-swuwti-ads801659 + Ref: 30a801659 + Ref: gnat_rm/the_gnat_library id28801659 + Ref: 30b801659 + Node: Ada Strings Wide_Wide_Unbounded Wide_Wide_Text_IO a-szuzti ads801954 + Ref: gnat_rm/the_gnat_library ada-strings-wide-wide-unbounded-wide-wide-text-io-a-szuzti-ads802176 + Ref: 30c802176 + Ref: gnat_rm/the_gnat_library id29802176 + Ref: 30d802176 + Node: Ada Task_Initialization a-tasini ads802501 + Ref: gnat_rm/the_gnat_library ada-task-initialization-a-tasini-ads802705 + Ref: 30e802705 + Ref: gnat_rm/the_gnat_library id30802705 + Ref: 30f802705 + Node: Ada Text_IO C_Streams a-tiocst ads803074 + Ref: gnat_rm/the_gnat_library ada-text-io-c-streams-a-tiocst-ads803261 + Ref: 310803261 + Ref: gnat_rm/the_gnat_library id31803261 + Ref: 311803261 + Node: Ada Text_IO Reset_Standard_Files a-tirsfi ads803606 + Ref: gnat_rm/the_gnat_library ada-text-io-reset-standard-files-a-tirsfi-ads803797 + Ref: 312803797 + Ref: gnat_rm/the_gnat_library id32803797 + Ref: 313803797 + Node: Ada Wide_Characters Unicode a-wichun ads804216 + Ref: gnat_rm/the_gnat_library ada-wide-characters-unicode-a-wichun-ads804412 + Ref: 314804412 + Ref: gnat_rm/the_gnat_library id33804412 + Ref: 315804412 + Node: Ada Wide_Text_IO C_Streams a-wtcstr ads804646 + Ref: gnat_rm/the_gnat_library ada-wide-text-io-c-streams-a-wtcstr-ads804847 + Ref: 316804847 + Ref: gnat_rm/the_gnat_library id34804847 + Ref: 317804847 + Node: Ada Wide_Text_IO Reset_Standard_Files a-wrstfi ads805207 + Ref: gnat_rm/the_gnat_library ada-wide-text-io-reset-standard-files-a-wrstfi-ads805413 + Ref: 318805413 + Ref: gnat_rm/the_gnat_library id35805413 + Ref: 319805413 + Node: Ada Wide_Wide_Characters Unicode a-zchuni ads805847 + Ref: gnat_rm/the_gnat_library ada-wide-wide-characters-unicode-a-zchuni-ads806058 + Ref: 31a806058 + Ref: gnat_rm/the_gnat_library id36806058 + Ref: 31b806058 + Node: Ada Wide_Wide_Text_IO C_Streams a-ztcstr ads806307 + Ref: gnat_rm/the_gnat_library ada-wide-wide-text-io-c-streams-a-ztcstr-ads806523 + Ref: 31c806523 + Ref: gnat_rm/the_gnat_library id37806523 + Ref: 31d806523 + Node: Ada Wide_Wide_Text_IO Reset_Standard_Files a-zrstfi ads806898 + Ref: gnat_rm/the_gnat_library ada-wide-wide-text-io-reset-standard-files-a-zrstfi-ads807094 + Ref: 31e807094 + Ref: gnat_rm/the_gnat_library id38807094 + Ref: 31f807094 + Node: GNAT Altivec g-altive ads807543 + Ref: gnat_rm/the_gnat_library gnat-altivec-g-altive-ads807732 + Ref: 320807732 + Ref: gnat_rm/the_gnat_library id39807732 + Ref: 321807732 + Node: GNAT Altivec Conversions g-altcon ads807963 + Ref: gnat_rm/the_gnat_library gnat-altivec-conversions-g-altcon-ads808140 + Ref: 322808140 + Ref: gnat_rm/the_gnat_library id40808140 + Ref: 323808140 + Node: GNAT Altivec Vector_Operations g-alveop ads808309 + Ref: gnat_rm/the_gnat_library gnat-altivec-vector-operations-g-alveop-ads808499 + Ref: 324808499 + Ref: gnat_rm/the_gnat_library id41808499 + Ref: 325808499 + Node: GNAT Altivec Vector_Types g-alvety ads808859 + Ref: gnat_rm/the_gnat_library gnat-altivec-vector-types-g-alvety-ads809050 + Ref: 326809050 + Ref: gnat_rm/the_gnat_library id42809050 + Ref: 327809050 + Node: GNAT Altivec Vector_Views g-alvevi ads809255 + Ref: gnat_rm/the_gnat_library gnat-altivec-vector-views-g-alvevi-ads809432 + Ref: 328809432 + Ref: gnat_rm/the_gnat_library id43809432 + Ref: 329809432 + Node: GNAT Array_Split g-arrspl ads809803 + Ref: gnat_rm/the_gnat_library gnat-array-split-g-arrspl-ads809960 + Ref: 32a809960 + Ref: gnat_rm/the_gnat_library id44809960 + Ref: 32b809960 + Node: GNAT AWK g-awk ads810215 + Ref: gnat_rm/the_gnat_library gnat-awk-g-awk-ads810368 + Ref: 32c810368 + Ref: gnat_rm/the_gnat_library id45810368 + Ref: 32d810368 + Node: GNAT Bind_Environment g-binenv ads810663 + Ref: gnat_rm/the_gnat_library gnat-bind-environment-g-binenv-ads810822 + Ref: 32e810822 + Ref: gnat_rm/the_gnat_library id46810822 + Ref: 32f810822 + Node: GNAT Branch_Prediction g-brapre ads811075 + Ref: gnat_rm/the_gnat_library gnat-branch-prediction-g-brapre-ads811249 + Ref: 330811249 + Ref: gnat_rm/the_gnat_library id47811249 + Ref: 331811249 + Node: GNAT Bounded_Buffers g-boubuf ads811433 + Ref: gnat_rm/the_gnat_library gnat-bounded-buffers-g-boubuf-ads811608 + Ref: 332811608 + Ref: gnat_rm/the_gnat_library id48811608 + Ref: 333811608 + Node: GNAT Bounded_Mailboxes g-boumai ads811876 + Ref: gnat_rm/the_gnat_library gnat-bounded-mailboxes-g-boumai-ads812045 + Ref: 334812045 + Ref: gnat_rm/the_gnat_library id49812045 + Ref: 335812045 + Node: GNAT Bubble_Sort g-bubsor ads812229 + Ref: gnat_rm/the_gnat_library gnat-bubble-sort-g-bubsor-ads812396 + Ref: 336812396 + Ref: gnat_rm/the_gnat_library id50812396 + Ref: 337812396 + Node: GNAT Bubble_Sort_A g-busora ads812668 + Ref: gnat_rm/the_gnat_library gnat-bubble-sort-a-g-busora-ads812831 + Ref: 338812831 + Ref: gnat_rm/the_gnat_library id51812831 + Ref: 339812831 + Node: GNAT Bubble_Sort_G g-busorg ads813210 + Ref: gnat_rm/the_gnat_library gnat-bubble-sort-g-g-busorg-ads813377 + Ref: 33a813377 + Ref: gnat_rm/the_gnat_library id52813377 + Ref: 33b813377 + Node: GNAT Byte_Order_Mark g-byorma ads813721 + Ref: gnat_rm/the_gnat_library gnat-byte-order-mark-g-byorma-ads813888 + Ref: 33c813888 + Ref: gnat_rm/the_gnat_library id53813888 + Ref: 33d813888 + Node: GNAT Byte_Swapping g-bytswa ads814258 + Ref: gnat_rm/the_gnat_library gnat-byte-swapping-g-bytswa-ads814420 + Ref: 33e814420 + Ref: gnat_rm/the_gnat_library id54814420 + Ref: 33f814420 + Node: GNAT Calendar g-calend ads814655 + Ref: gnat_rm/the_gnat_library gnat-calendar-g-calend-ads814818 + Ref: 340814818 + Ref: gnat_rm/the_gnat_library id55814818 + Ref: 341814818 + Node: GNAT Calendar Time_IO g-catiio ads815155 + Ref: gnat_rm/the_gnat_library gnat-calendar-time-io-g-catiio-ads815309 + Ref: 342815309 + Ref: gnat_rm/the_gnat_library id56815309 + Ref: 343815309 + Node: GNAT CRC32 g-crc32 ads815412 + Ref: gnat_rm/the_gnat_library gnat-crc32-g-crc32-ads815567 + Ref: 344815567 + Ref: gnat_rm/the_gnat_library id57815567 + Ref: 345815567 + Node: GNAT Case_Util g-casuti ads815893 + Ref: gnat_rm/the_gnat_library gnat-case-util-g-casuti-ads816032 + Ref: 346816032 + Ref: gnat_rm/the_gnat_library id58816032 + Ref: 347816032 + Node: GNAT CGI g-cgi ads816275 + Ref: gnat_rm/the_gnat_library gnat-cgi-g-cgi-ads816420 + Ref: 348816420 + Ref: gnat_rm/the_gnat_library id59816420 + Ref: 349816420 + Node: GNAT CGI Cookie g-cgicoo ads816802 + Ref: gnat_rm/the_gnat_library gnat-cgi-cookie-g-cgicoo-ads816947 + Ref: 34a816947 + Ref: gnat_rm/the_gnat_library id60816947 + Ref: 34b816947 + Node: GNAT CGI Debug g-cgideb ads817244 + Ref: gnat_rm/the_gnat_library gnat-cgi-debug-g-cgideb-ads817401 + Ref: 34c817401 + Ref: gnat_rm/the_gnat_library id61817401 + Ref: 34d817401 + Node: GNAT Command_Line g-comlin ads817583 + Ref: gnat_rm/the_gnat_library gnat-command-line-g-comlin-ads817746 + Ref: 34e817746 + Ref: gnat_rm/the_gnat_library id62817746 + Ref: 34f817746 + Node: GNAT Compiler_Version g-comver ads818034 + Ref: gnat_rm/the_gnat_library gnat-compiler-version-g-comver-ads818194 + Ref: 350818194 + Ref: gnat_rm/the_gnat_library id63818194 + Ref: 351818194 + Node: GNAT Ctrl_C g-ctrl_c ads818598 + Ref: gnat_rm/the_gnat_library gnat-ctrl-c-g-ctrl-c-ads818763 + Ref: 352818763 + Ref: gnat_rm/the_gnat_library id64818763 + Ref: 353818763 + Node: GNAT Current_Exception g-curexc ads818909 + Ref: gnat_rm/the_gnat_library gnat-current-exception-g-curexc-ads819069 + Ref: 354819069 + Ref: gnat_rm/the_gnat_library id65819069 + Ref: 355819069 + Node: GNAT Debug_Pools g-debpoo ads819485 + Ref: gnat_rm/the_gnat_library gnat-debug-pools-g-debpoo-ads819654 + Ref: 356819654 + Ref: gnat_rm/the_gnat_library id66819654 + Ref: 357819654 + Node: GNAT Debug_Utilities g-debuti ads819912 + Ref: gnat_rm/the_gnat_library gnat-debug-utilities-g-debuti-ads820077 + Ref: 358820077 + Ref: gnat_rm/the_gnat_library id67820077 + Ref: 359820077 + Node: GNAT Decode_String g-decstr ads820360 + Ref: gnat_rm/the_gnat_library gnat-decode-string-g-decstr-ads820532 + Ref: 35a820532 + Ref: gnat_rm/the_gnat_library id68820532 + Ref: 35b820532 + Node: GNAT Decode_UTF8_String g-deutst ads821040 + Ref: gnat_rm/the_gnat_library gnat-decode-utf8-string-g-deutst-ads821217 + Ref: 35c821217 + Ref: gnat_rm/the_gnat_library id69821217 + Ref: 35d821217 + Node: GNAT Directory_Operations g-dirope ads821387 + Ref: gnat_rm/the_gnat_library gnat-directory-operations-g-dirope-ads821581 + Ref: 35e821581 + Ref: gnat_rm/the_gnat_library id70821581 + Ref: 35f821581 + Node: GNAT Directory_Operations Iteration g-diopit ads821855 + Ref: gnat_rm/the_gnat_library gnat-directory-operations-iteration-g-diopit-ads822046 + Ref: 360822046 + Ref: gnat_rm/the_gnat_library id71822046 + Ref: 361822046 + Node: GNAT Dynamic_HTables g-dynhta ads822287 + Ref: gnat_rm/the_gnat_library gnat-dynamic-htables-g-dynhta-ads822472 + Ref: 362822472 + Ref: gnat_rm/the_gnat_library id72822472 + Ref: 363822472 + Node: GNAT Dynamic_Tables g-dyntab ads823053 + Ref: gnat_rm/the_gnat_library gnat-dynamic-tables-g-dyntab-ads823221 + Ref: 364823221 + Ref: gnat_rm/the_gnat_library id73823221 + Ref: 365823221 + Node: GNAT Encode_String g-encstr ads823704 + Ref: gnat_rm/the_gnat_library gnat-encode-string-g-encstr-ads823875 + Ref: 366823875 + Ref: gnat_rm/the_gnat_library id74823875 + Ref: 367823875 + Node: GNAT Encode_UTF8_String g-enutst ads824254 + Ref: gnat_rm/the_gnat_library gnat-encode-utf8-string-g-enutst-ads824428 + Ref: 368824428 + Ref: gnat_rm/the_gnat_library id75824428 + Ref: 369824428 + Node: GNAT Exception_Actions g-excact ads824598 + Ref: gnat_rm/the_gnat_library gnat-exception-actions-g-excact-ads824775 + Ref: 36a824775 + Ref: gnat_rm/the_gnat_library id76824775 + Ref: 36b824775 + Node: GNAT Exception_Traces g-exctra ads825086 + Ref: gnat_rm/the_gnat_library gnat-exception-traces-g-exctra-ads825255 + Ref: 36c825255 + Ref: gnat_rm/the_gnat_library id77825255 + Ref: 36d825255 + Node: GNAT Exceptions g-except ads825446 + Ref: gnat_rm/the_gnat_library gnat-exceptions-g-except-ads825604 + Ref: 36e825604 + Ref: gnat_rm/the_gnat_library id78825604 + Ref: 36f825604 + Node: GNAT Expect g-expect ads826097 + Ref: gnat_rm/the_gnat_library gnat-expect-g-expect-ads826249 + Ref: 370826249 + Ref: gnat_rm/the_gnat_library id79826249 + Ref: 371826249 + Node: GNAT Expect TTY g-exptty ads826780 + Ref: gnat_rm/the_gnat_library gnat-expect-tty-g-exptty-ads826935 + Ref: 372826935 + Ref: gnat_rm/the_gnat_library id80826935 + Ref: 373826935 + Node: GNAT Float_Control g-flocon ads827243 + Ref: gnat_rm/the_gnat_library gnat-float-control-g-flocon-ads827408 + Ref: 374827408 + Ref: gnat_rm/the_gnat_library id81827408 + Ref: 375827408 + Node: GNAT Formatted_String g-forstr ads827787 + Ref: gnat_rm/the_gnat_library gnat-formatted-string-g-forstr-ads827951 + Ref: 376827951 + Ref: gnat_rm/the_gnat_library id82827951 + Ref: 377827951 + Node: GNAT Heap_Sort g-heasor ads828343 + Ref: gnat_rm/the_gnat_library gnat-heap-sort-g-heasor-ads828505 + Ref: 378828505 + Ref: gnat_rm/the_gnat_library id83828505 + Ref: 379828505 + Node: GNAT Heap_Sort_A g-hesora ads828883 + Ref: gnat_rm/the_gnat_library gnat-heap-sort-a-g-hesora-ads829040 + Ref: 37a829040 + Ref: gnat_rm/the_gnat_library id84829040 + Ref: 37b829040 + Node: GNAT Heap_Sort_G g-hesorg ads829533 + Ref: gnat_rm/the_gnat_library gnat-heap-sort-g-g-hesorg-ads829687 + Ref: 37c829687 + Ref: gnat_rm/the_gnat_library id85829687 + Ref: 37d829687 + Node: GNAT HTable g-htable ads830025 + Ref: gnat_rm/the_gnat_library gnat-htable-g-htable-ads830166 + Ref: 37e830166 + Ref: gnat_rm/the_gnat_library id86830166 + Ref: 37f830166 + Node: GNAT IO g-io ads830441 + Ref: gnat_rm/the_gnat_library gnat-io-g-io-ads830577 + Ref: 380830577 + Ref: gnat_rm/the_gnat_library id87830577 + Ref: 381830577 + Node: GNAT IO_Aux g-io_aux ads830886 + Ref: gnat_rm/the_gnat_library gnat-io-aux-g-io-aux-ads831026 + Ref: 382831026 + Ref: gnat_rm/the_gnat_library id88831026 + Ref: 383831026 + Node: GNAT Lock_Files g-locfil ads831252 + Ref: gnat_rm/the_gnat_library gnat-lock-files-g-locfil-ads831414 + Ref: 384831414 + Ref: gnat_rm/the_gnat_library id89831414 + Ref: 385831414 + Node: GNAT MBBS_Discrete_Random g-mbdira ads831619 + Ref: gnat_rm/the_gnat_library gnat-mbbs-discrete-random-g-mbdira-ads831792 + Ref: 386831792 + Ref: gnat_rm/the_gnat_library id90831792 + Ref: 387831792 + Node: GNAT MBBS_Float_Random g-mbflra ads832029 + Ref: gnat_rm/the_gnat_library gnat-mbbs-float-random-g-mbflra-ads832192 + Ref: 388832192 + Ref: gnat_rm/the_gnat_library id91832192 + Ref: 389832192 + Node: GNAT MD5 g-md5 ads832420 + Ref: gnat_rm/the_gnat_library gnat-md5-g-md5-ads832574 + Ref: 38a832574 + Ref: gnat_rm/the_gnat_library id92832574 + Ref: 38b832574 + Node: GNAT Memory_Dump g-memdum ads832808 + Ref: gnat_rm/the_gnat_library gnat-memory-dump-g-memdum-ads832966 + Ref: 38c832966 + Ref: gnat_rm/the_gnat_library id93832966 + Ref: 38d832966 + Node: GNAT Most_Recent_Exception g-moreex ads833201 + Ref: gnat_rm/the_gnat_library gnat-most-recent-exception-g-moreex-ads833365 + Ref: 38e833365 + Ref: gnat_rm/the_gnat_library id94833365 + Ref: 38f833365 + Node: GNAT OS_Lib g-os_lib ads833665 + Ref: gnat_rm/the_gnat_library gnat-os-lib-g-os-lib-ads833841 + Ref: 390833841 + Ref: gnat_rm/the_gnat_library id95833841 + Ref: 391833841 + Node: GNAT Perfect_Hash_Generators g-pehage ads834172 + Ref: gnat_rm/the_gnat_library gnat-perfect-hash-generators-g-pehage-ads834341 + Ref: 392834341 + Ref: gnat_rm/the_gnat_library id96834341 + Ref: 393834341 + Node: GNAT Random_Numbers g-rannum ads834992 + Ref: gnat_rm/the_gnat_library gnat-random-numbers-g-rannum-ads835161 + Ref: 394835161 + Ref: gnat_rm/the_gnat_library id97835161 + Ref: 395835161 + Node: GNAT Regexp g-regexp ads835386 + Ref: gnat_rm/the_gnat_library gnat-regexp-g-regexp-ads835540 + Ref: 25b835540 + Ref: gnat_rm/the_gnat_library id98835540 + Ref: 396835540 + Node: GNAT Registry g-regist ads835896 + Ref: gnat_rm/the_gnat_library gnat-registry-g-regist-ads836042 + Ref: 397836042 + Ref: gnat_rm/the_gnat_library id99836042 + Ref: 398836042 + Node: GNAT Regpat g-regpat ads836396 + Ref: gnat_rm/the_gnat_library gnat-regpat-g-regpat-ads836548 + Ref: 399836548 + Ref: gnat_rm/the_gnat_library id100836548 + Ref: 39a836548 + Node: GNAT Rewrite_Data g-rewdat ads836837 + Ref: gnat_rm/the_gnat_library gnat-rewrite-data-g-rewdat-ads837001 + Ref: 39b837001 + Ref: gnat_rm/the_gnat_library id101837001 + Ref: 39c837001 + Node: GNAT Secondary_Stack_Info g-sestin ads837367 + Ref: gnat_rm/the_gnat_library gnat-secondary-stack-info-g-sestin-ads837535 + Ref: 39d837535 + Ref: gnat_rm/the_gnat_library id102837535 + Ref: 39e837535 + Node: GNAT Semaphores g-semaph ads837742 + Ref: gnat_rm/the_gnat_library gnat-semaphores-g-semaph-ads837919 + Ref: 39f837919 + Ref: gnat_rm/the_gnat_library id103837919 + Ref: 3a0837919 + Node: GNAT Serial_Communications g-sercom ads838084 + Ref: gnat_rm/the_gnat_library gnat-serial-communications-g-sercom-ads838243 + Ref: 3a1838243 + Ref: gnat_rm/the_gnat_library id104838243 + Ref: 3a2838243 + Node: GNAT SHA1 g-sha1 ads838481 + Ref: gnat_rm/the_gnat_library gnat-sha1-g-sha1-ads838636 + Ref: 3a3838636 + Ref: gnat_rm/the_gnat_library id105838636 + Ref: 3a4838636 + Node: GNAT SHA224 g-sha224 ads838895 + Ref: gnat_rm/the_gnat_library gnat-sha224-g-sha224-ads839035 + Ref: 3a5839035 + Ref: gnat_rm/the_gnat_library id106839035 + Ref: 3a6839035 + Node: GNAT SHA256 g-sha256 ads839293 + Ref: gnat_rm/the_gnat_library gnat-sha256-g-sha256-ads839437 + Ref: 3a7839437 + Ref: gnat_rm/the_gnat_library id107839437 + Ref: 3a8839437 + Node: GNAT SHA384 g-sha384 ads839695 + Ref: gnat_rm/the_gnat_library gnat-sha384-g-sha384-ads839839 + Ref: 3a9839839 + Ref: gnat_rm/the_gnat_library id108839839 + Ref: 3aa839839 + Node: GNAT SHA512 g-sha512 ads840097 + Ref: gnat_rm/the_gnat_library gnat-sha512-g-sha512-ads840242 + Ref: 3ab840242 + Ref: gnat_rm/the_gnat_library id109840242 + Ref: 3ac840242 + Node: GNAT Signals g-signal ads840500 + Ref: gnat_rm/the_gnat_library gnat-signals-g-signal-ads840646 + Ref: 3ad840646 + Ref: gnat_rm/the_gnat_library id110840646 + Ref: 3ae840646 + Node: GNAT Sockets g-socket ads840821 + Ref: gnat_rm/the_gnat_library gnat-sockets-g-socket-ads840972 + Ref: 3af840972 + Ref: gnat_rm/the_gnat_library id111840972 + Ref: 3b0840972 + Node: GNAT Source_Info g-souinf ads841368 + Ref: gnat_rm/the_gnat_library gnat-source-info-g-souinf-ads841528 + Ref: 3b1841528 + Ref: gnat_rm/the_gnat_library id112841528 + Ref: 3b2841528 + Node: GNAT Spelling_Checker g-speche ads841894 + Ref: gnat_rm/the_gnat_library gnat-spelling-checker-g-speche-ads842071 + Ref: 3b3842071 + Ref: gnat_rm/the_gnat_library id113842071 + Ref: 3b4842071 + Node: GNAT Spelling_Checker_Generic g-spchge ads842283 + Ref: gnat_rm/the_gnat_library gnat-spelling-checker-generic-g-spchge-ads842465 + Ref: 3b5842465 + Ref: gnat_rm/the_gnat_library id114842465 + Ref: 3b6842465 + Node: GNAT Spitbol Patterns g-spipat ads842745 + Ref: gnat_rm/the_gnat_library gnat-spitbol-patterns-g-spipat-ads842918 + Ref: 3b7842918 + Ref: gnat_rm/the_gnat_library id115842918 + Ref: 3b8842918 + Node: GNAT Spitbol g-spitbo ads843325 + Ref: gnat_rm/the_gnat_library gnat-spitbol-g-spitbo-ads843495 + Ref: 3b9843495 + Ref: gnat_rm/the_gnat_library id116843495 + Ref: 3ba843495 + Node: GNAT Spitbol Table_Boolean g-sptabo ads843905 + Ref: gnat_rm/the_gnat_library gnat-spitbol-table-boolean-g-sptabo-ads844080 + Ref: 3bb844080 + Ref: gnat_rm/the_gnat_library id117844080 + Ref: 3bc844080 + Node: GNAT Spitbol Table_Integer g-sptain ads844350 + Ref: gnat_rm/the_gnat_library gnat-spitbol-table-integer-g-sptain-ads844539 + Ref: 3bd844539 + Ref: gnat_rm/the_gnat_library id118844539 + Ref: 3be844539 + Node: GNAT Spitbol Table_VString g-sptavs ads844822 + Ref: gnat_rm/the_gnat_library gnat-spitbol-table-vstring-g-sptavs-ads844990 + Ref: 3bf844990 + Ref: gnat_rm/the_gnat_library id119844990 + Ref: 3c0844990 + Node: GNAT SSE g-sse ads845277 + Ref: gnat_rm/the_gnat_library gnat-sse-g-sse-ads845440 + Ref: 3c1845440 + Ref: gnat_rm/the_gnat_library id120845440 + Ref: 3c2845440 + Node: GNAT SSE Vector_Types g-ssvety ads845767 + Ref: gnat_rm/the_gnat_library gnat-sse-vector-types-g-ssvety-ads845920 + Ref: 3c3845920 + Ref: gnat_rm/the_gnat_library id121845920 + Ref: 3c4845920 + Node: GNAT String_Hash g-strhas ads846080 + Ref: gnat_rm/the_gnat_library gnat-string-hash-g-strhas-ads846240 + Ref: 3c5846240 + Ref: gnat_rm/the_gnat_library id122846240 + Ref: 3c6846240 + Node: GNAT Strings g-string ads846462 + Ref: gnat_rm/the_gnat_library gnat-strings-g-string-ads846618 + Ref: 3c7846618 + Ref: gnat_rm/the_gnat_library id123846618 + Ref: 3c8846618 + Node: GNAT String_Split g-strspl ads846833 + Ref: gnat_rm/the_gnat_library gnat-string-split-g-strspl-ads846982 + Ref: 3c9846982 + Ref: gnat_rm/the_gnat_library id124846982 + Ref: 3ca846982 + Node: GNAT Table g-table ads847301 + Ref: gnat_rm/the_gnat_library gnat-table-g-table-ads847452 + Ref: 3cb847452 + Ref: gnat_rm/the_gnat_library id125847452 + Ref: 3cc847452 + Node: GNAT Task_Lock g-tasloc ads847935 + Ref: gnat_rm/the_gnat_library gnat-task-lock-g-tasloc-ads848084 + Ref: 3cd848084 + Ref: gnat_rm/the_gnat_library id126848084 + Ref: 3ce848084 + Node: GNAT Time_Stamp g-timsta ads848366 + Ref: gnat_rm/the_gnat_library gnat-time-stamp-g-timsta-ads848518 + Ref: 3cf848518 + Ref: gnat_rm/the_gnat_library id127848518 + Ref: 3d0848518 + Node: GNAT Threads g-thread ads848844 + Ref: gnat_rm/the_gnat_library gnat-threads-g-thread-ads848996 + Ref: 3d1848996 + Ref: gnat_rm/the_gnat_library id128848996 + Ref: 3d2848996 + Node: GNAT Traceback g-traceb ads849352 + Ref: gnat_rm/the_gnat_library gnat-traceback-g-traceb-ads849512 + Ref: 3d3849512 + Ref: gnat_rm/the_gnat_library id129849512 + Ref: 3d4849512 + Node: GNAT Traceback Symbolic g-trasym ads849714 + Ref: gnat_rm/the_gnat_library gnat-traceback-symbolic-g-trasym-ads849872 + Ref: 3d5849872 + Ref: gnat_rm/the_gnat_library id130849872 + Ref: 3d6849872 + Node: GNAT UTF_32 g-table ads849981 + Ref: gnat_rm/the_gnat_library gnat-utf-32-g-table-ads850151 + Ref: 3d7850151 + Ref: gnat_rm/the_gnat_library id131850151 + Ref: 3d8850151 + Node: GNAT Wide_Spelling_Checker g-u3spch ads850713 + Ref: gnat_rm/the_gnat_library gnat-wide-spelling-checker-g-u3spch-ads850886 + Ref: 3d9850886 + Ref: gnat_rm/the_gnat_library id132850886 + Ref: 3da850886 + Node: GNAT Wide_Spelling_Checker g-wispch ads851218 + Ref: gnat_rm/the_gnat_library gnat-wide-spelling-checker-g-wispch-ads851403 + Ref: 3db851403 + Ref: gnat_rm/the_gnat_library id133851403 + Ref: 3dc851403 + Node: GNAT Wide_String_Split g-wistsp ads851635 + Ref: gnat_rm/the_gnat_library gnat-wide-string-split-g-wistsp-ads851825 + Ref: 3dd851825 + Ref: gnat_rm/the_gnat_library id134851825 + Ref: 3de851825 + Node: GNAT Wide_Wide_Spelling_Checker g-zspche ads852164 + Ref: gnat_rm/the_gnat_library gnat-wide-wide-spelling-checker-g-zspche-ads852355 + Ref: 3df852355 + Ref: gnat_rm/the_gnat_library id135852355 + Ref: 3e0852355 + Node: GNAT Wide_Wide_String_Split g-zistsp ads852607 + Ref: gnat_rm/the_gnat_library gnat-wide-wide-string-split-g-zistsp-ads852799 + Ref: 3e1852799 + Ref: gnat_rm/the_gnat_library id136852799 + Ref: 3e2852799 + Node: Interfaces C Extensions i-cexten ads853158 + Ref: gnat_rm/the_gnat_library id137853339 + Ref: 3e3853339 + Ref: gnat_rm/the_gnat_library interfaces-c-extensions-i-cexten-ads853339 + Ref: 3e4853339 + Node: Interfaces C Streams i-cstrea ads853595 + Ref: gnat_rm/the_gnat_library id138853774 + Ref: 3e5853774 + Ref: gnat_rm/the_gnat_library interfaces-c-streams-i-cstrea-ads853774 + Ref: 3e6853774 + Node: Interfaces Packed_Decimal i-pacdec ads853956 + Ref: gnat_rm/the_gnat_library id139854130 + Ref: 3e7854130 + Ref: gnat_rm/the_gnat_library interfaces-packed-decimal-i-pacdec-ads854130 + Ref: 3e8854130 + Node: Interfaces VxWorks i-vxwork ads854381 + Ref: gnat_rm/the_gnat_library id140854568 + Ref: 3e9854568 + Ref: gnat_rm/the_gnat_library interfaces-vxworks-i-vxwork-ads854568 + Ref: 3ea854568 + Node: Interfaces VxWorks Int_Connection i-vxinco ads854805 + Ref: gnat_rm/the_gnat_library id141854988 + Ref: 3eb854988 + Ref: gnat_rm/the_gnat_library interfaces-vxworks-int-connection-i-vxinco-ads854988 + Ref: 3ec854988 + Node: Interfaces VxWorks IO i-vxwoio ads855248 + Ref: gnat_rm/the_gnat_library id142855433 + Ref: 3ed855433 + Ref: gnat_rm/the_gnat_library interfaces-vxworks-io-i-vxwoio-ads855433 + Ref: 3ee855433 + Node: System Address_Image s-addima ads855757 + Ref: gnat_rm/the_gnat_library id143855926 + Ref: 3ef855926 + Ref: gnat_rm/the_gnat_library system-address-image-s-addima-ads855926 + Ref: 3f0855926 + Node: System Assertions s-assert ads856158 + Ref: gnat_rm/the_gnat_library id144856328 + Ref: 3f1856328 + Ref: gnat_rm/the_gnat_library system-assertions-s-assert-ads856328 + Ref: 3f2856328 + Node: System Atomic_Counters s-atocou ads856594 + Ref: gnat_rm/the_gnat_library id145856757 + Ref: 3f3856757 + Ref: gnat_rm/the_gnat_library system-atomic-counters-s-atocou-ads856757 + Ref: 3f4856757 + Node: System Memory s-memory ads857203 + Ref: gnat_rm/the_gnat_library id146857371 + Ref: 3f5857371 + Ref: gnat_rm/the_gnat_library system-memory-s-memory-ads857371 + Ref: 3f6857371 + Node: System Multiprocessors s-multip ads857978 + Ref: gnat_rm/the_gnat_library id147858166 + Ref: 3f7858166 + Ref: gnat_rm/the_gnat_library system-multiprocessors-s-multip-ads858166 + Ref: 3f8858166 + Node: System Multiprocessors Dispatching_Domains s-mudido ads858464 + Ref: gnat_rm/the_gnat_library id148858665 + Ref: 3f9858665 + Ref: gnat_rm/the_gnat_library system-multiprocessors-dispatching-domains-s-mudido-ads858665 + Ref: 3fa858665 + Node: System Partition_Interface s-parint ads859003 + Ref: gnat_rm/the_gnat_library id149859200 + Ref: 3fb859200 + Ref: gnat_rm/the_gnat_library system-partition-interface-s-parint-ads859200 + Ref: 3fc859200 + Node: System Pool_Global s-pooglo ads859461 + Ref: gnat_rm/the_gnat_library id150859633 + Ref: 3fd859633 + Ref: gnat_rm/the_gnat_library system-pool-global-s-pooglo-ads859633 + Ref: 3fe859633 + Node: System Pool_Local s-pooloc ads859975 + Ref: gnat_rm/the_gnat_library id151860140 + Ref: 3ff860140 + Ref: gnat_rm/the_gnat_library system-pool-local-s-pooloc-ads860140 + Ref: 400860140 + Node: System Restrictions s-restri ads860515 + Ref: gnat_rm/the_gnat_library id152860675 + Ref: 401860675 + Ref: gnat_rm/the_gnat_library system-restrictions-s-restri-ads860675 + Ref: 402860675 + Node: System Rident s-rident ads861113 + Ref: gnat_rm/the_gnat_library id153861281 + Ref: 403861281 + Ref: gnat_rm/the_gnat_library system-rident-s-rident-ads861281 + Ref: 404861281 + Node: System Strings Stream_Ops s-ststop ads861680 + Ref: gnat_rm/the_gnat_library id154861850 + Ref: 405861850 + Ref: gnat_rm/the_gnat_library system-strings-stream-ops-s-ststop-ads861850 + Ref: 406861850 + Node: System Unsigned_Types s-unstyp ads862245 + Ref: gnat_rm/the_gnat_library id155862416 + Ref: 407862416 + Ref: gnat_rm/the_gnat_library system-unsigned-types-s-unstyp-ads862416 + Ref: 408862416 + Node: System Wch_Cnv s-wchcnv ads862852 + Ref: gnat_rm/the_gnat_library id156863012 + Ref: 409863012 + Ref: gnat_rm/the_gnat_library system-wch-cnv-s-wchcnv-ads863012 + Ref: 40a863012 + Node: System Wch_Con s-wchcon ads863355 + Ref: gnat_rm/the_gnat_library id157863472 + Ref: 40b863472 + Ref: gnat_rm/the_gnat_library system-wch-con-s-wchcon-ads863472 + Ref: 40c863472 + Node: Interfacing to Other Languages863758 + Ref: gnat_rm/interfacing_to_other_languages doc863888 + Ref: 40d863888 + Ref: gnat_rm/interfacing_to_other_languages id1863888 + Ref: 40e863888 + Ref: gnat_rm/interfacing_to_other_languages interfacing-to-other-languages863888 + Ref: 11863888 + Node: Interfacing to C864240 + Ref: gnat_rm/interfacing_to_other_languages id2864351 + Ref: 40f864351 + Ref: gnat_rm/interfacing_to_other_languages interfacing-to-c864351 + Ref: 410864351 + Node: Interfacing to C++867154 + Ref: gnat_rm/interfacing_to_other_languages id3867294 + Ref: 46867294 + Ref: gnat_rm/interfacing_to_other_languages id4867294 + Ref: 411867294 + Node: Interfacing to COBOL869506 + Ref: gnat_rm/interfacing_to_other_languages id5869652 + Ref: 412869652 + Ref: gnat_rm/interfacing_to_other_languages interfacing-to-cobol869652 + Ref: 413869652 + Node: Interfacing to Fortran869796 + Ref: gnat_rm/interfacing_to_other_languages id6869956 + Ref: 414869956 + Ref: gnat_rm/interfacing_to_other_languages interfacing-to-fortran869956 + Ref: 415869956 + Node: Interfacing to non-GNAT Ada code870282 + Ref: gnat_rm/interfacing_to_other_languages id7870413 + Ref: 416870413 + Ref: gnat_rm/interfacing_to_other_languages interfacing-to-non-gnat-ada-code870413 + Ref: 417870413 + Node: Specialized Needs Annexes871440 + Ref: gnat_rm/specialized_needs_annexes doc871593 + Ref: 418871593 + Ref: gnat_rm/specialized_needs_annexes id1871593 + Ref: 419871593 + Ref: gnat_rm/specialized_needs_annexes specialized-needs-annexes871593 + Ref: 12871593 + Node: Implementation of Specific Ada Features872664 + Ref: gnat_rm/implementation_of_specific_ada_features doc872822 + Ref: 41a872822 + Ref: gnat_rm/implementation_of_specific_ada_features id1872822 + Ref: 41b872822 + Ref: gnat_rm/implementation_of_specific_ada_features implementation-of-specific-ada-features872822 + Ref: 13872822 + Node: Machine Code Insertions873311 + Ref: gnat_rm/implementation_of_specific_ada_features id2873450 + Ref: 41c873450 + Ref: gnat_rm/implementation_of_specific_ada_features machine-code-insertions873450 + Ref: 165873450 + Node: GNAT Implementation of Tasking880868 + Ref: gnat_rm/implementation_of_specific_ada_features gnat-implementation-of-tasking881062 + Ref: 41d881062 + Ref: gnat_rm/implementation_of_specific_ada_features id3881062 + Ref: 41e881062 + Node: Mapping Ada Tasks onto the Underlying Kernel Threads881476 + Ref: gnat_rm/implementation_of_specific_ada_features id4881649 + Ref: 41f881649 + Ref: gnat_rm/implementation_of_specific_ada_features mapping-ada-tasks-onto-the-underlying-kernel-threads881649 + Ref: 420881649 + Node: Ensuring Compliance with the Real-Time Annex883805 + Ref: gnat_rm/implementation_of_specific_ada_features ensuring-compliance-with-the-real-time-annex884015 + Ref: 421884015 + Ref: gnat_rm/implementation_of_specific_ada_features id5884015 + Ref: 422884015 + Node: Support for Locking Policies885927 + Ref: gnat_rm/implementation_of_specific_ada_features support-for-locking-policies886076 + Ref: 423886076 + Node: GNAT Implementation of Shared Passive Packages887235 + Ref: gnat_rm/implementation_of_specific_ada_features gnat-implementation-of-shared-passive-packages887442 + Ref: 424887442 + Ref: gnat_rm/implementation_of_specific_ada_features id6887442 + Ref: 425887442 + Node: Code Generation for Array Aggregates890555 + Ref: gnat_rm/implementation_of_specific_ada_features code-generation-for-array-aggregates890792 + Ref: 426890792 + Ref: gnat_rm/implementation_of_specific_ada_features id7890792 + Ref: 427890792 + Node: Static constant aggregates with static bounds892215 + Ref: gnat_rm/implementation_of_specific_ada_features id8892395 + Ref: 428892395 + Ref: gnat_rm/implementation_of_specific_ada_features static-constant-aggregates-with-static-bounds892395 + Ref: 429892395 + Node: Constant aggregates with unconstrained nominal types893798 + Ref: gnat_rm/implementation_of_specific_ada_features constant-aggregates-with-unconstrained-nominal-types894016 + Ref: 42a894016 + Ref: gnat_rm/implementation_of_specific_ada_features id9894016 + Ref: 42b894016 + Node: Aggregates with static bounds894516 + Ref: gnat_rm/implementation_of_specific_ada_features aggregates-with-static-bounds894721 + Ref: 42c894721 + Ref: gnat_rm/implementation_of_specific_ada_features id10894721 + Ref: 42d894721 + Node: Aggregates with nonstatic bounds895355 + Ref: gnat_rm/implementation_of_specific_ada_features aggregates-with-nonstatic-bounds895543 + Ref: 42e895543 + Ref: gnat_rm/implementation_of_specific_ada_features id11895543 + Ref: 42f895543 + Node: Aggregates in assignment statements895951 + Ref: gnat_rm/implementation_of_specific_ada_features aggregates-in-assignment-statements896101 + Ref: 430896101 + Ref: gnat_rm/implementation_of_specific_ada_features id12896101 + Ref: 431896101 + Node: The Size of Discriminated Records with Default Discriminants897359 + Ref: gnat_rm/implementation_of_specific_ada_features id13897582 + Ref: 432897582 + Ref: gnat_rm/implementation_of_specific_ada_features the-size-of-discriminated-records-with-default-discriminants897582 + Ref: 433897582 + Node: Image Values For Nonscalar Types900526 + Ref: gnat_rm/implementation_of_specific_ada_features id14900759 + Ref: 434900759 + Ref: gnat_rm/implementation_of_specific_ada_features image-values-for-nonscalar-types900759 + Ref: 435900759 + Node: Strict Conformance to the Ada Reference Manual901822 + Ref: gnat_rm/implementation_of_specific_ada_features id15901986 + Ref: 436901986 + Ref: gnat_rm/implementation_of_specific_ada_features strict-conformance-to-the-ada-reference-manual901986 + Ref: 437901986 + Node: Implementation of Ada 2012 Features903417 + Ref: gnat_rm/implementation_of_ada_2012_features doc903577 + Ref: 438903577 + Ref: gnat_rm/implementation_of_ada_2012_features id1903577 + Ref: 439903577 + Ref: gnat_rm/implementation_of_ada_2012_features implementation-of-ada-2012-features903577 + Ref: 14903577 + Node: Security Hardening Features952025 + Ref: gnat_rm/security_hardening_features doc952166 + Ref: 43a952166 + Ref: gnat_rm/security_hardening_features id1952166 + Ref: 43b952166 + Ref: gnat_rm/security_hardening_features security-hardening-features952166 + Ref: 15952166 + Node: Register Scrubbing952402 + Ref: gnat_rm/security_hardening_features register-scrubbing952509 + Ref: 43c952509 + Node: Stack Scrubbing953358 + Ref: gnat_rm/security_hardening_features stack-scrubbing953495 + Ref: 43d953495 + Node: Hardened Conditionals956567 + Ref: gnat_rm/security_hardening_features hardened-conditionals956677 + Ref: 43e956677 + Node: Obsolescent Features958456 + Ref: gnat_rm/obsolescent_features doc958593 + Ref: 43f958593 + Ref: gnat_rm/obsolescent_features id1958593 + Ref: 440958593 + Ref: gnat_rm/obsolescent_features obsolescent-features958593 + Ref: 16958593 + Node: pragma No_Run_Time959057 + Ref: gnat_rm/obsolescent_features id2959158 + Ref: 441959158 + Ref: gnat_rm/obsolescent_features pragma-no-run-time959158 + Ref: 442959158 + Node: pragma Ravenscar959690 + Ref: gnat_rm/obsolescent_features id3959826 + Ref: 443959826 + Ref: gnat_rm/obsolescent_features pragma-ravenscar959826 + Ref: 444959826 + Node: pragma Restricted_Run_Time960042 + Ref: gnat_rm/obsolescent_features id4960176 + Ref: 445960176 + Ref: gnat_rm/obsolescent_features pragma-restricted-run-time960176 + Ref: 446960176 + Node: pragma Task_Info960480 + Ref: gnat_rm/obsolescent_features id5960635 + Ref: 447960635 + Ref: gnat_rm/obsolescent_features pragma-task-info960635 + Ref: 448960635 + Node: package System Task_Info s-tasinf ads961500 + Ref: gnat_rm/obsolescent_features package-system-task-info961620 + Ref: 449961620 + Ref: gnat_rm/obsolescent_features package-system-task-info-s-tasinf-ads961620 + Ref: 44a961620 + Node: Compatibility and Porting Guide961986 + Ref: gnat_rm/compatibility_and_porting_guide doc962126 + Ref: 44b962126 + Ref: gnat_rm/compatibility_and_porting_guide compatibility-and-porting-guide962126 + Ref: 17962126 + Ref: gnat_rm/compatibility_and_porting_guide id1962126 + Ref: 44c962126 + Node: Writing Portable Fixed-Point Declarations962765 + Ref: gnat_rm/compatibility_and_porting_guide id2962909 + Ref: 44d962909 + Ref: gnat_rm/compatibility_and_porting_guide writing-portable-fixed-point-declarations962909 + Ref: 44e962909 + Node: Compatibility with Ada 83966807 + Ref: gnat_rm/compatibility_and_porting_guide compatibility-with-ada-83967001 + Ref: 44f967001 + Ref: gnat_rm/compatibility_and_porting_guide id3967001 + Ref: 450967001 + Node: Legal Ada 83 programs that are illegal in Ada 95967875 + Ref: gnat_rm/compatibility_and_porting_guide id4968023 + Ref: 451968023 + Ref: gnat_rm/compatibility_and_porting_guide legal-ada-83-programs-that-are-illegal-in-ada-95968023 + Ref: 452968023 + Node: More deterministic semantics972581 + Ref: gnat_rm/compatibility_and_porting_guide id5972755 + Ref: 453972755 + Ref: gnat_rm/compatibility_and_porting_guide more-deterministic-semantics972755 + Ref: 454972755 + Node: Changed semantics973683 + Ref: gnat_rm/compatibility_and_porting_guide changed-semantics973844 + Ref: 455973844 + Ref: gnat_rm/compatibility_and_porting_guide id6973844 + Ref: 456973844 + Node: Other language compatibility issues975427 + Ref: gnat_rm/compatibility_and_porting_guide id7975551 + Ref: 457975551 + Ref: gnat_rm/compatibility_and_porting_guide other-language-compatibility-issues975551 + Ref: 458975551 + Node: Compatibility between Ada 95 and Ada 2005976844 + Ref: gnat_rm/compatibility_and_porting_guide compatibility-between-ada-95-and-ada-2005977037 + Ref: 459977037 + Ref: gnat_rm/compatibility_and_porting_guide id8977037 + Ref: 45a977037 + Node: Implementation-dependent characteristics979466 + Ref: gnat_rm/compatibility_and_porting_guide id9979670 + Ref: 45b979670 + Ref: gnat_rm/compatibility_and_porting_guide implementation-dependent-characteristics979670 + Ref: 45c979670 + Node: Implementation-defined pragmas980457 + Ref: gnat_rm/compatibility_and_porting_guide id10980607 + Ref: 45d980607 + Ref: gnat_rm/compatibility_and_porting_guide implementation-defined-pragmas980607 + Ref: 45e980607 + Node: Implementation-defined attributes981591 + Ref: gnat_rm/compatibility_and_porting_guide id11981759 + Ref: 45f981759 + Ref: gnat_rm/compatibility_and_porting_guide implementation-defined-attributes981759 + Ref: 460981759 + Node: Libraries982311 + Ref: gnat_rm/compatibility_and_porting_guide id12982466 + Ref: 461982466 + Ref: gnat_rm/compatibility_and_porting_guide libraries982466 + Ref: 462982466 + Node: Elaboration order983370 + Ref: gnat_rm/compatibility_and_porting_guide elaboration-order983515 + Ref: 463983515 + Ref: gnat_rm/compatibility_and_porting_guide id13983515 + Ref: 464983515 + Node: Target-specific aspects984967 + Ref: gnat_rm/compatibility_and_porting_guide id14985094 + Ref: 465985094 + Ref: gnat_rm/compatibility_and_porting_guide target-specific-aspects985094 + Ref: 466985094 + Node: Compatibility with Other Ada Systems985857 + Ref: gnat_rm/compatibility_and_porting_guide compatibility-with-other-ada-systems986042 + Ref: 468986042 + Ref: gnat_rm/compatibility_and_porting_guide id15986042 + Ref: 469986042 + Node: Representation Clauses987586 + Ref: gnat_rm/compatibility_and_porting_guide id16987759 + Ref: 46a987759 + Ref: gnat_rm/compatibility_and_porting_guide representation-clauses987759 + Ref: 467987759 + Node: Compatibility with HP Ada 83992398 + Ref: gnat_rm/compatibility_and_porting_guide compatibility-with-hp-ada-83992526 + Ref: 46b992526 + Ref: gnat_rm/compatibility_and_porting_guide id17992526 + Ref: 46c992526 + Node: GNU Free Documentation License993404 + Ref: share/gnu_free_documentation_license doc993529 + Ref: 46d993529 + Ref: share/gnu_free_documentation_license gnu-fdl993529 + Ref: 1993529 + Ref: share/gnu_free_documentation_license gnu-free-documentation-license993529 + Ref: 46e993529 + Node: Index1016871 +  + End Tag Table + +  + Local Variables: + coding: utf-8 + End: diff -Nrcpad gcc-12.4.0/gcc/doc/gnat_ugn.info gcc-12.5.0-RC-20250704/gcc/doc/gnat_ugn.info *** gcc-12.4.0/gcc/doc/gnat_ugn.info Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/doc/gnat_ugn.info Fri Jul 4 07:44:56 2025 *************** *** 0 **** --- 1,24948 ---- + This is gnat_ugn.info, produced by makeinfo version 6.5 from + gnat_ugn.texi. + + GNAT User’s Guide for Native Platforms , Jan 03, 2022 + + AdaCore + + Copyright © 2008-2022, Free Software Foundation + + INFO-DIR-SECTION GNU Ada Tools + START-INFO-DIR-ENTRY + * gnat_ugn: (gnat_ugn.info). gnat_ugn + END-INFO-DIR-ENTRY + + + Generated by Sphinx 4.3.1. + +  + File: gnat_ugn.info, Node: Top, Next: About This Guide, Up: (dir) + + GNAT User’s Guide for Native Platforms + ************************************** + + GNAT User’s Guide for Native Platforms , Jan 03, 2022 + + AdaCore + + Copyright © 2008-2022, Free Software Foundation + + `GNAT, The GNU Ada Development Environment' + + GCC version 12.4.1 + AdaCore + + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.3 or + any later version published by the Free Software Foundation; with no + Invariant Sections, with the Front-Cover Texts being “GNAT User’s Guide + for Native Platforms”, and with no Back-Cover Texts. A copy of the + license is included in the section entitled *note GNU Free Documentation + License: 1. + + * Menu: + + * About This Guide:: + * Getting Started with GNAT:: + * The GNAT Compilation Model:: + * Building Executable Programs with GNAT:: + * GNAT Utility Programs:: + * GNAT and Program Execution:: + * Platform-Specific Information:: + * Example of Binder Output File:: + * Elaboration Order Handling in GNAT:: + * Inline Assembler:: + * GNU Free Documentation License:: + * Index:: + + — The Detailed Node Listing — + + About This Guide + + * What This Guide Contains:: + * What You Should Know before Reading This Guide:: + * Related Information:: + * Conventions:: + + Getting Started with GNAT + + * System Requirements:: + * Running GNAT:: + * Running a Simple Ada Program:: + * Running a Program with Multiple Units:: + + The GNAT Compilation Model + + * Source Representation:: + * Foreign Language Representation:: + * File Naming Topics and Utilities:: + * Configuration Pragmas:: + * Generating Object Files:: + * Source Dependencies:: + * The Ada Library Information Files:: + * Binding an Ada Program:: + * GNAT and Libraries:: + * Conditional Compilation:: + * Mixed Language Programming:: + * GNAT and Other Compilation Models:: + * Using GNAT Files with External Tools:: + + Foreign Language Representation + + * Latin-1:: + * Other 8-Bit Codes:: + * Wide_Character Encodings:: + * Wide_Wide_Character Encodings:: + + File Naming Topics and Utilities + + * File Naming Rules:: + * Using Other File Names:: + * Alternative File Naming Schemes:: + * Handling Arbitrary File Naming Conventions with gnatname:: + * File Name Krunching with gnatkr:: + * Renaming Files with gnatchop:: + + Handling Arbitrary File Naming Conventions with gnatname + + * Arbitrary File Naming Conventions:: + * Running gnatname:: + * Switches for gnatname:: + * Examples of gnatname Usage:: + + File Name Krunching with gnatkr + + * About gnatkr:: + * Using gnatkr:: + * Krunching Method:: + * Examples of gnatkr Usage:: + + Renaming Files with gnatchop + + * Handling Files with Multiple Units:: + * Operating gnatchop in Compilation Mode:: + * Command Line for gnatchop:: + * Switches for gnatchop:: + * Examples of gnatchop Usage:: + + Configuration Pragmas + + * Handling of Configuration Pragmas:: + * The Configuration Pragmas Files:: + + GNAT and Libraries + + * Introduction to Libraries in GNAT:: + * General Ada Libraries:: + * Stand-alone Ada Libraries:: + * Rebuilding the GNAT Run-Time Library:: + + General Ada Libraries + + * Building a library:: + * Installing a library:: + * Using a library:: + + Stand-alone Ada Libraries + + * Introduction to Stand-alone Libraries:: + * Building a Stand-alone Library:: + * Creating a Stand-alone Library to be used in a non-Ada context:: + * Restrictions in Stand-alone Libraries:: + + Conditional Compilation + + * Modeling Conditional Compilation in Ada:: + * Preprocessing with gnatprep:: + * Integrated Preprocessing:: + + Modeling Conditional Compilation in Ada + + * Use of Boolean Constants:: + * Debugging - A Special Case:: + * Conditionalizing Declarations:: + * Use of Alternative Implementations:: + * Preprocessing:: + + Preprocessing with gnatprep + + * Preprocessing Symbols:: + * Using gnatprep:: + * Switches for gnatprep:: + * Form of Definitions File:: + * Form of Input Text for gnatprep:: + + Mixed Language Programming + + * Interfacing to C:: + * Calling Conventions:: + * Building Mixed Ada and C++ Programs:: + * Generating Ada Bindings for C and C++ headers:: + * Generating C Headers for Ada Specifications:: + + Building Mixed Ada and C++ Programs + + * Interfacing to C++:: + * Linking a Mixed C++ & Ada Program:: + * A Simple Example:: + * Interfacing with C++ constructors:: + * Interfacing with C++ at the Class Level:: + + Generating Ada Bindings for C and C++ headers + + * Running the Binding Generator:: + * Generating Bindings for C++ Headers:: + * Switches:: + + Generating C Headers for Ada Specifications + + * Running the C Header Generator:: + + GNAT and Other Compilation Models + + * Comparison between GNAT and C/C++ Compilation Models:: + * Comparison between GNAT and Conventional Ada Library Models:: + + Using GNAT Files with External Tools + + * Using Other Utility Programs with GNAT:: + * The External Symbol Naming Scheme of GNAT:: + + Building Executable Programs with GNAT + + * Building with gnatmake:: + * Compiling with gcc:: + * Compiler Switches:: + * Linker Switches:: + * Binding with gnatbind:: + * Linking with gnatlink:: + * Using the GNU make Utility:: + + Building with gnatmake + + * Running gnatmake:: + * Switches for gnatmake:: + * Mode Switches for gnatmake:: + * Notes on the Command Line:: + * How gnatmake Works:: + * Examples of gnatmake Usage:: + + Compiling with gcc + + * Compiling Programs:: + * Search Paths and the Run-Time Library (RTL): Search Paths and the Run-Time Library RTL. + * Order of Compilation Issues:: + * Examples:: + + Compiler Switches + + * Alphabetical List of All Switches:: + * Output and Error Message Control:: + * Warning Message Control:: + * Debugging and Assertion Control:: + * Validity Checking:: + * Style Checking:: + * Run-Time Checks:: + * Using gcc for Syntax Checking:: + * Using gcc for Semantic Checking:: + * Compiling Different Versions of Ada:: + * Character Set Control:: + * File Naming Control:: + * Subprogram Inlining Control:: + * Auxiliary Output Control:: + * Debugging Control:: + * Exception Handling Control:: + * Units to Sources Mapping Files:: + * Code Generation Control:: + + Binding with gnatbind + + * Running gnatbind:: + * Switches for gnatbind:: + * Command-Line Access:: + * Search Paths for gnatbind:: + * Examples of gnatbind Usage:: + + Switches for gnatbind + + * Consistency-Checking Modes:: + * Binder Error Message Control:: + * Elaboration Control:: + * Output Control:: + * Dynamic Allocation Control:: + * Binding with Non-Ada Main Programs:: + * Binding Programs with No Main Subprogram:: + + Linking with gnatlink + + * Running gnatlink:: + * Switches for gnatlink:: + + Using the GNU make Utility + + * Using gnatmake in a Makefile:: + * Automatically Creating a List of Directories:: + * Generating the Command Line Switches:: + * Overcoming Command Line Length Limits:: + + GNAT Utility Programs + + * The File Cleanup Utility gnatclean:: + * The GNAT Library Browser gnatls:: + + The File Cleanup Utility gnatclean + + * Running gnatclean:: + * Switches for gnatclean:: + + The GNAT Library Browser gnatls + + * Running gnatls:: + * Switches for gnatls:: + * Example of gnatls Usage:: + + GNAT and Program Execution + + * Running and Debugging Ada Programs:: + * Profiling:: + * Improving Performance:: + * Overflow Check Handling in GNAT:: + * Performing Dimensionality Analysis in GNAT:: + * Stack Related Facilities:: + * Memory Management Issues:: + + Running and Debugging Ada Programs + + * The GNAT Debugger GDB:: + * Running GDB:: + * Introduction to GDB Commands:: + * Using Ada Expressions:: + * Calling User-Defined Subprograms:: + * Using the next Command in a Function:: + * Stopping When Ada Exceptions Are Raised:: + * Ada Tasks:: + * Debugging Generic Units:: + * Remote Debugging with gdbserver:: + * GNAT Abnormal Termination or Failure to Terminate:: + * Naming Conventions for GNAT Source Files:: + * Getting Internal Debugging Information:: + * Stack Traceback:: + * Pretty-Printers for the GNAT runtime:: + + Stack Traceback + + * Non-Symbolic Traceback:: + * Symbolic Traceback:: + + Profiling + + * Profiling an Ada Program with gprof:: + + Profiling an Ada Program with gprof + + * Compilation for profiling:: + * Program execution:: + * Running gprof:: + * Interpretation of profiling results:: + + Improving Performance + + * Performance Considerations:: + * Text_IO Suggestions:: + * Reducing Size of Executables with Unused Subprogram/Data Elimination:: + + Performance Considerations + + * Controlling Run-Time Checks:: + * Use of Restrictions:: + * Optimization Levels:: + * Debugging Optimized Code:: + * Inlining of Subprograms:: + * Floating Point Operations:: + * Vectorization of loops:: + * Other Optimization Switches:: + * Optimization and Strict Aliasing:: + * Aliased Variables and Optimization:: + * Atomic Variables and Optimization:: + * Passive Task Optimization:: + + Reducing Size of Executables with Unused Subprogram/Data Elimination + + * About unused subprogram/data elimination:: + * Compilation options:: + * Example of unused subprogram/data elimination:: + + Overflow Check Handling in GNAT + + * Background:: + * Management of Overflows in GNAT:: + * Specifying the Desired Mode:: + * Default Settings:: + * Implementation Notes:: + + Stack Related Facilities + + * Stack Overflow Checking:: + * Static Stack Usage Analysis:: + * Dynamic Stack Usage Analysis:: + + Memory Management Issues + + * Some Useful Memory Pools:: + * The GNAT Debug Pool Facility:: + + Platform-Specific Information + + * Run-Time Libraries:: + * Specifying a Run-Time Library:: + * GNU/Linux Topics:: + * Microsoft Windows Topics:: + * Mac OS Topics:: + + Run-Time Libraries + + * Summary of Run-Time Configurations:: + + Specifying a Run-Time Library + + * Choosing the Scheduling Policy:: + + GNU/Linux Topics + + * Required Packages on GNU/Linux:: + * A GNU/Linux Debug Quirk:: + + Microsoft Windows Topics + + * Using GNAT on Windows:: + * Using a network installation of GNAT:: + * CONSOLE and WINDOWS subsystems:: + * Temporary Files:: + * Disabling Command Line Argument Expansion:: + * Windows Socket Timeouts:: + * Mixed-Language Programming on Windows:: + * Windows Specific Add-Ons:: + + Mixed-Language Programming on Windows + + * Windows Calling Conventions:: + * Introduction to Dynamic Link Libraries (DLLs): Introduction to Dynamic Link Libraries DLLs. + * Using DLLs with GNAT:: + * Building DLLs with GNAT Project files:: + * Building DLLs with GNAT:: + * Building DLLs with gnatdll:: + * Ada DLLs and Finalization:: + * Creating a Spec for Ada DLLs:: + * GNAT and Windows Resources:: + * Using GNAT DLLs from Microsoft Visual Studio Applications:: + * Debugging a DLL:: + * Setting Stack Size from gnatlink:: + * Setting Heap Size from gnatlink:: + + Windows Calling Conventions + + * C Calling Convention:: + * Stdcall Calling Convention:: + * Win32 Calling Convention:: + * DLL Calling Convention:: + + Using DLLs with GNAT + + * Creating an Ada Spec for the DLL Services:: + * Creating an Import Library:: + + Building DLLs with gnatdll + + * Limitations When Using Ada DLLs from Ada:: + * Exporting Ada Entities:: + * Ada DLLs and Elaboration:: + + Creating a Spec for Ada DLLs + + * Creating the Definition File:: + * Using gnatdll:: + + GNAT and Windows Resources + + * Building Resources:: + * Compiling Resources:: + * Using Resources:: + + Debugging a DLL + + * Program and DLL Both Built with GCC/GNAT:: + * Program Built with Foreign Tools and DLL Built with GCC/GNAT:: + + Windows Specific Add-Ons + + * Win32Ada:: + * wPOSIX:: + + Mac OS Topics + + * Codesigning the Debugger:: + + Elaboration Order Handling in GNAT + + * Elaboration Code:: + * Elaboration Order:: + * Checking the Elaboration Order:: + * Controlling the Elaboration Order in Ada:: + * Controlling the Elaboration Order in GNAT:: + * Mixing Elaboration Models:: + * ABE Diagnostics:: + * SPARK Diagnostics:: + * Elaboration Circularities:: + * Resolving Elaboration Circularities:: + * Elaboration-related Compiler Switches:: + * Summary of Procedures for Elaboration Control:: + * Inspecting the Chosen Elaboration Order:: + + Inline Assembler + + * Basic Assembler Syntax:: + * A Simple Example of Inline Assembler:: + * Output Variables in Inline Assembler:: + * Input Variables in Inline Assembler:: + * Inlining Inline Assembler Code:: + * Other Asm Functionality:: + + Other Asm Functionality + + * The Clobber Parameter:: + * The Volatile Parameter:: + + +  + File: gnat_ugn.info, Node: About This Guide, Next: Getting Started with GNAT, Prev: Top, Up: Top + + 1 About This Guide + ****************** + + This guide describes the use of GNAT, a compiler and software + development toolset for the full Ada programming language. It documents + the features of the compiler and tools, and explains how to use them to + build Ada applications. + + GNAT implements Ada 95, Ada 2005, Ada 2012, and Ada 202x, and it may + also be invoked in Ada 83 compatibility mode. By default, GNAT assumes + Ada 2012, but you can override with a compiler switch (*note Compiling + Different Versions of Ada: 6.) to explicitly specify the language + version. Throughout this manual, references to ‘Ada’ without a year + suffix apply to all Ada versions of the language, starting with Ada 95. + + * Menu: + + * What This Guide Contains:: + * What You Should Know before Reading This Guide:: + * Related Information:: + * Conventions:: + +  + File: gnat_ugn.info, Node: What This Guide Contains, Next: What You Should Know before Reading This Guide, Up: About This Guide + + 1.1 What This Guide Contains + ============================ + + This guide contains the following chapters: + + * *note Getting Started with GNAT: 8. describes how to get started + compiling and running Ada programs with the GNAT Ada programming + environment. + + * *note The GNAT Compilation Model: 9. describes the compilation + model used by GNAT. + + * *note Building Executable Programs with GNAT: a. describes how to + use the main GNAT tools to build executable programs, and it also + gives examples of using the GNU make utility with GNAT. + + * *note GNAT Utility Programs: b. explains the various utility + programs that are included in the GNAT environment + + * *note GNAT and Program Execution: c. covers a number of topics + related to running, debugging, and tuning the performace of + programs developed with GNAT + + Appendices cover several additional topics: + + * *note Platform-Specific Information: d. describes the different + run-time library implementations and also presents information on + how to use GNAT on several specific platforms + + * *note Example of Binder Output File: e. shows the source code for + the binder output file for a sample program. + + * *note Elaboration Order Handling in GNAT: f. describes how GNAT + helps you deal with elaboration order issues. + + * *note Inline Assembler: 10. shows how to use the inline assembly + facility in an Ada program. + +  + File: gnat_ugn.info, Node: What You Should Know before Reading This Guide, Next: Related Information, Prev: What This Guide Contains, Up: About This Guide + + 1.2 What You Should Know before Reading This Guide + ================================================== + + This guide assumes a basic familiarity with the Ada 95 language, as + described in the International Standard ANSI/ISO/IEC-8652:1995, January + 1995. Reference manuals for Ada 95, Ada 2005, and Ada 2012 are included + in the GNAT documentation package. + +  + File: gnat_ugn.info, Node: Related Information, Next: Conventions, Prev: What You Should Know before Reading This Guide, Up: About This Guide + + 1.3 Related Information + ======================= + + For further information about Ada and related tools, please refer to the + following documents: + + * ‘Ada 95 Reference Manual’, ‘Ada 2005 Reference Manual’, and ‘Ada + 2012 Reference Manual’, which contain reference material for the + several revisions of the Ada language standard. + + * ‘GNAT Reference_Manual’, which contains all reference material for + the GNAT implementation of Ada. + + * ‘Using GNAT Studio’, which describes the GNAT Studio Integrated + Development Environment. + + * ‘GNAT Studio Tutorial’, which introduces the main GNAT Studio + features through examples. + + * ‘Debugging with GDB’, for all details on the use of the GNU + source-level debugger. + + * ‘GNU Emacs Manual’, for full information on the extensible editor + and programming environment Emacs. + +  + File: gnat_ugn.info, Node: Conventions, Prev: Related Information, Up: About This Guide + + 1.4 Conventions + =============== + + Following are examples of the typographical and graphic conventions used + in this guide: + + * ‘Functions’, ‘utility program names’, ‘standard names’, and + ‘classes’. + + * ‘Option flags’ + + * ‘File names’ + + * ‘Variables’ + + * `Emphasis' + + * [optional information or parameters] + + * Examples are described by text + + and then shown this way. + + * Commands that are entered by the user are shown as preceded by a + prompt string comprising the ‘$’ character followed by a space. + + * Full file names are shown with the ‘/’ character as the directory + separator; e.g., ‘parent-dir/subdir/myfile.adb’. If you are using + GNAT on a Windows platform, please note that the ‘\’ character + should be used instead. + +  + File: gnat_ugn.info, Node: Getting Started with GNAT, Next: The GNAT Compilation Model, Prev: About This Guide, Up: Top + + 2 Getting Started with GNAT + *************************** + + This chapter describes how to use GNAT’s command line interface to build + executable Ada programs. On most platforms a visually oriented + Integrated Development Environment is also available: GNAT Studio. GNAT + Studio offers a graphical “look and feel”, support for development in + other programming languages, comprehensive browsing features, and many + other capabilities. For information on GNAT Studio please refer to the + ‘GNAT Studio documentation’. + + * Menu: + + * System Requirements:: + * Running GNAT:: + * Running a Simple Ada Program:: + * Running a Program with Multiple Units:: + +  + File: gnat_ugn.info, Node: System Requirements, Next: Running GNAT, Up: Getting Started with GNAT + + 2.1 System Requirements + ======================= + + Even though any machine can run the GNAT toolset and GNAT Studio IDE, in + order to get the best experience, we recommend using a machine with as + many cores as possible since all individual compilations can run in + parallel. A comfortable setup for a compiler server is a machine with + 24 physical cores or more, with at least 48 GB of memory (2 GB per + core). + + For a desktop machine, a minimum of 4 cores is recommended (8 + preferred), with at least 2GB per core (so 8 to 16GB). + + In addition, for running and navigating sources in GNAT Studio smoothly, + we recommend at least 1.5 GB plus 3 GB of RAM per 1 million source line + of code. In other words, we recommend at least 3 GB for for 500K lines + of code and 7.5 GB for 2 million lines of code. + + Note that using local and fast drives will also make a difference in + terms of build and link time. Network drives such as NFS, SMB, or + worse, configuration management filesystems (such as ClearCase dynamic + views) should be avoided as much as possible and will produce very + degraded performance (typically 2 to 3 times slower than on local fast + drives). If such slow drives cannot be avoided for accessing the source + code, then you should at least configure your project file so that the + result of the compilation is stored on a drive local to the machine + performing the run. This can be achieved by setting the ‘Object_Dir’ + project file attribute. + +  + File: gnat_ugn.info, Node: Running GNAT, Next: Running a Simple Ada Program, Prev: System Requirements, Up: Getting Started with GNAT + + 2.2 Running GNAT + ================ + + Three steps are needed to create an executable file from an Ada source + file: + + * The source file(s) must be compiled. + + * The file(s) must be bound using the GNAT binder. + + * All appropriate object files must be linked to produce an + executable. + + All three steps are most commonly handled by using the ‘gnatmake’ + utility program that, given the name of the main program, automatically + performs the necessary compilation, binding and linking steps. + +  + File: gnat_ugn.info, Node: Running a Simple Ada Program, Next: Running a Program with Multiple Units, Prev: Running GNAT, Up: Getting Started with GNAT + + 2.3 Running a Simple Ada Program + ================================ + + Any text editor may be used to prepare an Ada program. (If Emacs is + used, the optional Ada mode may be helpful in laying out the program.) + The program text is a normal text file. We will assume in our initial + example that you have used your editor to prepare the following standard + format text file: + + with Ada.Text_IO; use Ada.Text_IO; + procedure Hello is + begin + Put_Line ("Hello WORLD!"); + end Hello; + + This file should be named ‘hello.adb’. With the normal default file + naming conventions, GNAT requires that each file contain a single + compilation unit whose file name is the unit name, with periods replaced + by hyphens; the extension is ‘ads’ for a spec and ‘adb’ for a body. You + can override this default file naming convention by use of the special + pragma ‘Source_File_Name’ (for further information please see *note + Using Other File Names: 1c.). Alternatively, if you want to rename your + files according to this default convention, which is probably more + convenient if you will be using GNAT for all your compilations, then the + ‘gnatchop’ utility can be used to generate correctly-named source files + (see *note Renaming Files with gnatchop: 1d.). + + You can compile the program using the following command (‘$’ is used as + the command prompt in the examples in this document): + + $ gcc -c hello.adb + + ‘gcc’ is the command used to run the compiler. This compiler is capable + of compiling programs in several languages, including Ada and C. It + assumes that you have given it an Ada program if the file extension is + either ‘.ads’ or ‘.adb’, and it will then call the GNAT compiler to + compile the specified file. + + The ‘-c’ switch is required. It tells ‘gcc’ to only do a compilation. + (For C programs, ‘gcc’ can also do linking, but this capability is not + used directly for Ada programs, so the ‘-c’ switch must always be + present.) + + This compile command generates a file ‘hello.o’, which is the object + file corresponding to your Ada program. It also generates an ‘Ada + Library Information’ file ‘hello.ali’, which contains additional + information used to check that an Ada program is consistent. + + To build an executable file, use either ‘gnatmake’ or gprbuild with the + name of the main file: these tools are builders that will take care of + all the necessary build steps in the correct order. In particular, + these builders automatically recompile any sources that have been + modified since they were last compiled, or sources that depend on such + modified sources, so that ‘version skew’ is avoided. + + $ gnatmake hello.adb + + The result is an executable program called ‘hello’, which can be run by + entering: + + $ hello + + assuming that the current directory is on the search path for executable + programs. + + and, if all has gone well, you will see: + + Hello WORLD! + + appear in response to this command. + +  + File: gnat_ugn.info, Node: Running a Program with Multiple Units, Prev: Running a Simple Ada Program, Up: Getting Started with GNAT + + 2.4 Running a Program with Multiple Units + ========================================= + + Consider a slightly more complicated example that has three files: a + main program, and the spec and body of a package: + + package Greetings is + procedure Hello; + procedure Goodbye; + end Greetings; + + with Ada.Text_IO; use Ada.Text_IO; + package body Greetings is + procedure Hello is + begin + Put_Line ("Hello WORLD!"); + end Hello; + + procedure Goodbye is + begin + Put_Line ("Goodbye WORLD!"); + end Goodbye; + end Greetings; + + with Greetings; + procedure Gmain is + begin + Greetings.Hello; + Greetings.Goodbye; + end Gmain; + + Following the one-unit-per-file rule, place this program in the + following three separate files: + + `greetings.ads' + + spec of package ‘Greetings’ + + `greetings.adb' + + body of package ‘Greetings’ + + `gmain.adb' + + body of main program + + Note that there is no required order of compilation when using GNAT. In + particular it is perfectly fine to compile the main program first. + Also, it is not necessary to compile package specs in the case where + there is an accompanying body; you only need to compile the body. If + you want to submit these files to the compiler for semantic checking and + not code generation, then use the ‘-gnatc’ switch: + + $ gcc -c greetings.ads -gnatc + + Although the compilation can be done in separate steps, in practice it + is almost always more convenient to use the ‘gnatmake’ or ‘gprbuild’ + tools: + + $ gnatmake gmain.adb + +  + File: gnat_ugn.info, Node: The GNAT Compilation Model, Next: Building Executable Programs with GNAT, Prev: Getting Started with GNAT, Up: Top + + 3 The GNAT Compilation Model + **************************** + + This chapter describes the compilation model used by GNAT. Although + similar to that used by other languages such as C and C++, this model is + substantially different from the traditional Ada compilation models, + which are based on a centralized program library. The chapter covers + the following material: + + * Topics related to source file makeup and naming + + * *note Source Representation: 22. + + * *note Foreign Language Representation: 23. + + * *note File Naming Topics and Utilities: 24. + + * *note Configuration Pragmas: 25. + + * *note Generating Object Files: 26. + + * *note Source Dependencies: 27. + + * *note The Ada Library Information Files: 28. + + * *note Binding an Ada Program: 29. + + * *note GNAT and Libraries: 2a. + + * *note Conditional Compilation: 2b. + + * *note Mixed Language Programming: 2c. + + * *note GNAT and Other Compilation Models: 2d. + + * *note Using GNAT Files with External Tools: 2e. + + * Menu: + + * Source Representation:: + * Foreign Language Representation:: + * File Naming Topics and Utilities:: + * Configuration Pragmas:: + * Generating Object Files:: + * Source Dependencies:: + * The Ada Library Information Files:: + * Binding an Ada Program:: + * GNAT and Libraries:: + * Conditional Compilation:: + * Mixed Language Programming:: + * GNAT and Other Compilation Models:: + * Using GNAT Files with External Tools:: + +  + File: gnat_ugn.info, Node: Source Representation, Next: Foreign Language Representation, Up: The GNAT Compilation Model + + 3.1 Source Representation + ========================= + + Ada source programs are represented in standard text files, using + Latin-1 coding. Latin-1 is an 8-bit code that includes the familiar + 7-bit ASCII set, plus additional characters used for representing + foreign languages (see *note Foreign Language Representation: 23. for + support of non-USA character sets). The format effector characters are + represented using their standard ASCII encodings, as follows: + + Character Effect Code + + + ‘VT’ Vertical tab ‘16#0B#’ + + + ‘HT’ Horizontal tab ‘16#09#’ + + + ‘CR’ Carriage return ‘16#0D#’ + + + ‘LF’ Line feed ‘16#0A#’ + + + ‘FF’ Form feed ‘16#0C#’ + + + Source files are in standard text file format. In addition, GNAT will + recognize a wide variety of stream formats, in which the end of physical + lines is marked by any of the following sequences: ‘LF’, ‘CR’, ‘CR-LF’, + or ‘LF-CR’. This is useful in accommodating files that are imported + from other operating systems. + + The end of a source file is normally represented by the physical end of + file. However, the control character ‘16#1A#’ (‘SUB’) is also + recognized as signalling the end of the source file. Again, this is + provided for compatibility with other operating systems where this code + is used to represent the end of file. + + Each file contains a single Ada compilation unit, including any pragmas + associated with the unit. For example, this means you must place a + package declaration (a package `spec') and the corresponding body in + separate files. An Ada `compilation' (which is a sequence of + compilation units) is represented using a sequence of files. Similarly, + you will place each subunit or child unit in a separate file. + +  + File: gnat_ugn.info, Node: Foreign Language Representation, Next: File Naming Topics and Utilities, Prev: Source Representation, Up: The GNAT Compilation Model + + 3.2 Foreign Language Representation + =================================== + + GNAT supports the standard character sets defined in Ada as well as + several other non-standard character sets for use in localized versions + of the compiler (*note Character Set Control: 31.). + + * Menu: + + * Latin-1:: + * Other 8-Bit Codes:: + * Wide_Character Encodings:: + * Wide_Wide_Character Encodings:: + +  + File: gnat_ugn.info, Node: Latin-1, Next: Other 8-Bit Codes, Up: Foreign Language Representation + + 3.2.1 Latin-1 + ------------- + + The basic character set is Latin-1. This character set is defined by + ISO standard 8859, part 1. The lower half (character codes ‘16#00#’ … + ‘16#7F#)’ is identical to standard ASCII coding, but the upper half is + used to represent additional characters. These include extended letters + used by European languages, such as French accents, the vowels with + umlauts used in German, and the extra letter A-ring used in Swedish. + + For a complete list of Latin-1 codes and their encodings, see the source + file of library unit ‘Ada.Characters.Latin_1’ in file ‘a-chlat1.ads’. + You may use any of these extended characters freely in character or + string literals. In addition, the extended characters that represent + letters can be used in identifiers. + +  + File: gnat_ugn.info, Node: Other 8-Bit Codes, Next: Wide_Character Encodings, Prev: Latin-1, Up: Foreign Language Representation + + 3.2.2 Other 8-Bit Codes + ----------------------- + + GNAT also supports several other 8-bit coding schemes: + + `ISO 8859-2 (Latin-2)' + + Latin-2 letters allowed in identifiers, with uppercase and + lowercase equivalence. + + `ISO 8859-3 (Latin-3)' + + Latin-3 letters allowed in identifiers, with uppercase and + lowercase equivalence. + + `ISO 8859-4 (Latin-4)' + + Latin-4 letters allowed in identifiers, with uppercase and + lowercase equivalence. + + `ISO 8859-5 (Cyrillic)' + + ISO 8859-5 letters (Cyrillic) allowed in identifiers, with + uppercase and lowercase equivalence. + + `ISO 8859-15 (Latin-9)' + + ISO 8859-15 (Latin-9) letters allowed in identifiers, with + uppercase and lowercase equivalence + + `IBM PC (code page 437)' + + This code page is the normal default for PCs in the U.S. It + corresponds to the original IBM PC character set. This set has + some, but not all, of the extended Latin-1 letters, but these + letters do not have the same encoding as Latin-1. In this mode, + these letters are allowed in identifiers with uppercase and + lowercase equivalence. + + `IBM PC (code page 850)' + + This code page is a modification of 437 extended to include all the + Latin-1 letters, but still not with the usual Latin-1 encoding. In + this mode, all these letters are allowed in identifiers with + uppercase and lowercase equivalence. + + `Full Upper 8-bit' + + Any character in the range 80-FF allowed in identifiers, and all + are considered distinct. In other words, there are no uppercase + and lowercase equivalences in this range. This is useful in + conjunction with certain encoding schemes used for some foreign + character sets (e.g., the typical method of representing Chinese + characters on the PC). + + `No Upper-Half' + + No upper-half characters in the range 80-FF are allowed in + identifiers. This gives Ada 83 compatibility for identifier names. + + For precise data on the encodings permitted, and the uppercase and + lowercase equivalences that are recognized, see the file ‘csets.adb’ in + the GNAT compiler sources. You will need to obtain a full source + release of GNAT to obtain this file. + +  + File: gnat_ugn.info, Node: Wide_Character Encodings, Next: Wide_Wide_Character Encodings, Prev: Other 8-Bit Codes, Up: Foreign Language Representation + + 3.2.3 Wide_Character Encodings + ------------------------------ + + GNAT allows wide character codes to appear in character and string + literals, and also optionally in identifiers, by means of the following + possible encoding schemes: + + `Hex Coding' + + In this encoding, a wide character is represented by the following + five character sequence: + + ESC a b c d + + where ‘a’, ‘b’, ‘c’, ‘d’ are the four hexadecimal characters (using + uppercase letters) of the wide character code. For example, ESC + A345 is used to represent the wide character with code ‘16#A345#’. + This scheme is compatible with use of the full Wide_Character set. + + `Upper-Half Coding' + + The wide character with encoding ‘16#abcd#’ where the upper bit is + on (in other words, ‘a’ is in the range 8-F) is represented as two + bytes, ‘16#ab#’ and ‘16#cd#’. The second byte cannot be a format + control character, but is not required to be in the upper half. + This method can be also used for shift-JIS or EUC, where the + internal coding matches the external coding. + + `Shift JIS Coding' + + A wide character is represented by a two-character sequence, + ‘16#ab#’ and ‘16#cd#’, with the restrictions described for + upper-half encoding as described above. The internal character + code is the corresponding JIS character according to the standard + algorithm for Shift-JIS conversion. Only characters defined in the + JIS code set table can be used with this encoding method. + + `EUC Coding' + + A wide character is represented by a two-character sequence + ‘16#ab#’ and ‘16#cd#’, with both characters being in the upper + half. The internal character code is the corresponding JIS + character according to the EUC encoding algorithm. Only characters + defined in the JIS code set table can be used with this encoding + method. + + `UTF-8 Coding' + + A wide character is represented using UCS Transformation Format 8 + (UTF-8) as defined in Annex R of ISO 10646-1/Am.2. Depending on + the character value, the representation is a one, two, or three + byte sequence: + + 16#0000#-16#007f#: 2#0xxxxxxx# + 16#0080#-16#07ff#: 2#110xxxxx# 2#10xxxxxx# + 16#0800#-16#ffff#: 2#1110xxxx# 2#10xxxxxx# 2#10xxxxxx# + + where the ‘xxx’ bits correspond to the left-padded bits of the + 16-bit character value. Note that all lower half ASCII characters + are represented as ASCII bytes and all upper half characters and + other wide characters are represented as sequences of upper-half + (The full UTF-8 scheme allows for encoding 31-bit characters as + 6-byte sequences, and in the following section on wide wide + characters, the use of these sequences is documented). + + `Brackets Coding' + + In this encoding, a wide character is represented by the following + eight character sequence: + + [ " a b c d " ] + + where ‘a’, ‘b’, ‘c’, ‘d’ are the four hexadecimal characters (using + uppercase letters) of the wide character code. For example, + [‘A345’] is used to represent the wide character with code + ‘16#A345#’. It is also possible (though not required) to use the + Brackets coding for upper half characters. For example, the code + ‘16#A3#’ can be represented as ‘['A3']’. + + This scheme is compatible with use of the full Wide_Character set, + and is also the method used for wide character encoding in some + standard ACATS (Ada Conformity Assessment Test Suite) test suite + distributions. + + Note: Some of these coding schemes do not permit the full use of + the Ada character set. For example, neither Shift JIS nor EUC + allow the use of the upper half of the Latin-1 set. + +  + File: gnat_ugn.info, Node: Wide_Wide_Character Encodings, Prev: Wide_Character Encodings, Up: Foreign Language Representation + + 3.2.4 Wide_Wide_Character Encodings + ----------------------------------- + + GNAT allows wide wide character codes to appear in character and string + literals, and also optionally in identifiers, by means of the following + possible encoding schemes: + + `UTF-8 Coding' + + A wide character is represented using UCS Transformation Format 8 + (UTF-8) as defined in Annex R of ISO 10646-1/Am.2. Depending on + the character value, the representation of character codes with + values greater than 16#FFFF# is a is a four, five, or six byte + sequence: + + 16#01_0000#-16#10_FFFF#: 11110xxx 10xxxxxx 10xxxxxx + 10xxxxxx + 16#0020_0000#-16#03FF_FFFF#: 111110xx 10xxxxxx 10xxxxxx + 10xxxxxx 10xxxxxx + 16#0400_0000#-16#7FFF_FFFF#: 1111110x 10xxxxxx 10xxxxxx + 10xxxxxx 10xxxxxx 10xxxxxx + + where the ‘xxx’ bits correspond to the left-padded bits of the + 32-bit character value. + + `Brackets Coding' + + In this encoding, a wide wide character is represented by the + following ten or twelve byte character sequence: + + [ " a b c d e f " ] + [ " a b c d e f g h " ] + + where ‘a-h’ are the six or eight hexadecimal characters (using + uppercase letters) of the wide wide character code. For example, + [“1F4567”] is used to represent the wide wide character with code + ‘16#001F_4567#’. + + This scheme is compatible with use of the full Wide_Wide_Character + set, and is also the method used for wide wide character encoding + in some standard ACATS (Ada Conformity Assessment Test Suite) test + suite distributions. + +  + File: gnat_ugn.info, Node: File Naming Topics and Utilities, Next: Configuration Pragmas, Prev: Foreign Language Representation, Up: The GNAT Compilation Model + + 3.3 File Naming Topics and Utilities + ==================================== + + GNAT has a default file naming scheme and also provides the user with a + high degree of control over how the names and extensions of the source + files correspond to the Ada compilation units that they contain. + + * Menu: + + * File Naming Rules:: + * Using Other File Names:: + * Alternative File Naming Schemes:: + * Handling Arbitrary File Naming Conventions with gnatname:: + * File Name Krunching with gnatkr:: + * Renaming Files with gnatchop:: + +  + File: gnat_ugn.info, Node: File Naming Rules, Next: Using Other File Names, Up: File Naming Topics and Utilities + + 3.3.1 File Naming Rules + ----------------------- + + The default file name is determined by the name of the unit that the + file contains. The name is formed by taking the full expanded name of + the unit and replacing the separating dots with hyphens and using + lowercase for all letters. + + An exception arises if the file name generated by the above rules starts + with one of the characters ‘a’, ‘g’, ‘i’, or ‘s’, and the second + character is a minus. In this case, the character tilde is used in + place of the minus. The reason for this special rule is to avoid + clashes with the standard names for child units of the packages System, + Ada, Interfaces, and GNAT, which use the prefixes ‘s-’, ‘a-’, ‘i-’, and + ‘g-’, respectively. + + The file extension is ‘.ads’ for a spec and ‘.adb’ for a body. The + following table shows some examples of these rules. + + Source File Ada Compilation Unit + + + ‘main.ads’ Main (spec) + + + ‘main.adb’ Main (body) + + + ‘arith_functions.ads’ Arith_Functions (package spec) + + + ‘arith_functions.adb’ Arith_Functions (package body) + + + ‘func-spec.ads’ Func.Spec (child package spec) + + + ‘func-spec.adb’ Func.Spec (child package body) + + + ‘main-sub.adb’ Sub (subunit of Main) + + + ‘a~bad.adb’ A.Bad (child package body) + + + Following these rules can result in excessively long file names if + corresponding unit names are long (for example, if child units or + subunits are heavily nested). An option is available to shorten such + long file names (called file name ‘krunching’). This may be + particularly useful when programs being developed with GNAT are to be + used on operating systems with limited file name lengths. *note Using + gnatkr: 3d. + + Of course, no file shortening algorithm can guarantee uniqueness over + all possible unit names; if file name krunching is used, it is your + responsibility to ensure no name clashes occur. Alternatively you can + specify the exact file names that you want used, as described in the + next section. Finally, if your Ada programs are migrating from a + compiler with a different naming convention, you can use the gnatchop + utility to produce source files that follow the GNAT naming conventions. + (For details see *note Renaming Files with gnatchop: 1d.) + + Note: in the case of Windows or Mac OS operating systems, case is not + significant. So for example on Windows if the canonical name is + ‘main-sub.adb’, you can use the file name ‘Main-Sub.adb’ instead. + However, case is significant for other operating systems, so for + example, if you want to use other than canonically cased file names on a + Unix system, you need to follow the procedures described in the next + section. + +  + File: gnat_ugn.info, Node: Using Other File Names, Next: Alternative File Naming Schemes, Prev: File Naming Rules, Up: File Naming Topics and Utilities + + 3.3.2 Using Other File Names + ---------------------------- + + In the previous section, we have described the default rules used by + GNAT to determine the file name in which a given unit resides. It is + often convenient to follow these default rules, and if you follow them, + the compiler knows without being explicitly told where to find all the + files it needs. + + However, in some cases, particularly when a program is imported from + another Ada compiler environment, it may be more convenient for the + programmer to specify which file names contain which units. GNAT allows + arbitrary file names to be used by means of the Source_File_Name pragma. + The form of this pragma is as shown in the following examples: + + pragma Source_File_Name (My_Utilities.Stacks, + Spec_File_Name => "myutilst_a.ada"); + pragma Source_File_name (My_Utilities.Stacks, + Body_File_Name => "myutilst.ada"); + + As shown in this example, the first argument for the pragma is the unit + name (in this example a child unit). The second argument has the form + of a named association. The identifier indicates whether the file name + is for a spec or a body; the file name itself is given by a string + literal. + + The source file name pragma is a configuration pragma, which means that + normally it will be placed in the ‘gnat.adc’ file used to hold + configuration pragmas that apply to a complete compilation environment. + For more details on how the ‘gnat.adc’ file is created and used see + *note Handling of Configuration Pragmas: 3f. + + GNAT allows completely arbitrary file names to be specified using the + source file name pragma. However, if the file name specified has an + extension other than ‘.ads’ or ‘.adb’ it is necessary to use a special + syntax when compiling the file. The name in this case must be preceded + by the special sequence ‘-x’ followed by a space and the name of the + language, here ‘ada’, as in: + + $ gcc -c -x ada peculiar_file_name.sim + + ‘gnatmake’ handles non-standard file names in the usual manner (the + non-standard file name for the main program is simply used as the + argument to gnatmake). Note that if the extension is also non-standard, + then it must be included in the ‘gnatmake’ command, it may not be + omitted. + +  + File: gnat_ugn.info, Node: Alternative File Naming Schemes, Next: Handling Arbitrary File Naming Conventions with gnatname, Prev: Using Other File Names, Up: File Naming Topics and Utilities + + 3.3.3 Alternative File Naming Schemes + ------------------------------------- + + The previous section described the use of the ‘Source_File_Name’ pragma + to allow arbitrary names to be assigned to individual source files. + However, this approach requires one pragma for each file, and especially + in large systems can result in very long ‘gnat.adc’ files, and also + create a maintenance problem. + + GNAT also provides a facility for specifying systematic file naming + schemes other than the standard default naming scheme previously + described. An alternative scheme for naming is specified by the use of + ‘Source_File_Name’ pragmas having the following format: + + pragma Source_File_Name ( + Spec_File_Name => FILE_NAME_PATTERN + [ , Casing => CASING_SPEC] + [ , Dot_Replacement => STRING_LITERAL ] ); + + pragma Source_File_Name ( + Body_File_Name => FILE_NAME_PATTERN + [ , Casing => CASING_SPEC ] + [ , Dot_Replacement => STRING_LITERAL ] ) ; + + pragma Source_File_Name ( + Subunit_File_Name => FILE_NAME_PATTERN + [ , Casing => CASING_SPEC ] + [ , Dot_Replacement => STRING_LITERAL ] ) ; + + FILE_NAME_PATTERN ::= STRING_LITERAL + CASING_SPEC ::= Lowercase | Uppercase | Mixedcase + + The ‘FILE_NAME_PATTERN’ string shows how the file name is constructed. + It contains a single asterisk character, and the unit name is + substituted systematically for this asterisk. The optional parameter + ‘Casing’ indicates whether the unit name is to be all upper-case + letters, all lower-case letters, or mixed-case. If no ‘Casing’ + parameter is used, then the default is all lower-case. + + The optional ‘Dot_Replacement’ string is used to replace any periods + that occur in subunit or child unit names. If no ‘Dot_Replacement’ + argument is used then separating dots appear unchanged in the resulting + file name. Although the above syntax indicates that the ‘Casing’ + argument must appear before the ‘Dot_Replacement’ argument, but it is + also permissible to write these arguments in the opposite order. + + As indicated, it is possible to specify different naming schemes for + bodies, specs, and subunits. Quite often the rule for subunits is the + same as the rule for bodies, in which case, there is no need to give a + separate ‘Subunit_File_Name’ rule, and in this case the ‘Body_File_name’ + rule is used for subunits as well. + + The separate rule for subunits can also be used to implement the rather + unusual case of a compilation environment (e.g., a single directory) + which contains a subunit and a child unit with the same unit name. + Although both units cannot appear in the same partition, the Ada + Reference Manual allows (but does not require) the possibility of the + two units coexisting in the same environment. + + The file name translation works in the following steps: + + * If there is a specific ‘Source_File_Name’ pragma for the given + unit, then this is always used, and any general pattern rules are + ignored. + + * If there is a pattern type ‘Source_File_Name’ pragma that applies + to the unit, then the resulting file name will be used if the file + exists. If more than one pattern matches, the latest one will be + tried first, and the first attempt resulting in a reference to a + file that exists will be used. + + * If no pattern type ‘Source_File_Name’ pragma that applies to the + unit for which the corresponding file exists, then the standard + GNAT default naming rules are used. + + As an example of the use of this mechanism, consider a commonly used + scheme in which file names are all lower case, with separating periods + copied unchanged to the resulting file name, and specs end with + ‘.1.ada’, and bodies end with ‘.2.ada’. GNAT will follow this scheme if + the following two pragmas appear: + + pragma Source_File_Name + (Spec_File_Name => ".1.ada"); + pragma Source_File_Name + (Body_File_Name => ".2.ada"); + + The default GNAT scheme is actually implemented by providing the + following default pragmas internally: + + pragma Source_File_Name + (Spec_File_Name => ".ads", Dot_Replacement => "-"); + pragma Source_File_Name + (Body_File_Name => ".adb", Dot_Replacement => "-"); + + Our final example implements a scheme typically used with one of the Ada + 83 compilers, where the separator character for subunits was ‘__’ (two + underscores), specs were identified by adding ‘_.ADA’, bodies by adding + ‘.ADA’, and subunits by adding ‘.SEP’. All file names were upper case. + Child units were not present of course since this was an Ada 83 + compiler, but it seems reasonable to extend this scheme to use the same + double underscore separator for child units. + + pragma Source_File_Name + (Spec_File_Name => "_.ADA", + Dot_Replacement => "__", + Casing = Uppercase); + pragma Source_File_Name + (Body_File_Name => ".ADA", + Dot_Replacement => "__", + Casing = Uppercase); + pragma Source_File_Name + (Subunit_File_Name => ".SEP", + Dot_Replacement => "__", + Casing = Uppercase); + +  + File: gnat_ugn.info, Node: Handling Arbitrary File Naming Conventions with gnatname, Next: File Name Krunching with gnatkr, Prev: Alternative File Naming Schemes, Up: File Naming Topics and Utilities + + 3.3.4 Handling Arbitrary File Naming Conventions with ‘gnatname’ + ---------------------------------------------------------------- + + * Menu: + + * Arbitrary File Naming Conventions:: + * Running gnatname:: + * Switches for gnatname:: + * Examples of gnatname Usage:: + +  + File: gnat_ugn.info, Node: Arbitrary File Naming Conventions, Next: Running gnatname, Up: Handling Arbitrary File Naming Conventions with gnatname + + 3.3.4.1 Arbitrary File Naming Conventions + ......................................... + + The GNAT compiler must be able to know the source file name of a + compilation unit. When using the standard GNAT default file naming + conventions (‘.ads’ for specs, ‘.adb’ for bodies), the GNAT compiler + does not need additional information. + + When the source file names do not follow the standard GNAT default file + naming conventions, the GNAT compiler must be given additional + information through a configuration pragmas file (*note Configuration + Pragmas: 25.) or a project file. When the non-standard file naming + conventions are well-defined, a small number of pragmas + ‘Source_File_Name’ specifying a naming pattern (*note Alternative File + Naming Schemes: 40.) may be sufficient. However, if the file naming + conventions are irregular or arbitrary, a number of pragma + ‘Source_File_Name’ for individual compilation units must be defined. To + help maintain the correspondence between compilation unit names and + source file names within the compiler, GNAT provides a tool ‘gnatname’ + to generate the required pragmas for a set of files. + +  + File: gnat_ugn.info, Node: Running gnatname, Next: Switches for gnatname, Prev: Arbitrary File Naming Conventions, Up: Handling Arbitrary File Naming Conventions with gnatname + + 3.3.4.2 Running ‘gnatname’ + .......................... + + The usual form of the ‘gnatname’ command is: + + $ gnatname [ switches ] naming_pattern [ naming_patterns ] + [--and [ switches ] naming_pattern [ naming_patterns ]] + + All of the arguments are optional. If invoked without any argument, + ‘gnatname’ will display its usage. + + When used with at least one naming pattern, ‘gnatname’ will attempt to + find all the compilation units in files that follow at least one of the + naming patterns. To find these compilation units, ‘gnatname’ will use + the GNAT compiler in syntax-check-only mode on all regular files. + + One or several Naming Patterns may be given as arguments to ‘gnatname’. + Each Naming Pattern is enclosed between double quotes (or single quotes + on Windows). A Naming Pattern is a regular expression similar to the + wildcard patterns used in file names by the Unix shells or the DOS + prompt. + + ‘gnatname’ may be called with several sections of directories/patterns. + Sections are separated by the switch ‘--and’. In each section, there + must be at least one pattern. If no directory is specified in a + section, the current directory (or the project directory if ‘-P’ is + used) is implied. The options other that the directory switches and the + patterns apply globally even if they are in different sections. + + Examples of Naming Patterns are: + + "*.[12].ada" + "*.ad[sb]*" + "body_*" "spec_*" + + For a more complete description of the syntax of Naming Patterns, see + the second kind of regular expressions described in ‘g-regexp.ads’ (the + ‘Glob’ regular expressions). + + When invoked without the switch ‘-P’, ‘gnatname’ will create a + configuration pragmas file ‘gnat.adc’ in the current working directory, + with pragmas ‘Source_File_Name’ for each file that contains a valid Ada + unit. + +  + File: gnat_ugn.info, Node: Switches for gnatname, Next: Examples of gnatname Usage, Prev: Running gnatname, Up: Handling Arbitrary File Naming Conventions with gnatname + + 3.3.4.3 Switches for ‘gnatname’ + ............................... + + Switches for ‘gnatname’ must precede any specified Naming Pattern. + + You may specify any of the following switches to ‘gnatname’: + + ‘--version’ + + Display Copyright and version, then exit disregarding all other + options. + + ‘--help’ + + If ‘--version’ was not used, display usage, then exit disregarding + all other options. + + ‘--subdirs=`dir'’ + + Real object, library or exec directories are subdirectories + of the specified ones. + + ‘--no-backup’ + + Do not create a backup copy of an existing project file. + + ‘--and’ + + Start another section of directories/patterns. + + ‘-c`filename'’ + + Create a configuration pragmas file ‘filename’ (instead of the + default ‘gnat.adc’). There may be zero, one or more space between + ‘-c’ and ‘filename’. ‘filename’ may include directory information. + ‘filename’ must be writable. There may be only one switch ‘-c’. + When a switch ‘-c’ is specified, no switch ‘-P’ may be specified + (see below). + + ‘-d`dir'’ + + Look for source files in directory ‘dir’. There may be zero, one + or more spaces between ‘-d’ and ‘dir’. ‘dir’ may end with ‘/**’, + that is it may be of the form ‘root_dir/**’. In this case, the + directory ‘root_dir’ and all of its subdirectories, recursively, + have to be searched for sources. When a switch ‘-d’ is specified, + the current working directory will not be searched for source + files, unless it is explicitly specified with a ‘-d’ or ‘-D’ + switch. Several switches ‘-d’ may be specified. If ‘dir’ is a + relative path, it is relative to the directory of the configuration + pragmas file specified with switch ‘-c’, or to the directory of the + project file specified with switch ‘-P’ or, if neither switch ‘-c’ + nor switch ‘-P’ are specified, it is relative to the current + working directory. The directory specified with switch ‘-d’ must + exist and be readable. + + ‘-D`filename'’ + + Look for source files in all directories listed in text file + ‘filename’. There may be zero, one or more spaces between ‘-D’ and + ‘filename’. ‘filename’ must be an existing, readable text file. + Each nonempty line in ‘filename’ must be a directory. Specifying + switch ‘-D’ is equivalent to specifying as many switches ‘-d’ as + there are nonempty lines in ‘file’. + + ‘-eL’ + + Follow symbolic links when processing project files. + + ‘-f`pattern'’ + + Foreign patterns. Using this switch, it is possible to add sources + of languages other than Ada to the list of sources of a project + file. It is only useful if a -P switch is used. For example, + + gnatname -Pprj -f"*.c" "*.ada" + + will look for Ada units in all files with the ‘.ada’ extension, and + will add to the list of file for project ‘prj.gpr’ the C files with + extension ‘.c’. + + ‘-h’ + + Output usage (help) information. The output is written to + ‘stdout’. + + ‘-P`proj'’ + + Create or update project file ‘proj’. There may be zero, one or + more space between ‘-P’ and ‘proj’. ‘proj’ may include directory + information. ‘proj’ must be writable. There may be only one + switch ‘-P’. When a switch ‘-P’ is specified, no switch ‘-c’ may + be specified. On all platforms, except on VMS, when ‘gnatname’ is + invoked for an existing project file .gpr, a backup copy of + the project file is created in the project directory with file name + .gpr.saved_x. ‘x’ is the first non negative number that + makes this backup copy a new file. + + ‘-v’ + + Verbose mode. Output detailed explanation of behavior to ‘stdout’. + This includes name of the file written, the name of the directories + to search and, for each file in those directories whose name + matches at least one of the Naming Patterns, an indication of + whether the file contains a unit, and if so the name of the unit. + + ‘-v -v’ + + Very Verbose mode. In addition to the output produced in verbose + mode, for each file in the searched directories whose name matches + none of the Naming Patterns, an indication is given that there is + no match. + + ‘-x`pattern'’ + + Excluded patterns. Using this switch, it is possible to exclude + some files that would match the name patterns. For example, + + gnatname -x "*_nt.ada" "*.ada" + + will look for Ada units in all files with the ‘.ada’ extension, + except those whose names end with ‘_nt.ada’. + +  + File: gnat_ugn.info, Node: Examples of gnatname Usage, Prev: Switches for gnatname, Up: Handling Arbitrary File Naming Conventions with gnatname + + 3.3.4.4 Examples of ‘gnatname’ Usage + .................................... + + $ gnatname -c /home/me/names.adc -d sources "[a-z]*.ada*" + + In this example, the directory ‘/home/me’ must already exist and be + writable. In addition, the directory ‘/home/me/sources’ (specified by + ‘-d sources’) must exist and be readable. + + Note the optional spaces after ‘-c’ and ‘-d’. + + $ gnatname -P/home/me/proj -x "*_nt_body.ada" + -dsources -dsources/plus -Dcommon_dirs.txt "body_*" "spec_*" + + Note that several switches ‘-d’ may be used, even in conjunction with + one or several switches ‘-D’. Several Naming Patterns and one excluded + pattern are used in this example. + +  + File: gnat_ugn.info, Node: File Name Krunching with gnatkr, Next: Renaming Files with gnatchop, Prev: Handling Arbitrary File Naming Conventions with gnatname, Up: File Naming Topics and Utilities + + 3.3.5 File Name Krunching with ‘gnatkr’ + --------------------------------------- + + This section discusses the method used by the compiler to shorten the + default file names chosen for Ada units so that they do not exceed the + maximum length permitted. It also describes the ‘gnatkr’ utility that + can be used to determine the result of applying this shortening. + + * Menu: + + * About gnatkr:: + * Using gnatkr:: + * Krunching Method:: + * Examples of gnatkr Usage:: + +  + File: gnat_ugn.info, Node: About gnatkr, Next: Using gnatkr, Up: File Name Krunching with gnatkr + + 3.3.5.1 About ‘gnatkr’ + ...................... + + The default file naming rule in GNAT is that the file name must be + derived from the unit name. The exact default rule is as follows: + + * Take the unit name and replace all dots by hyphens. + + * If such a replacement occurs in the second character position of a + name, and the first character is ‘a’, ‘g’, ‘s’, or ‘i’, then + replace the dot by the character ‘~’ (tilde) instead of a minus. + + The reason for this exception is to avoid clashes with the standard + names for children of System, Ada, Interfaces, and GNAT, which use + the prefixes ‘s-’, ‘a-’, ‘i-’, and ‘g-’, respectively. + + The ‘-gnatk`nn'’ switch of the compiler activates a ‘krunching’ circuit + that limits file names to nn characters (where nn is a decimal integer). + + The ‘gnatkr’ utility can be used to determine the krunched name for a + given file, when krunched to a specified maximum length. + +  + File: gnat_ugn.info, Node: Using gnatkr, Next: Krunching Method, Prev: About gnatkr, Up: File Name Krunching with gnatkr + + 3.3.5.2 Using ‘gnatkr’ + ...................... + + The ‘gnatkr’ command has the form: + + $ gnatkr name [ length ] + + ‘name’ is the uncrunched file name, derived from the name of the unit in + the standard manner described in the previous section (i.e., in + particular all dots are replaced by hyphens). The file name may or may + not have an extension (defined as a suffix of the form period followed + by arbitrary characters other than period). If an extension is present + then it will be preserved in the output. For example, when krunching + ‘hellofile.ads’ to eight characters, the result will be hellofil.ads. + + Note: for compatibility with previous versions of ‘gnatkr’ dots may + appear in the name instead of hyphens, but the last dot will always be + taken as the start of an extension. So if ‘gnatkr’ is given an argument + such as ‘Hello.World.adb’ it will be treated exactly as if the first + period had been a hyphen, and for example krunching to eight characters + gives the result ‘hellworl.adb’. + + Note that the result is always all lower case. Characters of the other + case are folded as required. + + ‘length’ represents the length of the krunched name. The default when + no argument is given is 8 characters. A length of zero stands for + unlimited, in other words do not chop except for system files where the + implied crunching length is always eight characters. + + The output is the krunched name. The output has an extension only if + the original argument was a file name with an extension. + +  + File: gnat_ugn.info, Node: Krunching Method, Next: Examples of gnatkr Usage, Prev: Using gnatkr, Up: File Name Krunching with gnatkr + + 3.3.5.3 Krunching Method + ........................ + + The initial file name is determined by the name of the unit that the + file contains. The name is formed by taking the full expanded name of + the unit and replacing the separating dots with hyphens and using + lowercase for all letters, except that a hyphen in the second character + position is replaced by a tilde if the first character is ‘a’, ‘i’, ‘g’, + or ‘s’. The extension is ‘.ads’ for a spec and ‘.adb’ for a body. + Krunching does not affect the extension, but the file name is shortened + to the specified length by following these rules: + + * The name is divided into segments separated by hyphens, tildes or + underscores and all hyphens, tildes, and underscores are + eliminated. If this leaves the name short enough, we are done. + + * If the name is too long, the longest segment is located (left-most + if there are two of equal length), and shortened by dropping its + last character. This is repeated until the name is short enough. + + As an example, consider the krunching of + ‘our-strings-wide_fixed.adb’ to fit the name into 8 characters as + required by some operating systems: + + our-strings-wide_fixed 22 + our strings wide fixed 19 + our string wide fixed 18 + our strin wide fixed 17 + our stri wide fixed 16 + our stri wide fixe 15 + our str wide fixe 14 + our str wid fixe 13 + our str wid fix 12 + ou str wid fix 11 + ou st wid fix 10 + ou st wi fix 9 + ou st wi fi 8 + Final file name: oustwifi.adb + + * The file names for all predefined units are always krunched to + eight characters. The krunching of these predefined units uses the + following special prefix replacements: + + Prefix Replacement + + + ‘ada-’ ‘a-’ + + + ‘gnat-’ ‘g-’ + + + ‘interfac es-’ ‘i-’ + + + ‘system-’ ‘s-’ + + + These system files have a hyphen in the second character position. + That is why normal user files replace such a character with a + tilde, to avoid confusion with system file names. + + As an example of this special rule, consider + ‘ada-strings-wide_fixed.adb’, which gets krunched as follows: + + ada-strings-wide_fixed 22 + a- strings wide fixed 18 + a- string wide fixed 17 + a- strin wide fixed 16 + a- stri wide fixed 15 + a- stri wide fixe 14 + a- str wide fixe 13 + a- str wid fixe 12 + a- str wid fix 11 + a- st wid fix 10 + a- st wi fix 9 + a- st wi fi 8 + Final file name: a-stwifi.adb + + Of course no file shortening algorithm can guarantee uniqueness over all + possible unit names, and if file name krunching is used then it is your + responsibility to ensure that no name clashes occur. The utility + program ‘gnatkr’ is supplied for conveniently determining the krunched + name of a file. + +  + File: gnat_ugn.info, Node: Examples of gnatkr Usage, Prev: Krunching Method, Up: File Name Krunching with gnatkr + + 3.3.5.4 Examples of ‘gnatkr’ Usage + .................................. + + $ gnatkr very_long_unit_name.ads --> velounna.ads + $ gnatkr grandparent-parent-child.ads --> grparchi.ads + $ gnatkr Grandparent.Parent.Child.ads --> grparchi.ads + $ gnatkr grandparent-parent-child --> grparchi + $ gnatkr very_long_unit_name.ads/count=6 --> vlunna.ads + $ gnatkr very_long_unit_name.ads/count=0 --> very_long_unit_name.ads + +  + File: gnat_ugn.info, Node: Renaming Files with gnatchop, Prev: File Name Krunching with gnatkr, Up: File Naming Topics and Utilities + + 3.3.6 Renaming Files with ‘gnatchop’ + ------------------------------------ + + This section discusses how to handle files with multiple units by using + the ‘gnatchop’ utility. This utility is also useful in renaming files + to meet the standard GNAT default file naming conventions. + + * Menu: + + * Handling Files with Multiple Units:: + * Operating gnatchop in Compilation Mode:: + * Command Line for gnatchop:: + * Switches for gnatchop:: + * Examples of gnatchop Usage:: + +  + File: gnat_ugn.info, Node: Handling Files with Multiple Units, Next: Operating gnatchop in Compilation Mode, Up: Renaming Files with gnatchop + + 3.3.6.1 Handling Files with Multiple Units + .......................................... + + The basic compilation model of GNAT requires that a file submitted to + the compiler have only one unit and there be a strict correspondence + between the file name and the unit name. + + If you want to keep your files with multiple units, perhaps to maintain + compatibility with some other Ada compilation system, you can use + ‘gnatname’ to generate or update your project files. Generated or + modified project files can be processed by GNAT. + + See *note Handling Arbitrary File Naming Conventions with gnatname: 42. + for more details on how to use ‘gnatname’. + + Alternatively, if you want to permanently restructure a set of ‘foreign’ + files so that they match the GNAT rules, and do the remaining + development using the GNAT structure, you can simply use ‘gnatchop’ + once, generate the new set of files and work with them from that point + on. + + Note that if your file containing multiple units starts with a byte + order mark (BOM) specifying UTF-8 encoding, then the files generated by + gnatchop will each start with a copy of this BOM, meaning that they can + be compiled automatically in UTF-8 mode without needing to specify an + explicit encoding. + +  + File: gnat_ugn.info, Node: Operating gnatchop in Compilation Mode, Next: Command Line for gnatchop, Prev: Handling Files with Multiple Units, Up: Renaming Files with gnatchop + + 3.3.6.2 Operating gnatchop in Compilation Mode + .............................................. + + The basic function of ‘gnatchop’ is to take a file with multiple units + and split it into separate files. The boundary between files is + reasonably clear, except for the issue of comments and pragmas. In + default mode, the rule is that any pragmas between units belong to the + previous unit, except that configuration pragmas always belong to the + following unit. Any comments belong to the following unit. These rules + almost always result in the right choice of the split point without + needing to mark it explicitly and most users will find this default to + be what they want. In this default mode it is incorrect to submit a + file containing only configuration pragmas, or one that ends in + configuration pragmas, to ‘gnatchop’. + + However, using a special option to activate ‘compilation mode’, + ‘gnatchop’ can perform another function, which is to provide exactly the + semantics required by the RM for handling of configuration pragmas in a + compilation. In the absence of configuration pragmas (at the main file + level), this option has no effect, but it causes such configuration + pragmas to be handled in a quite different manner. + + First, in compilation mode, if ‘gnatchop’ is given a file that consists + of only configuration pragmas, then this file is appended to the + ‘gnat.adc’ file in the current directory. This behavior provides the + required behavior described in the RM for the actions to be taken on + submitting such a file to the compiler, namely that these pragmas should + apply to all subsequent compilations in the same compilation + environment. Using GNAT, the current directory, possibly containing a + ‘gnat.adc’ file is the representation of a compilation environment. For + more information on the ‘gnat.adc’ file, see *note Handling of + Configuration Pragmas: 3f. + + Second, in compilation mode, if ‘gnatchop’ is given a file that starts + with configuration pragmas, and contains one or more units, then these + configuration pragmas are prepended to each of the chopped files. This + behavior provides the required behavior described in the RM for the + actions to be taken on compiling such a file, namely that the pragmas + apply to all units in the compilation, but not to subsequently compiled + units. + + Finally, if configuration pragmas appear between units, they are + appended to the previous unit. This results in the previous unit being + illegal, since the compiler does not accept configuration pragmas that + follow a unit. This provides the required RM behavior that forbids + configuration pragmas other than those preceding the first compilation + unit of a compilation. + + For most purposes, ‘gnatchop’ will be used in default mode. The + compilation mode described above is used only if you need exactly + accurate behavior with respect to compilations, and you have files that + contain multiple units and configuration pragmas. In this circumstance + the use of ‘gnatchop’ with the compilation mode switch provides the + required behavior, and is for example the mode in which GNAT processes + the ACVC tests. + +  + File: gnat_ugn.info, Node: Command Line for gnatchop, Next: Switches for gnatchop, Prev: Operating gnatchop in Compilation Mode, Up: Renaming Files with gnatchop + + 3.3.6.3 Command Line for ‘gnatchop’ + ................................... + + The ‘gnatchop’ command has the form: + + $ gnatchop switches file_name [file_name ...] + [directory] + + The only required argument is the file name of the file to be chopped. + There are no restrictions on the form of this file name. The file + itself contains one or more Ada units, in normal GNAT format, + concatenated together. As shown, more than one file may be presented to + be chopped. + + When run in default mode, ‘gnatchop’ generates one output file in the + current directory for each unit in each of the files. + + ‘directory’, if specified, gives the name of the directory to which the + output files will be written. If it is not specified, all files are + written to the current directory. + + For example, given a file called ‘hellofiles’ containing + + procedure Hello; + + with Ada.Text_IO; use Ada.Text_IO; + procedure Hello is + begin + Put_Line ("Hello"); + end Hello; + + the command + + $ gnatchop hellofiles + + generates two files in the current directory, one called ‘hello.ads’ + containing the single line that is the procedure spec, and the other + called ‘hello.adb’ containing the remaining text. The original file is + not affected. The generated files can be compiled in the normal manner. + + When gnatchop is invoked on a file that is empty or that contains only + empty lines and/or comments, gnatchop will not fail, but will not + produce any new sources. + + For example, given a file called ‘toto.txt’ containing + + -- Just a comment + + the command + + $ gnatchop toto.txt + + will not produce any new file and will result in the following warnings: + + toto.txt:1:01: warning: empty file, contains no compilation units + no compilation units found + no source files written + +  + File: gnat_ugn.info, Node: Switches for gnatchop, Next: Examples of gnatchop Usage, Prev: Command Line for gnatchop, Up: Renaming Files with gnatchop + + 3.3.6.4 Switches for ‘gnatchop’ + ............................... + + ‘gnatchop’ recognizes the following switches: + + ‘--version’ + + Display Copyright and version, then exit disregarding all other + options. + + ‘--help’ + + If ‘--version’ was not used, display usage, then exit disregarding + all other options. + + ‘-c’ + + Causes ‘gnatchop’ to operate in compilation mode, in which + configuration pragmas are handled according to strict RM rules. + See previous section for a full description of this mode. + + ‘-gnat`xxx'’ + + This passes the given ‘-gnat`xxx'’ switch to ‘gnat’ which is used + to parse the given file. Not all `xxx' options make sense, but for + example, the use of ‘-gnati2’ allows ‘gnatchop’ to process a source + file that uses Latin-2 coding for identifiers. + + ‘-h’ + + Causes ‘gnatchop’ to generate a brief help summary to the standard + output file showing usage information. + + ‘-k`mm'’ + + Limit generated file names to the specified number ‘mm’ of + characters. This is useful if the resulting set of files is + required to be interoperable with systems which limit the length of + file names. No space is allowed between the ‘-k’ and the numeric + value. The numeric value may be omitted in which case a default of + ‘-k8’, suitable for use with DOS-like file systems, is used. If no + ‘-k’ switch is present then there is no limit on the length of file + names. + + ‘-p’ + + Causes the file modification time stamp of the input file to be + preserved and used for the time stamp of the output file(s). This + may be useful for preserving coherency of time stamps in an + environment where ‘gnatchop’ is used as part of a standard build + process. + + ‘-q’ + + Causes output of informational messages indicating the set of + generated files to be suppressed. Warnings and error messages are + unaffected. + + ‘-r’ + + Generate ‘Source_Reference’ pragmas. Use this switch if the output + files are regarded as temporary and development is to be done in + terms of the original unchopped file. This switch causes + ‘Source_Reference’ pragmas to be inserted into each of the + generated files to refers back to the original file name and line + number. The result is that all error messages refer back to the + original unchopped file. In addition, the debugging information + placed into the object file (when the ‘-g’ switch of ‘gcc’ or + ‘gnatmake’ is specified) also refers back to this original file so + that tools like profilers and debuggers will give information in + terms of the original unchopped file. + + If the original file to be chopped itself contains a + ‘Source_Reference’ pragma referencing a third file, then gnatchop + respects this pragma, and the generated ‘Source_Reference’ pragmas + in the chopped file refer to the original file, with appropriate + line numbers. This is particularly useful when ‘gnatchop’ is used + in conjunction with ‘gnatprep’ to compile files that contain + preprocessing statements and multiple units. + + ‘-v’ + + Causes ‘gnatchop’ to operate in verbose mode. The version number + and copyright notice are output, as well as exact copies of the + gnat1 commands spawned to obtain the chop control information. + + ‘-w’ + + Overwrite existing file names. Normally ‘gnatchop’ regards it as a + fatal error if there is already a file with the same name as a file + it would otherwise output, in other words if the files to be + chopped contain duplicated units. This switch bypasses this check, + and causes all but the last instance of such duplicated units to be + skipped. + + ‘--GCC=`xxxx'’ + + Specify the path of the GNAT parser to be used. When this switch + is used, no attempt is made to add the prefix to the GNAT parser + executable. + +  + File: gnat_ugn.info, Node: Examples of gnatchop Usage, Prev: Switches for gnatchop, Up: Renaming Files with gnatchop + + 3.3.6.5 Examples of ‘gnatchop’ Usage + .................................... + + $ gnatchop -w hello_s.ada prerelease/files + + Chops the source file ‘hello_s.ada’. The output files will be placed in + the directory ‘prerelease/files’, overwriting any files with matching + names in that directory (no files in the current directory are + modified). + + $ gnatchop archive + + Chops the source file ‘archive’ into the current directory. One useful + application of ‘gnatchop’ is in sending sets of sources around, for + example in email messages. The required sources are simply concatenated + (for example, using a Unix ‘cat’ command), and then ‘gnatchop’ is used + at the other end to reconstitute the original file names. + + $ gnatchop file1 file2 file3 direc + + Chops all units in files ‘file1’, ‘file2’, ‘file3’, placing the + resulting files in the directory ‘direc’. Note that if any units occur + more than once anywhere within this set of files, an error message is + generated, and no files are written. To override this check, use the + ‘-w’ switch, in which case the last occurrence in the last file will be + the one that is output, and earlier duplicate occurrences for a given + unit will be skipped. + +  + File: gnat_ugn.info, Node: Configuration Pragmas, Next: Generating Object Files, Prev: File Naming Topics and Utilities, Up: The GNAT Compilation Model + + 3.4 Configuration Pragmas + ========================= + + Configuration pragmas include those pragmas described as such in the Ada + Reference Manual, as well as implementation-dependent pragmas that are + configuration pragmas. See the ‘Implementation_Defined_Pragmas’ chapter + in the ‘GNAT_Reference_Manual’ for details on these additional + GNAT-specific configuration pragmas. Most notably, the pragma + ‘Source_File_Name’, which allows specifying non-default names for source + files, is a configuration pragma. The following is a complete list of + configuration pragmas recognized by GNAT: + + Ada_83 + Ada_95 + Ada_05 + Ada_2005 + Ada_12 + Ada_2012 + Allow_Integer_Address + Annotate + Assertion_Policy + Assume_No_Invalid_Values + C_Pass_By_Copy + Check_Float_Overflow + Check_Name + Check_Policy + Component_Alignment + Convention_Identifier + Debug_Policy + Default_Scalar_Storage_Order + Default_Storage_Pool + Detect_Blocking + Disable_Atomic_Synchronization + Discard_Names + Elaboration_Checks + Eliminate + Enable_Atomic_Synchronization + Extend_System + Extensions_Allowed + External_Name_Casing + Fast_Math + Favor_Top_Level + Ignore_Pragma + Implicit_Packing + Initialize_Scalars + Interrupt_State + License + Locking_Policy + No_Component_Reordering + No_Heap_Finalization + No_Strict_Aliasing + Normalize_Scalars + Optimize_Alignment + Overflow_Mode + Overriding_Renamings + Partition_Elaboration_Policy + Persistent_BSS + Prefix_Exception_Messages + Priority_Specific_Dispatching + Profile + Profile_Warnings + Queuing_Policy + Rename_Pragma + Restrictions + Restriction_Warnings + Reviewable + Short_Circuit_And_Or + Source_File_Name + Source_File_Name_Project + SPARK_Mode + Style_Checks + Suppress + Suppress_Exception_Locations + Task_Dispatching_Policy + Unevaluated_Use_Of_Old + Unsuppress + Use_VADS_Size + Validity_Checks + Warning_As_Error + Warnings + Wide_Character_Encoding + + * Menu: + + * Handling of Configuration Pragmas:: + * The Configuration Pragmas Files:: + +  + File: gnat_ugn.info, Node: Handling of Configuration Pragmas, Next: The Configuration Pragmas Files, Up: Configuration Pragmas + + 3.4.1 Handling of Configuration Pragmas + --------------------------------------- + + Configuration pragmas may either appear at the start of a compilation + unit, or they can appear in a configuration pragma file to apply to all + compilations performed in a given compilation environment. + + GNAT also provides the ‘gnatchop’ utility to provide an automatic way to + handle configuration pragmas following the semantics for compilations + (that is, files with multiple units), described in the RM. See *note + Operating gnatchop in Compilation Mode: 59. for details. However, for + most purposes, it will be more convenient to edit the ‘gnat.adc’ file + that contains configuration pragmas directly, as described in the + following section. + + In the case of ‘Restrictions’ pragmas appearing as configuration pragmas + in individual compilation units, the exact handling depends on the type + of restriction. + + Restrictions that require partition-wide consistency (like ‘No_Tasking’) + are recognized wherever they appear and can be freely inherited, e.g. + from a `with'ed unit to the `with'ing unit. This makes sense since the + binder will in any case insist on seeing consistent use, so any unit not + conforming to any restrictions that are anywhere in the partition will + be rejected, and you might as well find that out at compile time rather + than at bind time. + + For restrictions that do not require partition-wide consistency, e.g. + SPARK or No_Implementation_Attributes, in general the restriction + applies only to the unit in which the pragma appears, and not to any + other units. + + The exception is No_Elaboration_Code which always applies to the entire + object file from a compilation, i.e. to the body, spec, and all + subunits. This restriction can be specified in a configuration pragma + file, or it can be on the body and/or the spec (in either case it + applies to all the relevant units). It can appear on a subunit only if + it has previously appeared in the body of spec. + +  + File: gnat_ugn.info, Node: The Configuration Pragmas Files, Prev: Handling of Configuration Pragmas, Up: Configuration Pragmas + + 3.4.2 The Configuration Pragmas Files + ------------------------------------- + + In GNAT a compilation environment is defined by the current directory at + the time that a compile command is given. This current directory is + searched for a file whose name is ‘gnat.adc’. If this file is present, + it is expected to contain one or more configuration pragmas that will be + applied to the current compilation. However, if the switch ‘-gnatA’ is + used, ‘gnat.adc’ is not considered. When taken into account, ‘gnat.adc’ + is added to the dependencies, so that if ‘gnat.adc’ is modified later, + an invocation of ‘gnatmake’ will recompile the source. + + Configuration pragmas may be entered into the ‘gnat.adc’ file either by + running ‘gnatchop’ on a source file that consists only of configuration + pragmas, or more conveniently by direct editing of the ‘gnat.adc’ file, + which is a standard format source file. + + Besides ‘gnat.adc’, additional files containing configuration pragmas + may be applied to the current compilation using the switch + ‘-gnatec=`path'’ where ‘path’ must designate an existing file that + contains only configuration pragmas. These configuration pragmas are in + addition to those found in ‘gnat.adc’ (provided ‘gnat.adc’ is present + and switch ‘-gnatA’ is not used). + + It is allowable to specify several switches ‘-gnatec=’, all of which + will be taken into account. + + Files containing configuration pragmas specified with switches + ‘-gnatec=’ are added to the dependencies, unless they are temporary + files. A file is considered temporary if its name ends in ‘.tmp’ or + ‘.TMP’. Certain tools follow this naming convention because they pass + information to ‘gcc’ via temporary files that are immediately deleted; + it doesn’t make sense to depend on a file that no longer exists. Such + tools include ‘gprbuild’, ‘gnatmake’, and ‘gnatcheck’. + + By default, configuration pragma files are stored by their absolute + paths in ALI files. You can use the ‘-gnateb’ switch in order to store + them by their basename instead. + + If you are using project file, a separate mechanism is provided using + project attributes. + +  + File: gnat_ugn.info, Node: Generating Object Files, Next: Source Dependencies, Prev: Configuration Pragmas, Up: The GNAT Compilation Model + + 3.5 Generating Object Files + =========================== + + An Ada program consists of a set of source files, and the first step in + compiling the program is to generate the corresponding object files. + These are generated by compiling a subset of these source files. The + files you need to compile are the following: + + * If a package spec has no body, compile the package spec to produce + the object file for the package. + + * If a package has both a spec and a body, compile the body to + produce the object file for the package. The source file for the + package spec need not be compiled in this case because there is + only one object file, which contains the code for both the spec and + body of the package. + + * For a subprogram, compile the subprogram body to produce the object + file for the subprogram. The spec, if one is present, is as usual + in a separate file, and need not be compiled. + + * In the case of subunits, only compile the parent unit. A single + object file is generated for the entire subunit tree, which + includes all the subunits. + + * Compile child units independently of their parent units (though, of + course, the spec of all the ancestor unit must be present in order + to compile a child unit). + + * Compile generic units in the same manner as any other units. The + object files in this case are small dummy files that contain at + most the flag used for elaboration checking. This is because GNAT + always handles generic instantiation by means of macro expansion. + However, it is still necessary to compile generic units, for + dependency checking and elaboration purposes. + + The preceding rules describe the set of files that must be compiled to + generate the object files for a program. Each object file has the same + name as the corresponding source file, except that the extension is ‘.o’ + as usual. + + You may wish to compile other files for the purpose of checking their + syntactic and semantic correctness. For example, in the case where a + package has a separate spec and body, you would not normally compile the + spec. However, it is convenient in practice to compile the spec to make + sure it is error-free before compiling clients of this spec, because + such compilations will fail if there is an error in the spec. + + GNAT provides an option for compiling such files purely for the purposes + of checking correctness; such compilations are not required as part of + the process of building a program. To compile a file in this checking + mode, use the ‘-gnatc’ switch. + +  + File: gnat_ugn.info, Node: Source Dependencies, Next: The Ada Library Information Files, Prev: Generating Object Files, Up: The GNAT Compilation Model + + 3.6 Source Dependencies + ======================= + + A given object file clearly depends on the source file which is compiled + to produce it. Here we are using “depends” in the sense of a typical + ‘make’ utility; in other words, an object file depends on a source file + if changes to the source file require the object file to be recompiled. + In addition to this basic dependency, a given object may depend on + additional source files as follows: + + * If a file being compiled `with's a unit ‘X’, the object file + depends on the file containing the spec of unit ‘X’. This includes + files that are `with'ed implicitly either because they are parents + of `with'ed child units or they are run-time units required by the + language constructs used in a particular unit. + + * If a file being compiled instantiates a library level generic unit, + the object file depends on both the spec and body files for this + generic unit. + + * If a file being compiled instantiates a generic unit defined within + a package, the object file depends on the body file for the package + as well as the spec file. + + * If a file being compiled contains a call to a subprogram for which + pragma ‘Inline’ applies and inlining is activated with the ‘-gnatn’ + switch, the object file depends on the file containing the body of + this subprogram as well as on the file containing the spec. Note + that for inlining to actually occur as a result of the use of this + switch, it is necessary to compile in optimizing mode. + + The use of ‘-gnatN’ activates inlining optimization that is + performed by the front end of the compiler. This inlining does not + require that the code generation be optimized. Like ‘-gnatn’, the + use of this switch generates additional dependencies. + + When using a gcc-based back end, then the use of ‘-gnatN’ is + deprecated, and the use of ‘-gnatn’ is preferred. Historically + front end inlining was more extensive than the gcc back end + inlining, but that is no longer the case. + + * If an object file ‘O’ depends on the proper body of a subunit + through inlining or instantiation, it depends on the parent unit of + the subunit. This means that any modification of the parent unit + or one of its subunits affects the compilation of ‘O’. + + * The object file for a parent unit depends on all its subunit body + files. + + * The previous two rules meant that for purposes of computing + dependencies and recompilation, a body and all its subunits are + treated as an indivisible whole. + + These rules are applied transitively: if unit ‘A’ `with's unit ‘B’, + whose elaboration calls an inlined procedure in package ‘C’, the + object file for unit ‘A’ will depend on the body of ‘C’, in file + ‘c.adb’. + + The set of dependent files described by these rules includes all + the files on which the unit is semantically dependent, as dictated + by the Ada language standard. However, it is a superset of what + the standard describes, because it includes generic, inline, and + subunit dependencies. + + An object file must be recreated by recompiling the corresponding + source file if any of the source files on which it depends are + modified. For example, if the ‘make’ utility is used to control + compilation, the rule for an Ada object file must mention all the + source files on which the object file depends, according to the + above definition. The determination of the necessary + recompilations is done automatically when one uses ‘gnatmake’. + +  + File: gnat_ugn.info, Node: The Ada Library Information Files, Next: Binding an Ada Program, Prev: Source Dependencies, Up: The GNAT Compilation Model + + 3.7 The Ada Library Information Files + ===================================== + + Each compilation actually generates two output files. The first of + these is the normal object file that has a ‘.o’ extension. The second + is a text file containing full dependency information. It has the same + name as the source file, but an ‘.ali’ extension. This file is known as + the Ada Library Information (‘ALI’) file. The following information is + contained in the ‘ALI’ file. + + * Version information (indicates which version of GNAT was used to + compile the unit(s) in question) + + * Main program information (including priority and time slice + settings, as well as the wide character encoding used during + compilation). + + * List of arguments used in the ‘gcc’ command for the compilation + + * Attributes of the unit, including configuration pragmas used, an + indication of whether the compilation was successful, exception + model used etc. + + * A list of relevant restrictions applying to the unit (used for + consistency) checking. + + * Categorization information (e.g., use of pragma ‘Pure’). + + * Information on all `with'ed units, including presence of + ‘Elaborate’ or ‘Elaborate_All’ pragmas. + + * Information from any ‘Linker_Options’ pragmas used in the unit + + * Information on the use of ‘Body_Version’ or ‘Version’ attributes in + the unit. + + * Dependency information. This is a list of files, together with + time stamp and checksum information. These are files on which the + unit depends in the sense that recompilation is required if any of + these units are modified. + + * Cross-reference data. Contains information on all entities + referenced in the unit. Used by tools like ‘gnatxref’ and + ‘gnatfind’ to provide cross-reference information. + + For a full detailed description of the format of the ‘ALI’ file, see the + source of the body of unit ‘Lib.Writ’, contained in file ‘lib-writ.adb’ + in the GNAT compiler sources. + +  + File: gnat_ugn.info, Node: Binding an Ada Program, Next: GNAT and Libraries, Prev: The Ada Library Information Files, Up: The GNAT Compilation Model + + 3.8 Binding an Ada Program + ========================== + + When using languages such as C and C++, once the source files have been + compiled the only remaining step in building an executable program is + linking the object modules together. This means that it is possible to + link an inconsistent version of a program, in which two units have + included different versions of the same header. + + The rules of Ada do not permit such an inconsistent program to be built. + For example, if two clients have different versions of the same package, + it is illegal to build a program containing these two clients. These + rules are enforced by the GNAT binder, which also determines an + elaboration order consistent with the Ada rules. + + The GNAT binder is run after all the object files for a program have + been created. It is given the name of the main program unit, and from + this it determines the set of units required by the program, by reading + the corresponding ALI files. It generates error messages if the program + is inconsistent or if no valid order of elaboration exists. + + If no errors are detected, the binder produces a main program, in Ada by + default, that contains calls to the elaboration procedures of those + compilation unit that require them, followed by a call to the main + program. This Ada program is compiled to generate the object file for + the main program. The name of the Ada file is ‘b~xxx’.adb‘ (with the + corresponding spec ‘b~xxx’.ads‘) where ‘xxx’ is the name of the main + program unit. + + Finally, the linker is used to build the resulting executable program, + using the object from the main program from the bind step as well as the + object files for the Ada units of the program. + +  + File: gnat_ugn.info, Node: GNAT and Libraries, Next: Conditional Compilation, Prev: Binding an Ada Program, Up: The GNAT Compilation Model + + 3.9 GNAT and Libraries + ====================== + + This section describes how to build and use libraries with GNAT, and + also shows how to recompile the GNAT run-time library. You should be + familiar with the Project Manager facility (see the + `GNAT_Project_Manager' chapter of the `GPRbuild User’s Guide') before + reading this chapter. + + * Menu: + + * Introduction to Libraries in GNAT:: + * General Ada Libraries:: + * Stand-alone Ada Libraries:: + * Rebuilding the GNAT Run-Time Library:: + +  + File: gnat_ugn.info, Node: Introduction to Libraries in GNAT, Next: General Ada Libraries, Up: GNAT and Libraries + + 3.9.1 Introduction to Libraries in GNAT + --------------------------------------- + + A library is, conceptually, a collection of objects which does not have + its own main thread of execution, but rather provides certain services + to the applications that use it. A library can be either statically + linked with the application, in which case its code is directly included + in the application, or, on platforms that support it, be dynamically + linked, in which case its code is shared by all applications making use + of this library. + + GNAT supports both types of libraries. In the static case, the compiled + code can be provided in different ways. The simplest approach is to + provide directly the set of objects resulting from compilation of the + library source files. Alternatively, you can group the objects into an + archive using whatever commands are provided by the operating system. + For the latter case, the objects are grouped into a shared library. + + In the GNAT environment, a library has three types of components: + + * Source files, + + * ‘ALI’ files (see *note The Ada Library Information Files: 28.), and + + * Object files, an archive or a shared library. + + A GNAT library may expose all its source files, which is useful for + documentation purposes. Alternatively, it may expose only the units + needed by an external user to make use of the library. That is to say, + the specs reflecting the library services along with all the units + needed to compile those specs, which can include generic bodies or any + body implementing an inlined routine. In the case of `stand-alone + libraries' those exposed units are called `interface units' (*note + Stand-alone Ada Libraries: 6b.). + + All compilation units comprising an application, including those in a + library, need to be elaborated in an order partially defined by Ada’s + semantics. GNAT computes the elaboration order from the ‘ALI’ files and + this is why they constitute a mandatory part of GNAT libraries. + `Stand-alone libraries' are the exception to this rule because a + specific library elaboration routine is produced independently of the + application(s) using the library. + +  + File: gnat_ugn.info, Node: General Ada Libraries, Next: Stand-alone Ada Libraries, Prev: Introduction to Libraries in GNAT, Up: GNAT and Libraries + + 3.9.2 General Ada Libraries + --------------------------- + + * Menu: + + * Building a library:: + * Installing a library:: + * Using a library:: + +  + File: gnat_ugn.info, Node: Building a library, Next: Installing a library, Up: General Ada Libraries + + 3.9.2.1 Building a library + .......................... + + The easiest way to build a library is to use the Project Manager, which + supports a special type of project called a `Library Project' (see the + `Library Projects' section in the `GNAT Project Manager' chapter of the + `GPRbuild User’s Guide'). + + A project is considered a library project, when two project-level + attributes are defined in it: ‘Library_Name’ and ‘Library_Dir’. In + order to control different aspects of library configuration, additional + optional project-level attributes can be specified: + + * + ‘Library_Kind’ + + This attribute controls whether the library is to be static or + dynamic + + * + ‘Library_Version’ + + This attribute specifies the library version; this value is + used during dynamic linking of shared libraries to determine + if the currently installed versions of the binaries are + compatible. + + * ‘Library_Options’ + + * + ‘Library_GCC’ + + These attributes specify additional low-level options to be + used during library generation, and redefine the actual + application used to generate library. + + The GNAT Project Manager takes full care of the library maintenance + task, including recompilation of the source files for which objects do + not exist or are not up to date, assembly of the library archive, and + installation of the library (i.e., copying associated source, object and + ‘ALI’ files to the specified location). + + Here is a simple library project file: + + project My_Lib is + for Source_Dirs use ("src1", "src2"); + for Object_Dir use "obj"; + for Library_Name use "mylib"; + for Library_Dir use "lib"; + for Library_Kind use "dynamic"; + end My_lib; + + and the compilation command to build and install the library: + + $ gnatmake -Pmy_lib + + It is not entirely trivial to perform manually all the steps required to + produce a library. We recommend that you use the GNAT Project Manager + for this task. In special cases where this is not desired, the + necessary steps are discussed below. + + There are various possibilities for compiling the units that make up the + library: for example with a Makefile (*note Using the GNU make Utility: + 70.) or with a conventional script. For simple libraries, it is also + possible to create a dummy main program which depends upon all the + packages that comprise the interface of the library. This dummy main + program can then be given to ‘gnatmake’, which will ensure that all + necessary objects are built. + + After this task is accomplished, you should follow the standard + procedure of the underlying operating system to produce the static or + shared library. + + Here is an example of such a dummy program: + + with My_Lib.Service1; + with My_Lib.Service2; + with My_Lib.Service3; + procedure My_Lib_Dummy is + begin + null; + end; + + Here are the generic commands that will build an archive or a shared + library. + + # compiling the library + $ gnatmake -c my_lib_dummy.adb + + # we don't need the dummy object itself + $ rm my_lib_dummy.o my_lib_dummy.ali + + # create an archive with the remaining objects + $ ar rc libmy_lib.a *.o + # some systems may require "ranlib" to be run as well + + # or create a shared library + $ gcc -shared -o libmy_lib.so *.o + # some systems may require the code to have been compiled with -fPIC + + # remove the object files that are now in the library + $ rm *.o + + # Make the ALI files read-only so that gnatmake will not try to + # regenerate the objects that are in the library + $ chmod -w *.ali + + Please note that the library must have a name of the form ‘lib`xxx'.a’ + or ‘lib`xxx'.so’ (or ‘lib`xxx'.dll’ on Windows) in order to be accessed + by the directive ‘-l`xxx'’ at link time. + +  + File: gnat_ugn.info, Node: Installing a library, Next: Using a library, Prev: Building a library, Up: General Ada Libraries + + 3.9.2.2 Installing a library + ............................ + + If you use project files, library installation is part of the library + build process (see the `Installing a Library with Project Files' section + of the `GNAT Project Manager' chapter of the `GPRbuild User’s Guide'). + + When project files are not an option, it is also possible, but not + recommended, to install the library so that the sources needed to use + the library are on the Ada source path and the ALI files & libraries be + on the Ada Object path (see *note Search Paths and the Run-Time Library + (RTL): 73. Alternatively, the system administrator can place + general-purpose libraries in the default compiler paths, by specifying + the libraries’ location in the configuration files ‘ada_source_path’ and + ‘ada_object_path’. These configuration files must be located in the + GNAT installation tree at the same place as the gcc spec file. The + location of the gcc spec file can be determined as follows: + + $ gcc -v + + The configuration files mentioned above have a simple format: each line + must contain one unique directory name. Those names are added to the + corresponding path in their order of appearance in the file. The names + can be either absolute or relative; in the latter case, they are + relative to where theses files are located. + + The files ‘ada_source_path’ and ‘ada_object_path’ might not be present + in a GNAT installation, in which case, GNAT will look for its run-time + library in the directories ‘adainclude’ (for the sources) and ‘adalib’ + (for the objects and ‘ALI’ files). When the files exist, the compiler + does not look in ‘adainclude’ and ‘adalib’, and thus the + ‘ada_source_path’ file must contain the location for the GNAT run-time + sources (which can simply be ‘adainclude’). In the same way, the + ‘ada_object_path’ file must contain the location for the GNAT run-time + objects (which can simply be ‘adalib’). + + You can also specify a new default path to the run-time library at + compilation time with the switch ‘--RTS=rts-path’. You can thus choose + / change the run-time library you want your program to be compiled with. + This switch is recognized by ‘gcc’, ‘gnatmake’, ‘gnatbind’, ‘gnatls’, + ‘gnatfind’ and ‘gnatxref’. + + It is possible to install a library before or after the standard GNAT + library, by reordering the lines in the configuration files. In + general, a library must be installed before the GNAT library if it + redefines any part of it. + +  + File: gnat_ugn.info, Node: Using a library, Prev: Installing a library, Up: General Ada Libraries + + 3.9.2.3 Using a library + ....................... + + Once again, the project facility greatly simplifies the use of + libraries. In this context, using a library is just a matter of adding + a `with' clause in the user project. For instance, to make use of the + library ‘My_Lib’ shown in examples in earlier sections, you can write: + + with "my_lib"; + project My_Proj is + ... + end My_Proj; + + Even if you have a third-party, non-Ada library, you can still use + GNAT’s Project Manager facility to provide a wrapper for it. For + example, the following project, when `with'ed by your main project, will + link with the third-party library ‘liba.a’: + + project Liba is + for Externally_Built use "true"; + for Source_Files use (); + for Library_Dir use "lib"; + for Library_Name use "a"; + for Library_Kind use "static"; + end Liba; + + This is an alternative to the use of ‘pragma Linker_Options’. It is + especially interesting in the context of systems with several + interdependent static libraries where finding a proper linker order is + not easy and best be left to the tools having visibility over project + dependence information. + + In order to use an Ada library manually, you need to make sure that this + library is on both your source and object path (see *note Search Paths + and the Run-Time Library (RTL): 73. and *note Search Paths for gnatbind: + 76.). Furthermore, when the objects are grouped in an archive or a + shared library, you need to specify the desired library at link time. + + For example, you can use the library ‘mylib’ installed in + ‘/dir/my_lib_src’ and ‘/dir/my_lib_obj’ with the following commands: + + $ gnatmake -aI/dir/my_lib_src -aO/dir/my_lib_obj my_appl \\ + -largs -lmy_lib + + This can be expressed more simply: + + $ gnatmake my_appl + + when the following conditions are met: + + * ‘/dir/my_lib_src’ has been added by the user to the environment + variable ‘ADA_INCLUDE_PATH’, or by the administrator to the file + ‘ada_source_path’ + + * ‘/dir/my_lib_obj’ has been added by the user to the environment + variable ‘ADA_OBJECTS_PATH’, or by the administrator to the file + ‘ada_object_path’ + + * a pragma ‘Linker_Options’ has been added to one of the sources. + For example: + + pragma Linker_Options ("-lmy_lib"); + + Note that you may also load a library dynamically at run time given its + filename, as illustrated in the GNAT ‘plugins’ example in the directory + ‘share/examples/gnat/plugins’ within the GNAT install area. + +  + File: gnat_ugn.info, Node: Stand-alone Ada Libraries, Next: Rebuilding the GNAT Run-Time Library, Prev: General Ada Libraries, Up: GNAT and Libraries + + 3.9.3 Stand-alone Ada Libraries + ------------------------------- + + * Menu: + + * Introduction to Stand-alone Libraries:: + * Building a Stand-alone Library:: + * Creating a Stand-alone Library to be used in a non-Ada context:: + * Restrictions in Stand-alone Libraries:: + +  + File: gnat_ugn.info, Node: Introduction to Stand-alone Libraries, Next: Building a Stand-alone Library, Up: Stand-alone Ada Libraries + + 3.9.3.1 Introduction to Stand-alone Libraries + ............................................. + + A Stand-alone Library (abbreviated ‘SAL’) is a library that contains the + necessary code to elaborate the Ada units that are included in the + library. In contrast with an ordinary library, which consists of all + sources, objects and ‘ALI’ files of the library, a SAL may specify a + restricted subset of compilation units to serve as a library interface. + In this case, the fully self-sufficient set of files will normally + consist of an objects archive, the sources of interface units’ specs, + and the ‘ALI’ files of interface units. If an interface spec contains a + generic unit or an inlined subprogram, the body’s source must also be + provided; if the units that must be provided in the source form depend + on other units, the source and ‘ALI’ files of those must also be + provided. + + The main purpose of a SAL is to minimize the recompilation overhead of + client applications when a new version of the library is installed. + Specifically, if the interface sources have not changed, client + applications do not need to be recompiled. If, furthermore, a SAL is + provided in the shared form and its version, controlled by + ‘Library_Version’ attribute, is not changed, then the clients do not + need to be relinked. + + SALs also allow the library providers to minimize the amount of library + source text exposed to the clients. Such ‘information hiding’ might be + useful or necessary for various reasons. + + Stand-alone libraries are also well suited to be used in an executable + whose main routine is not written in Ada. + +  + File: gnat_ugn.info, Node: Building a Stand-alone Library, Next: Creating a Stand-alone Library to be used in a non-Ada context, Prev: Introduction to Stand-alone Libraries, Up: Stand-alone Ada Libraries + + 3.9.3.2 Building a Stand-alone Library + ...................................... + + GNAT’s Project facility provides a simple way of building and installing + stand-alone libraries; see the `Stand-alone Library Projects' section in + the `GNAT Project Manager' chapter of the `GPRbuild User’s Guide'. To + be a Stand-alone Library Project, in addition to the two attributes that + make a project a Library Project (‘Library_Name’ and ‘Library_Dir’; see + the `Library Projects' section in the `GNAT Project Manager' chapter of + the `GPRbuild User’s Guide'), the attribute ‘Library_Interface’ must be + defined. For example: + + for Library_Dir use "lib_dir"; + for Library_Name use "dummy"; + for Library_Interface use ("int1", "int1.child"); + + Attribute ‘Library_Interface’ has a non-empty string list value, each + string in the list designating a unit contained in an immediate source + of the project file. + + When a Stand-alone Library is built, first the binder is invoked to + build a package whose name depends on the library name (‘b~dummy.ads/b’ + in the example above). This binder-generated package includes + initialization and finalization procedures whose names depend on the + library name (‘dummyinit’ and ‘dummyfinal’ in the example above). The + object corresponding to this package is included in the library. + + You must ensure timely (e.g., prior to any use of interfaces in the SAL) + calling of these procedures if a static SAL is built, or if a shared SAL + is built with the project-level attribute ‘Library_Auto_Init’ set to + ‘"false"’. + + For a Stand-Alone Library, only the ‘ALI’ files of the Interface Units + (those that are listed in attribute ‘Library_Interface’) are copied to + the Library Directory. As a consequence, only the Interface Units may + be imported from Ada units outside of the library. If other units are + imported, the binding phase will fail. + + It is also possible to build an encapsulated library where not only the + code to elaborate and finalize the library is embedded but also ensuring + that the library is linked only against static libraries. So an + encapsulated library only depends on system libraries, all other code, + including the GNAT runtime, is embedded. To build an encapsulated + library the attribute ‘Library_Standalone’ must be set to + ‘encapsulated’: + + for Library_Dir use "lib_dir"; + for Library_Name use "dummy"; + for Library_Kind use "dynamic"; + for Library_Interface use ("int1", "int1.child"); + for Library_Standalone use "encapsulated"; + + The default value for this attribute is ‘standard’ in which case a + stand-alone library is built. + + The attribute ‘Library_Src_Dir’ may be specified for a Stand-Alone + Library. ‘Library_Src_Dir’ is a simple attribute that has a single + string value. Its value must be the path (absolute or relative to the + project directory) of an existing directory. This directory cannot be + the object directory or one of the source directories, but it can be the + same as the library directory. The sources of the Interface Units of + the library that are needed by an Ada client of the library will be + copied to the designated directory, called the Interface Copy directory. + These sources include the specs of the Interface Units, but they may + also include bodies and subunits, when pragmas ‘Inline’ or + ‘Inline_Always’ are used, or when there is a generic unit in the spec. + Before the sources are copied to the Interface Copy directory, an + attempt is made to delete all files in the Interface Copy directory. + + Building stand-alone libraries by hand is somewhat tedious, but for + those occasions when it is necessary here are the steps that you need to + perform: + + * Compile all library sources. + + * Invoke the binder with the switch ‘-n’ (No Ada main program), with + all the ‘ALI’ files of the interfaces, and with the switch ‘-L’ to + give specific names to the ‘init’ and ‘final’ procedures. For + example: + + $ gnatbind -n int1.ali int2.ali -Lsal1 + + * Compile the binder generated file: + + $ gcc -c b~int2.adb + + * Link the dynamic library with all the necessary object files, + indicating to the linker the names of the ‘init’ (and possibly + ‘final’) procedures for automatic initialization (and + finalization). The built library should be placed in a directory + different from the object directory. + + * Copy the ‘ALI’ files of the interface to the library directory, add + in this copy an indication that it is an interface to a SAL (i.e., + add a word ‘SL’ on the line in the ‘ALI’ file that starts with + letter ‘P’) and make the modified copy of the ‘ALI’ file read-only. + + Using SALs is not different from using other libraries (see *note Using + a library: 75.). + +  + File: gnat_ugn.info, Node: Creating a Stand-alone Library to be used in a non-Ada context, Next: Restrictions in Stand-alone Libraries, Prev: Building a Stand-alone Library, Up: Stand-alone Ada Libraries + + 3.9.3.3 Creating a Stand-alone Library to be used in a non-Ada context + ...................................................................... + + It is easy to adapt the SAL build procedure discussed above for use of a + SAL in a non-Ada context. + + The only extra step required is to ensure that library interface + subprograms are compatible with the main program, by means of ‘pragma + Export’ or ‘pragma Convention’. + + Here is an example of simple library interface for use with C main + program: + + package My_Package is + + procedure Do_Something; + pragma Export (C, Do_Something, "do_something"); + + procedure Do_Something_Else; + pragma Export (C, Do_Something_Else, "do_something_else"); + + end My_Package; + + On the foreign language side, you must provide a ‘foreign’ view of the + library interface; remember that it should contain elaboration routines + in addition to interface subprograms. + + The example below shows the content of ‘mylib_interface.h’ (note that + there is no rule for the naming of this file, any name can be used) + + /* the library elaboration procedure */ + extern void mylibinit (void); + + /* the library finalization procedure */ + extern void mylibfinal (void); + + /* the interface exported by the library */ + extern void do_something (void); + extern void do_something_else (void); + + Libraries built as explained above can be used from any program, + provided that the elaboration procedures (named ‘mylibinit’ in the + previous example) are called before the library services are used. Any + number of libraries can be used simultaneously, as long as the + elaboration procedure of each library is called. + + Below is an example of a C program that uses the ‘mylib’ library. + + #include "mylib_interface.h" + + int + main (void) + { + /* First, elaborate the library before using it */ + mylibinit (); + + /* Main program, using the library exported entities */ + do_something (); + do_something_else (); + + /* Library finalization at the end of the program */ + mylibfinal (); + return 0; + } + + Note that invoking any library finalization procedure generated by + ‘gnatbind’ shuts down the Ada run-time environment. Consequently, the + finalization of all Ada libraries must be performed at the end of the + program. No call to these libraries or to the Ada run-time library + should be made after the finalization phase. + + Note also that special care must be taken with multi-tasks applications. + The initialization and finalization routines are not protected against + concurrent access. If such requirement is needed it must be ensured at + the application level using a specific operating system services like a + mutex or a critical-section. + +  + File: gnat_ugn.info, Node: Restrictions in Stand-alone Libraries, Prev: Creating a Stand-alone Library to be used in a non-Ada context, Up: Stand-alone Ada Libraries + + 3.9.3.4 Restrictions in Stand-alone Libraries + ............................................. + + The pragmas listed below should be used with caution inside libraries, + as they can create incompatibilities with other Ada libraries: + + * pragma ‘Locking_Policy’ + + * pragma ‘Partition_Elaboration_Policy’ + + * pragma ‘Queuing_Policy’ + + * pragma ‘Task_Dispatching_Policy’ + + * pragma ‘Unreserve_All_Interrupts’ + + When using a library that contains such pragmas, the user must make sure + that all libraries use the same pragmas with the same values. + Otherwise, ‘Program_Error’ will be raised during the elaboration of the + conflicting libraries. The usage of these pragmas and its consequences + for the user should therefore be well documented. + + Similarly, the traceback in the exception occurrence mechanism should be + enabled or disabled in a consistent manner across all libraries. + Otherwise, Program_Error will be raised during the elaboration of the + conflicting libraries. + + If the ‘Version’ or ‘Body_Version’ attributes are used inside a library, + then you need to perform a ‘gnatbind’ step that specifies all ‘ALI’ + files in all libraries, so that version identifiers can be properly + computed. In practice these attributes are rarely used, so this is + unlikely to be a consideration. + +  + File: gnat_ugn.info, Node: Rebuilding the GNAT Run-Time Library, Prev: Stand-alone Ada Libraries, Up: GNAT and Libraries + + 3.9.4 Rebuilding the GNAT Run-Time Library + ------------------------------------------ + + It may be useful to recompile the GNAT library in various debugging or + experimentation contexts. A project file called ‘libada.gpr’ is + provided to that effect and can be found in the directory containing the + GNAT library. The location of this directory depends on the way the + GNAT environment has been installed and can be determined by means of + the command: + + $ gnatls -v + + The last entry in the source search path usually contains the gnat + library (the ‘adainclude’ directory). This project file contains its + own documentation and in particular the set of instructions needed to + rebuild a new library and to use it. + + Note that rebuilding the GNAT Run-Time is only recommended for temporary + experiments or debugging, and is not supported. + +  + File: gnat_ugn.info, Node: Conditional Compilation, Next: Mixed Language Programming, Prev: GNAT and Libraries, Up: The GNAT Compilation Model + + 3.10 Conditional Compilation + ============================ + + This section presents some guidelines for modeling conditional + compilation in Ada and describes the gnatprep preprocessor utility. + + * Menu: + + * Modeling Conditional Compilation in Ada:: + * Preprocessing with gnatprep:: + * Integrated Preprocessing:: + +  + File: gnat_ugn.info, Node: Modeling Conditional Compilation in Ada, Next: Preprocessing with gnatprep, Up: Conditional Compilation + + 3.10.1 Modeling Conditional Compilation in Ada + ---------------------------------------------- + + It is often necessary to arrange for a single source program to serve + multiple purposes, where it is compiled in different ways to achieve + these different goals. Some examples of the need for this feature are + + * Adapting a program to a different hardware environment + + * Adapting a program to a different target architecture + + * Turning debugging features on and off + + * Arranging for a program to compile with different compilers + + In C, or C++, the typical approach would be to use the preprocessor that + is defined as part of the language. The Ada language does not contain + such a feature. This is not an oversight, but rather a very deliberate + design decision, based on the experience that overuse of the + preprocessing features in C and C++ can result in programs that are + extremely difficult to maintain. For example, if we have ten switches + that can be on or off, this means that there are a thousand separate + programs, any one of which might not even be syntactically correct, and + even if syntactically correct, the resulting program might not work + correctly. Testing all combinations can quickly become impossible. + + Nevertheless, the need to tailor programs certainly exists, and in this + section we will discuss how this can be achieved using Ada in general, + and GNAT in particular. + + * Menu: + + * Use of Boolean Constants:: + * Debugging - A Special Case:: + * Conditionalizing Declarations:: + * Use of Alternative Implementations:: + * Preprocessing:: + +  + File: gnat_ugn.info, Node: Use of Boolean Constants, Next: Debugging - A Special Case, Up: Modeling Conditional Compilation in Ada + + 3.10.1.1 Use of Boolean Constants + ................................. + + In the case where the difference is simply which code sequence is + executed, the cleanest solution is to use Boolean constants to control + which code is executed. + + FP_Initialize_Required : constant Boolean := True; + ... + if FP_Initialize_Required then + ... + end if; + + Not only will the code inside the ‘if’ statement not be executed if the + constant Boolean is ‘False’, but it will also be completely deleted from + the program. However, the code is only deleted after the ‘if’ statement + has been checked for syntactic and semantic correctness. (In contrast, + with preprocessors the code is deleted before the compiler ever gets to + see it, so it is not checked until the switch is turned on.) + + Typically the Boolean constants will be in a separate package, something + like: + + package Config is + FP_Initialize_Required : constant Boolean := True; + Reset_Available : constant Boolean := False; + ... + end Config; + + The ‘Config’ package exists in multiple forms for the various targets, + with an appropriate script selecting the version of ‘Config’ needed. + Then any other unit requiring conditional compilation can do a `with' of + ‘Config’ to make the constants visible. + +  + File: gnat_ugn.info, Node: Debugging - A Special Case, Next: Conditionalizing Declarations, Prev: Use of Boolean Constants, Up: Modeling Conditional Compilation in Ada + + 3.10.1.2 Debugging - A Special Case + ................................... + + A common use of conditional code is to execute statements (for example + dynamic checks, or output of intermediate results) under control of a + debug switch, so that the debugging behavior can be turned on and off. + This can be done using a Boolean constant to control whether the code is + active: + + if Debugging then + Put_Line ("got to the first stage!"); + end if; + + or + + if Debugging and then Temperature > 999.0 then + raise Temperature_Crazy; + end if; + + Since this is a common case, there are special features to deal with + this in a convenient manner. For the case of tests, Ada 2005 has added + a pragma ‘Assert’ that can be used for such tests. This pragma is + modeled on the ‘Assert’ pragma that has always been available in GNAT, + so this feature may be used with GNAT even if you are not using Ada 2005 + features. The use of pragma ‘Assert’ is described in the + ‘GNAT_Reference_Manual’, but as an example, the last test could be + written: + + pragma Assert (Temperature <= 999.0, "Temperature Crazy"); + + or simply + + pragma Assert (Temperature <= 999.0); + + In both cases, if assertions are active and the temperature is + excessive, the exception ‘Assert_Failure’ will be raised, with the given + string in the first case or a string indicating the location of the + pragma in the second case used as the exception message. + + You can turn assertions on and off by using the ‘Assertion_Policy’ + pragma. + + This is an Ada 2005 pragma which is implemented in all modes by GNAT. + Alternatively, you can use the ‘-gnata’ switch to enable assertions from + the command line, which applies to all versions of Ada. + + For the example above with the ‘Put_Line’, the GNAT-specific pragma + ‘Debug’ can be used: + + pragma Debug (Put_Line ("got to the first stage!")); + + If debug pragmas are enabled, the argument, which must be of the form of + a procedure call, is executed (in this case, ‘Put_Line’ will be called). + Only one call can be present, but of course a special debugging + procedure containing any code you like can be included in the program + and then called in a pragma ‘Debug’ argument as needed. + + One advantage of pragma ‘Debug’ over the ‘if Debugging then’ construct + is that pragma ‘Debug’ can appear in declarative contexts, such as at + the very beginning of a procedure, before local declarations have been + elaborated. + + Debug pragmas are enabled using either the ‘-gnata’ switch that also + controls assertions, or with a separate Debug_Policy pragma. + + The latter pragma is new in the Ada 2005 versions of GNAT (but it can be + used in Ada 95 and Ada 83 programs as well), and is analogous to pragma + ‘Assertion_Policy’ to control assertions. + + ‘Assertion_Policy’ and ‘Debug_Policy’ are configuration pragmas, and + thus they can appear in ‘gnat.adc’ if you are not using a project file, + or in the file designated to contain configuration pragmas in a project + file. They then apply to all subsequent compilations. In practice the + use of the ‘-gnata’ switch is often the most convenient method of + controlling the status of these pragmas. + + Note that a pragma is not a statement, so in contexts where a statement + sequence is required, you can’t just write a pragma on its own. You + have to add a ‘null’ statement. + + if ... then + ... -- some statements + else + pragma Assert (Num_Cases < 10); + null; + end if; + +  + File: gnat_ugn.info, Node: Conditionalizing Declarations, Next: Use of Alternative Implementations, Prev: Debugging - A Special Case, Up: Modeling Conditional Compilation in Ada + + 3.10.1.3 Conditionalizing Declarations + ...................................... + + In some cases it may be necessary to conditionalize declarations to meet + different requirements. For example we might want a bit string whose + length is set to meet some hardware message requirement. + + This may be possible using declare blocks controlled by conditional + constants: + + if Small_Machine then + declare + X : Bit_String (1 .. 10); + begin + ... + end; + else + declare + X : Large_Bit_String (1 .. 1000); + begin + ... + end; + end if; + + Note that in this approach, both declarations are analyzed by the + compiler so this can only be used where both declarations are legal, + even though one of them will not be used. + + Another approach is to define integer constants, e.g., ‘Bits_Per_Word’, + or Boolean constants, e.g., ‘Little_Endian’, and then write declarations + that are parameterized by these constants. For example + + for Rec use + Field1 at 0 range Boolean'Pos (Little_Endian) * 10 .. Bits_Per_Word; + end record; + + If ‘Bits_Per_Word’ is set to 32, this generates either + + for Rec use + Field1 at 0 range 0 .. 32; + end record; + + for the big endian case, or + + for Rec use record + Field1 at 0 range 10 .. 32; + end record; + + for the little endian case. Since a powerful subset of Ada expression + notation is usable for creating static constants, clever use of this + feature can often solve quite difficult problems in conditionalizing + compilation (note incidentally that in Ada 95, the little endian + constant was introduced as ‘System.Default_Bit_Order’, so you do not + need to define this one yourself). + +  + File: gnat_ugn.info, Node: Use of Alternative Implementations, Next: Preprocessing, Prev: Conditionalizing Declarations, Up: Modeling Conditional Compilation in Ada + + 3.10.1.4 Use of Alternative Implementations + ........................................... + + In some cases, none of the approaches described above are adequate. + This can occur for example if the set of declarations required is + radically different for two different configurations. + + In this situation, the official Ada way of dealing with conditionalizing + such code is to write separate units for the different cases. As long + as this does not result in excessive duplication of code, this can be + done without creating maintenance problems. The approach is to share + common code as far as possible, and then isolate the code and + declarations that are different. Subunits are often a convenient method + for breaking out a piece of a unit that is to be conditionalized, with + separate files for different versions of the subunit for different + targets, where the build script selects the right one to give to the + compiler. + + As an example, consider a situation where a new feature in Ada 2005 + allows something to be done in a really nice way. But your code must be + able to compile with an Ada 95 compiler. Conceptually you want to say: + + if Ada_2005 then + ... neat Ada 2005 code + else + ... not quite as neat Ada 95 code + end if; + + where ‘Ada_2005’ is a Boolean constant. + + But this won’t work when ‘Ada_2005’ is set to ‘False’, since the ‘then’ + clause will be illegal for an Ada 95 compiler. (Recall that although + such unreachable code would eventually be deleted by the compiler, it + still needs to be legal. If it uses features introduced in Ada 2005, it + will be illegal in Ada 95.) + + So instead we write + + procedure Insert is separate; + + Then we have two files for the subunit ‘Insert’, with the two sets of + code. If the package containing this is called ‘File_Queries’, then we + might have two files + + * ‘file_queries-insert-2005.adb’ + + * ‘file_queries-insert-95.adb’ + + and the build script renames the appropriate file to + ‘file_queries-insert.adb’ and then carries out the compilation. + + This can also be done with project files’ naming schemes. For example: + + for body ("File_Queries.Insert") use "file_queries-insert-2005.ada"; + + Note also that with project files it is desirable to use a different + extension than ‘ads’ / ‘adb’ for alternative versions. Otherwise a + naming conflict may arise through another commonly used feature: to + declare as part of the project a set of directories containing all the + sources obeying the default naming scheme. + + The use of alternative units is certainly feasible in all situations, + and for example the Ada part of the GNAT run-time is conditionalized + based on the target architecture using this approach. As a specific + example, consider the implementation of the AST feature in VMS. There is + one spec: ‘s-asthan.ads’ which is the same for all architectures, and + three bodies: + + * + ‘s-asthan.adb’ + + used for all non-VMS operating systems + + * + ‘s-asthan-vms-alpha.adb’ + + used for VMS on the Alpha + + * + ‘s-asthan-vms-ia64.adb’ + + used for VMS on the ia64 + + The dummy version ‘s-asthan.adb’ simply raises exceptions noting that + this operating system feature is not available, and the two remaining + versions interface with the corresponding versions of VMS to provide + VMS-compatible AST handling. The GNAT build script knows the + architecture and operating system, and automatically selects the right + version, renaming it if necessary to ‘s-asthan.adb’ before the run-time + build. + + Another style for arranging alternative implementations is through Ada’s + access-to-subprogram facility. In case some functionality is to be + conditionally included, you can declare an access-to-procedure variable + ‘Ref’ that is initialized to designate a ‘do nothing’ procedure, and + then invoke ‘Ref.all’ when appropriate. In some library package, set + ‘Ref’ to ‘Proc'Access’ for some procedure ‘Proc’ that performs the + relevant processing. The initialization only occurs if the library + package is included in the program. The same idea can also be + implemented using tagged types and dispatching calls. + +  + File: gnat_ugn.info, Node: Preprocessing, Prev: Use of Alternative Implementations, Up: Modeling Conditional Compilation in Ada + + 3.10.1.5 Preprocessing + ...................... + + Although it is quite possible to conditionalize code without the use of + C-style preprocessing, as described earlier in this section, it is + nevertheless convenient in some cases to use the C approach. Moreover, + older Ada compilers have often provided some preprocessing capability, + so legacy code may depend on this approach, even though it is not + standard. + + To accommodate such use, GNAT provides a preprocessor (modeled to a + large extent on the various preprocessors that have been used with + legacy code on other compilers, to enable easier transition). + + The preprocessor may be used in two separate modes. It can be used + quite separately from the compiler, to generate a separate output source + file that is then fed to the compiler as a separate step. This is the + ‘gnatprep’ utility, whose use is fully described in *note Preprocessing + with gnatprep: 8f. + + The preprocessing language allows such constructs as + + #if DEBUG or else (PRIORITY > 4) then + sequence of declarations + #else + completely different sequence of declarations + #end if; + + The values of the symbols ‘DEBUG’ and ‘PRIORITY’ can be defined either + on the command line or in a separate file. + + The other way of running the preprocessor is even closer to the C style + and often more convenient. In this approach the preprocessing is + integrated into the compilation process. The compiler is given the + preprocessor input which includes ‘#if’ lines etc, and then the compiler + carries out the preprocessing internally and processes the resulting + output. For more details on this approach, see *note Integrated + Preprocessing: 90. + +  + File: gnat_ugn.info, Node: Preprocessing with gnatprep, Next: Integrated Preprocessing, Prev: Modeling Conditional Compilation in Ada, Up: Conditional Compilation + + 3.10.2 Preprocessing with ‘gnatprep’ + ------------------------------------ + + This section discusses how to use GNAT’s ‘gnatprep’ utility for simple + preprocessing. Although designed for use with GNAT, ‘gnatprep’ does not + depend on any special GNAT features. For further discussion of + conditional compilation in general, see *note Conditional Compilation: + 2b. + + * Menu: + + * Preprocessing Symbols:: + * Using gnatprep:: + * Switches for gnatprep:: + * Form of Definitions File:: + * Form of Input Text for gnatprep:: + +  + File: gnat_ugn.info, Node: Preprocessing Symbols, Next: Using gnatprep, Up: Preprocessing with gnatprep + + 3.10.2.1 Preprocessing Symbols + .............................. + + Preprocessing symbols are defined in `definition files' and referenced + in the sources to be preprocessed. A preprocessing symbol is an + identifier, following normal Ada (case-insensitive) rules for its + syntax, with the restriction that all characters need to be in the ASCII + set (no accented letters). + +  + File: gnat_ugn.info, Node: Using gnatprep, Next: Switches for gnatprep, Prev: Preprocessing Symbols, Up: Preprocessing with gnatprep + + 3.10.2.2 Using ‘gnatprep’ + ......................... + + To call ‘gnatprep’ use: + + $ gnatprep [ switches ] infile outfile [ deffile ] + + where + + * + `switches' + + is an optional sequence of switches as described in the next + section. + + * + `infile' + + is the full name of the input file, which is an Ada source + file containing preprocessor directives. + + * + `outfile' + + is the full name of the output file, which is an Ada source in + standard Ada form. When used with GNAT, this file name will + normally have an ‘ads’ or ‘adb’ suffix. + + * + ‘deffile’ + + is the full name of a text file containing definitions of + preprocessing symbols to be referenced by the preprocessor. + This argument is optional, and can be replaced by the use of + the ‘-D’ switch. + +  + File: gnat_ugn.info, Node: Switches for gnatprep, Next: Form of Definitions File, Prev: Using gnatprep, Up: Preprocessing with gnatprep + + 3.10.2.3 Switches for ‘gnatprep’ + ................................ + + ‘--version’ + + Display Copyright and version, then exit disregarding all other + options. + + ‘--help’ + + If ‘--version’ was not used, display usage and then exit + disregarding all other options. + + ‘-b’ + + Causes both preprocessor lines and the lines deleted by + preprocessing to be replaced by blank lines in the output source + file, preserving line numbers in the output file. + + ‘-c’ + + Causes both preprocessor lines and the lines deleted by + preprocessing to be retained in the output source as comments + marked with the special string ‘"--! "’. This option will result + in line numbers being preserved in the output file. + + ‘-C’ + + Causes comments to be scanned. Normally comments are ignored by + gnatprep. If this option is specified, then comments are scanned + and any $symbol substitutions performed as in program text. This + is particularly useful when structured comments are used (e.g., for + programs written in a pre-2014 version of the SPARK Ada subset). + Note that this switch is not available when doing integrated + preprocessing (it would be useless in this context since comments + are ignored by the compiler in any case). + + ‘-D`symbol'[=`value']’ + + Defines a new preprocessing symbol with the specified value. If no + value is given on the command line, then symbol is considered to be + ‘True’. This switch can be used in place of a definition file. + + ‘-r’ + + Causes a ‘Source_Reference’ pragma to be generated that references + the original input file, so that error messages will use the file + name of this original file. The use of this switch implies that + preprocessor lines are not to be removed from the file, so its use + will force ‘-b’ mode if ‘-c’ has not been specified explicitly. + + Note that if the file to be preprocessed contains multiple units, + then it will be necessary to ‘gnatchop’ the output file from + ‘gnatprep’. If a ‘Source_Reference’ pragma is present in the + preprocessed file, it will be respected by ‘gnatchop -r’ so that + the final chopped files will correctly refer to the original input + source file for ‘gnatprep’. + + ‘-s’ + + Causes a sorted list of symbol names and values to be listed on the + standard output file. + + ‘-T’ + + Use LF as line terminators when writing files. By default the line + terminator of the host (LF under unix, CR/LF under Windows) is + used. + + ‘-u’ + + Causes undefined symbols to be treated as having the value FALSE in + the context of a preprocessor test. In the absence of this option, + an undefined symbol in a ‘#if’ or ‘#elsif’ test will be treated as + an error. + + ‘-v’ + + Verbose mode: generates more output about work done. + + Note: if neither ‘-b’ nor ‘-c’ is present, then preprocessor lines and + deleted lines are completely removed from the output, unless -r is + specified, in which case -b is assumed. + +  + File: gnat_ugn.info, Node: Form of Definitions File, Next: Form of Input Text for gnatprep, Prev: Switches for gnatprep, Up: Preprocessing with gnatprep + + 3.10.2.4 Form of Definitions File + ................................. + + The definitions file contains lines of the form: + + symbol := value + + where ‘symbol’ is a preprocessing symbol, and ‘value’ is one of the + following: + + * Empty, corresponding to a null substitution, + + * A string literal using normal Ada syntax, or + + * Any sequence of characters from the set {letters, digits, period, + underline}. + + Comment lines may also appear in the definitions file, starting with the + usual ‘--’, and comments may be added to the definitions lines. + +  + File: gnat_ugn.info, Node: Form of Input Text for gnatprep, Prev: Form of Definitions File, Up: Preprocessing with gnatprep + + 3.10.2.5 Form of Input Text for ‘gnatprep’ + .......................................... + + The input text may contain preprocessor conditional inclusion lines, as + well as general symbol substitution sequences. + + The preprocessor conditional inclusion commands have the form: + + #if [then] + lines + #elsif [then] + lines + #elsif [then] + lines + ... + #else + lines + #end if; + + In this example, is defined by the following grammar: + + ::= + ::= = "" + ::= = + ::= = + ::= > + ::= >= + ::= < + ::= <= + ::= 'Defined + ::= not + ::= and + ::= or + ::= and then + ::= or else + ::= ( ) + + Note the following restriction: it is not allowed to have “and” or “or” + following “not” in the same expression without parentheses. For + example, this is not allowed: + + not X or Y + + This can be expressed instead as one of the following forms: + + (not X) or Y + not (X or Y) + + For the first test ( ::= ) the symbol must have + either the value true or false, that is to say the right-hand of the + symbol definition must be one of the (case-insensitive) literals ‘True’ + or ‘False’. If the value is true, then the corresponding lines are + included, and if the value is false, they are excluded. + + When comparing a symbol to an integer, the integer is any non negative + literal integer as defined in the Ada Reference Manual, such as 3, + 16#FF# or 2#11#. The symbol value must also be a non negative integer. + Integer values in the range 0 .. 2**31-1 are supported. + + The test ( ::= ’Defined) is true only if the symbol + has been defined in the definition file or by a ‘-D’ switch on the + command line. Otherwise, the test is false. + + The equality tests are case insensitive, as are all the preprocessor + lines. + + If the symbol referenced is not defined in the symbol definitions file, + then the effect depends on whether or not switch ‘-u’ is specified. If + so, then the symbol is treated as if it had the value false and the test + fails. If this switch is not specified, then it is an error to + reference an undefined symbol. It is also an error to reference a + symbol that is defined with a value other than ‘True’ or ‘False’. + + The use of the ‘not’ operator inverts the sense of this logical test. + The ‘not’ operator cannot be combined with the ‘or’ or ‘and’ operators, + without parentheses. For example, “if not X or Y then” is not allowed, + but “if (not X) or Y then” and “if not (X or Y) then” are. + + The ‘then’ keyword is optional as shown + + The ‘#’ must be the first non-blank character on a line, but otherwise + the format is free form. Spaces or tabs may appear between the ‘#’ and + the keyword. The keywords and the symbols are case insensitive as in + normal Ada code. Comments may be used on a preprocessor line, but other + than that, no other tokens may appear on a preprocessor line. Any + number of ‘elsif’ clauses can be present, including none at all. The + ‘else’ is optional, as in Ada. + + The ‘#’ marking the start of a preprocessor line must be the first + non-blank character on the line, i.e., it must be preceded only by + spaces or horizontal tabs. + + Symbol substitution outside of preprocessor lines is obtained by using + the sequence: + + $symbol + + anywhere within a source line, except in a comment or within a string + literal. The identifier following the ‘$’ must match one of the symbols + defined in the symbol definition file, and the result is to substitute + the value of the symbol in place of ‘$symbol’ in the output file. + + Note that although the substitution of strings within a string literal + is not possible, it is possible to have a symbol whose defined value is + a string literal. So instead of setting XYZ to ‘hello’ and writing: + + Header : String := "$XYZ"; + + you should set XYZ to ‘"hello"’ and write: + + Header : String := $XYZ; + + and then the substitution will occur as desired. + +  + File: gnat_ugn.info, Node: Integrated Preprocessing, Prev: Preprocessing with gnatprep, Up: Conditional Compilation + + 3.10.3 Integrated Preprocessing + ------------------------------- + + As noted above, a file to be preprocessed consists of Ada source code in + which preprocessing lines have been inserted. However, instead of using + ‘gnatprep’ to explicitly preprocess a file as a separate step before + compilation, you can carry out the preprocessing implicitly as part of + compilation. Such `integrated preprocessing', which is the common style + with C, is performed when either or both of the following switches are + passed to the compiler: + + * ‘-gnatep’, which specifies the `preprocessor data file'. This + file dictates how the source files will be preprocessed (e.g., + which symbol definition files apply to which sources). + + * ‘-gnateD’, which defines values for preprocessing symbols. + + Integrated preprocessing applies only to Ada source files, it is not + available for configuration pragma files. + + With integrated preprocessing, the output from the preprocessor is not, + by default, written to any external file. Instead it is passed + internally to the compiler. To preserve the result of preprocessing in + a file, either run ‘gnatprep’ in standalone mode or else supply the + ‘-gnateG’ switch (described below) to the compiler. + + When using project files: + + * the builder switch ‘-x’ should be used if any Ada source is + compiled with ‘gnatep=’, so that the compiler finds the + `preprocessor data file'. + + * the preprocessing data file and the symbol definition files + should be located in the source directories of the project. + + Note that the ‘gnatmake’ switch ‘-m’ will almost always trigger + recompilation for sources that are preprocessed, because ‘gnatmake’ + cannot compute the checksum of the source after preprocessing. + + The actual preprocessing function is described in detail in *note + Preprocessing with gnatprep: 8f. This section explains the switches + that relate to integrated preprocessing. + + ‘-gnatep=`preprocessor_data_file'’ + + This switch specifies the file name (without directory information) + of the preprocessor data file. Either place this file in one of + the source directories, or, when using project files, reference the + project file’s directory via the ‘project_name'Project_Dir’ project + attribute; e.g: + + project Prj is + package Compiler is + for Switches ("Ada") use + ("-gnatep=" & Prj'Project_Dir & "prep.def"); + end Compiler; + end Prj; + + A preprocessor data file is a text file that contains `preprocessor + control lines'. A preprocessor control line directs the + preprocessing of either a particular source file, or, analogous to + ‘others’ in Ada, all sources not specified elsewhere in the + preprocessor data file. A preprocessor control line can optionally + identify a `definition file' that assigns values to preprocessor + symbols, as well as a list of switches that relate to + preprocessing. Empty lines and comments (using Ada syntax) are + also permitted, with no semantic effect. + + Here’s an example of a preprocessor data file: + + "toto.adb" "prep.def" -u + -- Preprocess toto.adb, using definition file prep.def + -- Undefined symbols are treated as False + + * -c -DVERSION=V101 + -- Preprocess all other sources without using a definition file + -- Suppressed lined are commented + -- Symbol VERSION has the value V101 + + "tata.adb" "prep2.def" -s + -- Preprocess tata.adb, using definition file prep2.def + -- List all symbols with their values + + A preprocessor control line has the following syntax: + + ::= + [ ] { } + + ::= | '*' + + ::= + + := + + := (See below for list) + + Thus each preprocessor control line starts with either a literal + string or the character ‘*’: + + * A literal string is the file name (without directory + information) of the source file that will be input to the + preprocessor. + + * The character ‘*’ is a wild-card indicator; the additional + parameters on the line indicate the preprocessing for all the + sources that are not specified explicitly on other lines (the + order of the lines is not significant). + + It is an error to have two lines with the same file name or two + lines starting with the character ‘*’. + + After the file name or ‘*’, an optional literal string specifies + the name of the definition file to be used for preprocessing (*note + Form of Definitions File: 98.). The definition files are found by + the compiler in one of the source directories. In some cases, when + compiling a source in a directory other than the current directory, + if the definition file is in the current directory, it may be + necessary to add the current directory as a source directory + through the ‘-I’ switch; otherwise the compiler would not find the + definition file. + + Finally, switches similar to those of ‘gnatprep’ may optionally + appear: + + ‘-b’ + + Causes both preprocessor lines and the lines deleted by + preprocessing to be replaced by blank lines, preserving the + line number. This switch is always implied; however, if + specified after ‘-c’ it cancels the effect of ‘-c’. + + ‘-c’ + + Causes both preprocessor lines and the lines deleted by + preprocessing to be retained as comments marked with the + special string ‘‘–!’’. + + ‘-D`symbol'=`new_value'’ + + Define or redefine ‘symbol’ to have ‘new_value’ as its value. + The permitted form for ‘symbol’ is either an Ada identifier, + or any Ada reserved word aside from ‘if’, ‘else’, ‘elsif’, + ‘end’, ‘and’, ‘or’ and ‘then’. The permitted form for + ‘new_value’ is a literal string, an Ada identifier or any Ada + reserved word. A symbol declared with this switch replaces a + symbol with the same name defined in a definition file. + + ‘-s’ + + Causes a sorted list of symbol names and values to be listed + on the standard output file. + + ‘-u’ + + Causes undefined symbols to be treated as having the value + ‘FALSE’ in the context of a preprocessor test. In the absence + of this option, an undefined symbol in a ‘#if’ or ‘#elsif’ + test will be treated as an error. + + ‘-gnateD`symbol'[=`new_value']’ + + Define or redefine ‘symbol’ to have ‘new_value’ as its value. If + no value is supplied, then the value of ‘symbol’ is ‘True’. The + form of ‘symbol’ is an identifier, following normal Ada + (case-insensitive) rules for its syntax, and ‘new_value’ is either + an arbitrary string between double quotes or any sequence + (including an empty sequence) of characters from the set (letters, + digits, period, underline). Ada reserved words may be used as + symbols, with the exceptions of ‘if’, ‘else’, ‘elsif’, ‘end’, + ‘and’, ‘or’ and ‘then’. + + Examples: + + -gnateDToto=Tata + -gnateDFoo + -gnateDFoo=\"Foo-Bar\" + + A symbol declared with this switch on the command line replaces a + symbol with the same name either in a definition file or specified + with a switch ‘-D’ in the preprocessor data file. + + This switch is similar to switch ‘-D’ of ‘gnatprep’. + + ‘-gnateG’ + + When integrated preprocessing is performed on source file + ‘filename.extension’, create or overwrite ‘filename.extension.prep’ + to contain the result of the preprocessing. For example if the + source file is ‘foo.adb’ then the output file will be + ‘foo.adb.prep’. + +  + File: gnat_ugn.info, Node: Mixed Language Programming, Next: GNAT and Other Compilation Models, Prev: Conditional Compilation, Up: The GNAT Compilation Model + + 3.11 Mixed Language Programming + =============================== + + This section describes how to develop a mixed-language program, with a + focus on combining Ada with C or C++. + + * Menu: + + * Interfacing to C:: + * Calling Conventions:: + * Building Mixed Ada and C++ Programs:: + * Generating Ada Bindings for C and C++ headers:: + * Generating C Headers for Ada Specifications:: + +  + File: gnat_ugn.info, Node: Interfacing to C, Next: Calling Conventions, Up: Mixed Language Programming + + 3.11.1 Interfacing to C + ----------------------- + + Interfacing Ada with a foreign language such as C involves using + compiler directives to import and/or export entity definitions in each + language – using ‘extern’ statements in C, for instance, and the + ‘Import’, ‘Export’, and ‘Convention’ pragmas in Ada. A full treatment + of these topics is provided in Appendix B, section 1 of the Ada + Reference Manual. + + There are two ways to build a program using GNAT that contains some Ada + sources and some foreign language sources, depending on whether or not + the main subprogram is written in Ada. Here is a source example with + the main subprogram in Ada: + + /* file1.c */ + #include + + void print_num (int num) + { + printf ("num is %d.\\n", num); + return; + } + + /* file2.c */ + + /* num_from_Ada is declared in my_main.adb */ + extern int num_from_Ada; + + int get_num (void) + { + return num_from_Ada; + } + + -- my_main.adb + procedure My_Main is + + -- Declare then export an Integer entity called num_from_Ada + My_Num : Integer := 10; + pragma Export (C, My_Num, "num_from_Ada"); + + -- Declare an Ada function spec for Get_Num, then use + -- C function get_num for the implementation. + function Get_Num return Integer; + pragma Import (C, Get_Num, "get_num"); + + -- Declare an Ada procedure spec for Print_Num, then use + -- C function print_num for the implementation. + procedure Print_Num (Num : Integer); + pragma Import (C, Print_Num, "print_num"); + + begin + Print_Num (Get_Num); + end My_Main; + + To build this example: + + * First compile the foreign language files to generate object files: + + $ gcc -c file1.c + $ gcc -c file2.c + + * Then, compile the Ada units to produce a set of object files and + ALI files: + + $ gnatmake -c my_main.adb + + * Run the Ada binder on the Ada main program: + + $ gnatbind my_main.ali + + * Link the Ada main program, the Ada objects and the other language + objects: + + $ gnatlink my_main.ali file1.o file2.o + + The last three steps can be grouped in a single command: + + $ gnatmake my_main.adb -largs file1.o file2.o + + If the main program is in a language other than Ada, then you may have + more than one entry point into the Ada subsystem. You must use a + special binder option to generate callable routines that initialize and + finalize the Ada units (*note Binding with Non-Ada Main Programs: a0.). + Calls to the initialization and finalization routines must be inserted + in the main program, or some other appropriate point in the code. The + call to initialize the Ada units must occur before the first Ada + subprogram is called, and the call to finalize the Ada units must occur + after the last Ada subprogram returns. The binder will place the + initialization and finalization subprograms into the ‘b~xxx.adb’ file + where they can be accessed by your C sources. To illustrate, we have + the following example: + + /* main.c */ + extern void adainit (void); + extern void adafinal (void); + extern int add (int, int); + extern int sub (int, int); + + int main (int argc, char *argv[]) + { + int a = 21, b = 7; + + adainit(); + + /* Should print "21 + 7 = 28" */ + printf ("%d + %d = %d\\n", a, b, add (a, b)); + + /* Should print "21 - 7 = 14" */ + printf ("%d - %d = %d\\n", a, b, sub (a, b)); + + adafinal(); + } + + -- unit1.ads + package Unit1 is + function Add (A, B : Integer) return Integer; + pragma Export (C, Add, "add"); + end Unit1; + + -- unit1.adb + package body Unit1 is + function Add (A, B : Integer) return Integer is + begin + return A + B; + end Add; + end Unit1; + + -- unit2.ads + package Unit2 is + function Sub (A, B : Integer) return Integer; + pragma Export (C, Sub, "sub"); + end Unit2; + + -- unit2.adb + package body Unit2 is + function Sub (A, B : Integer) return Integer is + begin + return A - B; + end Sub; + end Unit2; + + The build procedure for this application is similar to the last + example’s: + + * First, compile the foreign language files to generate object files: + + $ gcc -c main.c + + * Next, compile the Ada units to produce a set of object files and + ALI files: + + $ gnatmake -c unit1.adb + $ gnatmake -c unit2.adb + + * Run the Ada binder on every generated ALI file. Make sure to use + the ‘-n’ option to specify a foreign main program: + + $ gnatbind -n unit1.ali unit2.ali + + * Link the Ada main program, the Ada objects and the foreign language + objects. You need only list the last ALI file here: + + $ gnatlink unit2.ali main.o -o exec_file + + This procedure yields a binary executable called ‘exec_file’. + + Depending on the circumstances (for example when your non-Ada main + object does not provide symbol ‘main’), you may also need to instruct + the GNAT linker not to include the standard startup objects by passing + the ‘-nostartfiles’ switch to ‘gnatlink’. + +  + File: gnat_ugn.info, Node: Calling Conventions, Next: Building Mixed Ada and C++ Programs, Prev: Interfacing to C, Up: Mixed Language Programming + + 3.11.2 Calling Conventions + -------------------------- + + GNAT follows standard calling sequence conventions and will thus + interface to any other language that also follows these conventions. + The following Convention identifiers are recognized by GNAT: + + ‘Ada’ + + This indicates that the standard Ada calling sequence will be used + and all Ada data items may be passed without any limitations in the + case where GNAT is used to generate both the caller and callee. It + is also possible to mix GNAT generated code and code generated by + another Ada compiler. In this case, the data types should be + restricted to simple cases, including primitive types. Whether + complex data types can be passed depends on the situation. + Probably it is safe to pass simple arrays, such as arrays of + integers or floats. Records may or may not work, depending on + whether both compilers lay them out identically. Complex + structures involving variant records, access parameters, tasks, or + protected types, are unlikely to be able to be passed. + + Note that in the case of GNAT running on a platform that supports + HP Ada 83, a higher degree of compatibility can be guaranteed, and + in particular records are laid out in an identical manner in the + two compilers. Note also that if output from two different + compilers is mixed, the program is responsible for dealing with + elaboration issues. Probably the safest approach is to write the + main program in the version of Ada other than GNAT, so that it + takes care of its own elaboration requirements, and then call the + GNAT-generated adainit procedure to ensure elaboration of the GNAT + components. Consult the documentation of the other Ada compiler + for further details on elaboration. + + However, it is not possible to mix the tasking run time of GNAT and + HP Ada 83, All the tasking operations must either be entirely + within GNAT compiled sections of the program, or entirely within HP + Ada 83 compiled sections of the program. + + ‘Assembler’ + + Specifies assembler as the convention. In practice this has the + same effect as convention Ada (but is not equivalent in the sense + of being considered the same convention). + + ‘Asm’ + + Equivalent to Assembler. + + ‘COBOL’ + + Data will be passed according to the conventions described in + section B.4 of the Ada Reference Manual. + + ‘C’ + + Data will be passed according to the conventions described in + section B.3 of the Ada Reference Manual. + + A note on interfacing to a C ‘varargs’ function: + + In C, ‘varargs’ allows a function to take a variable number of + arguments. There is no direct equivalent in this to Ada. One + approach that can be used is to create a C wrapper for each + different profile and then interface to this C wrapper. For + example, to print an ‘int’ value using ‘printf’, create a C + function ‘printfi’ that takes two arguments, a pointer to a + string and an int, and calls ‘printf’. Then in the Ada + program, use pragma ‘Import’ to interface to ‘printfi’. + + It may work on some platforms to directly interface to a + ‘varargs’ function by providing a specific Ada profile for a + particular call. However, this does not work on all + platforms, since there is no guarantee that the calling + sequence for a two argument normal C function is the same as + for calling a ‘varargs’ C function with the same two + arguments. + + ‘Default’ + + Equivalent to C. + + ‘External’ + + Equivalent to C. + + ‘C_Plus_Plus’ (or ‘CPP’) + + This stands for C++. For most purposes this is identical to C. See + the separate description of the specialized GNAT pragmas relating + to C++ interfacing for further details. + + ‘Fortran’ + + Data will be passed according to the conventions described in + section B.5 of the Ada Reference Manual. + + ‘Intrinsic’ + + This applies to an intrinsic operation, as defined in the Ada + Reference Manual. If a pragma Import (Intrinsic) applies to a + subprogram, this means that the body of the subprogram is provided + by the compiler itself, usually by means of an efficient code + sequence, and that the user does not supply an explicit body for + it. In an application program, the pragma may be applied to the + following sets of names: + + * Rotate_Left, Rotate_Right, Shift_Left, Shift_Right, + Shift_Right_Arithmetic. The corresponding subprogram + declaration must have two formal parameters. The first one + must be a signed integer type or a modular type with a binary + modulus, and the second parameter must be of type Natural. + The return type must be the same as the type of the first + argument. The size of this type can only be 8, 16, 32, or 64. + + * Binary arithmetic operators: ‘+’, ‘-‘, ‘*’, ‘/’. The + corresponding operator declaration must have parameters and + result type that have the same root numeric type (for example, + all three are long_float types). This simplifies the + definition of operations that use type checking to perform + dimensional checks: + + type Distance is new Long_Float; + type Time is new Long_Float; + type Velocity is new Long_Float; + function "/" (D : Distance; T : Time) + return Velocity; + pragma Import (Intrinsic, "/"); + + This common idiom is often programmed with a generic definition and an + explicit body. The pragma makes it simpler to introduce such declarations. + It incurs no overhead in compilation time or code size, because it is + implemented as a single machine instruction. + + * General subprogram entities. This is used to bind an Ada + subprogram declaration to a compiler builtin by name with + back-ends where such interfaces are available. A typical + example is the set of ‘__builtin’ functions exposed by the GCC + back-end, as in the following example: + + function builtin_sqrt (F : Float) return Float; + pragma Import (Intrinsic, builtin_sqrt, "__builtin_sqrtf"); + + Most of the GCC builtins are accessible this way, and as for + other import conventions (e.g. C), it is the user’s + responsibility to ensure that the Ada subprogram profile + matches the underlying builtin expectations. + + ‘Stdcall’ + + This is relevant only to Windows implementations of GNAT, and + specifies that the ‘Stdcall’ calling sequence will be used, as + defined by the NT API. Nevertheless, to ease building + cross-platform bindings this convention will be handled as a ‘C’ + calling convention on non-Windows platforms. + + ‘DLL’ + + This is equivalent to ‘Stdcall’. + + ‘Win32’ + + This is equivalent to ‘Stdcall’. + + ‘Stubbed’ + + This is a special convention that indicates that the compiler + should provide a stub body that raises ‘Program_Error’. + + GNAT additionally provides a useful pragma ‘Convention_Identifier’ that + can be used to parameterize conventions and allow additional synonyms to + be specified. For example if you have legacy code in which the + convention identifier Fortran77 was used for Fortran, you can use the + configuration pragma: + + pragma Convention_Identifier (Fortran77, Fortran); + + And from now on the identifier Fortran77 may be used as a convention + identifier (for example in an ‘Import’ pragma) with the same meaning as + Fortran. + +  + File: gnat_ugn.info, Node: Building Mixed Ada and C++ Programs, Next: Generating Ada Bindings for C and C++ headers, Prev: Calling Conventions, Up: Mixed Language Programming + + 3.11.3 Building Mixed Ada and C++ Programs + ------------------------------------------ + + A programmer inexperienced with mixed-language development may find that + building an application containing both Ada and C++ code can be a + challenge. This section gives a few hints that should make this task + easier. + + * Menu: + + * Interfacing to C++:: + * Linking a Mixed C++ & Ada Program:: + * A Simple Example:: + * Interfacing with C++ constructors:: + * Interfacing with C++ at the Class Level:: + +  + File: gnat_ugn.info, Node: Interfacing to C++, Next: Linking a Mixed C++ & Ada Program, Up: Building Mixed Ada and C++ Programs + + 3.11.3.1 Interfacing to C++ + ........................... + + GNAT supports interfacing with the G++ compiler (or any C++ compiler + generating code that is compatible with the G++ Application Binary + Interface —see ‘http://www.codesourcery.com/archives/cxx-abi’). + + Interfacing can be done at 3 levels: simple data, subprograms, and + classes. In the first two cases, GNAT offers a specific ‘Convention + C_Plus_Plus’ (or ‘CPP’) that behaves exactly like ‘Convention C’. + Usually, C++ mangles the names of subprograms. To generate proper + mangled names automatically, see *note Generating Ada Bindings for C and + C++ headers: a7.). This problem can also be addressed manually in two + ways: + + * by modifying the C++ code in order to force a C convention using + the ‘extern "C"’ syntax. + + * by figuring out the mangled name (using e.g. ‘nm’) and using it as + the Link_Name argument of the pragma import. + + Interfacing at the class level can be achieved by using the GNAT + specific pragmas such as ‘CPP_Constructor’. See the + ‘GNAT_Reference_Manual’ for additional information. + +  + File: gnat_ugn.info, Node: Linking a Mixed C++ & Ada Program, Next: A Simple Example, Prev: Interfacing to C++, Up: Building Mixed Ada and C++ Programs + + 3.11.3.2 Linking a Mixed C++ & Ada Program + .......................................... + + Usually the linker of the C++ development system must be used to link + mixed applications because most C++ systems will resolve elaboration + issues (such as calling constructors on global class instances) + transparently during the link phase. GNAT has been adapted to ease the + use of a foreign linker for the last phase. Three cases can be + considered: + + * Using GNAT and G++ (GNU C++ compiler) from the same GCC + installation: The C++ linker can simply be called by using the C++ + specific driver called ‘g++’. + + Note that if the C++ code uses inline functions, you will need to + compile your C++ code with the ‘-fkeep-inline-functions’ switch in + order to provide an existing function implementation that the Ada + code can link with. + + $ g++ -c -fkeep-inline-functions file1.C + $ g++ -c -fkeep-inline-functions file2.C + $ gnatmake ada_unit -largs file1.o file2.o --LINK=g++ + + * Using GNAT and G++ from two different GCC installations: If both + compilers are on the :envvar‘PATH‘, the previous method may be + used. It is important to note that environment variables such as + ‘C_INCLUDE_PATH’, ‘GCC_EXEC_PREFIX’, ‘BINUTILS_ROOT’, and + ‘GCC_ROOT’ will affect both compilers at the same time and may make + one of the two compilers operate improperly if set during + invocation of the wrong compiler. It is also very important that + the linker uses the proper ‘libgcc.a’ GCC library – that is, the + one from the C++ compiler installation. The implicit link command + as suggested in the ‘gnatmake’ command from the former example can + be replaced by an explicit link command with the full-verbosity + option in order to verify which library is used: + + $ gnatbind ada_unit + $ gnatlink -v -v ada_unit file1.o file2.o --LINK=c++ + + If there is a problem due to interfering environment variables, it + can be worked around by using an intermediate script. The + following example shows the proper script to use when GNAT has not + been installed at its default location and g++ has been installed + at its default location: + + $ cat ./my_script + #!/bin/sh + unset BINUTILS_ROOT + unset GCC_ROOT + c++ $* + $ gnatlink -v -v ada_unit file1.o file2.o --LINK=./my_script + + * Using a non-GNU C++ compiler: The commands previously described can + be used to insure that the C++ linker is used. Nonetheless, you + need to add a few more parameters to the link command line, + depending on the exception mechanism used. + + If the ‘setjmp’ / ‘longjmp’ exception mechanism is used, only the + paths to the ‘libgcc’ libraries are required: + + $ cat ./my_script + #!/bin/sh + CC $* gcc -print-file-name=libgcc.a gcc -print-file-name=libgcc_eh.a + $ gnatlink ada_unit file1.o file2.o --LINK=./my_script + + where CC is the name of the non-GNU C++ compiler. + + If the “zero cost” exception mechanism is used, and the platform + supports automatic registration of exception tables (e.g., + Solaris), paths to more objects are required: + + $ cat ./my_script + #!/bin/sh + CC gcc -print-file-name=crtbegin.o $* \\ + gcc -print-file-name=libgcc.a gcc -print-file-name=libgcc_eh.a \\ + gcc -print-file-name=crtend.o + $ gnatlink ada_unit file1.o file2.o --LINK=./my_script + + If the “zero cost exception” mechanism is used, and the platform + doesn’t support automatic registration of exception tables (e.g., + HP-UX or AIX), the simple approach described above will not work + and a pre-linking phase using GNAT will be necessary. + + Another alternative is to use the ‘gprbuild’ multi-language builder + which has a large knowledge base and knows how to link Ada and C++ code + together automatically in most cases. + +  + File: gnat_ugn.info, Node: A Simple Example, Next: Interfacing with C++ constructors, Prev: Linking a Mixed C++ & Ada Program, Up: Building Mixed Ada and C++ Programs + + 3.11.3.3 A Simple Example + ......................... + + The following example, provided as part of the GNAT examples, shows how + to achieve procedural interfacing between Ada and C++ in both + directions. The C++ class A has two methods. The first method is + exported to Ada by the means of an extern C wrapper function. The + second method calls an Ada subprogram. On the Ada side, the C++ calls + are modelled by a limited record with a layout comparable to the C++ + class. The Ada subprogram, in turn, calls the C++ method. So, starting + from the C++ main program, the process passes back and forth between the + two languages. + + Here are the compilation commands: + + $ gnatmake -c simple_cpp_interface + $ g++ -c cpp_main.C + $ g++ -c ex7.C + $ gnatbind -n simple_cpp_interface + $ gnatlink simple_cpp_interface -o cpp_main --LINK=g++ -lstdc++ ex7.o cpp_main.o + + Here are the corresponding sources: + + //cpp_main.C + + #include "ex7.h" + + extern "C" { + void adainit (void); + void adafinal (void); + void method1 (A *t); + } + + void method1 (A *t) + { + t->method1 (); + } + + int main () + { + A obj; + adainit (); + obj.method2 (3030); + adafinal (); + } + + //ex7.h + + class Origin { + public: + int o_value; + }; + class A : public Origin { + public: + void method1 (void); + void method2 (int v); + A(); + int a_value; + }; + + //ex7.C + + #include "ex7.h" + #include + + extern "C" { void ada_method2 (A *t, int v);} + + void A::method1 (void) + { + a_value = 2020; + printf ("in A::method1, a_value = %d \\n",a_value); + } + + void A::method2 (int v) + { + ada_method2 (this, v); + printf ("in A::method2, a_value = %d \\n",a_value); + } + + A::A(void) + { + a_value = 1010; + printf ("in A::A, a_value = %d \\n",a_value); + } + + -- simple_cpp_interface.ads + with System; + package Simple_Cpp_Interface is + type A is limited + record + Vptr : System.Address; + O_Value : Integer; + A_Value : Integer; + end record; + pragma Convention (C, A); + + procedure Method1 (This : in out A); + pragma Import (C, Method1); + + procedure Ada_Method2 (This : in out A; V : Integer); + pragma Export (C, Ada_Method2); + + end Simple_Cpp_Interface; + + -- simple_cpp_interface.adb + package body Simple_Cpp_Interface is + + procedure Ada_Method2 (This : in out A; V : Integer) is + begin + Method1 (This); + This.A_Value := V; + end Ada_Method2; + + end Simple_Cpp_Interface; + +  + File: gnat_ugn.info, Node: Interfacing with C++ constructors, Next: Interfacing with C++ at the Class Level, Prev: A Simple Example, Up: Building Mixed Ada and C++ Programs + + 3.11.3.4 Interfacing with C++ constructors + .......................................... + + In order to interface with C++ constructors GNAT provides the ‘pragma + CPP_Constructor’ (see the ‘GNAT_Reference_Manual’ for additional + information). In this section we present some common uses of C++ + constructors in mixed-languages programs in GNAT. + + Let us assume that we need to interface with the following C++ class: + + class Root { + public: + int a_value; + int b_value; + virtual int Get_Value (); + Root(); // Default constructor + Root(int v); // 1st non-default constructor + Root(int v, int w); // 2nd non-default constructor + }; + + For this purpose we can write the following package spec (further + information on how to build this spec is available in *note Interfacing + with C++ at the Class Level: ae. and *note Generating Ada Bindings for C + and C++ headers: a7.). + + with Interfaces.C; use Interfaces.C; + package Pkg_Root is + type Root is tagged limited record + A_Value : int; + B_Value : int; + end record; + pragma Import (CPP, Root); + + function Get_Value (Obj : Root) return int; + pragma Import (CPP, Get_Value); + + function Constructor return Root; + pragma Cpp_Constructor (Constructor, "_ZN4RootC1Ev"); + + function Constructor (v : Integer) return Root; + pragma Cpp_Constructor (Constructor, "_ZN4RootC1Ei"); + + function Constructor (v, w : Integer) return Root; + pragma Cpp_Constructor (Constructor, "_ZN4RootC1Eii"); + end Pkg_Root; + + On the Ada side the constructor is represented by a function (whose name + is arbitrary) that returns the classwide type corresponding to the + imported C++ class. Although the constructor is described as a + function, it is typically a procedure with an extra implicit argument + (the object being initialized) at the implementation level. GNAT issues + the appropriate call, whatever it is, to get the object properly + initialized. + + Constructors can only appear in the following contexts: + + * On the right side of an initialization of an object of type ‘T’. + + * On the right side of an initialization of a record component of + type ‘T’. + + * In an Ada 2005 limited aggregate. + + * In an Ada 2005 nested limited aggregate. + + * In an Ada 2005 limited aggregate that initializes an object built + in place by an extended return statement. + + In a declaration of an object whose type is a class imported from C++, + either the default C++ constructor is implicitly called by GNAT, or else + the required C++ constructor must be explicitly called in the expression + that initializes the object. For example: + + Obj1 : Root; + Obj2 : Root := Constructor; + Obj3 : Root := Constructor (v => 10); + Obj4 : Root := Constructor (30, 40); + + The first two declarations are equivalent: in both cases the default C++ + constructor is invoked (in the former case the call to the constructor + is implicit, and in the latter case the call is explicit in the object + declaration). ‘Obj3’ is initialized by the C++ non-default constructor + that takes an integer argument, and ‘Obj4’ is initialized by the + non-default C++ constructor that takes two integers. + + Let us derive the imported C++ class in the Ada side. For example: + + type DT is new Root with record + C_Value : Natural := 2009; + end record; + + In this case the components DT inherited from the C++ side must be + initialized by a C++ constructor, and the additional Ada components of + type DT are initialized by GNAT. The initialization of such an object is + done either by default, or by means of a function returning an aggregate + of type DT, or by means of an extension aggregate. + + Obj5 : DT; + Obj6 : DT := Function_Returning_DT (50); + Obj7 : DT := (Constructor (30,40) with C_Value => 50); + + The declaration of ‘Obj5’ invokes the default constructors: the C++ + default constructor of the parent type takes care of the initialization + of the components inherited from Root, and GNAT takes care of the + default initialization of the additional Ada components of type DT (that + is, ‘C_Value’ is initialized to value 2009). The order of invocation of + the constructors is consistent with the order of elaboration required by + Ada and C++. That is, the constructor of the parent type is always + called before the constructor of the derived type. + + Let us now consider a record that has components whose type is imported + from C++. For example: + + type Rec1 is limited record + Data1 : Root := Constructor (10); + Value : Natural := 1000; + end record; + + type Rec2 (D : Integer := 20) is limited record + Rec : Rec1; + Data2 : Root := Constructor (D, 30); + end record; + + The initialization of an object of type ‘Rec2’ will call the non-default + C++ constructors specified for the imported components. For example: + + Obj8 : Rec2 (40); + + Using Ada 2005 we can use limited aggregates to initialize an object + invoking C++ constructors that differ from those specified in the type + declarations. For example: + + Obj9 : Rec2 := (Rec => (Data1 => Constructor (15, 16), + others => <>), + others => <>); + + The above declaration uses an Ada 2005 limited aggregate to initialize + ‘Obj9’, and the C++ constructor that has two integer arguments is + invoked to initialize the ‘Data1’ component instead of the constructor + specified in the declaration of type ‘Rec1’. In Ada 2005 the box in the + aggregate indicates that unspecified components are initialized using + the expression (if any) available in the component declaration. That + is, in this case discriminant ‘D’ is initialized to value ‘20’, ‘Value’ + is initialized to value 1000, and the non-default C++ constructor that + handles two integers takes care of initializing component ‘Data2’ with + values ‘20,30’. + + In Ada 2005 we can use the extended return statement to build the Ada + equivalent to C++ non-default constructors. For example: + + function Constructor (V : Integer) return Rec2 is + begin + return Obj : Rec2 := (Rec => (Data1 => Constructor (V, 20), + others => <>), + others => <>) do + -- Further actions required for construction of + -- objects of type Rec2 + ... + end record; + end Constructor; + + In this example the extended return statement construct is used to build + in place the returned object whose components are initialized by means + of a limited aggregate. Any further action associated with the + constructor can be placed inside the construct. + +  + File: gnat_ugn.info, Node: Interfacing with C++ at the Class Level, Prev: Interfacing with C++ constructors, Up: Building Mixed Ada and C++ Programs + + 3.11.3.5 Interfacing with C++ at the Class Level + ................................................ + + In this section we demonstrate the GNAT features for interfacing with + C++ by means of an example making use of Ada 2005 abstract interface + types. This example consists of a classification of animals; classes + have been used to model our main classification of animals, and + interfaces provide support for the management of secondary + classifications. We first demonstrate a case in which the types and + constructors are defined on the C++ side and imported from the Ada side, + and latter the reverse case. + + The root of our derivation will be the ‘Animal’ class, with a single + private attribute (the ‘Age’ of the animal), a constructor, and two + public primitives to set and get the value of this attribute. + + class Animal { + public: + virtual void Set_Age (int New_Age); + virtual int Age (); + Animal() {Age_Count = 0;}; + private: + int Age_Count; + }; + + Abstract interface types are defined in C++ by means of classes with + pure virtual functions and no data members. In our example we will use + two interfaces that provide support for the common management of + ‘Carnivore’ and ‘Domestic’ animals: + + class Carnivore { + public: + virtual int Number_Of_Teeth () = 0; + }; + + class Domestic { + public: + virtual void Set_Owner (char* Name) = 0; + }; + + Using these declarations, we can now say that a ‘Dog’ is an animal that + is both Carnivore and Domestic, that is: + + class Dog : Animal, Carnivore, Domestic { + public: + virtual int Number_Of_Teeth (); + virtual void Set_Owner (char* Name); + + Dog(); // Constructor + private: + int Tooth_Count; + char *Owner; + }; + + In the following examples we will assume that the previous declarations + are located in a file named ‘animals.h’. The following package + demonstrates how to import these C++ declarations from the Ada side: + + with Interfaces.C.Strings; use Interfaces.C.Strings; + package Animals is + type Carnivore is limited interface; + pragma Convention (C_Plus_Plus, Carnivore); + function Number_Of_Teeth (X : Carnivore) + return Natural is abstract; + + type Domestic is limited interface; + pragma Convention (C_Plus_Plus, Domestic); + procedure Set_Owner + (X : in out Domestic; + Name : Chars_Ptr) is abstract; + + type Animal is tagged limited record + Age : Natural; + end record; + pragma Import (C_Plus_Plus, Animal); + + procedure Set_Age (X : in out Animal; Age : Integer); + pragma Import (C_Plus_Plus, Set_Age); + + function Age (X : Animal) return Integer; + pragma Import (C_Plus_Plus, Age); + + function New_Animal return Animal; + pragma CPP_Constructor (New_Animal); + pragma Import (CPP, New_Animal, "_ZN6AnimalC1Ev"); + + type Dog is new Animal and Carnivore and Domestic with record + Tooth_Count : Natural; + Owner : Chars_Ptr; + end record; + pragma Import (C_Plus_Plus, Dog); + + function Number_Of_Teeth (A : Dog) return Natural; + pragma Import (C_Plus_Plus, Number_Of_Teeth); + + procedure Set_Owner (A : in out Dog; Name : Chars_Ptr); + pragma Import (C_Plus_Plus, Set_Owner); + + function New_Dog return Dog; + pragma CPP_Constructor (New_Dog); + pragma Import (CPP, New_Dog, "_ZN3DogC2Ev"); + end Animals; + + Thanks to the compatibility between GNAT run-time structures and the C++ + ABI, interfacing with these C++ classes is easy. The only requirement + is that all the primitives and components must be declared exactly in + the same order in the two languages. + + Regarding the abstract interfaces, we must indicate to the GNAT compiler + by means of a ‘pragma Convention (C_Plus_Plus)’, the convention used to + pass the arguments to the called primitives will be the same as for C++. + For the imported classes we use ‘pragma Import’ with convention + ‘C_Plus_Plus’ to indicate that they have been defined on the C++ side; + this is required because the dispatch table associated with these tagged + types will be built in the C++ side and therefore will not contain the + predefined Ada primitives which Ada would otherwise expect. + + As the reader can see there is no need to indicate the C++ mangled names + associated with each subprogram because it is assumed that all the calls + to these primitives will be dispatching calls. The only exception is + the constructor, which must be registered with the compiler by means of + ‘pragma CPP_Constructor’ and needs to provide its associated C++ mangled + name because the Ada compiler generates direct calls to it. + + With the above packages we can now declare objects of type Dog on the + Ada side and dispatch calls to the corresponding subprograms on the C++ + side. We can also extend the tagged type Dog with further fields and + primitives, and override some of its C++ primitives on the Ada side. + For example, here we have a type derivation defined on the Ada side that + inherits all the dispatching primitives of the ancestor from the C++ + side. + + with Animals; use Animals; + package Vaccinated_Animals is + type Vaccinated_Dog is new Dog with null record; + function Vaccination_Expired (A : Vaccinated_Dog) return Boolean; + end Vaccinated_Animals; + + It is important to note that, because of the ABI compatibility, the + programmer does not need to add any further information to indicate + either the object layout or the dispatch table entry associated with + each dispatching operation. + + Now let us define all the types and constructors on the Ada side and + export them to C++, using the same hierarchy of our previous example: + + with Interfaces.C.Strings; + use Interfaces.C.Strings; + package Animals is + type Carnivore is limited interface; + pragma Convention (C_Plus_Plus, Carnivore); + function Number_Of_Teeth (X : Carnivore) + return Natural is abstract; + + type Domestic is limited interface; + pragma Convention (C_Plus_Plus, Domestic); + procedure Set_Owner + (X : in out Domestic; + Name : Chars_Ptr) is abstract; + + type Animal is tagged record + Age : Natural; + end record; + pragma Convention (C_Plus_Plus, Animal); + + procedure Set_Age (X : in out Animal; Age : Integer); + pragma Export (C_Plus_Plus, Set_Age); + + function Age (X : Animal) return Integer; + pragma Export (C_Plus_Plus, Age); + + function New_Animal return Animal'Class; + pragma Export (C_Plus_Plus, New_Animal); + + type Dog is new Animal and Carnivore and Domestic with record + Tooth_Count : Natural; + Owner : String (1 .. 30); + end record; + pragma Convention (C_Plus_Plus, Dog); + + function Number_Of_Teeth (A : Dog) return Natural; + pragma Export (C_Plus_Plus, Number_Of_Teeth); + + procedure Set_Owner (A : in out Dog; Name : Chars_Ptr); + pragma Export (C_Plus_Plus, Set_Owner); + + function New_Dog return Dog'Class; + pragma Export (C_Plus_Plus, New_Dog); + end Animals; + + Compared with our previous example the only differences are the use of + ‘pragma Convention’ (instead of ‘pragma Import’), and the use of ‘pragma + Export’ to indicate to the GNAT compiler that the primitives will be + available to C++. Thanks to the ABI compatibility, on the C++ side + there is nothing else to be done; as explained above, the only + requirement is that all the primitives and components are declared in + exactly the same order. + + For completeness, let us see a brief C++ main program that uses the + declarations available in ‘animals.h’ (presented in our first example) + to import and use the declarations from the Ada side, properly + initializing and finalizing the Ada run-time system along the way: + + #include "animals.h" + #include + using namespace std; + + void Check_Carnivore (Carnivore *obj) {...} + void Check_Domestic (Domestic *obj) {...} + void Check_Animal (Animal *obj) {...} + void Check_Dog (Dog *obj) {...} + + extern "C" { + void adainit (void); + void adafinal (void); + Dog* new_dog (); + } + + void test () + { + Dog *obj = new_dog(); // Ada constructor + Check_Carnivore (obj); // Check secondary DT + Check_Domestic (obj); // Check secondary DT + Check_Animal (obj); // Check primary DT + Check_Dog (obj); // Check primary DT + } + + int main () + { + adainit (); test(); adafinal (); + return 0; + } + +  + File: gnat_ugn.info, Node: Generating Ada Bindings for C and C++ headers, Next: Generating C Headers for Ada Specifications, Prev: Building Mixed Ada and C++ Programs, Up: Mixed Language Programming + + 3.11.4 Generating Ada Bindings for C and C++ headers + ---------------------------------------------------- + + GNAT includes a binding generator for C and C++ headers which is + intended to do 95% of the tedious work of generating Ada specs from C or + C++ header files. + + Note that this capability is not intended to generate 100% correct Ada + specs, and will is some cases require manual adjustments, although it + can often be used out of the box in practice. + + Some of the known limitations include: + + * only very simple character constant macros are translated into Ada + constants. Function macros (macros with arguments) are partially + translated as comments, to be completed manually if needed. + + * some extensions (e.g. vector types) are not supported + + * pointers to pointers are mapped to System.Address + + * identifiers with identical name (except casing) may generate + compilation errors (e.g. ‘shm_get’ vs ‘SHM_GET’). + + The code is generated using Ada 2012 syntax, which makes it easier to + interface with other languages. In most cases you can still use the + generated binding even if your code is compiled using earlier versions + of Ada (e.g. ‘-gnat95’). + + * Menu: + + * Running the Binding Generator:: + * Generating Bindings for C++ Headers:: + * Switches:: + +  + File: gnat_ugn.info, Node: Running the Binding Generator, Next: Generating Bindings for C++ Headers, Up: Generating Ada Bindings for C and C++ headers + + 3.11.4.1 Running the Binding Generator + ...................................... + + The binding generator is part of the ‘gcc’ compiler and can be invoked + via the ‘-fdump-ada-spec’ switch, which will generate Ada spec files for + the header files specified on the command line, and all header files + needed by these files transitively. For example: + + $ gcc -c -fdump-ada-spec -C /usr/include/time.h + $ gcc -c *.ads + + will generate, under GNU/Linux, the following files: ‘time_h.ads’, + ‘bits_time_h.ads’, ‘stddef_h.ads’, ‘bits_types_h.ads’ which correspond + to the files ‘/usr/include/time.h’, ‘/usr/include/bits/time.h’, etc…, + and then compile these Ada specs. That is to say, the name of the Ada + specs is in keeping with the relative path under ‘/usr/include/’ of the + header files. This behavior is specific to paths ending with + ‘/include/’; in all the other cases, the name of the Ada specs is + derived from the simple name of the header files instead. + + The ‘-C’ switch tells ‘gcc’ to extract comments from headers, and will + attempt to generate corresponding Ada comments. + + If you want to generate a single Ada file and not the transitive + closure, you can use instead the ‘-fdump-ada-spec-slim’ switch. + + You can optionally specify a parent unit, of which all generated units + will be children, using ‘-fada-spec-parent=`unit'’. + + The simple ‘gcc`’-based command works only for C headers. For C++ + headers you need to use either the ‘g++’ command or the combination ‘gcc + -x c++`’. + + In some cases, the generated bindings will be more complete or more + meaningful when defining some macros, which you can do via the ‘-D’ + switch. This is for example the case with ‘Xlib.h’ under GNU/Linux: + + $ gcc -c -fdump-ada-spec -DXLIB_ILLEGAL_ACCESS -C /usr/include/X11/Xlib.h + + The above will generate more complete bindings than a straight call + without the ‘-DXLIB_ILLEGAL_ACCESS’ switch. + + In other cases, it is not possible to parse a header file in a + stand-alone manner, because other include files need to be included + first. In this case, the solution is to create a small header file + including the needed ‘#include’ and possible ‘#define’ directives. For + example, to generate Ada bindings for ‘readline/readline.h’, you need to + first include ‘stdio.h’, so you can create a file with the following two + lines in e.g. ‘readline1.h’: + + #include + #include + + and then generate Ada bindings from this file: + + $ gcc -c -fdump-ada-spec readline1.h + +  + File: gnat_ugn.info, Node: Generating Bindings for C++ Headers, Next: Switches, Prev: Running the Binding Generator, Up: Generating Ada Bindings for C and C++ headers + + 3.11.4.2 Generating Bindings for C++ Headers + ............................................ + + Generating bindings for C++ headers is done using the same options, + always with the `g++' compiler. Note that generating Ada spec from C++ + headers is a much more complex job and support for C++ headers is much + more limited that support for C headers. As a result, you will need to + modify the resulting bindings by hand more extensively when using C++ + headers. + + In this mode, C++ classes will be mapped to Ada tagged types, + constructors will be mapped using the ‘CPP_Constructor’ pragma, and when + possible, multiple inheritance of abstract classes will be mapped to Ada + interfaces (see the `Interfacing to C++' section in the ‘GNAT Reference + Manual’ for additional information on interfacing to C++). + + For example, given the following C++ header file: + + class Carnivore { + public: + virtual int Number_Of_Teeth () = 0; + }; + + class Domestic { + public: + virtual void Set_Owner (char* Name) = 0; + }; + + class Animal { + public: + int Age_Count; + virtual void Set_Age (int New_Age); + }; + + class Dog : Animal, Carnivore, Domestic { + public: + int Tooth_Count; + char *Owner; + + virtual int Number_Of_Teeth (); + virtual void Set_Owner (char* Name); + + Dog(); + }; + + The corresponding Ada code is generated: + + package Class_Carnivore is + type Carnivore is limited interface; + pragma Import (CPP, Carnivore); + + function Number_Of_Teeth (this : access Carnivore) return int is abstract; + end; + use Class_Carnivore; + + package Class_Domestic is + type Domestic is limited interface; + pragma Import (CPP, Domestic); + + procedure Set_Owner + (this : access Domestic; + Name : Interfaces.C.Strings.chars_ptr) is abstract; + end; + use Class_Domestic; + + package Class_Animal is + type Animal is tagged limited record + Age_Count : aliased int; + end record; + pragma Import (CPP, Animal); + + procedure Set_Age (this : access Animal; New_Age : int); + pragma Import (CPP, Set_Age, "_ZN6Animal7Set_AgeEi"); + end; + use Class_Animal; + + package Class_Dog is + type Dog is new Animal and Carnivore and Domestic with record + Tooth_Count : aliased int; + Owner : Interfaces.C.Strings.chars_ptr; + end record; + pragma Import (CPP, Dog); + + function Number_Of_Teeth (this : access Dog) return int; + pragma Import (CPP, Number_Of_Teeth, "_ZN3Dog15Number_Of_TeethEv"); + + procedure Set_Owner + (this : access Dog; Name : Interfaces.C.Strings.chars_ptr); + pragma Import (CPP, Set_Owner, "_ZN3Dog9Set_OwnerEPc"); + + function New_Dog return Dog; + pragma CPP_Constructor (New_Dog); + pragma Import (CPP, New_Dog, "_ZN3DogC1Ev"); + end; + use Class_Dog; + +  + File: gnat_ugn.info, Node: Switches, Prev: Generating Bindings for C++ Headers, Up: Generating Ada Bindings for C and C++ headers + + 3.11.4.3 Switches + ................. + + ‘-fdump-ada-spec’ + + Generate Ada spec files for the given header files transitively + (including all header files that these headers depend upon). + + ‘-fdump-ada-spec-slim’ + + Generate Ada spec files for the header files specified on the + command line only. + + ‘-fada-spec-parent=`unit'’ + + Specifies that all files generated by ‘-fdump-ada-spec’ are to be + child units of the specified parent unit. + + ‘-C’ + + Extract comments from headers and generate Ada comments in the Ada + spec files. + +  + File: gnat_ugn.info, Node: Generating C Headers for Ada Specifications, Prev: Generating Ada Bindings for C and C++ headers, Up: Mixed Language Programming + + 3.11.5 Generating C Headers for Ada Specifications + -------------------------------------------------- + + GNAT includes a C header generator for Ada specifications which supports + Ada types that have a direct mapping to C types. This includes in + particular support for: + + * Scalar types + + * Constrained arrays + + * Records (untagged) + + * Composition of the above types + + * Constant declarations + + * Object declarations + + * Subprogram declarations + + * Menu: + + * Running the C Header Generator:: + +  + File: gnat_ugn.info, Node: Running the C Header Generator, Up: Generating C Headers for Ada Specifications + + 3.11.5.1 Running the C Header Generator + ....................................... + + The C header generator is part of the GNAT compiler and can be invoked + via the ‘-gnatceg’ combination of switches, which will generate a ‘.h’ + file corresponding to the given input file (Ada spec or body). Note + that only spec files are processed in any case, so giving a spec or a + body file as input is equivalent. For example: + + $ gcc -c -gnatceg pack1.ads + + will generate a self-contained file called ‘pack1.h’ including common + definitions from the Ada Standard package, followed by the definitions + included in ‘pack1.ads’, as well as all the other units withed by this + file. + + For instance, given the following Ada files: + + package Pack2 is + type Int is range 1 .. 10; + end Pack2; + + with Pack2; + + package Pack1 is + type Rec is record + Field1, Field2 : Pack2.Int; + end record; + + Global : Rec := (1, 2); + + procedure Proc1 (R : Rec); + procedure Proc2 (R : in out Rec); + end Pack1; + + The above ‘gcc’ command will generate the following ‘pack1.h’ file: + + /* Standard definitions skipped */ + #ifndef PACK2_ADS + #define PACK2_ADS + typedef short_short_integer pack2__TintB; + typedef pack2__TintB pack2__int; + #endif /* PACK2_ADS */ + + #ifndef PACK1_ADS + #define PACK1_ADS + typedef struct _pack1__rec { + pack2__int field1; + pack2__int field2; + } pack1__rec; + extern pack1__rec pack1__global; + extern void pack1__proc1(const pack1__rec r); + extern void pack1__proc2(pack1__rec *r); + #endif /* PACK1_ADS */ + + You can then ‘include’ ‘pack1.h’ from a C source file and use the types, + call subprograms, reference objects, and constants. + +  + File: gnat_ugn.info, Node: GNAT and Other Compilation Models, Next: Using GNAT Files with External Tools, Prev: Mixed Language Programming, Up: The GNAT Compilation Model + + 3.12 GNAT and Other Compilation Models + ====================================== + + This section compares the GNAT model with the approaches taken in other + environments, first the C/C++ model and then the mechanism that has been + used in other Ada systems, in particular those traditionally used for + Ada 83. + + * Menu: + + * Comparison between GNAT and C/C++ Compilation Models:: + * Comparison between GNAT and Conventional Ada Library Models:: + +  + File: gnat_ugn.info, Node: Comparison between GNAT and C/C++ Compilation Models, Next: Comparison between GNAT and Conventional Ada Library Models, Up: GNAT and Other Compilation Models + + 3.12.1 Comparison between GNAT and C/C++ Compilation Models + ----------------------------------------------------------- + + The GNAT model of compilation is close to the C and C++ models. You can + think of Ada specs as corresponding to header files in C. As in C, you + don’t need to compile specs; they are compiled when they are used. The + Ada `with' is similar in effect to the ‘#include’ of a C header. + + One notable difference is that, in Ada, you may compile specs separately + to check them for semantic and syntactic accuracy. This is not always + possible with C headers because they are fragments of programs that have + less specific syntactic or semantic rules. + + The other major difference is the requirement for running the binder, + which performs two important functions. First, it checks for + consistency. In C or C++, the only defense against assembling + inconsistent programs lies outside the compiler, in a makefile, for + example. The binder satisfies the Ada requirement that it be impossible + to construct an inconsistent program when the compiler is used in normal + mode. + + The other important function of the binder is to deal with elaboration + issues. There are also elaboration issues in C++ that are handled + automatically. This automatic handling has the advantage of being + simpler to use, but the C++ programmer has no control over elaboration. + Where ‘gnatbind’ might complain there was no valid order of elaboration, + a C++ compiler would simply construct a program that malfunctioned at + run time. + +  + File: gnat_ugn.info, Node: Comparison between GNAT and Conventional Ada Library Models, Prev: Comparison between GNAT and C/C++ Compilation Models, Up: GNAT and Other Compilation Models + + 3.12.2 Comparison between GNAT and Conventional Ada Library Models + ------------------------------------------------------------------ + + This section is intended for Ada programmers who have used an Ada + compiler implementing the traditional Ada library model, as described in + the Ada Reference Manual. + + In GNAT, there is no ‘library’ in the normal sense. Instead, the set of + source files themselves acts as the library. Compiling Ada programs + does not generate any centralized information, but rather an object file + and a ALI file, which are of interest only to the binder and linker. In + a traditional system, the compiler reads information not only from the + source file being compiled, but also from the centralized library. This + means that the effect of a compilation depends on what has been + previously compiled. In particular: + + * When a unit is `with'ed, the unit seen by the compiler corresponds + to the version of the unit most recently compiled into the library. + + * Inlining is effective only if the necessary body has already been + compiled into the library. + + * Compiling a unit may obsolete other units in the library. + + In GNAT, compiling one unit never affects the compilation of any other + units because the compiler reads only source files. Only changes to + source files can affect the results of a compilation. In particular: + + * When a unit is `with'ed, the unit seen by the compiler corresponds + to the source version of the unit that is currently accessible to + the compiler. + + * Inlining requires the appropriate source files for the package or + subprogram bodies to be available to the compiler. Inlining is + always effective, independent of the order in which units are + compiled. + + * Compiling a unit never affects any other compilations. The editing + of sources may cause previous compilations to be out of date if + they depended on the source file being modified. + + The most important result of these differences is that order of + compilation is never significant in GNAT. There is no situation in which + one is required to do one compilation before another. What shows up as + order of compilation requirements in the traditional Ada library + becomes, in GNAT, simple source dependencies; in other words, there is + only a set of rules saying what source files must be present when a file + is compiled. + +  + File: gnat_ugn.info, Node: Using GNAT Files with External Tools, Prev: GNAT and Other Compilation Models, Up: The GNAT Compilation Model + + 3.13 Using GNAT Files with External Tools + ========================================= + + This section explains how files that are produced by GNAT may be used + with tools designed for other languages. + + * Menu: + + * Using Other Utility Programs with GNAT:: + * The External Symbol Naming Scheme of GNAT:: + +  + File: gnat_ugn.info, Node: Using Other Utility Programs with GNAT, Next: The External Symbol Naming Scheme of GNAT, Up: Using GNAT Files with External Tools + + 3.13.1 Using Other Utility Programs with GNAT + --------------------------------------------- + + The object files generated by GNAT are in standard system format and in + particular the debugging information uses this format. This means + programs generated by GNAT can be used with existing utilities that + depend on these formats. + + In general, any utility program that works with C will also often work + with Ada programs generated by GNAT. This includes software utilities + such as gprof (a profiling program), gdb (the FSF debugger), and + utilities such as Purify. + +  + File: gnat_ugn.info, Node: The External Symbol Naming Scheme of GNAT, Prev: Using Other Utility Programs with GNAT, Up: Using GNAT Files with External Tools + + 3.13.2 The External Symbol Naming Scheme of GNAT + ------------------------------------------------ + + In order to interpret the output from GNAT, when using tools that are + originally intended for use with other languages, it is useful to + understand the conventions used to generate link names from the Ada + entity names. + + All link names are in all lowercase letters. With the exception of + library procedure names, the mechanism used is simply to use the full + expanded Ada name with dots replaced by double underscores. For + example, suppose we have the following package spec: + + package QRS is + MN : Integer; + end QRS; + + The variable ‘MN’ has a full expanded Ada name of ‘QRS.MN’, so the + corresponding link name is ‘qrs__mn’. Of course if a ‘pragma Export’ is + used this may be overridden: + + package Exports is + Var1 : Integer; + pragma Export (Var1, C, External_Name => "var1_name"); + Var2 : Integer; + pragma Export (Var2, C, Link_Name => "var2_link_name"); + end Exports; + + In this case, the link name for ‘Var1’ is whatever link name the C + compiler would assign for the C function ‘var1_name’. This typically + would be either ‘var1_name’ or ‘_var1_name’, depending on operating + system conventions, but other possibilities exist. The link name for + ‘Var2’ is ‘var2_link_name’, and this is not operating system dependent. + + One exception occurs for library level procedures. A potential + ambiguity arises between the required name ‘_main’ for the C main + program, and the name we would otherwise assign to an Ada library level + procedure called ‘Main’ (which might well not be the main program). + + To avoid this ambiguity, we attach the prefix ‘_ada_’ to such names. So + if we have a library level procedure such as: + + procedure Hello (S : String); + + the external name of this procedure will be ‘_ada_hello’. + +  + File: gnat_ugn.info, Node: Building Executable Programs with GNAT, Next: GNAT Utility Programs, Prev: The GNAT Compilation Model, Up: Top + + 4 Building Executable Programs with GNAT + **************************************** + + This chapter describes first the gnatmake tool (*note Building with + gnatmake: c6.), which automatically determines the set of sources needed + by an Ada compilation unit and executes the necessary (re)compilations, + binding and linking. It also explains how to use each tool + individually: the compiler (gcc, see *note Compiling with gcc: c7.), + binder (gnatbind, see *note Binding with gnatbind: c8.), and linker + (gnatlink, see *note Linking with gnatlink: c9.) to build executable + programs. Finally, this chapter provides examples of how to make use of + the general GNU make mechanism in a GNAT context (see *note Using the + GNU make Utility: 70.). + + * Menu: + + * Building with gnatmake:: + * Compiling with gcc:: + * Compiler Switches:: + * Linker Switches:: + * Binding with gnatbind:: + * Linking with gnatlink:: + * Using the GNU make Utility:: + +  + File: gnat_ugn.info, Node: Building with gnatmake, Next: Compiling with gcc, Up: Building Executable Programs with GNAT + + 4.1 Building with ‘gnatmake’ + ============================ + + A typical development cycle when working on an Ada program consists of + the following steps: + + 1. Edit some sources to fix bugs; + + 2. Add enhancements; + + 3. Compile all sources affected; + + 4. Rebind and relink; and + + 5. Test. + + The third step in particular can be tricky, because not only do the + modified files have to be compiled, but any files depending on these + files must also be recompiled. The dependency rules in Ada can be quite + complex, especially in the presence of overloading, ‘use’ clauses, + generics and inlined subprograms. + + ‘gnatmake’ automatically takes care of the third and fourth steps of + this process. It determines which sources need to be compiled, compiles + them, and binds and links the resulting object files. + + Unlike some other Ada make programs, the dependencies are always + accurately recomputed from the new sources. The source based approach + of the GNAT compilation model makes this possible. This means that if + changes to the source program cause corresponding changes in + dependencies, they will always be tracked exactly correctly by + ‘gnatmake’. + + Note that for advanced forms of project structure, we recommend creating + a project file as explained in the `GNAT_Project_Manager' chapter in the + `GPRbuild User’s Guide', and using the ‘gprbuild’ tool which supports + building with project files and works similarly to ‘gnatmake’. + + * Menu: + + * Running gnatmake:: + * Switches for gnatmake:: + * Mode Switches for gnatmake:: + * Notes on the Command Line:: + * How gnatmake Works:: + * Examples of gnatmake Usage:: + +  + File: gnat_ugn.info, Node: Running gnatmake, Next: Switches for gnatmake, Up: Building with gnatmake + + 4.1.1 Running ‘gnatmake’ + ------------------------ + + The usual form of the ‘gnatmake’ command is + + $ gnatmake [] [] [] + + The only required argument is one ‘file_name’, which specifies a + compilation unit that is a main program. Several ‘file_names’ can be + specified: this will result in several executables being built. If + ‘switches’ are present, they can be placed before the first ‘file_name’, + between ‘file_names’ or after the last ‘file_name’. If ‘mode_switches’ + are present, they must always be placed after the last ‘file_name’ and + all ‘switches’. + + If you are using standard file extensions (‘.adb’ and ‘.ads’), then the + extension may be omitted from the ‘file_name’ arguments. However, if + you are using non-standard extensions, then it is required that the + extension be given. A relative or absolute directory path can be + specified in a ‘file_name’, in which case, the input source file will be + searched for in the specified directory only. Otherwise, the input + source file will first be searched in the directory where ‘gnatmake’ was + invoked and if it is not found, it will be search on the source path of + the compiler as described in *note Search Paths and the Run-Time Library + (RTL): 73. + + All ‘gnatmake’ output (except when you specify ‘-M’) is sent to + ‘stderr’. The output produced by the ‘-M’ switch is sent to ‘stdout’. + +  + File: gnat_ugn.info, Node: Switches for gnatmake, Next: Mode Switches for gnatmake, Prev: Running gnatmake, Up: Building with gnatmake + + 4.1.2 Switches for ‘gnatmake’ + ----------------------------- + + You may specify any of the following switches to ‘gnatmake’: + + ‘--version’ + + Display Copyright and version, then exit disregarding all other + options. + + ‘--help’ + + If ‘--version’ was not used, display usage, then exit disregarding + all other options. + + ‘--GCC=`compiler_name'’ + + Program used for compiling. The default is ‘gcc’. You need to use + quotes around ‘compiler_name’ if ‘compiler_name’ contains spaces or + other separator characters. As an example ‘--GCC="foo -x -y"’ will + instruct ‘gnatmake’ to use ‘foo -x -y’ as your compiler. A + limitation of this syntax is that the name and path name of the + executable itself must not include any embedded spaces. Note that + switch ‘-c’ is always inserted after your command name. Thus in + the above example the compiler command that will be used by + ‘gnatmake’ will be ‘foo -c -x -y’. If several + ‘--GCC=compiler_name’ are used, only the last ‘compiler_name’ is + taken into account. However, all the additional switches are also + taken into account. Thus, ‘--GCC="foo -x -y" --GCC="bar -z -t"’ is + equivalent to ‘--GCC="bar -x -y -z -t"’. + + ‘--GNATBIND=`binder_name'’ + + Program used for binding. The default is ‘gnatbind’. You need to + use quotes around ‘binder_name’ if ‘binder_name’ contains spaces or + other separator characters. As an example ‘--GNATBIND="bar -x -y"’ + will instruct ‘gnatmake’ to use ‘bar -x -y’ as your binder. Binder + switches that are normally appended by ‘gnatmake’ to ‘gnatbind’ are + now appended to the end of ‘bar -x -y’. A limitation of this + syntax is that the name and path name of the executable itself must + not include any embedded spaces. + + ‘--GNATLINK=`linker_name'’ + + Program used for linking. The default is ‘gnatlink’. You need to + use quotes around ‘linker_name’ if ‘linker_name’ contains spaces or + other separator characters. As an example ‘--GNATLINK="lan -x -y"’ + will instruct ‘gnatmake’ to use ‘lan -x -y’ as your linker. Linker + switches that are normally appended by ‘gnatmake’ to ‘gnatlink’ are + now appended to the end of ‘lan -x -y’. A limitation of this + syntax is that the name and path name of the executable itself must + not include any embedded spaces. + + ‘--create-map-file’ + + When linking an executable, create a map file. The name of the map + file has the same name as the executable with extension “.map”. + + ‘--create-map-file=`mapfile'’ + + When linking an executable, create a map file with the specified + name. + + ‘--create-missing-dirs’ + + When using project files (‘-P`project'’), automatically create + missing object directories, library directories and exec + directories. + + ‘--single-compile-per-obj-dir’ + + Disallow simultaneous compilations in the same object directory + when project files are used. + + ‘--subdirs=`subdir'’ + + Actual object directory of each project file is the subdirectory + subdir of the object directory specified or defaulted in the + project file. + + ‘--unchecked-shared-lib-imports’ + + By default, shared library projects are not allowed to import + static library projects. When this switch is used on the command + line, this restriction is relaxed. + + ‘--source-info=`source info file'’ + + Specify a source info file. This switch is active only when + project files are used. If the source info file is specified as a + relative path, then it is relative to the object directory of the + main project. If the source info file does not exist, then after + the Project Manager has successfully parsed and processed the + project files and found the sources, it creates the source info + file. If the source info file already exists and can be read + successfully, then the Project Manager will get all the needed + information about the sources from the source info file and will + not look for them. This reduces the time to process the project + files, especially when looking for sources that take a long time. + If the source info file exists but cannot be parsed successfully, + the Project Manager will attempt to recreate it. If the Project + Manager fails to create the source info file, a message is issued, + but gnatmake does not fail. ‘gnatmake’ “trusts” the source info + file. This means that if the source files have changed (addition, + deletion, moving to a different source directory), then the source + info file need to be deleted and recreated. + + ‘-a’ + + Consider all files in the make process, even the GNAT internal + system files (for example, the predefined Ada library files), as + well as any locked files. Locked files are files whose ALI file is + write-protected. By default, ‘gnatmake’ does not check these + files, because the assumption is that the GNAT internal files are + properly up to date, and also that any write protected ALI files + have been properly installed. Note that if there is an + installation problem, such that one of these files is not up to + date, it will be properly caught by the binder. You may have to + specify this switch if you are working on GNAT itself. The switch + ‘-a’ is also useful in conjunction with ‘-f’ if you need to + recompile an entire application, including run-time files, using + special configuration pragmas, such as a ‘Normalize_Scalars’ + pragma. + + By default ‘gnatmake -a’ compiles all GNAT internal files with ‘gcc + -c -gnatpg’ rather than ‘gcc -c’. + + ‘-b’ + + Bind only. Can be combined with ‘-c’ to do compilation and + binding, but no link. Can be combined with ‘-l’ to do binding and + linking. When not combined with ‘-c’ all the units in the closure + of the main program must have been previously compiled and must be + up to date. The root unit specified by ‘file_name’ may be given + without extension, with the source extension or, if no GNAT Project + File is specified, with the ALI file extension. + + ‘-c’ + + Compile only. Do not perform binding, except when ‘-b’ is also + specified. Do not perform linking, except if both ‘-b’ and ‘-l’ + are also specified. If the root unit specified by ‘file_name’ is + not a main unit, this is the default. Otherwise ‘gnatmake’ will + attempt binding and linking unless all objects are up to date and + the executable is more recent than the objects. + + ‘-C’ + + Use a temporary mapping file. A mapping file is a way to + communicate to the compiler two mappings: from unit names to file + names (without any directory information) and from file names to + path names (with full directory information). A mapping file can + make the compiler’s file searches faster, especially if there are + many source directories, or the sources are read over a slow + network connection. If ‘-P’ is used, a mapping file is always + used, so ‘-C’ is unnecessary; in this case the mapping file is + initially populated based on the project file. If ‘-C’ is used + without ‘-P’, the mapping file is initially empty. Each invocation + of the compiler will add any newly accessed sources to the mapping + file. + + ‘-C=`file'’ + + Use a specific mapping file. The file, specified as a path name + (absolute or relative) by this switch, should already exist, + otherwise the switch is ineffective. The specified mapping file + will be communicated to the compiler. This switch is not + compatible with a project file (-P‘file‘) or with multiple + compiling processes (-jnnn, when nnn is greater than 1). + + ‘-d’ + + Display progress for each source, up to date or not, as a single + line: + + completed x out of y (zz%) + + If the file needs to be compiled this is displayed after the + invocation of the compiler. These lines are displayed even in + quiet output mode. + + ‘-D `dir'’ + + Put all object files and ALI file in directory ‘dir’. If the ‘-D’ + switch is not used, all object files and ALI files go in the + current working directory. + + This switch cannot be used when using a project file. + + ‘-eI`nnn'’ + + Indicates that the main source is a multi-unit source and the rank + of the unit in the source file is nnn. nnn needs to be a positive + number and a valid index in the source. This switch cannot be used + when ‘gnatmake’ is invoked for several mains. + + ‘-eL’ + + Follow all symbolic links when processing project files. This + should be used if your project uses symbolic links for files or + directories, but is not needed in other cases. + + This also assumes that no directory matches the naming scheme for + files (for instance that you do not have a directory called + “sources.ads” when using the default GNAT naming scheme). + + When you do not have to use this switch (i.e., by default), + gnatmake is able to save a lot of system calls (several per source + file and object file), which can result in a significant speed up + to load and manipulate a project file, especially when using source + files from a remote system. + + ‘-eS’ + + Output the commands for the compiler, the binder and the linker on + standard output, instead of standard error. + + ‘-f’ + + Force recompilations. Recompile all sources, even though some + object files may be up to date, but don’t recompile predefined or + GNAT internal files or locked files (files with a write-protected + ALI file), unless the ‘-a’ switch is also specified. + + ‘-F’ + + When using project files, if some errors or warnings are detected + during parsing and verbose mode is not in effect (no use of switch + -v), then error lines start with the full path name of the project + file, rather than its simple file name. + + ‘-g’ + + Enable debugging. This switch is simply passed to the compiler and + to the linker. + + ‘-i’ + + In normal mode, ‘gnatmake’ compiles all object files and ALI files + into the current directory. If the ‘-i’ switch is used, then + instead object files and ALI files that already exist are + overwritten in place. This means that once a large project is + organized into separate directories in the desired manner, then + ‘gnatmake’ will automatically maintain and update this + organization. If no ALI files are found on the Ada object path + (see *note Search Paths and the Run-Time Library (RTL): 73.), the + new object and ALI files are created in the directory containing + the source being compiled. If another organization is desired, + where objects and sources are kept in different directories, a + useful technique is to create dummy ALI files in the desired + directories. When detecting such a dummy file, ‘gnatmake’ will be + forced to recompile the corresponding source file, and it will be + put the resulting object and ALI files in the directory where it + found the dummy file. + + ‘-j`n'’ + + Use ‘n’ processes to carry out the (re)compilations. On a + multiprocessor machine compilations will occur in parallel. If ‘n’ + is 0, then the maximum number of parallel compilations is the + number of core processors on the platform. In the event of + compilation errors, messages from various compilations might get + interspersed (but ‘gnatmake’ will give you the full ordered list of + failing compiles at the end). If this is problematic, rerun the + make process with n set to 1 to get a clean list of messages. + + ‘-k’ + + Keep going. Continue as much as possible after a compilation + error. To ease the programmer’s task in case of compilation + errors, the list of sources for which the compile fails is given + when ‘gnatmake’ terminates. + + If ‘gnatmake’ is invoked with several ‘file_names’ and with this + switch, if there are compilation errors when building an + executable, ‘gnatmake’ will not attempt to build the following + executables. + + ‘-l’ + + Link only. Can be combined with ‘-b’ to binding and linking. + Linking will not be performed if combined with ‘-c’ but not with + ‘-b’. When not combined with ‘-b’ all the units in the closure of + the main program must have been previously compiled and must be up + to date, and the main program needs to have been bound. The root + unit specified by ‘file_name’ may be given without extension, with + the source extension or, if no GNAT Project File is specified, with + the ALI file extension. + + ‘-m’ + + Specify that the minimum necessary amount of recompilations be + performed. In this mode ‘gnatmake’ ignores time stamp differences + when the only modifications to a source file consist in + adding/removing comments, empty lines, spaces or tabs. This means + that if you have changed the comments in a source file or have + simply reformatted it, using this switch will tell ‘gnatmake’ not + to recompile files that depend on it (provided other sources on + which these files depend have undergone no semantic modifications). + Note that the debugging information may be out of date with respect + to the sources if the ‘-m’ switch causes a compilation to be + switched, so the use of this switch represents a trade-off between + compilation time and accurate debugging information. + + ‘-M’ + + Check if all objects are up to date. If they are, output the + object dependences to ‘stdout’ in a form that can be directly + exploited in a ‘Makefile’. By default, each source file is + prefixed with its (relative or absolute) directory name. This name + is whatever you specified in the various ‘-aI’ and ‘-I’ switches. + If you use ‘gnatmake -M’ ‘-q’ (see below), only the source file + names, without relative paths, are output. If you just specify the + ‘-M’ switch, dependencies of the GNAT internal system files are + omitted. This is typically what you want. If you also specify the + ‘-a’ switch, dependencies of the GNAT internal files are also + listed. Note that dependencies of the objects in external Ada + libraries (see switch ‘-aL`dir'’ in the following list) are never + reported. + + ‘-n’ + + Don’t compile, bind, or link. Checks if all objects are up to + date. If they are not, the full name of the first file that needs + to be recompiled is printed. Repeated use of this option, followed + by compiling the indicated source file, will eventually result in + recompiling all required units. + + ‘-o `exec_name'’ + + Output executable name. The name of the final executable program + will be ‘exec_name’. If the ‘-o’ switch is omitted the default + name for the executable will be the name of the input file in + appropriate form for an executable file on the host system. + + This switch cannot be used when invoking ‘gnatmake’ with several + ‘file_names’. + + ‘-p’ + + Same as ‘--create-missing-dirs’ + + ‘-P`project'’ + + Use project file ‘project’. Only one such switch can be used. + + ‘-q’ + + Quiet. When this flag is not set, the commands carried out by + ‘gnatmake’ are displayed. + + ‘-s’ + + Recompile if compiler switches have changed since last compilation. + All compiler switches but -I and -o are taken into account in the + following way: orders between different ‘first letter’ switches are + ignored, but orders between same switches are taken into account. + For example, ‘-O -O2’ is different than ‘-O2 -O’, but ‘-g -O’ is + equivalent to ‘-O -g’. + + This switch is recommended when Integrated Preprocessing is used. + + ‘-u’ + + Unique. Recompile at most the main files. It implies -c. + Combined with -f, it is equivalent to calling the compiler + directly. Note that using -u with a project file and no main has a + special meaning. + + ‘-U’ + + When used without a project file or with one or several mains on + the command line, is equivalent to -u. When used with a project + file and no main on the command line, all sources of all project + files are checked and compiled if not up to date, and libraries are + rebuilt, if necessary. + + ‘-v’ + + Verbose. Display the reason for all recompilations ‘gnatmake’ + decides are necessary, with the highest verbosity level. + + ‘-vl’ + + Verbosity level Low. Display fewer lines than in verbosity Medium. + + ‘-vm’ + + Verbosity level Medium. Potentially display fewer lines than in + verbosity High. + + ‘-vh’ + + Verbosity level High. Equivalent to -v. + + ‘-vP`x'’ + + Indicate the verbosity of the parsing of GNAT project files. See + *note Switches Related to Project Files: cf. + + ‘-x’ + + Indicate that sources that are not part of any Project File may be + compiled. Normally, when using Project Files, only sources that + are part of a Project File may be compile. When this switch is + used, a source outside of all Project Files may be compiled. The + ALI file and the object file will be put in the object directory of + the main Project. The compilation switches used will only be those + specified on the command line. Even when ‘-x’ is used, mains + specified on the command line need to be sources of a project file. + + ‘-X`name'=`value'’ + + Indicate that external variable ‘name’ has the value ‘value’. The + Project Manager will use this value for occurrences of + ‘external(name)’ when parsing the project file. *note Switches + Related to Project Files: cf. + + ‘-z’ + + No main subprogram. Bind and link the program even if the unit + name given on the command line is a package name. The resulting + executable will execute the elaboration routines of the package and + its closure, then the finalization routines. + + GCC switches + ............ + + Any uppercase or multi-character switch that is not a ‘gnatmake’ switch + is passed to ‘gcc’ (e.g., ‘-O’, ‘-gnato,’ etc.) + + Source and library search path switches + ....................................... + + ‘-aI`dir'’ + + When looking for source files also look in directory ‘dir’. The + order in which source files search is undertaken is described in + *note Search Paths and the Run-Time Library (RTL): 73. + + ‘-aL`dir'’ + + Consider ‘dir’ as being an externally provided Ada library. + Instructs ‘gnatmake’ to skip compilation units whose ‘.ALI’ files + have been located in directory ‘dir’. This allows you to have + missing bodies for the units in ‘dir’ and to ignore out of date + bodies for the same units. You still need to specify the location + of the specs for these units by using the switches ‘-aI`dir'’ or + ‘-I`dir'’. Note: this switch is provided for compatibility with + previous versions of ‘gnatmake’. The easier method of causing + standard libraries to be excluded from consideration is to + write-protect the corresponding ALI files. + + ‘-aO`dir'’ + + When searching for library and object files, look in directory + ‘dir’. The order in which library files are searched is described + in *note Search Paths for gnatbind: 76. + + ‘-A`dir'’ + + Equivalent to ‘-aL`dir'’ ‘-aI`dir'’. + + ‘-I`dir'’ + + Equivalent to ‘-aO`dir' -aI`dir'’. + + ‘-I-’ + + Do not look for source files in the directory containing the source + file named in the command line. Do not look for ALI or object + files in the directory where ‘gnatmake’ was invoked. + + ‘-L`dir'’ + + Add directory ‘dir’ to the list of directories in which the linker + will search for libraries. This is equivalent to ‘-largs’ + ‘-L`dir'’. Furthermore, under Windows, the sources pointed to by + the libraries path set in the registry are not searched for. + + ‘-nostdinc’ + + Do not look for source files in the system default directory. + + ‘-nostdlib’ + + Do not look for library files in the system default directory. + + ‘--RTS=`rts-path'’ + + Specifies the default location of the run-time library. GNAT looks + for the run-time in the following directories, and stops as soon as + a valid run-time is found (‘adainclude’ or ‘ada_source_path’, and + ‘adalib’ or ‘ada_object_path’ present): + + * `/$rts_path' + + * `/$rts_path' + + * `/rts-$rts_path' + + * The selected path is handled like a normal RTS path. + +  + File: gnat_ugn.info, Node: Mode Switches for gnatmake, Next: Notes on the Command Line, Prev: Switches for gnatmake, Up: Building with gnatmake + + 4.1.3 Mode Switches for ‘gnatmake’ + ---------------------------------- + + The mode switches (referred to as ‘mode_switches’) allow the inclusion + of switches that are to be passed to the compiler itself, the binder or + the linker. The effect of a mode switch is to cause all subsequent + switches up to the end of the switch list, or up to the next mode + switch, to be interpreted as switches to be passed on to the designated + component of GNAT. + + ‘-cargs `switches'’ + + Compiler switches. Here ‘switches’ is a list of switches that are + valid switches for ‘gcc’. They will be passed on to all compile + steps performed by ‘gnatmake’. + + ‘-bargs `switches'’ + + Binder switches. Here ‘switches’ is a list of switches that are + valid switches for ‘gnatbind’. They will be passed on to all bind + steps performed by ‘gnatmake’. + + ‘-largs `switches'’ + + Linker switches. Here ‘switches’ is a list of switches that are + valid switches for ‘gnatlink’. They will be passed on to all link + steps performed by ‘gnatmake’. + + ‘-margs `switches'’ + + Make switches. The switches are directly interpreted by + ‘gnatmake’, regardless of any previous occurrence of ‘-cargs’, + ‘-bargs’ or ‘-largs’. + +  + File: gnat_ugn.info, Node: Notes on the Command Line, Next: How gnatmake Works, Prev: Mode Switches for gnatmake, Up: Building with gnatmake + + 4.1.4 Notes on the Command Line + ------------------------------- + + This section contains some additional useful notes on the operation of + the ‘gnatmake’ command. + + * If ‘gnatmake’ finds no ALI files, it recompiles the main program + and all other units required by the main program. This means that + ‘gnatmake’ can be used for the initial compile, as well as during + subsequent steps of the development cycle. + + * If you enter ‘gnatmake foo.adb’, where ‘foo’ is a subunit or body + of a generic unit, ‘gnatmake’ recompiles ‘foo.adb’ (because it + finds no ALI) and stops, issuing a warning. + + * In ‘gnatmake’ the switch ‘-I’ is used to specify both source and + library file paths. Use ‘-aI’ instead if you just want to specify + source paths only and ‘-aO’ if you want to specify library paths + only. + + * ‘gnatmake’ will ignore any files whose ALI file is write-protected. + This may conveniently be used to exclude standard libraries from + consideration and in particular it means that the use of the ‘-f’ + switch will not recompile these files unless ‘-a’ is also + specified. + + * ‘gnatmake’ has been designed to make the use of Ada libraries + particularly convenient. Assume you have an Ada library organized + as follows: `obj-dir' contains the objects and ALI files for of + your Ada compilation units, whereas `include-dir' contains the + specs of these units, but no bodies. Then to compile a unit stored + in ‘main.adb’, which uses this Ada library you would just type: + + $ gnatmake -aI`include-dir` -aL`obj-dir` main + + * Using ‘gnatmake’ along with the ‘-m (minimal recompilation)’ switch + provides a mechanism for avoiding unnecessary recompilations. + Using this switch, you can update the comments/format of your + source files without having to recompile everything. Note, + however, that adding or deleting lines in a source files may render + its debugging info obsolete. If the file in question is a spec, + the impact is rather limited, as that debugging info will only be + useful during the elaboration phase of your program. For bodies + the impact can be more significant. In all events, your debugger + will warn you if a source file is more recent than the + corresponding object, and alert you to the fact that the debugging + information may be out of date. + +  + File: gnat_ugn.info, Node: How gnatmake Works, Next: Examples of gnatmake Usage, Prev: Notes on the Command Line, Up: Building with gnatmake + + 4.1.5 How ‘gnatmake’ Works + -------------------------- + + Generally ‘gnatmake’ automatically performs all necessary recompilations + and you don’t need to worry about how it works. However, it may be + useful to have some basic understanding of the ‘gnatmake’ approach and + in particular to understand how it uses the results of previous + compilations without incorrectly depending on them. + + First a definition: an object file is considered `up to date' if the + corresponding ALI file exists and if all the source files listed in the + dependency section of this ALI file have time stamps matching those in + the ALI file. This means that neither the source file itself nor any + files that it depends on have been modified, and hence there is no need + to recompile this file. + + ‘gnatmake’ works by first checking if the specified main unit is up to + date. If so, no compilations are required for the main unit. If not, + ‘gnatmake’ compiles the main program to build a new ALI file that + reflects the latest sources. Then the ALI file of the main unit is + examined to find all the source files on which the main program depends, + and ‘gnatmake’ recursively applies the above procedure on all these + files. + + This process ensures that ‘gnatmake’ only trusts the dependencies in an + existing ALI file if they are known to be correct. Otherwise it always + recompiles to determine a new, guaranteed accurate set of dependencies. + As a result the program is compiled ‘upside down’ from what may be more + familiar as the required order of compilation in some other Ada systems. + In particular, clients are compiled before the units on which they + depend. The ability of GNAT to compile in any order is critical in + allowing an order of compilation to be chosen that guarantees that + ‘gnatmake’ will recompute a correct set of new dependencies if + necessary. + + When invoking ‘gnatmake’ with several ‘file_names’, if a unit is + imported by several of the executables, it will be recompiled at most + once. + + Note: when using non-standard naming conventions (*note Using Other File + Names: 1c.), changing through a configuration pragmas file the version + of a source and invoking ‘gnatmake’ to recompile may have no effect, if + the previous version of the source is still accessible by ‘gnatmake’. + It may be necessary to use the switch -f. + +  + File: gnat_ugn.info, Node: Examples of gnatmake Usage, Prev: How gnatmake Works, Up: Building with gnatmake + + 4.1.6 Examples of ‘gnatmake’ Usage + ---------------------------------- + + `gnatmake hello.adb' + + Compile all files necessary to bind and link the main program + ‘hello.adb’ (containing unit ‘Hello’) and bind and link the + resulting object files to generate an executable file ‘hello’. + + `gnatmake main1 main2 main3' + + Compile all files necessary to bind and link the main programs + ‘main1.adb’ (containing unit ‘Main1’), ‘main2.adb’ (containing unit + ‘Main2’) and ‘main3.adb’ (containing unit ‘Main3’) and bind and + link the resulting object files to generate three executable files + ‘main1’, ‘main2’ and ‘main3’. + + `gnatmake -q Main_Unit -cargs -O2 -bargs -l' + + Compile all files necessary to bind and link the main program unit + ‘Main_Unit’ (from file ‘main_unit.adb’). All compilations will be + done with optimization level 2 and the order of elaboration will be + listed by the binder. ‘gnatmake’ will operate in quiet mode, not + displaying commands it is executing. + +  + File: gnat_ugn.info, Node: Compiling with gcc, Next: Compiler Switches, Prev: Building with gnatmake, Up: Building Executable Programs with GNAT + + 4.2 Compiling with ‘gcc’ + ======================== + + This section discusses how to compile Ada programs using the ‘gcc’ + command. It also describes the set of switches that can be used to + control the behavior of the compiler. + + * Menu: + + * Compiling Programs:: + * Search Paths and the Run-Time Library (RTL): Search Paths and the Run-Time Library RTL. + * Order of Compilation Issues:: + * Examples:: + +  + File: gnat_ugn.info, Node: Compiling Programs, Next: Search Paths and the Run-Time Library RTL, Up: Compiling with gcc + + 4.2.1 Compiling Programs + ------------------------ + + The first step in creating an executable program is to compile the units + of the program using the ‘gcc’ command. You must compile the following + files: + + * the body file (‘.adb’) for a library level subprogram or generic + subprogram + + * the spec file (‘.ads’) for a library level package or generic + package that has no body + + * the body file (‘.adb’) for a library level package or generic + package that has a body + + You need `not' compile the following files + + * the spec of a library unit which has a body + + * subunits + + because they are compiled as part of compiling related units. GNAT + package specs when the corresponding body is compiled, and subunits when + the parent is compiled. + + If you attempt to compile any of these files, you will get one of the + following error messages (where ‘fff’ is the name of the file you + compiled): + + cannot generate code for file ``fff`` (package spec) + to check package spec, use -gnatc + + cannot generate code for file ``fff`` (missing subunits) + to check parent unit, use -gnatc + + cannot generate code for file ``fff`` (subprogram spec) + to check subprogram spec, use -gnatc + + cannot generate code for file ``fff`` (subunit) + to check subunit, use -gnatc + + As indicated by the above error messages, if you want to submit one of + these files to the compiler to check for correct semantics without + generating code, then use the ‘-gnatc’ switch. + + The basic command for compiling a file containing an Ada unit is: + + $ gcc -c [switches] + + where ‘file name’ is the name of the Ada file (usually having an + extension ‘.ads’ for a spec or ‘.adb’ for a body). You specify the ‘-c’ + switch to tell ‘gcc’ to compile, but not link, the file. The result of + a successful compilation is an object file, which has the same name as + the source file but an extension of ‘.o’ and an Ada Library Information + (ALI) file, which also has the same name as the source file, but with + ‘.ali’ as the extension. GNAT creates these two output files in the + current directory, but you may specify a source file in any directory + using an absolute or relative path specification containing the + directory information. + + TESTING: the ‘--foobar`NN'’ switch + + ‘gcc’ is actually a driver program that looks at the extensions of the + file arguments and loads the appropriate compiler. For example, the GNU + C compiler is ‘cc1’, and the Ada compiler is ‘gnat1’. These programs + are in directories known to the driver program (in some configurations + via environment variables you set), but need not be in your path. The + ‘gcc’ driver also calls the assembler and any other utilities needed to + complete the generation of the required object files. + + It is possible to supply several file names on the same ‘gcc’ command. + This causes ‘gcc’ to call the appropriate compiler for each file. For + example, the following command lists two separate files to be compiled: + + $ gcc -c x.adb y.adb + + calls ‘gnat1’ (the Ada compiler) twice to compile ‘x.adb’ and ‘y.adb’. + The compiler generates two object files ‘x.o’ and ‘y.o’ and the two ALI + files ‘x.ali’ and ‘y.ali’. + + Any switches apply to all the files listed, see *note Compiler Switches: + db. for a list of available ‘gcc’ switches. + +  + File: gnat_ugn.info, Node: Search Paths and the Run-Time Library RTL, Next: Order of Compilation Issues, Prev: Compiling Programs, Up: Compiling with gcc + + 4.2.2 Search Paths and the Run-Time Library (RTL) + ------------------------------------------------- + + With the GNAT source-based library system, the compiler must be able to + find source files for units that are needed by the unit being compiled. + Search paths are used to guide this process. + + The compiler compiles one source file whose name must be given + explicitly on the command line. In other words, no searching is done + for this file. To find all other source files that are needed (the most + common being the specs of units), the compiler examines the following + directories, in the following order: + + * The directory containing the source file of the main unit being + compiled (the file name on the command line). + + * Each directory named by an ‘-I’ switch given on the ‘gcc’ command + line, in the order given. + + * Each of the directories listed in the text file whose name is given + by the ‘ADA_PRJ_INCLUDE_FILE’ environment variable. + ‘ADA_PRJ_INCLUDE_FILE’ is normally set by gnatmake or by the gnat + driver when project files are used. It should not normally be set + by other means. + + * Each of the directories listed in the value of the + ‘ADA_INCLUDE_PATH’ environment variable. Construct this value + exactly as the ‘PATH’ environment variable: a list of directory + names separated by colons (semicolons when working with the NT + version). + + * The content of the ‘ada_source_path’ file which is part of the GNAT + installation tree and is used to store standard libraries such as + the GNAT Run Time Library (RTL) source files. *note Installing a + library: 72. + + Specifying the switch ‘-I-’ inhibits the use of the directory containing + the source file named in the command line. You can still have this + directory on your search path, but in this case it must be explicitly + requested with a ‘-I’ switch. + + Specifying the switch ‘-nostdinc’ inhibits the search of the default + location for the GNAT Run Time Library (RTL) source files. + + The compiler outputs its object files and ALI files in the current + working directory. Caution: The object file can be redirected with the + ‘-o’ switch; however, ‘gcc’ and ‘gnat1’ have not been coordinated on + this so the ‘ALI’ file will not go to the right place. Therefore, you + should avoid using the ‘-o’ switch. + + The packages ‘Ada’, ‘System’, and ‘Interfaces’ and their children make + up the GNAT RTL, together with the simple ‘System.IO’ package used in + the ‘"Hello World"’ example. The sources for these units are needed by + the compiler and are kept together in one directory. Not all of the + bodies are needed, but all of the sources are kept together anyway. In + a normal installation, you need not specify these directory names when + compiling or binding. Either the environment variables or the built-in + defaults cause these files to be found. + + In addition to the language-defined hierarchies (‘System’, ‘Ada’ and + ‘Interfaces’), the GNAT distribution provides a fourth hierarchy, + consisting of child units of ‘GNAT’. This is a collection of generally + useful types, subprograms, etc. See the ‘GNAT_Reference_Manual’ for + further details. + + Besides simplifying access to the RTL, a major use of search paths is in + compiling sources from multiple directories. This can make development + environments much more flexible. + +  + File: gnat_ugn.info, Node: Order of Compilation Issues, Next: Examples, Prev: Search Paths and the Run-Time Library RTL, Up: Compiling with gcc + + 4.2.3 Order of Compilation Issues + --------------------------------- + + If, in our earlier example, there was a spec for the ‘hello’ procedure, + it would be contained in the file ‘hello.ads’; yet this file would not + have to be explicitly compiled. This is the result of the model we + chose to implement library management. Some of the consequences of this + model are as follows: + + * There is no point in compiling specs (except for package specs with + no bodies) because these are compiled as needed by clients. If you + attempt a useless compilation, you will receive an error message. + It is also useless to compile subunits because they are compiled as + needed by the parent. + + * There are no order of compilation requirements: performing a + compilation never obsoletes anything. The only way you can + obsolete something and require recompilations is to modify one of + the source files on which it depends. + + * There is no library as such, apart from the ALI files (*note The + Ada Library Information Files: 28, for information on the format of + these files). For now we find it convenient to create separate ALI + files, but eventually the information therein may be incorporated + into the object file directly. + + * When you compile a unit, the source files for the specs of all + units that it `with's, all its subunits, and the bodies of any + generics it instantiates must be available (reachable by the + search-paths mechanism described above), or you will receive a + fatal error message. + +  + File: gnat_ugn.info, Node: Examples, Prev: Order of Compilation Issues, Up: Compiling with gcc + + 4.2.4 Examples + -------------- + + The following are some typical Ada compilation command line examples: + + $ gcc -c xyz.adb + + Compile body in file ‘xyz.adb’ with all default options. + + $ gcc -c -O2 -gnata xyz-def.adb + + Compile the child unit package in file ‘xyz-def.adb’ with extensive + optimizations, and pragma ‘Assert’/‘Debug’ statements enabled. + + $ gcc -c -gnatc abc-def.adb + + Compile the subunit in file ‘abc-def.adb’ in semantic-checking-only + mode. + +  + File: gnat_ugn.info, Node: Compiler Switches, Next: Linker Switches, Prev: Compiling with gcc, Up: Building Executable Programs with GNAT + + 4.3 Compiler Switches + ===================== + + The ‘gcc’ command accepts switches that control the compilation process. + These switches are fully described in this section: first an + alphabetical listing of all switches with a brief description, and then + functionally grouped sets of switches with more detailed information. + + More switches exist for GCC than those documented here, especially for + specific targets. However, their use is not recommended as they may + change code generation in ways that are incompatible with the Ada + run-time library, or can cause inconsistencies between compilation + units. + + * Menu: + + * Alphabetical List of All Switches:: + * Output and Error Message Control:: + * Warning Message Control:: + * Debugging and Assertion Control:: + * Validity Checking:: + * Style Checking:: + * Run-Time Checks:: + * Using gcc for Syntax Checking:: + * Using gcc for Semantic Checking:: + * Compiling Different Versions of Ada:: + * Character Set Control:: + * File Naming Control:: + * Subprogram Inlining Control:: + * Auxiliary Output Control:: + * Debugging Control:: + * Exception Handling Control:: + * Units to Sources Mapping Files:: + * Code Generation Control:: + +  + File: gnat_ugn.info, Node: Alphabetical List of All Switches, Next: Output and Error Message Control, Up: Compiler Switches + + 4.3.1 Alphabetical List of All Switches + --------------------------------------- + + ‘-b `target'’ + + Compile your program to run on ‘target’, which is the name of a + system configuration. You must have a GNAT cross-compiler built if + ‘target’ is not the same as your host system. + + ‘-B`dir'’ + + Load compiler executables (for example, ‘gnat1’, the Ada compiler) + from ‘dir’ instead of the default location. Only use this switch + when multiple versions of the GNAT compiler are available. See the + “Options for Directory Search” section in the ‘Using the GNU + Compiler Collection (GCC)’ manual for further details. You would + normally use the ‘-b’ or ‘-V’ switch instead. + + ‘-c’ + + Compile. Always use this switch when compiling Ada programs. + + Note: for some other languages when using ‘gcc’, notably in the + case of C and C++, it is possible to use use ‘gcc’ without a ‘-c’ + switch to compile and link in one step. In the case of GNAT, you + cannot use this approach, because the binder must be run and ‘gcc’ + cannot be used to run the GNAT binder. + + ‘-fcallgraph-info[=su,da]’ + + Makes the compiler output callgraph information for the program, on + a per-file basis. The information is generated in the VCG format. + It can be decorated with additional, per-node and/or per-edge + information, if a list of comma-separated markers is additionally + specified. When the ‘su’ marker is specified, the callgraph is + decorated with stack usage information; it is equivalent to + ‘-fstack-usage’. When the ‘da’ marker is specified, the callgraph + is decorated with information about dynamically allocated objects. + + ‘-fdiagnostics-format=json’ + + Makes GNAT emit warning and error messages as JSON. Inhibits + printing of text warning and errors messages except if ‘-gnatv’ or + ‘-gnatl’ are present. + + ‘-fdump-scos’ + + Generates SCO (Source Coverage Obligation) information in the ALI + file. This information is used by advanced coverage tools. See + unit ‘SCOs’ in the compiler sources for details in files ‘scos.ads’ + and ‘scos.adb’. + + ‘-fgnat-encodings=[all|gdb|minimal]’ + + This switch controls the balance between GNAT encodings and + standard DWARF emitted in the debug information. + + ‘-flto[=`n']’ + + Enables Link Time Optimization. This switch must be used in + conjunction with the ‘-Ox’ switches (but not with the ‘-gnatn’ + switch since it is a full replacement for the latter) and instructs + the compiler to defer most optimizations until the link stage. The + advantage of this approach is that the compiler can do a + whole-program analysis and choose the best interprocedural + optimization strategy based on a complete view of the program, + instead of a fragmentary view with the usual approach. This can + also speed up the compilation of big programs and reduce the size + of the executable, compared with a traditional per-unit compilation + with inlining across units enabled by the ‘-gnatn’ switch. The + drawback of this approach is that it may require more memory and + that the debugging information generated by -g with it might be + hardly usable. The switch, as well as the accompanying ‘-Ox’ + switches, must be specified both for the compilation and the link + phases. If the ‘n’ parameter is specified, the optimization and + final code generation at link time are executed using ‘n’ parallel + jobs by means of an installed ‘make’ program. + + ‘-fno-inline’ + + Suppresses all inlining, unless requested with pragma + ‘Inline_Always’. The effect is enforced regardless of other + optimization or inlining switches. Note that inlining can also be + suppressed on a finer-grained basis with pragma ‘No_Inline’. + + ‘-fno-inline-functions’ + + Suppresses automatic inlining of subprograms, which is enabled if + ‘-O3’ is used. + + ‘-fno-inline-small-functions’ + + Suppresses automatic inlining of small subprograms, which is + enabled if ‘-O2’ is used. + + ‘-fno-inline-functions-called-once’ + + Suppresses inlining of subprograms local to the unit and called + once from within it, which is enabled if ‘-O1’ is used. + + ‘-fno-ivopts’ + + Suppresses high-level loop induction variable optimizations, which + are enabled if ‘-O1’ is used. These optimizations are generally + profitable but, for some specific cases of loops with numerous uses + of the iteration variable that follow a common pattern, they may + end up destroying the regularity that could be exploited at a lower + level and thus producing inferior code. + + ‘-fno-strict-aliasing’ + + Causes the compiler to avoid assumptions regarding non-aliasing of + objects of different types. See *note Optimization and Strict + Aliasing: e4. for details. + + ‘-fno-strict-overflow’ + + Causes the compiler to avoid assumptions regarding the rules of + signed integer overflow. These rules specify that signed integer + overflow will result in a Constraint_Error exception at run time + and are enforced in default mode by the compiler, so this switch + should not be necessary in normal operating mode. It might be + useful in conjunction with ‘-gnato0’ for very peculiar cases of + low-level programming. + + ‘-fstack-check’ + + Activates stack checking. See *note Stack Overflow Checking: e5. + for details. + + ‘-fstack-usage’ + + Makes the compiler output stack usage information for the program, + on a per-subprogram basis. See *note Static Stack Usage Analysis: + e6. for details. + + ‘-g’ + + Generate debugging information. This information is stored in the + object file and copied from there to the final executable file by + the linker, where it can be read by the debugger. You must use the + ‘-g’ switch if you plan on using the debugger. + + ‘-gnat05’ + + Allow full Ada 2005 features. + + ‘-gnat12’ + + Allow full Ada 2012 features. + + ‘-gnat2005’ + + Allow full Ada 2005 features (same as ‘-gnat05’) + + ‘-gnat2012’ + + Allow full Ada 2012 features (same as ‘-gnat12’) + + ‘-gnat2022’ + + Allow full Ada 2022 features + + ‘-gnat83’ + + Enforce Ada 83 restrictions. + + ‘-gnat95’ + + Enforce Ada 95 restrictions. + + Note: for compatibility with some Ada 95 compilers which support + only the ‘overriding’ keyword of Ada 2005, the ‘-gnatd.D’ switch + can be used along with ‘-gnat95’ to achieve a similar effect with + GNAT. + + ‘-gnatd.D’ instructs GNAT to consider ‘overriding’ as a keyword and + handle its associated semantic checks, even in Ada 95 mode. + + ‘-gnata’ + + Assertions enabled. ‘Pragma Assert’ and ‘pragma Debug’ to be + activated. Note that these pragmas can also be controlled using + the configuration pragmas ‘Assertion_Policy’ and ‘Debug_Policy’. + It also activates pragmas ‘Check’, ‘Precondition’, and + ‘Postcondition’. Note that these pragmas can also be controlled + using the configuration pragma ‘Check_Policy’. In Ada 2012, it + also activates all assertions defined in the RM as aspects: + preconditions, postconditions, type invariants and (sub)type + predicates. In all Ada modes, corresponding pragmas for type + invariants and (sub)type predicates are also activated. The + default is that all these assertions are disabled, and have no + effect, other than being checked for syntactic validity, and in the + case of subtype predicates, constructions such as membership tests + still test predicates even if assertions are turned off. + + ‘-gnatA’ + + Avoid processing ‘gnat.adc’. If a ‘gnat.adc’ file is present, it + will be ignored. + + ‘-gnatb’ + + Generate brief messages to ‘stderr’ even if verbose mode set. + + ‘-gnatB’ + + Assume no invalid (bad) values except for ‘Valid attribute use + (*note Validity Checking: e7.). + + ‘-gnatc’ + + Check syntax and semantics only (no code generation attempted). + When the compiler is invoked by ‘gnatmake’, if the switch ‘-gnatc’ + is only given to the compiler (after ‘-cargs’ or in package + Compiler of the project file, ‘gnatmake’ will fail because it will + not find the object file after compilation. If ‘gnatmake’ is + called with ‘-gnatc’ as a builder switch (before ‘-cargs’ or in + package Builder of the project file) then ‘gnatmake’ will not fail + because it will not look for the object files after compilation, + and it will not try to build and link. + + ‘-gnatC’ + + Generate CodePeer intermediate format (no code generation + attempted). This switch will generate an intermediate + representation suitable for use by CodePeer (‘.scil’ files). This + switch is not compatible with code generation (it will, among other + things, disable some switches such as -gnatn, and enable others + such as -gnata). + + ‘-gnatd’ + + Specify debug options for the compiler. The string of characters + after the ‘-gnatd’ specifies the specific debug options. The + possible characters are 0-9, a-z, A-Z, optionally preceded by a dot + or underscore. See compiler source file ‘debug.adb’ for details of + the implemented debug options. Certain debug options are relevant + to applications programmers, and these are documented at + appropriate points in this users guide. + + ‘-gnatD’ + + Create expanded source files for source level debugging. This + switch also suppresses generation of cross-reference information + (see ‘-gnatx’). Note that this switch is not allowed if a previous + -gnatR switch has been given, since these two switches are not + compatible. + + ‘-gnateA’ + + Check that the actual parameters of a subprogram call are not + aliases of one another. To qualify as aliasing, their memory + locations must be identical or overlapping, at least one of the + corresponding formal parameters must be of mode OUT or IN OUT, and + at least one of the corresponding formal parameters must have its + parameter passing mechanism not specified. + + type Rec_Typ is record + Data : Integer := 0; + end record; + + function Self (Val : Rec_Typ) return Rec_Typ is + begin + return Val; + end Self; + + procedure Detect_Aliasing (Val_1 : in out Rec_Typ; Val_2 : Rec_Typ) is + begin + null; + end Detect_Aliasing; + + Obj : Rec_Typ; + + Detect_Aliasing (Obj, Obj); + Detect_Aliasing (Obj, Self (Obj)); + + In the example above, the first call to ‘Detect_Aliasing’ fails + with a ‘Program_Error’ at run time because the actuals for ‘Val_1’ + and ‘Val_2’ denote the same object. The second call executes + without raising an exception because ‘Self(Obj)’ produces an + anonymous object which does not share the memory location of ‘Obj’. + + ‘-gnateb’ + + Store configuration files by their basename in ALI files. This + switch is used for instance by gprbuild for distributed builds in + order to prevent issues where machine-specific absolute paths could + end up being stored in ALI files. + + ‘-gnatec=`path'’ + + Specify a configuration pragma file (the equal sign is optional) + (*note The Configuration Pragmas Files: 63.). + + ‘-gnateC’ + + Generate CodePeer messages in a compiler-like format. This switch + is only effective if ‘-gnatcC’ is also specified and requires an + installation of CodePeer. + + ‘-gnated’ + + Disable atomic synchronization + + ‘-gnateDsymbol[=`value']’ + + Defines a symbol, associated with ‘value’, for preprocessing. + (*note Integrated Preprocessing: 90.). + + ‘-gnateE’ + + Generate extra information in exception messages. In particular, + display extra column information and the value and range associated + with index and range check failures, and extra column information + for access checks. In cases where the compiler is able to + determine at compile time that a check will fail, it gives a + warning, and the extra information is not produced at run time. + + ‘-gnatef’ + + Display full source path name in brief error messages. + + ‘-gnateF’ + + Check for overflow on all floating-point operations, including + those for unconstrained predefined types. See description of + pragma ‘Check_Float_Overflow’ in GNAT RM. + + ‘-gnateg’ ‘-gnatceg’ + + The ‘-gnatc’ switch must always be specified before this switch, + e.g. ‘-gnatceg’. Generate a C header from the Ada input file. + See *note Generating C Headers for Ada Specifications: b7. for more + information. + + ‘-gnateG’ + + Save result of preprocessing in a text file. + + ‘-gnatei`nnn'’ + + Set maximum number of instantiations during compilation of a single + unit to ‘nnn’. This may be useful in increasing the default + maximum of 8000 for the rare case when a single unit legitimately + exceeds this limit. + + ‘-gnateI`nnn'’ + + Indicates that the source is a multi-unit source and that the index + of the unit to compile is ‘nnn’. ‘nnn’ needs to be a positive + number and need to be a valid index in the multi-unit source. + + ‘-gnatel’ + + This switch can be used with the static elaboration model to issue + info messages showing where implicit ‘pragma Elaborate’ and ‘pragma + Elaborate_All’ are generated. This is useful in diagnosing + elaboration circularities caused by these implicit pragmas when + using the static elaboration model. See See the section in this + guide on elaboration checking for further details. These messages + are not generated by default, and are intended only for temporary + use when debugging circularity problems. + + ‘-gnateL’ + + This switch turns off the info messages about implicit elaboration + pragmas. + + ‘-gnatem=`path'’ + + Specify a mapping file (the equal sign is optional) (*note Units to + Sources Mapping Files: e8.). + + ‘-gnatep=`file'’ + + Specify a preprocessing data file (the equal sign is optional) + (*note Integrated Preprocessing: 90.). + + ‘-gnateP’ + + Turn categorization dependency errors into warnings. Ada requires + that units that WITH one another have compatible categories, for + example a Pure unit cannot WITH a Preelaborate unit. If this + switch is used, these errors become warnings (which can be ignored, + or suppressed in the usual manner). This can be useful in some + specialized circumstances such as the temporary use of special test + software. + + ‘-gnateS’ + + Synonym of ‘-fdump-scos’, kept for backwards compatibility. + + ‘-gnatet=`path'’ + + Generate target dependent information. The format of the output + file is described in the section about switch ‘-gnateT’. + + ‘-gnateT=`path'’ + + Read target dependent information, such as endianness or sizes and + alignments of base type. If this switch is passed, the default + target dependent information of the compiler is replaced by the one + read from the input file. This is used by tools other than the + compiler, e.g. to do semantic analysis of programs that will run + on some other target than the machine on which the tool is run. + + The following target dependent values should be defined, where + ‘Nat’ denotes a natural integer value, ‘Pos’ denotes a positive + integer value, and fields marked with a question mark are boolean + fields, where a value of 0 is False, and a value of 1 is True: + + Bits_BE : Nat; -- Bits stored big-endian? + Bits_Per_Unit : Pos; -- Bits in a storage unit + Bits_Per_Word : Pos; -- Bits in a word + Bytes_BE : Nat; -- Bytes stored big-endian? + Char_Size : Pos; -- Standard.Character'Size + Double_Float_Alignment : Nat; -- Alignment of double float + Double_Scalar_Alignment : Nat; -- Alignment of double length scalar + Double_Size : Pos; -- Standard.Long_Float'Size + Float_Size : Pos; -- Standard.Float'Size + Float_Words_BE : Nat; -- Float words stored big-endian? + Int_Size : Pos; -- Standard.Integer'Size + Long_Double_Size : Pos; -- Standard.Long_Long_Float'Size + Long_Long_Size : Pos; -- Standard.Long_Long_Integer'Size + Long_Size : Pos; -- Standard.Long_Integer'Size + Maximum_Alignment : Pos; -- Maximum permitted alignment + Max_Unaligned_Field : Pos; -- Maximum size for unaligned bit field + Pointer_Size : Pos; -- System.Address'Size + Short_Enums : Nat; -- Foreign enums use short size? + Short_Size : Pos; -- Standard.Short_Integer'Size + Strict_Alignment : Nat; -- Strict alignment? + System_Allocator_Alignment : Nat; -- Alignment for malloc calls + Wchar_T_Size : Pos; -- Interfaces.C.wchar_t'Size + Words_BE : Nat; -- Words stored big-endian? + + ‘Bits_Per_Unit’ is the number of bits in a storage unit, the + equivalent of GCC macro ‘BITS_PER_UNIT’ documented as follows: + ‘Define this macro to be the number of bits in an addressable + storage unit (byte); normally 8.’ + + ‘Bits_Per_Word’ is the number of bits in a machine word, the + equivalent of GCC macro ‘BITS_PER_WORD’ documented as follows: + ‘Number of bits in a word; normally 32.’ + + ‘Double_Float_Alignment’, if not zero, is the maximum alignment + that the compiler can choose by default for a 64-bit floating-point + type or object. + + ‘Double_Scalar_Alignment’, if not zero, is the maximum alignment + that the compiler can choose by default for a 64-bit or larger + scalar type or object. + + ‘Maximum_Alignment’ is the maximum alignment that the compiler can + choose by default for a type or object, which is also the maximum + alignment that can be specified in GNAT. It is computed for GCC + backends as ‘BIGGEST_ALIGNMENT / BITS_PER_UNIT’ where GCC macro + ‘BIGGEST_ALIGNMENT’ is documented as follows: ‘Biggest alignment + that any data type can require on this machine, in bits.’ + + ‘Max_Unaligned_Field’ is the maximum size for unaligned bit field, + which is 64 for the majority of GCC targets (but can be different + on some targets). + + ‘Strict_Alignment’ is the equivalent of GCC macro + ‘STRICT_ALIGNMENT’ documented as follows: ‘Define this macro to be + the value 1 if instructions will fail to work if given data not on + the nominal alignment. If instructions will merely go slower in + that case, define this macro as 0.’ + + ‘System_Allocator_Alignment’ is the guaranteed alignment of data + returned by calls to ‘malloc’. + + The format of the input file is as follows. First come the values + of the variables defined above, with one line per value: + + name value + + where ‘name’ is the name of the parameter, spelled out in full, and + cased as in the above list, and ‘value’ is an unsigned decimal + integer. Two or more blanks separates the name from the value. + + All the variables must be present, in alphabetical order (i.e. the + same order as the list above). + + Then there is a blank line to separate the two parts of the file. + Then come the lines showing the floating-point types to be + registered, with one line per registered mode: + + name digs float_rep size alignment + + where ‘name’ is the string name of the type (which can have single + spaces embedded in the name (e.g. long double), ‘digs’ is the + number of digits for the floating-point type, ‘float_rep’ is the + float representation (I for IEEE-754-Binary, which is the only one + supported at this time), ‘size’ is the size in bits, ‘alignment’ is + the alignment in bits. The name is followed by at least two + blanks, fields are separated by at least one blank, and a LF + character immediately follows the alignment field. + + Here is an example of a target parameterization file: + + Bits_BE 0 + Bits_Per_Unit 8 + Bits_Per_Word 64 + Bytes_BE 0 + Char_Size 8 + Double_Float_Alignment 0 + Double_Scalar_Alignment 0 + Double_Size 64 + Float_Size 32 + Float_Words_BE 0 + Int_Size 64 + Long_Double_Size 128 + Long_Long_Size 64 + Long_Size 64 + Maximum_Alignment 16 + Max_Unaligned_Field 64 + Pointer_Size 64 + Short_Size 16 + Strict_Alignment 0 + System_Allocator_Alignment 16 + Wchar_T_Size 32 + Words_BE 0 + + float 15 I 64 64 + double 15 I 64 64 + long double 18 I 80 128 + TF 33 I 128 128 + + ‘-gnateu’ + + Ignore unrecognized validity, warning, and style switches that + appear after this switch is given. This may be useful when + compiling sources developed on a later version of the compiler with + an earlier version. Of course the earlier version must support + this switch. + + ‘-gnateV’ + + Check that all actual parameters of a subprogram call are valid + according to the rules of validity checking (*note Validity + Checking: e7.). + + ‘-gnateY’ + + Ignore all STYLE_CHECKS pragmas. Full legality checks are still + carried out, but the pragmas have no effect on what style checks + are active. This allows all style checking options to be + controlled from the command line. + + ‘-gnatE’ + + Dynamic elaboration checking mode enabled. For further details see + *note Elaboration Order Handling in GNAT: f. + + ‘-gnatf’ + + Full errors. Multiple errors per line, all undefined references, + do not attempt to suppress cascaded errors. + + ‘-gnatF’ + + Externals names are folded to all uppercase. + + ‘-gnatg’ + + Internal GNAT implementation mode. This should not be used for + applications programs, it is intended only for use by the compiler + and its run-time library. For documentation, see the GNAT sources. + Note that ‘-gnatg’ implies ‘-gnatw.ge’ and ‘-gnatyg’ so that all + standard warnings and all standard style options are turned on. + All warnings and style messages are treated as errors. + + ‘-gnatG=nn’ + + List generated expanded code in source form. + + ‘-gnath’ + + Output usage information. The output is written to ‘stdout’. + + ‘-gnatH’ + + Legacy elaboration-checking mode enabled. When this switch is in + effect, the pre-18.x access-before-elaboration model becomes the de + facto model. For further details see *note Elaboration Order + Handling in GNAT: f. + + ‘-gnati`c'’ + + Identifier character set (‘c’ = 1/2/3/4/5/9/p/8/f/n/w). For + details of the possible selections for ‘c’, see *note Character Set + Control: 31. + + ‘-gnatI’ + + Ignore representation clauses. When this switch is used, + representation clauses are treated as comments. This is useful + when initially porting code where you want to ignore rep clause + problems, and also for compiling foreign code (particularly for use + with ASIS). The representation clauses that are ignored are: + enumeration_representation_clause, record_representation_clause, + and attribute_definition_clause for the following attributes: + Address, Alignment, Bit_Order, Component_Size, Machine_Radix, + Object_Size, Scalar_Storage_Order, Size, Small, Stream_Size, and + Value_Size. Pragma Default_Scalar_Storage_Order is also ignored. + Note that this option should be used only for compiling – the code + is likely to malfunction at run time. + + ‘-gnatj`nn'’ + + Reformat error messages to fit on ‘nn’ character lines + + ‘-gnatJ’ + + Permissive elaboration-checking mode enabled. When this switch is + in effect, the post-18.x access-before-elaboration model ignores + potential issues with: + + - Accept statements + + - Activations of tasks defined in instances + + - Assertion pragmas + + - Calls from within an instance to its enclosing context + + - Calls through generic formal parameters + + - Calls to subprograms defined in instances + + - Entry calls + + - Indirect calls using ‘Access + + - Requeue statements + + - Select statements + + - Synchronous task suspension + + and does not emit compile-time diagnostics or run-time checks. For + further details see *note Elaboration Order Handling in GNAT: f. + + ‘-gnatk=`n'’ + + Limit file names to ‘n’ (1-999) characters (‘k’ = krunch). + + ‘-gnatl’ + + Output full source listing with embedded error messages. + + ‘-gnatL’ + + Used in conjunction with -gnatG or -gnatD to intersperse original + source lines (as comment lines with line numbers) in the expanded + source output. + + ‘-gnatm=`n'’ + + Limit number of detected error or warning messages to ‘n’ where ‘n’ + is in the range 1..999999. The default setting if no switch is + given is 9999. If the number of warnings reaches this limit, then + a message is output and further warnings are suppressed, but the + compilation is continued. If the number of error messages reaches + this limit, then a message is output and the compilation is + abandoned. The equal sign here is optional. A value of zero means + that no limit applies. + + ‘-gnatn[12]’ + + Activate inlining across units for subprograms for which pragma + ‘Inline’ is specified. This inlining is performed by the GCC + back-end. An optional digit sets the inlining level: 1 for + moderate inlining across units or 2 for full inlining across units. + If no inlining level is specified, the compiler will pick it based + on the optimization level. + + ‘-gnatN’ + + Activate front end inlining for subprograms for which pragma + ‘Inline’ is specified. This inlining is performed by the front end + and will be visible in the ‘-gnatG’ output. + + When using a gcc-based back end, then the use of ‘-gnatN’ is + deprecated, and the use of ‘-gnatn’ is preferred. Historically + front end inlining was more extensive than the gcc back end + inlining, but that is no longer the case. + + ‘-gnato0’ + + Suppresses overflow checking. This causes the behavior of the + compiler to match the default for older versions where overflow + checking was suppressed by default. This is equivalent to having + ‘pragma Suppress (Overflow_Check)’ in a configuration pragma file. + + ‘-gnato??’ + + Set default mode for handling generation of code to avoid + intermediate arithmetic overflow. Here ‘??’ is two digits, a + single digit, or nothing. Each digit is one of the digits ‘1’ + through ‘3’: + + Digit Interpretation + + + `1' All intermediate overflows checked against base type (‘STRICT’) + + + `2' Minimize intermediate overflows (‘MINIMIZED’) + + + `3' Eliminate intermediate overflows (‘ELIMINATED’) + + + If only one digit appears, then it applies to all cases; if two + digits are given, then the first applies outside assertions, + pre/postconditions, and type invariants, and the second applies + within assertions, pre/postconditions, and type invariants. + + If no digits follow the ‘-gnato’, then it is equivalent to + ‘-gnato11’, causing all intermediate overflows to be handled in + strict mode. + + This switch also causes arithmetic overflow checking to be + performed (as though ‘pragma Unsuppress (Overflow_Check)’ had been + specified). + + The default if no option ‘-gnato’ is given is that overflow + handling is in ‘STRICT’ mode (computations done using the base + type), and that overflow checking is enabled. + + Note that division by zero is a separate check that is not + controlled by this switch (divide-by-zero checking is on by + default). + + See also *note Specifying the Desired Mode: e9. + + ‘-gnatp’ + + Suppress all checks. See *note Run-Time Checks: ea. for details. + This switch has no effect if cancelled by a subsequent ‘-gnat-p’ + switch. + + ‘-gnat-p’ + + Cancel effect of previous ‘-gnatp’ switch. + + ‘-gnatq’ + + Don’t quit. Try semantics, even if parse errors. + + ‘-gnatQ’ + + Don’t quit. Generate ‘ALI’ and tree files even if illegalities. + Note that code generation is still suppressed in the presence of + any errors, so even with ‘-gnatQ’ no object file is generated. + + ‘-gnatr’ + + Treat pragma Restrictions as Restriction_Warnings. + + ‘-gnatR[0|1|2|3|4][e][j][m][s]’ + + Output representation information for declared types, objects and + subprograms. Note that this switch is not allowed if a previous + ‘-gnatD’ switch has been given, since these two switches are not + compatible. + + ‘-gnats’ + + Syntax check only. + + ‘-gnatS’ + + Print package Standard. + + ‘-gnatT`nnn'’ + + All compiler tables start at ‘nnn’ times usual starting size. + + ‘-gnatu’ + + List units for this compilation. + + ‘-gnatU’ + + Tag all error messages with the unique string ‘error:’ + + ‘-gnatv’ + + Verbose mode. Full error output with source lines to ‘stdout’. + + ‘-gnatV’ + + Control level of validity checking (*note Validity Checking: e7.). + + ‘-gnatw`xxx'’ + + Warning mode where ‘xxx’ is a string of option letters that denotes + the exact warnings that are enabled or disabled (*note Warning + Message Control: eb.). + + ‘-gnatW`e'’ + + Wide character encoding method (‘e’=n/h/u/s/e/8). + + ‘-gnatx’ + + Suppress generation of cross-reference information. + + ‘-gnatX’ + + Enable GNAT implementation extensions and latest Ada version. + + ‘-gnaty’ + + Enable built-in style checks (*note Style Checking: ec.). + + ‘-gnatz`m'’ + + Distribution stub generation and compilation (‘m’=r/c for + receiver/caller stubs). + + ‘-I`dir'’ + + Direct GNAT to search the ‘dir’ directory for source files needed + by the current compilation (see *note Search Paths and the Run-Time + Library (RTL): 73.). + + ‘-I-’ + + Except for the source file named in the command line, do not look + for source files in the directory containing the source file named + in the command line (see *note Search Paths and the Run-Time + Library (RTL): 73.). + + ‘-o `file'’ + + This switch is used in ‘gcc’ to redirect the generated object file + and its associated ALI file. Beware of this switch with GNAT, + because it may cause the object file and ALI file to have different + names which in turn may confuse the binder and the linker. + + ‘-nostdinc’ + + Inhibit the search of the default location for the GNAT Run Time + Library (RTL) source files. + + ‘-nostdlib’ + + Inhibit the search of the default location for the GNAT Run Time + Library (RTL) ALI files. + + ‘-O[`n']’ + + ‘n’ controls the optimization level: + + `n' Effect + + + `0' No optimization, the default setting if no ‘-O’ appears + + + `1' Normal optimization, the default if you specify ‘-O’ without an operand. + A good compromise between code quality and compilation time. + + + `2' Extensive optimization, may improve execution time, possibly at the cost + of substantially increased compilation time. + + + `3' Same as ‘-O2’, and also includes inline expansion for small subprograms in + the same unit. + + + `s' Optimize space usage + + + See also *note Optimization Levels: ed. + + ‘-pass-exit-codes’ + + Catch exit codes from the compiler and use the most meaningful as + exit status. + + ‘--RTS=`rts-path'’ + + Specifies the default location of the run-time library. Same + meaning as the equivalent ‘gnatmake’ flag (*note Switches for + gnatmake: ce.). + + ‘-S’ + + Used in place of ‘-c’ to cause the assembler source file to be + generated, using ‘.s’ as the extension, instead of the object file. + This may be useful if you need to examine the generated assembly + code. + + ‘-fverbose-asm’ + + Used in conjunction with ‘-S’ to cause the generated assembly code + file to be annotated with variable names, making it significantly + easier to follow. + + ‘-v’ + + Show commands generated by the ‘gcc’ driver. Normally used only + for debugging purposes or if you need to be sure what version of + the compiler you are executing. + + ‘-V `ver'’ + + Execute ‘ver’ version of the compiler. This is the ‘gcc’ version, + not the GNAT version. + + ‘-w’ + + Turn off warnings generated by the back end of the compiler. Use + of this switch also causes the default for front end warnings to be + set to suppress (as though ‘-gnatws’ had appeared at the start of + the options). + + You may combine a sequence of GNAT switches into a single switch. For + example, the combined switch + + -gnatofi3 + + is equivalent to specifying the following sequence of switches: + + -gnato -gnatf -gnati3 + + The following restrictions apply to the combination of switches in this + manner: + + * The switch ‘-gnatc’ if combined with other switches must come first + in the string. + + * The switch ‘-gnats’ if combined with other switches must come first + in the string. + + * The switches ‘-gnatzc’ and ‘-gnatzr’ may not be combined with any + other switches, and only one of them may appear in the command + line. + + * The switch ‘-gnat-p’ may not be combined with any other switch. + + * Once a ‘y’ appears in the string (that is a use of the ‘-gnaty’ + switch), then all further characters in the switch are interpreted + as style modifiers (see description of ‘-gnaty’). + + * Once a ‘d’ appears in the string (that is a use of the ‘-gnatd’ + switch), then all further characters in the switch are interpreted + as debug flags (see description of ‘-gnatd’). + + * Once a ‘w’ appears in the string (that is a use of the ‘-gnatw’ + switch), then all further characters in the switch are interpreted + as warning mode modifiers (see description of ‘-gnatw’). + + * Once a ‘V’ appears in the string (that is a use of the ‘-gnatV’ + switch), then all further characters in the switch are interpreted + as validity checking options (*note Validity Checking: e7.). + + * Option ‘em’, ‘ec’, ‘ep’, ‘l=’ and ‘R’ must be the last options in a + combined list of options. + +  + File: gnat_ugn.info, Node: Output and Error Message Control, Next: Warning Message Control, Prev: Alphabetical List of All Switches, Up: Compiler Switches + + 4.3.2 Output and Error Message Control + -------------------------------------- + + The standard default format for error messages is called ‘brief format’. + Brief format messages are written to ‘stderr’ (the standard error file) + and have the following form: + + e.adb:3:04: Incorrect spelling of keyword "function" + e.adb:4:20: ";" should be "is" + + The first integer after the file name is the line number in the file, + and the second integer is the column number within the line. ‘GNAT + Studio’ can parse the error messages and point to the referenced + character. The following switches provide control over the error + message format: + + ‘-gnatv’ + + The ‘v’ stands for verbose. The effect of this setting is to write + long-format error messages to ‘stdout’ (the standard output file. + The same program compiled with the ‘-gnatv’ switch would generate: + + 3. funcion X (Q : Integer) + | + >>> Incorrect spelling of keyword "function" + 4. return Integer; + | + >>> ";" should be "is" + + The vertical bar indicates the location of the error, and the ‘>>>’ + prefix can be used to search for error messages. When this switch + is used the only source lines output are those with errors. + + ‘-gnatl’ + + The ‘l’ stands for list. This switch causes a full listing of the + file to be generated. In the case where a body is compiled, the + corresponding spec is also listed, along with any subunits. + Typical output from compiling a package body ‘p.adb’ might look + like: + + Compiling: p.adb + + 1. package body p is + 2. procedure a; + 3. procedure a is separate; + 4. begin + 5. null + | + >>> missing ";" + + 6. end; + + Compiling: p.ads + + 1. package p is + 2. pragma Elaborate_Body + | + >>> missing ";" + + 3. end p; + + Compiling: p-a.adb + + 1. separate p + | + >>> missing "(" + + 2. procedure a is + 3. begin + 4. null + | + >>> missing ";" + + 5. end; + + When you specify the ‘-gnatv’ or ‘-gnatl’ switches and standard + output is redirected, a brief summary is written to ‘stderr’ + (standard error) giving the number of error messages and warning + messages generated. + + ‘-gnatl=`fname'’ + + This has the same effect as ‘-gnatl’ except that the output is + written to a file instead of to standard output. If the given name + ‘fname’ does not start with a period, then it is the full name of + the file to be written. If ‘fname’ is an extension, it is appended + to the name of the file being compiled. For example, if file + ‘xyz.adb’ is compiled with ‘-gnatl=.lst’, then the output is + written to file xyz.adb.lst. + + ‘-gnatU’ + + This switch forces all error messages to be preceded by the unique + string ‘error:’. This means that error messages take a few more + characters in space, but allows easy searching for and + identification of error messages. + + ‘-gnatb’ + + The ‘b’ stands for brief. This switch causes GNAT to generate the + brief format error messages to ‘stderr’ (the standard error file) + as well as the verbose format message or full listing (which as + usual is written to ‘stdout’ (the standard output file). + + ‘-gnatm=`n'’ + + The ‘m’ stands for maximum. ‘n’ is a decimal integer in the range + of 1 to 999999 and limits the number of error or warning messages + to be generated. For example, using ‘-gnatm2’ might yield + + e.adb:3:04: Incorrect spelling of keyword "function" + e.adb:5:35: missing ".." + fatal error: maximum number of errors detected + compilation abandoned + + The default setting if no switch is given is 9999. If the number + of warnings reaches this limit, then a message is output and + further warnings are suppressed, but the compilation is continued. + If the number of error messages reaches this limit, then a message + is output and the compilation is abandoned. A value of zero means + that no limit applies. + + Note that the equal sign is optional, so the switches ‘-gnatm2’ and + ‘-gnatm=2’ are equivalent. + + ‘-gnatf’ + + The ‘f’ stands for full. Normally, the compiler suppresses error + messages that are likely to be redundant. This switch causes all + error messages to be generated. In particular, in the case of + references to undefined variables. If a given variable is + referenced several times, the normal format of messages is + + e.adb:7:07: "V" is undefined (more references follow) + + where the parenthetical comment warns that there are additional + references to the variable ‘V’. Compiling the same program with + the ‘-gnatf’ switch yields + + e.adb:7:07: "V" is undefined + e.adb:8:07: "V" is undefined + e.adb:8:12: "V" is undefined + e.adb:8:16: "V" is undefined + e.adb:9:07: "V" is undefined + e.adb:9:12: "V" is undefined + + The ‘-gnatf’ switch also generates additional information for some + error messages. Some examples are: + + * Details on possibly non-portable unchecked conversion + + * List possible interpretations for ambiguous calls + + * Additional details on incorrect parameters + + ‘-gnatjnn’ + + In normal operation mode (or if ‘-gnatj0’ is used), then error + messages with continuation lines are treated as though the + continuation lines were separate messages (and so a warning with + two continuation lines counts as three warnings, and is listed as + three separate messages). + + If the ‘-gnatjnn’ switch is used with a positive value for nn, then + messages are output in a different manner. A message and all its + continuation lines are treated as a unit, and count as only one + warning or message in the statistics totals. Furthermore, the + message is reformatted so that no line is longer than nn + characters. + + ‘-gnatq’ + + The ‘q’ stands for quit (really ‘don’t quit’). In normal operation + mode, the compiler first parses the program and determines if there + are any syntax errors. If there are, appropriate error messages + are generated and compilation is immediately terminated. This + switch tells GNAT to continue with semantic analysis even if syntax + errors have been found. This may enable the detection of more + errors in a single run. On the other hand, the semantic analyzer + is more likely to encounter some internal fatal error when given a + syntactically invalid tree. + + ‘-gnatQ’ + + In normal operation mode, the ‘ALI’ file is not generated if any + illegalities are detected in the program. The use of ‘-gnatQ’ + forces generation of the ‘ALI’ file. This file is marked as being + in error, so it cannot be used for binding purposes, but it does + contain reasonably complete cross-reference information, and thus + may be useful for use by tools (e.g., semantic browsing tools or + integrated development environments) that are driven from the ‘ALI’ + file. This switch implies ‘-gnatq’, since the semantic phase must + be run to get a meaningful ALI file. + + When ‘-gnatQ’ is used and the generated ‘ALI’ file is marked as + being in error, ‘gnatmake’ will attempt to recompile the source + when it finds such an ‘ALI’ file, including with switch ‘-gnatc’. + + Note that ‘-gnatQ’ has no effect if ‘-gnats’ is specified, since + ALI files are never generated if ‘-gnats’ is set. + +  + File: gnat_ugn.info, Node: Warning Message Control, Next: Debugging and Assertion Control, Prev: Output and Error Message Control, Up: Compiler Switches + + 4.3.3 Warning Message Control + ----------------------------- + + In addition to error messages, which correspond to illegalities as + defined in the Ada Reference Manual, the compiler detects two kinds of + warning situations. + + First, the compiler considers some constructs suspicious and generates a + warning message to alert you to a possible error. Second, if the + compiler detects a situation that is sure to raise an exception at run + time, it generates a warning message. The following shows an example of + warning messages: + + e.adb:4:24: warning: creation of object may raise Storage_Error + e.adb:10:17: warning: static value out of range + e.adb:10:17: warning: "Constraint_Error" will be raised at run time + + GNAT considers a large number of situations as appropriate for the + generation of warning messages. As always, warnings are not definite + indications of errors. For example, if you do an out-of-range + assignment with the deliberate intention of raising a ‘Constraint_Error’ + exception, then the warning that may be issued does not indicate an + error. Some of the situations for which GNAT issues warnings (at least + some of the time) are given in the following list. This list is not + complete, and new warnings are often added to subsequent versions of + GNAT. The list is intended to give a general idea of the kinds of + warnings that are generated. + + * Possible infinitely recursive calls + + * Out-of-range values being assigned + + * Possible order of elaboration problems + + * Size not a multiple of alignment for a record type + + * Assertions (pragma Assert) that are sure to fail + + * Unreachable code + + * Address clauses with possibly unaligned values, or where an attempt + is made to overlay a smaller variable with a larger one. + + * Fixed-point type declarations with a null range + + * Direct_IO or Sequential_IO instantiated with a type that has access + values + + * Variables that are never assigned a value + + * Variables that are referenced before being initialized + + * Task entries with no corresponding ‘accept’ statement + + * Duplicate accepts for the same task entry in a ‘select’ + + * Objects that take too much storage + + * Unchecked conversion between types of differing sizes + + * Missing ‘return’ statement along some execution path in a function + + * Incorrect (unrecognized) pragmas + + * Incorrect external names + + * Allocation from empty storage pool + + * Potentially blocking operation in protected type + + * Suspicious parenthesization of expressions + + * Mismatching bounds in an aggregate + + * Attempt to return local value by reference + + * Premature instantiation of a generic body + + * Attempt to pack aliased components + + * Out of bounds array subscripts + + * Wrong length on string assignment + + * Violations of style rules if style checking is enabled + + * Unused `with' clauses + + * ‘Bit_Order’ usage that does not have any effect + + * ‘Standard.Duration’ used to resolve universal fixed expression + + * Dereference of possibly null value + + * Declaration that is likely to cause storage error + + * Internal GNAT unit `with'ed by application unit + + * Values known to be out of range at compile time + + * Unreferenced or unmodified variables. Note that a special + exemption applies to variables which contain any of the substrings + ‘DISCARD, DUMMY, IGNORE, JUNK, UNUSED’, in any casing. Such + variables are considered likely to be intentionally used in a + situation where otherwise a warning would be given, so warnings of + this kind are always suppressed for such variables. + + * Address overlays that could clobber memory + + * Unexpected initialization when address clause present + + * Bad alignment for address clause + + * Useless type conversions + + * Redundant assignment statements and other redundant constructs + + * Useless exception handlers + + * Accidental hiding of name by child unit + + * Access before elaboration detected at compile time + + * A range in a ‘for’ loop that is known to be null or might be null + + The following section lists compiler switches that are available to + control the handling of warning messages. It is also possible to + exercise much finer control over what warnings are issued and suppressed + using the GNAT pragma Warnings (see the description of the pragma in the + ‘GNAT_Reference_manual’). + + ‘-gnatwa’ + + `Activate most optional warnings.' + + This switch activates most optional warning messages. See the + remaining list in this section for details on optional warning + messages that can be individually controlled. The warnings that + are not turned on by this switch are: + + * ‘-gnatwd’ (implicit dereferencing) + + * ‘-gnatw.d’ (tag warnings with -gnatw switch) + + * ‘-gnatwh’ (hiding) + + * ‘-gnatw.h’ (holes in record layouts) + + * ‘-gnatw.j’ (late primitives of tagged types) + + * ‘-gnatw.k’ (redefinition of names in standard) + + * ‘-gnatwl’ (elaboration warnings) + + * ‘-gnatw.l’ (inherited aspects) + + * ‘-gnatw.n’ (atomic synchronization) + + * ‘-gnatwo’ (address clause overlay) + + * ‘-gnatw.o’ (values set by out parameters ignored) + + * ‘-gnatw.q’ (questionable layout of record types) + + * ‘-gnatw_r’ (out-of-order record representation clauses) + + * ‘-gnatw.s’ (overridden size clause) + + * ‘-gnatwt’ (tracking of deleted conditional code) + + * ‘-gnatw.u’ (unordered enumeration) + + * ‘-gnatw.w’ (use of Warnings Off) + + * ‘-gnatw.y’ (reasons for package needing body) + + All other optional warnings are turned on. + + ‘-gnatwA’ + + `Suppress all optional errors.' + + This switch suppresses all optional warning messages, see remaining + list in this section for details on optional warning messages that + can be individually controlled. Note that unlike switch ‘-gnatws’, + the use of switch ‘-gnatwA’ does not suppress warnings that are + normally given unconditionally and cannot be individually + controlled (for example, the warning about a missing exit path in a + function). Also, again unlike switch ‘-gnatws’, warnings + suppressed by the use of switch ‘-gnatwA’ can be individually + turned back on. For example the use of switch ‘-gnatwA’ followed + by switch ‘-gnatwd’ will suppress all optional warnings except the + warnings for implicit dereferencing. + + ‘-gnatw.a’ + + `Activate warnings on failing assertions.' + + This switch activates warnings for assertions where the compiler + can tell at compile time that the assertion will fail. Note that + this warning is given even if assertions are disabled. The default + is that such warnings are generated. + + ‘-gnatw.A’ + + `Suppress warnings on failing assertions.' + + This switch suppresses warnings for assertions where the compiler + can tell at compile time that the assertion will fail. + + ‘-gnatw_a’ + + `Activate warnings on anonymous allocators.' + + This switch activates warnings for allocators of anonymous access + types, which can involve run-time accessibility checks and lead to + unexpected accessibility violations. For more details on the rules + involved, see RM 3.10.2 (14). + + ‘-gnatw_A’ + + `Supress warnings on anonymous allocators.' + + This switch suppresses warnings for anonymous access type + allocators. + + ‘-gnatwb’ + + `Activate warnings on bad fixed values.' + + This switch activates warnings for static fixed-point expressions + whose value is not an exact multiple of Small. Such values are + implementation dependent, since an implementation is free to choose + either of the multiples that surround the value. GNAT always + chooses the closer one, but this is not required behavior, and it + is better to specify a value that is an exact multiple, ensuring + predictable execution. The default is that such warnings are not + generated. + + ‘-gnatwB’ + + `Suppress warnings on bad fixed values.' + + This switch suppresses warnings for static fixed-point expressions + whose value is not an exact multiple of Small. + + ‘-gnatw.b’ + + `Activate warnings on biased representation.' + + This switch activates warnings when a size clause, value size + clause, component clause, or component size clause forces the use + of biased representation for an integer type (e.g. representing a + range of 10..11 in a single bit by using 0/1 to represent 10/11). + The default is that such warnings are generated. + + ‘-gnatw.B’ + + `Suppress warnings on biased representation.' + + This switch suppresses warnings for representation clauses that + force the use of biased representation. + + ‘-gnatwc’ + + `Activate warnings on conditionals.' + + This switch activates warnings for conditional expressions used in + tests that are known to be True or False at compile time. The + default is that such warnings are not generated. Note that this + warning does not get issued for the use of boolean variables or + constants whose values are known at compile time, since this is a + standard technique for conditional compilation in Ada, and this + would generate too many false positive warnings. + + This warning option also activates a special test for comparisons + using the operators ‘>=’ and’ <=’. If the compiler can tell that + only the equality condition is possible, then it will warn that the + ‘>’ or ‘<’ part of the test is useless and that the operator could + be replaced by ‘=’. An example would be comparing a ‘Natural’ + variable <= 0. + + This warning option also generates warnings if one or both tests is + optimized away in a membership test for integer values if the + result can be determined at compile time. Range tests on + enumeration types are not included, since it is common for such + tests to include an end point. + + This warning can also be turned on using ‘-gnatwa’. + + ‘-gnatwC’ + + `Suppress warnings on conditionals.' + + This switch suppresses warnings for conditional expressions used in + tests that are known to be True or False at compile time. + + ‘-gnatw.c’ + + `Activate warnings on missing component clauses.' + + This switch activates warnings for record components where a record + representation clause is present and has component clauses for the + majority, but not all, of the components. A warning is given for + each component for which no component clause is present. + + ‘-gnatw.C’ + + `Suppress warnings on missing component clauses.' + + This switch suppresses warnings for record components that are + missing a component clause in the situation described above. + + ‘-gnatw_c’ + + `Activate warnings on unknown condition in Compile_Time_Warning.' + + This switch activates warnings on a pragma Compile_Time_Warning or + Compile_Time_Error whose condition has a value that is not known at + compile time. The default is that such warnings are generated. + + ‘-gnatw_C’ + + `Suppress warnings on unknown condition in Compile_Time_Warning.' + + This switch supresses warnings on a pragma Compile_Time_Warning or + Compile_Time_Error whose condition has a value that is not known at + compile time. + + ‘-gnatwd’ + + `Activate warnings on implicit dereferencing.' + + If this switch is set, then the use of a prefix of an access type + in an indexed component, slice, or selected component without an + explicit ‘.all’ will generate a warning. With this warning + enabled, access checks occur only at points where an explicit + ‘.all’ appears in the source code (assuming no warnings are + generated as a result of this switch). The default is that such + warnings are not generated. + + ‘-gnatwD’ + + `Suppress warnings on implicit dereferencing.' + + This switch suppresses warnings for implicit dereferences in + indexed components, slices, and selected components. + + ‘-gnatw.d’ + + `Activate tagging of warning and info messages.' + + If this switch is set, then warning messages are tagged, with one + of the following strings: + + - `[-gnatw?]' Used to tag warnings controlled by the + switch ‘-gnatwx’ where x is a letter a-z. + + - `[-gnatw.?]' Used to tag warnings controlled by the + switch ‘-gnatw.x’ where x is a letter a-z. + + - `[-gnatel]' Used to tag elaboration information (info) + messages generated when the static model of elaboration + is used and the ‘-gnatel’ switch is set. + + - `[restriction warning]' Used to tag warning messages for + restriction violations, activated by use of the pragma + ‘Restriction_Warnings’. + + - `[warning-as-error]' Used to tag warning messages that + have been converted to error messages by use of the + pragma Warning_As_Error. Note that such warnings are + prefixed by the string “error: ” rather than “warning: “. + + - `[enabled by default]' Used to tag all other warnings + that are always given by default, unless warnings are + completely suppressed using pragma `Warnings(Off)' or the + switch ‘-gnatws’. + + ‘-gnatw.D’ + + `Deactivate tagging of warning and info messages messages.' + + If this switch is set, then warning messages return to the default + mode in which warnings and info messages are not tagged as + described above for ‘-gnatw.d’. + + ‘-gnatwe’ + + `Treat warnings and style checks as errors.' + + This switch causes warning messages and style check messages to be + treated as errors. The warning string still appears, but the + warning messages are counted as errors, and prevent the generation + of an object file. Note that this is the only -gnatw switch that + affects the handling of style check messages. Note also that this + switch has no effect on info (information) messages, which are not + treated as errors if this switch is present. + + ‘-gnatw.e’ + + `Activate every optional warning.' + + This switch activates all optional warnings, including those which + are not activated by ‘-gnatwa’. The use of this switch is not + recommended for normal use. If you turn this switch on, it is + almost certain that you will get large numbers of useless warnings. + The warnings that are excluded from ‘-gnatwa’ are typically highly + specialized warnings that are suitable for use only in code that + has been specifically designed according to specialized coding + rules. + + ‘-gnatwE’ + + `Treat all run-time exception warnings as errors.' + + This switch causes warning messages regarding errors that will be + raised during run-time execution to be treated as errors. + + ‘-gnatwf’ + + `Activate warnings on unreferenced formals.' + + This switch causes a warning to be generated if a formal parameter + is not referenced in the body of the subprogram. This warning can + also be turned on using ‘-gnatwu’. The default is that these + warnings are not generated. + + ‘-gnatwF’ + + `Suppress warnings on unreferenced formals.' + + This switch suppresses warnings for unreferenced formal parameters. + Note that the combination ‘-gnatwu’ followed by ‘-gnatwF’ has the + effect of warning on unreferenced entities other than subprogram + formals. + + ‘-gnatwg’ + + `Activate warnings on unrecognized pragmas.' + + This switch causes a warning to be generated if an unrecognized + pragma is encountered. Apart from issuing this warning, the pragma + is ignored and has no effect. The default is that such warnings + are issued (satisfying the Ada Reference Manual requirement that + such warnings appear). + + ‘-gnatwG’ + + `Suppress warnings on unrecognized pragmas.' + + This switch suppresses warnings for unrecognized pragmas. + + ‘-gnatw.g’ + + `Warnings used for GNAT sources.' + + This switch sets the warning categories that are used by the + standard GNAT style. Currently this is equivalent to + ‘-gnatwAao.q.s.CI.V.X.Z’ but more warnings may be added in the + future without advanced notice. + + ‘-gnatwh’ + + `Activate warnings on hiding.' + + This switch activates warnings on hiding declarations that are + considered potentially confusing. Not all cases of hiding cause + warnings; for example an overriding declaration hides an implicit + declaration, which is just normal code. The default is that + warnings on hiding are not generated. + + ‘-gnatwH’ + + `Suppress warnings on hiding.' + + This switch suppresses warnings on hiding declarations. + + ‘-gnatw.h’ + + `Activate warnings on holes/gaps in records.' + + This switch activates warnings on component clauses in record + representation clauses that leave holes (gaps) in the record + layout. If this warning option is active, then record + representation clauses should specify a contiguous layout, adding + unused fill fields if needed. + + ‘-gnatw.H’ + + `Suppress warnings on holes/gaps in records.' + + This switch suppresses warnings on component clauses in record + representation clauses that leave holes (haps) in the record + layout. + + ‘-gnatwi’ + + `Activate warnings on implementation units.' + + This switch activates warnings for a `with' of an internal GNAT + implementation unit, defined as any unit from the ‘Ada’, + ‘Interfaces’, ‘GNAT’, or ‘System’ hierarchies that is not + documented in either the Ada Reference Manual or the GNAT + Programmer’s Reference Manual. Such units are intended only for + internal implementation purposes and should not be `with'ed by user + programs. The default is that such warnings are generated + + ‘-gnatwI’ + + `Disable warnings on implementation units.' + + This switch disables warnings for a `with' of an internal GNAT + implementation unit. + + ‘-gnatw.i’ + + `Activate warnings on overlapping actuals.' + + This switch enables a warning on statically detectable overlapping + actuals in a subprogram call, when one of the actuals is an in-out + parameter, and the types of the actuals are not by-copy types. + This warning is off by default. + + ‘-gnatw.I’ + + `Disable warnings on overlapping actuals.' + + This switch disables warnings on overlapping actuals in a call. + + ‘-gnatwj’ + + `Activate warnings on obsolescent features (Annex J).' + + If this warning option is activated, then warnings are generated + for calls to subprograms marked with ‘pragma Obsolescent’ and for + use of features in Annex J of the Ada Reference Manual. In the + case of Annex J, not all features are flagged. In particular use + of the renamed packages (like ‘Text_IO’) and use of package ‘ASCII’ + are not flagged, since these are very common and would generate + many annoying positive warnings. The default is that such warnings + are not generated. + + In addition to the above cases, warnings are also generated for + GNAT features that have been provided in past versions but which + have been superseded (typically by features in the new Ada + standard). For example, ‘pragma Ravenscar’ will be flagged since + its function is replaced by ‘pragma Profile(Ravenscar)’, and + ‘pragma Interface_Name’ will be flagged since its function is + replaced by ‘pragma Import’. + + Note that this warning option functions differently from the + restriction ‘No_Obsolescent_Features’ in two respects. First, the + restriction applies only to annex J features. Second, the + restriction does flag uses of package ‘ASCII’. + + ‘-gnatwJ’ + + `Suppress warnings on obsolescent features (Annex J).' + + This switch disables warnings on use of obsolescent features. + + ‘-gnatw.j’ + + `Activate warnings on late declarations of tagged type primitives.' + + This switch activates warnings on visible primitives added to a + tagged type after deriving a private extension from it. + + ‘-gnatw.J’ + + `Suppress warnings on late declarations of tagged type primitives.' + + This switch suppresses warnings on visible primitives added to a + tagged type after deriving a private extension from it. + + ‘-gnatwk’ + + `Activate warnings on variables that could be constants.' + + This switch activates warnings for variables that are initialized + but never modified, and then could be declared constants. The + default is that such warnings are not given. + + ‘-gnatwK’ + + `Suppress warnings on variables that could be constants.' + + This switch disables warnings on variables that could be declared + constants. + + ‘-gnatw.k’ + + `Activate warnings on redefinition of names in standard.' + + This switch activates warnings for declarations that declare a name + that is defined in package Standard. Such declarations can be + confusing, especially since the names in package Standard continue + to be directly visible, meaning that use visibiliy on such + redeclared names does not work as expected. Names of discriminants + and components in records are not included in this check. + + ‘-gnatw.K’ + + `Suppress warnings on redefinition of names in standard.' + + This switch disables warnings for declarations that declare a name + that is defined in package Standard. + + ‘-gnatwl’ + + `Activate warnings for elaboration pragmas.' + + This switch activates warnings for possible elaboration problems, + including suspicious use of ‘Elaborate’ pragmas, when using the + static elaboration model, and possible situations that may raise + ‘Program_Error’ when using the dynamic elaboration model. See the + section in this guide on elaboration checking for further details. + The default is that such warnings are not generated. + + ‘-gnatwL’ + + `Suppress warnings for elaboration pragmas.' + + This switch suppresses warnings for possible elaboration problems. + + ‘-gnatw.l’ + + `List inherited aspects.' + + This switch causes the compiler to list inherited invariants, + preconditions, and postconditions from Type_Invariant’Class, + Invariant’Class, Pre’Class, and Post’Class aspects. Also list + inherited subtype predicates. + + ‘-gnatw.L’ + + `Suppress listing of inherited aspects.' + + This switch suppresses listing of inherited aspects. + + ‘-gnatwm’ + + `Activate warnings on modified but unreferenced variables.' + + This switch activates warnings for variables that are assigned + (using an initialization value or with one or more assignment + statements) but whose value is never read. The warning is + suppressed for volatile variables and also for variables that are + renamings of other variables or for which an address clause is + given. The default is that these warnings are not given. + + ‘-gnatwM’ + + `Disable warnings on modified but unreferenced variables.' + + This switch disables warnings for variables that are assigned or + initialized, but never read. + + ‘-gnatw.m’ + + `Activate warnings on suspicious modulus values.' + + This switch activates warnings for modulus values that seem + suspicious. The cases caught are where the size is the same as the + modulus (e.g. a modulus of 7 with a size of 7 bits), and modulus + values of 32 or 64 with no size clause. The guess in both cases is + that 2**x was intended rather than x. In addition expressions of + the form 2*x for small x generate a warning (the almost certainly + accurate guess being that 2**x was intended). This switch also + activates warnings for negative literal values of a modular type, + which are interpreted as large positive integers after wrap-around. + The default is that these warnings are given. + + ‘-gnatw.M’ + + `Disable warnings on suspicious modulus values.' + + This switch disables warnings for suspicious modulus values. + + ‘-gnatwn’ + + `Set normal warnings mode.' + + This switch sets normal warning mode, in which enabled warnings are + issued and treated as warnings rather than errors. This is the + default mode. the switch ‘-gnatwn’ can be used to cancel the + effect of an explicit ‘-gnatws’ or ‘-gnatwe’. It also cancels the + effect of the implicit ‘-gnatwe’ that is activated by the use of + ‘-gnatg’. + + ‘-gnatw.n’ + + `Activate warnings on atomic synchronization.' + + This switch actives warnings when an access to an atomic variable + requires the generation of atomic synchronization code. These + warnings are off by default. + + ‘-gnatw.N’ + + `Suppress warnings on atomic synchronization.' + + This switch suppresses warnings when an access to an atomic + variable requires the generation of atomic synchronization code. + + ‘-gnatwo’ + + `Activate warnings on address clause overlays.' + + This switch activates warnings for possibly unintended + initialization effects of defining address clauses that cause one + variable to overlap another. The default is that such warnings are + generated. + + ‘-gnatwO’ + + `Suppress warnings on address clause overlays.' + + This switch suppresses warnings on possibly unintended + initialization effects of defining address clauses that cause one + variable to overlap another. + + ‘-gnatw.o’ + + `Activate warnings on modified but unreferenced out parameters.' + + This switch activates warnings for variables that are modified by + using them as actuals for a call to a procedure with an out mode + formal, where the resulting assigned value is never read. It is + applicable in the case where there is more than one out mode + formal. If there is only one out mode formal, the warning is + issued by default (controlled by -gnatwu). The warning is + suppressed for volatile variables and also for variables that are + renamings of other variables or for which an address clause is + given. The default is that these warnings are not given. + + ‘-gnatw.O’ + + `Disable warnings on modified but unreferenced out parameters.' + + This switch suppresses warnings for variables that are modified by + using them as actuals for a call to a procedure with an out mode + formal, where the resulting assigned value is never read. + + ‘-gnatwp’ + + `Activate warnings on ineffective pragma Inlines.' + + This switch activates warnings for failure of front end inlining + (activated by ‘-gnatN’) to inline a particular call. There are + many reasons for not being able to inline a call, including most + commonly that the call is too complex to inline. The default is + that such warnings are not given. Warnings on ineffective inlining + by the gcc back-end can be activated separately, using the gcc + switch -Winline. + + ‘-gnatwP’ + + `Suppress warnings on ineffective pragma Inlines.' + + This switch suppresses warnings on ineffective pragma Inlines. If + the inlining mechanism cannot inline a call, it will simply ignore + the request silently. + + ‘-gnatw.p’ + + `Activate warnings on parameter ordering.' + + This switch activates warnings for cases of suspicious parameter + ordering when the list of arguments are all simple identifiers that + match the names of the formals, but are in a different order. The + warning is suppressed if any use of named parameter notation is + used, so this is the appropriate way to suppress a false positive + (and serves to emphasize that the “misordering” is deliberate). + The default is that such warnings are not given. + + ‘-gnatw.P’ + + `Suppress warnings on parameter ordering.' + + This switch suppresses warnings on cases of suspicious parameter + ordering. + + ‘-gnatw_p’ + + `Activate warnings for pedantic checks.' + + This switch activates warnings for the failure of certain pedantic + checks. The only case currently supported is a check that the + subtype_marks given for corresponding formal parameter and function + results in a subprogram declaration and its body denote the same + subtype declaration. The default is that such warnings are not + given. + + ‘-gnatw_P’ + + `Suppress warnings for pedantic checks.' + + This switch suppresses warnings on violations of pedantic checks. + + ‘-gnatwq’ + + `Activate warnings on questionable missing parentheses.' + + This switch activates warnings for cases where parentheses are not + used and the result is potential ambiguity from a readers point of + view. For example (not a > b) when a and b are modular means ((not + a) > b) and very likely the programmer intended (not (a > b)). + Similarly (-x mod 5) means (-(x mod 5)) and quite likely ((-x) mod + 5) was intended. In such situations it seems best to follow the + rule of always parenthesizing to make the association clear, and + this warning switch warns if such parentheses are not present. The + default is that these warnings are given. + + ‘-gnatwQ’ + + `Suppress warnings on questionable missing parentheses.' + + This switch suppresses warnings for cases where the association is + not clear and the use of parentheses is preferred. + + ‘-gnatw.q’ + + `Activate warnings on questionable layout of record types.' + + This switch activates warnings for cases where the default layout + of a record type, that is to say the layout of its components in + textual order of the source code, would very likely cause + inefficiencies in the code generated by the compiler, both in terms + of space and speed during execution. One warning is issued for + each problematic component without representation clause in the + nonvariant part and then in each variant recursively, if any. + + The purpose of these warnings is neither to prescribe an optimal + layout nor to force the use of representation clauses, but rather + to get rid of the most blatant inefficiencies in the layout. + Therefore, the default layout is matched against the following + synthetic ordered layout and the deviations are flagged on a + component-by-component basis: + + * first all components or groups of components whose length is + fixed and a multiple of the storage unit, + + * then the remaining components whose length is fixed and not a + multiple of the storage unit, + + * then the remaining components whose length doesn’t depend on + discriminants (that is to say, with variable but uniform + length for all objects), + + * then all components whose length depends on discriminants, + + * finally the variant part (if any), + + for the nonvariant part and for each variant recursively, if any. + + The exact wording of the warning depends on whether the compiler is + allowed to reorder the components in the record type or precluded + from doing it by means of pragma ‘No_Component_Reordering’. + + The default is that these warnings are not given. + + ‘-gnatw.Q’ + + `Suppress warnings on questionable layout of record types.' + + This switch suppresses warnings for cases where the default layout + of a record type would very likely cause inefficiencies. + + ‘-gnatwr’ + + `Activate warnings on redundant constructs.' + + This switch activates warnings for redundant constructs. The + following is the current list of constructs regarded as redundant: + + * Assignment of an item to itself. + + * Type conversion that converts an expression to its own type. + + * Use of the attribute ‘Base’ where ‘typ'Base’ is the same as + ‘typ’. + + * Use of pragma ‘Pack’ when all components are placed by a + record representation clause. + + * Exception handler containing only a reraise statement (raise + with no operand) which has no effect. + + * Use of the operator abs on an operand that is known at compile + time to be non-negative + + * Comparison of an object or (unary or binary) operation of + boolean type to an explicit True value. + + * Import of parent package. + + The default is that warnings for redundant constructs are not + given. + + ‘-gnatwR’ + + `Suppress warnings on redundant constructs.' + + This switch suppresses warnings for redundant constructs. + + ‘-gnatw.r’ + + `Activate warnings for object renaming function.' + + This switch activates warnings for an object renaming that renames + a function call, which is equivalent to a constant declaration (as + opposed to renaming the function itself). The default is that + these warnings are given. + + ‘-gnatw.R’ + + `Suppress warnings for object renaming function.' + + This switch suppresses warnings for object renaming function. + + ‘-gnatw_r’ + + `Activate warnings for out-of-order record representation clauses.' + + This switch activates warnings for record representation clauses, + if the order of component declarations, component clauses, and + bit-level layout do not all agree. The default is that these + warnings are not given. + + ‘-gnatw_R’ + + `Suppress warnings for out-of-order record representation clauses.' + + ‘-gnatws’ + + `Suppress all warnings.' + + This switch completely suppresses the output of all warning + messages from the GNAT front end, including both warnings that can + be controlled by switches described in this section, and those that + are normally given unconditionally. The effect of this suppress + action can only be cancelled by a subsequent use of the switch + ‘-gnatwn’. + + Note that switch ‘-gnatws’ does not suppress warnings from the + ‘gcc’ back end. To suppress these back end warnings as well, use + the switch ‘-w’ in addition to ‘-gnatws’. Also this switch has no + effect on the handling of style check messages. + + ‘-gnatw.s’ + + `Activate warnings on overridden size clauses.' + + This switch activates warnings on component clauses in record + representation clauses where the length given overrides that + specified by an explicit size clause for the component type. A + warning is similarly given in the array case if a specified + component size overrides an explicit size clause for the array + component type. + + ‘-gnatw.S’ + + `Suppress warnings on overridden size clauses.' + + This switch suppresses warnings on component clauses in record + representation clauses that override size clauses, and similar + warnings when an array component size overrides a size clause. + + ‘-gnatwt’ + + `Activate warnings for tracking of deleted conditional code.' + + This switch activates warnings for tracking of code in conditionals + (IF and CASE statements) that is detected to be dead code which + cannot be executed, and which is removed by the front end. This + warning is off by default. This may be useful for detecting + deactivated code in certified applications. + + ‘-gnatwT’ + + `Suppress warnings for tracking of deleted conditional code.' + + This switch suppresses warnings for tracking of deleted conditional + code. + + ‘-gnatw.t’ + + `Activate warnings on suspicious contracts.' + + This switch activates warnings on suspicious contracts. This + includes warnings on suspicious postconditions (whether a pragma + ‘Postcondition’ or a ‘Post’ aspect in Ada 2012) and suspicious + contract cases (pragma or aspect ‘Contract_Cases’). A function + postcondition or contract case is suspicious when no postcondition + or contract case for this function mentions the result of the + function. A procedure postcondition or contract case is suspicious + when it only refers to the pre-state of the procedure, because in + that case it should rather be expressed as a precondition. This + switch also controls warnings on suspicious cases of expressions + typically found in contracts like quantified expressions and uses + of Update attribute. The default is that such warnings are + generated. + + ‘-gnatw.T’ + + `Suppress warnings on suspicious contracts.' + + This switch suppresses warnings on suspicious contracts. + + ‘-gnatwu’ + + `Activate warnings on unused entities.' + + This switch activates warnings to be generated for entities that + are declared but not referenced, and for units that are `with'ed + and not referenced. In the case of packages, a warning is also + generated if no entities in the package are referenced. This means + that if a with’ed package is referenced but the only references are + in ‘use’ clauses or ‘renames’ declarations, a warning is still + generated. A warning is also generated for a generic package that + is `with'ed but never instantiated. In the case where a package or + subprogram body is compiled, and there is a `with' on the + corresponding spec that is only referenced in the body, a warning + is also generated, noting that the `with' can be moved to the body. + The default is that such warnings are not generated. This switch + also activates warnings on unreferenced formals (it includes the + effect of ‘-gnatwf’). + + ‘-gnatwU’ + + `Suppress warnings on unused entities.' + + This switch suppresses warnings for unused entities and packages. + It also turns off warnings on unreferenced formals (and thus + includes the effect of ‘-gnatwF’). + + ‘-gnatw.u’ + + `Activate warnings on unordered enumeration types.' + + This switch causes enumeration types to be considered as + conceptually unordered, unless an explicit pragma ‘Ordered’ is + given for the type. The effect is to generate warnings in clients + that use explicit comparisons or subranges, since these constructs + both treat objects of the type as ordered. (A `client' is defined + as a unit that is other than the unit in which the type is + declared, or its body or subunits.) Please refer to the + description of pragma ‘Ordered’ in the ‘GNAT Reference Manual’ for + further details. The default is that such warnings are not + generated. + + ‘-gnatw.U’ + + `Deactivate warnings on unordered enumeration types.' + + This switch causes all enumeration types to be considered as + ordered, so that no warnings are given for comparisons or subranges + for any type. + + ‘-gnatwv’ + + `Activate warnings on unassigned variables.' + + This switch activates warnings for access to variables which may + not be properly initialized. The default is that such warnings are + generated. This switch will also be emitted when initializing an + array or record object via the following aggregate: + + Array_Or_Record : XXX := (others => <>); + + unless the relevant type fully initializes all components. + + ‘-gnatwV’ + + `Suppress warnings on unassigned variables.' + + This switch suppresses warnings for access to variables which may + not be properly initialized. + + ‘-gnatw.v’ + + `Activate info messages for non-default bit order.' + + This switch activates messages (labeled “info”, they are not + warnings, just informational messages) about the effects of + non-default bit-order on records to which a component clause is + applied. The effect of specifying non-default bit ordering is a + bit subtle (and changed with Ada 2005), so these messages, which + are given by default, are useful in understanding the exact + consequences of using this feature. + + ‘-gnatw.V’ + + `Suppress info messages for non-default bit order.' + + This switch suppresses information messages for the effects of + specifying non-default bit order on record components with + component clauses. + + ‘-gnatww’ + + `Activate warnings on wrong low bound assumption.' + + This switch activates warnings for indexing an unconstrained string + parameter with a literal or S’Length. This is a case where the + code is assuming that the low bound is one, which is in general not + true (for example when a slice is passed). The default is that + such warnings are generated. + + ‘-gnatwW’ + + `Suppress warnings on wrong low bound assumption.' + + This switch suppresses warnings for indexing an unconstrained + string parameter with a literal or S’Length. Note that this + warning can also be suppressed in a particular case by adding an + assertion that the lower bound is 1, as shown in the following + example: + + procedure K (S : String) is + pragma Assert (S'First = 1); + ... + + ‘-gnatw.w’ + + `Activate warnings on Warnings Off pragmas.' + + This switch activates warnings for use of ‘pragma Warnings (Off, + entity)’ where either the pragma is entirely useless (because it + suppresses no warnings), or it could be replaced by ‘pragma + Unreferenced’ or ‘pragma Unmodified’. Also activates warnings for + the case of Warnings (Off, String), where either there is no + matching Warnings (On, String), or the Warnings (Off) did not + suppress any warning. The default is that these warnings are not + given. + + ‘-gnatw.W’ + + `Suppress warnings on unnecessary Warnings Off pragmas.' + + This switch suppresses warnings for use of ‘pragma Warnings (Off, + ...)’. + + ‘-gnatwx’ + + `Activate warnings on Export/Import pragmas.' + + This switch activates warnings on Export/Import pragmas when the + compiler detects a possible conflict between the Ada and foreign + language calling sequences. For example, the use of default + parameters in a convention C procedure is dubious because the C + compiler cannot supply the proper default, so a warning is issued. + The default is that such warnings are generated. + + ‘-gnatwX’ + + `Suppress warnings on Export/Import pragmas.' + + This switch suppresses warnings on Export/Import pragmas. The + sense of this is that you are telling the compiler that you know + what you are doing in writing the pragma, and it should not + complain at you. + + ‘-gnatw.x’ + + `Activate warnings for No_Exception_Propagation mode.' + + This switch activates warnings for exception usage when pragma + Restrictions (No_Exception_Propagation) is in effect. Warnings are + given for implicit or explicit exception raises which are not + covered by a local handler, and for exception handlers which do not + cover a local raise. The default is that these warnings are given + for units that contain exception handlers. + + ‘-gnatw.X’ + + `Disable warnings for No_Exception_Propagation mode.' + + This switch disables warnings for exception usage when pragma + Restrictions (No_Exception_Propagation) is in effect. + + ‘-gnatwy’ + + `Activate warnings for Ada compatibility issues.' + + For the most part, newer versions of Ada are upwards compatible + with older versions. For example, Ada 2005 programs will almost + always work when compiled as Ada 2012. However there are some + exceptions (for example the fact that ‘some’ is now a reserved word + in Ada 2012). This switch activates several warnings to help in + identifying and correcting such incompatibilities. The default is + that these warnings are generated. Note that at one point Ada 2005 + was called Ada 0Y, hence the choice of character. + + ‘-gnatwY’ + + `Disable warnings for Ada compatibility issues.' + + This switch suppresses the warnings intended to help in identifying + incompatibilities between Ada language versions. + + ‘-gnatw.y’ + + `Activate information messages for why package spec needs body.' + + There are a number of cases in which a package spec needs a body. + For example, the use of pragma Elaborate_Body, or the declaration + of a procedure specification requiring a completion. This switch + causes information messages to be output showing why a package + specification requires a body. This can be useful in the case of a + large package specification which is unexpectedly requiring a body. + The default is that such information messages are not output. + + ‘-gnatw.Y’ + + `Disable information messages for why package spec needs body.' + + This switch suppresses the output of information messages showing + why a package specification needs a body. + + ‘-gnatwz’ + + `Activate warnings on unchecked conversions.' + + This switch activates warnings for unchecked conversions where the + types are known at compile time to have different sizes. The + default is that such warnings are generated. Warnings are also + generated for subprogram pointers with different conventions. + + ‘-gnatwZ’ + + `Suppress warnings on unchecked conversions.' + + This switch suppresses warnings for unchecked conversions where the + types are known at compile time to have different sizes or + conventions. + + ‘-gnatw.z’ + + `Activate warnings for size not a multiple of alignment.' + + This switch activates warnings for cases of array and record types + with specified ‘Size’ and ‘Alignment’ attributes where the size is + not a multiple of the alignment, resulting in an object size that + is greater than the specified size. The default is that such + warnings are generated. + + ‘-gnatw.Z’ + + `Suppress warnings for size not a multiple of alignment.' + + This switch suppresses warnings for cases of array and record types + with specified ‘Size’ and ‘Alignment’ attributes where the size is + not a multiple of the alignment, resulting in an object size that + is greater than the specified size. The warning can also be + suppressed by giving an explicit ‘Object_Size’ value. + + ‘-Wunused’ + + The warnings controlled by the ‘-gnatw’ switch are generated by the + front end of the compiler. The GCC back end can provide additional + warnings and they are controlled by the ‘-W’ switch. For example, + ‘-Wunused’ activates back end warnings for entities that are + declared but not referenced. + + ‘-Wuninitialized’ + + Similarly, ‘-Wuninitialized’ activates the back end warning for + uninitialized variables. This switch must be used in conjunction + with an optimization level greater than zero. + + ‘-Wstack-usage=`len'’ + + Warn if the stack usage of a subprogram might be larger than ‘len’ + bytes. See *note Static Stack Usage Analysis: e6. for details. + + ‘-Wall’ + + This switch enables most warnings from the GCC back end. The code + generator detects a number of warning situations that are missed by + the GNAT front end, and this switch can be used to activate them. + The use of this switch also sets the default front-end warning mode + to ‘-gnatwa’, that is, most front-end warnings are activated as + well. + + ‘-w’ + + Conversely, this switch suppresses warnings from the GCC back end. + The use of this switch also sets the default front-end warning mode + to ‘-gnatws’, that is, front-end warnings are suppressed as well. + + ‘-Werror’ + + This switch causes warnings from the GCC back end to be treated as + errors. The warning string still appears, but the warning messages + are counted as errors, and prevent the generation of an object + file. The use of this switch also sets the default front-end + warning mode to ‘-gnatwe’, that is, front-end warning messages and + style check messages are treated as errors as well. + + A string of warning parameters can be used in the same parameter. For + example: + + -gnatwaGe + + will turn on all optional warnings except for unrecognized pragma + warnings, and also specify that warnings should be treated as errors. + + When no switch ‘-gnatw’ is used, this is equivalent to: + + * ‘-gnatw.a’ + + * ‘-gnatwB’ + + * ‘-gnatw.b’ + + * ‘-gnatwC’ + + * ‘-gnatw.C’ + + * ‘-gnatwD’ + + * ‘-gnatw.D’ + + * ‘-gnatwF’ + + * ‘-gnatw.F’ + + * ‘-gnatwg’ + + * ‘-gnatwH’ + + * ‘-gnatw.H’ + + * ‘-gnatwi’ + + * ‘-gnatwJ’ + + * ‘-gnatw.J’ + + * ‘-gnatwK’ + + * ‘-gnatw.K’ + + * ‘-gnatwL’ + + * ‘-gnatw.L’ + + * ‘-gnatwM’ + + * ‘-gnatw.m’ + + * ‘-gnatwn’ + + * ‘-gnatw.N’ + + * ‘-gnatwo’ + + * ‘-gnatw.O’ + + * ‘-gnatwP’ + + * ‘-gnatw.P’ + + * ‘-gnatwq’ + + * ‘-gnatw.Q’ + + * ‘-gnatwR’ + + * ‘-gnatw.R’ + + * ‘-gnatw.S’ + + * ‘-gnatwT’ + + * ‘-gnatw.t’ + + * ‘-gnatwU’ + + * ‘-gnatw.U’ + + * ‘-gnatwv’ + + * ‘-gnatw.v’ + + * ‘-gnatww’ + + * ‘-gnatw.W’ + + * ‘-gnatwx’ + + * ‘-gnatw.X’ + + * ‘-gnatwy’ + + * ‘-gnatw.Y’ + + * ‘-gnatwz’ + + * ‘-gnatw.z’ + +  + File: gnat_ugn.info, Node: Debugging and Assertion Control, Next: Validity Checking, Prev: Warning Message Control, Up: Compiler Switches + + 4.3.4 Debugging and Assertion Control + ------------------------------------- + + ‘-gnata’ + + The ‘-gnata’ option is equivalent to the following + ‘Assertion_Policy’ pragma: + + pragma Assertion_Policy (Check); + + Which is a shorthand for: + + pragma Assertion_Policy + (Assert => Check, + Static_Predicate => Check, + Dynamic_Predicate => Check, + Pre => Check, + Pre'Class => Check, + Post => Check, + Post'Class => Check, + Type_Invariant => Check, + Type_Invariant'Class => Check); + + The pragmas ‘Assert’ and ‘Debug’ normally have no effect and are + ignored. This switch, where ‘a’ stands for ‘assert’, causes + pragmas ‘Assert’ and ‘Debug’ to be activated. This switch also + causes preconditions, postconditions, subtype predicates, and type + invariants to be activated. + + The pragmas have the form: + + pragma Assert ( [, ]) + pragma Debug () + pragma Type_Invariant (, ) + pragma Predicate (, ) + pragma Precondition (, ) + pragma Postcondition (, ) + + The aspects have the form: + + with [Pre|Post|Type_Invariant|Dynamic_Predicate|Static_Predicate] + => ; + + The ‘Assert’ pragma causes ‘Boolean-expression’ to be tested. If + the result is ‘True’, the pragma has no effect (other than possible + side effects from evaluating the expression). If the result is + ‘False’, the exception ‘Assert_Failure’ declared in the package + ‘System.Assertions’ is raised (passing ‘static-string-expression’, + if present, as the message associated with the exception). If no + string expression is given, the default is a string containing the + file name and line number of the pragma. + + The ‘Debug’ pragma causes ‘procedure’ to be called. Note that + ‘pragma Debug’ may appear within a declaration sequence, allowing + debugging procedures to be called between declarations. + + For the aspect specification, the ‘Boolean-expression’ is + evaluated. If the result is ‘True’, the aspect has no effect. If + the result is ‘False’, the exception ‘Assert_Failure’ is raised. + +  + File: gnat_ugn.info, Node: Validity Checking, Next: Style Checking, Prev: Debugging and Assertion Control, Up: Compiler Switches + + 4.3.5 Validity Checking + ----------------------- + + The Ada Reference Manual defines the concept of invalid values (see RM + 13.9.1). The primary source of invalid values is uninitialized + variables. A scalar variable that is left uninitialized may contain an + invalid value; the concept of invalid does not apply to access or + composite types. + + It is an error to read an invalid value, but the RM does not require + run-time checks to detect such errors, except for some minimal checking + to prevent erroneous execution (i.e. unpredictable behavior). This + corresponds to the ‘-gnatVd’ switch below, which is the default. For + example, by default, if the expression of a case statement is invalid, + it will raise Constraint_Error rather than causing a wild jump, and if + an array index on the left-hand side of an assignment is invalid, it + will raise Constraint_Error rather than overwriting an arbitrary memory + location. + + The ‘-gnatVa’ may be used to enable additional validity checks, which + are not required by the RM. These checks are often very expensive (which + is why the RM does not require them). These checks are useful in + tracking down uninitialized variables, but they are not usually + recommended for production builds, and in particular we do not recommend + using these extra validity checking options in combination with + optimization, since this can confuse the optimizer. If performance is a + consideration, leading to the need to optimize, then the validity + checking options should not be used. + + The other ‘-gnatV`x'’ switches below allow finer-grained control; you + can enable whichever validity checks you desire. However, for most + debugging purposes, ‘-gnatVa’ is sufficient, and the default ‘-gnatVd’ + (i.e. standard Ada behavior) is usually sufficient for non-debugging + use. + + The ‘-gnatB’ switch tells the compiler to assume that all values are + valid (that is, within their declared subtype range) except in the + context of a use of the Valid attribute. This means the compiler can + generate more efficient code, since the range of values is better known + at compile time. However, an uninitialized variable can cause wild + jumps and memory corruption in this mode. + + The ‘-gnatV`x'’ switch allows control over the validity checking mode as + described below. The ‘x’ argument is a string of letters that indicate + validity checks that are performed or not performed in addition to the + default checks required by Ada as described above. + + ‘-gnatVa’ + + `All validity checks.' + + All validity checks are turned on. That is, ‘-gnatVa’ is + equivalent to ‘gnatVcdfimoprst’. + + ‘-gnatVc’ + + `Validity checks for copies.' + + The right hand side of assignments, and the initializing values of + object declarations are validity checked. + + ‘-gnatVd’ + + `Default (RM) validity checks.' + + Some validity checks are done by default following normal Ada + semantics (RM 13.9.1 (9-11)). A check is done in case statements + that the expression is within the range of the subtype. If it is + not, Constraint_Error is raised. For assignments to array + components, a check is done that the expression used as index is + within the range. If it is not, Constraint_Error is raised. Both + these validity checks may be turned off using switch ‘-gnatVD’. + They are turned on by default. If ‘-gnatVD’ is specified, a + subsequent switch ‘-gnatVd’ will leave the checks turned on. + Switch ‘-gnatVD’ should be used only if you are sure that all such + expressions have valid values. If you use this switch and invalid + values are present, then the program is erroneous, and wild jumps + or memory overwriting may occur. + + ‘-gnatVe’ + + `Validity checks for elementary components.' + + In the absence of this switch, assignments to record or array + components are not validity checked, even if validity checks for + assignments generally (‘-gnatVc’) are turned on. In Ada, + assignment of composite values do not require valid data, but + assignment of individual components does. So for example, there is + a difference between copying the elements of an array with a slice + assignment, compared to assigning element by element in a loop. + This switch allows you to turn off validity checking for + components, even when they are assigned component by component. + + ‘-gnatVf’ + + `Validity checks for floating-point values.' + + In the absence of this switch, validity checking occurs only for + discrete values. If ‘-gnatVf’ is specified, then validity checking + also applies for floating-point values, and NaNs and infinities are + considered invalid, as well as out of range values for constrained + types. Note that this means that standard IEEE infinity mode is + not allowed. The exact contexts in which floating-point values are + checked depends on the setting of other options. For example, + ‘-gnatVif’ or ‘-gnatVfi’ (the order does not matter) specifies that + floating-point parameters of mode ‘in’ should be validity checked. + + ‘-gnatVi’ + + `Validity checks for ‘‘in‘‘ mode parameters.' + + Arguments for parameters of mode ‘in’ are validity checked in + function and procedure calls at the point of call. + + ‘-gnatVm’ + + `Validity checks for ‘‘in out‘‘ mode parameters.' + + Arguments for parameters of mode ‘in out’ are validity checked in + procedure calls at the point of call. The ‘'m'’ here stands for + modify, since this concerns parameters that can be modified by the + call. Note that there is no specific option to test ‘out’ + parameters, but any reference within the subprogram will be tested + in the usual manner, and if an invalid value is copied back, any + reference to it will be subject to validity checking. + + ‘-gnatVn’ + + `No validity checks.' + + This switch turns off all validity checking, including the default + checking for case statements and left hand side subscripts. Note + that the use of the switch ‘-gnatp’ suppresses all run-time checks, + including validity checks, and thus implies ‘-gnatVn’. When this + switch is used, it cancels any other ‘-gnatV’ previously issued. + + ‘-gnatVo’ + + `Validity checks for operator and attribute operands.' + + Arguments for predefined operators and attributes are validity + checked. This includes all operators in package ‘Standard’, the + shift operators defined as intrinsic in package ‘Interfaces’ and + operands for attributes such as ‘Pos’. Checks are also made on + individual component values for composite comparisons, and on the + expressions in type conversions and qualified expressions. Checks + are also made on explicit ranges using ‘..’ (e.g., slices, loops + etc). + + ‘-gnatVp’ + + `Validity checks for parameters.' + + This controls the treatment of parameters within a subprogram (as + opposed to ‘-gnatVi’ and ‘-gnatVm’ which control validity testing + of parameters on a call. If either of these call options is used, + then normally an assumption is made within a subprogram that the + input arguments have been validity checking at the point of call, + and do not need checking again within a subprogram). If ‘-gnatVp’ + is set, then this assumption is not made, and parameters are not + assumed to be valid, so their validity will be checked (or + rechecked) within the subprogram. + + ‘-gnatVr’ + + `Validity checks for function returns.' + + The expression in ‘return’ statements in functions is validity + checked. + + ‘-gnatVs’ + + `Validity checks for subscripts.' + + All subscripts expressions are checked for validity, whether they + appear on the right side or left side (in default mode only left + side subscripts are validity checked). + + ‘-gnatVt’ + + `Validity checks for tests.' + + Expressions used as conditions in ‘if’, ‘while’ or ‘exit’ + statements are checked, as well as guard expressions in entry + calls. + + The ‘-gnatV’ switch may be followed by a string of letters to turn on a + series of validity checking options. For example, ‘-gnatVcr’ specifies + that in addition to the default validity checking, copies and function + return expressions are to be validity checked. In order to make it + easier to specify the desired combination of effects, the upper case + letters ‘CDFIMORST’ may be used to turn off the corresponding lower case + option. Thus ‘-gnatVaM’ turns on all validity checking options except + for checking of ‘in out’ parameters. + + The specification of additional validity checking generates extra code + (and in the case of ‘-gnatVa’ the code expansion can be substantial). + However, these additional checks can be very useful in detecting + uninitialized variables, incorrect use of unchecked conversion, and + other errors leading to invalid values. The use of pragma + ‘Initialize_Scalars’ is useful in conjunction with the extra validity + checking, since this ensures that wherever possible uninitialized + variables have invalid values. + + See also the pragma ‘Validity_Checks’ which allows modification of the + validity checking mode at the program source level, and also allows for + temporary disabling of validity checks. + +  + File: gnat_ugn.info, Node: Style Checking, Next: Run-Time Checks, Prev: Validity Checking, Up: Compiler Switches + + 4.3.6 Style Checking + -------------------- + + The ‘-gnatyx’ switch causes the compiler to enforce specified style + rules. A limited set of style rules has been used in writing the GNAT + sources themselves. This switch allows user programs to activate all or + some of these checks. If the source program fails a specified style + check, an appropriate message is given, preceded by the character + sequence ‘(style)’. This message does not prevent successful + compilation (unless the ‘-gnatwe’ switch is used). + + Note that this is by no means intended to be a general facility for + checking arbitrary coding standards. It is simply an embedding of the + style rules we have chosen for the GNAT sources. If you are starting a + project which does not have established style standards, you may find it + useful to adopt the entire set of GNAT coding standards, or some subset + of them. + + The string ‘x’ is a sequence of letters or digits indicating the + particular style checks to be performed. The following checks are + defined: + + ‘-gnaty0’ + + `Specify indentation level.' + + If a digit from 1-9 appears in the string after ‘-gnaty’ then + proper indentation is checked, with the digit indicating the + indentation level required. A value of zero turns off this style + check. The rule checks that the following constructs start on a + column that is a multiple of the alignment level: + + * beginnings of declarations (except record component + declarations) and statements; + + * beginnings of the structural components of compound + statements; + + * ‘end’ keyword that completes the declaration of a program unit + declaration or body or that completes a compound statement. + + Full line comments must be aligned with the ‘--’ starting on a + column that is a multiple of the alignment level, or they may be + aligned the same way as the following non-blank line (this is + useful when full line comments appear in the middle of a statement, + or they may be aligned with the source line on the previous + non-blank line. + + ‘-gnatya’ + + `Check attribute casing.' + + Attribute names, including the case of keywords such as ‘digits’ + used as attributes names, must be written in mixed case, that is, + the initial letter and any letter following an underscore must be + uppercase. All other letters must be lowercase. + + ‘-gnatyA’ + + `Use of array index numbers in array attributes.' + + When using the array attributes First, Last, Range, or Length, the + index number must be omitted for one-dimensional arrays and is + required for multi-dimensional arrays. + + ‘-gnatyb’ + + `Blanks not allowed at statement end.' + + Trailing blanks are not allowed at the end of statements. The + purpose of this rule, together with h (no horizontal tabs), is to + enforce a canonical format for the use of blanks to separate source + tokens. + + ‘-gnatyB’ + + `Check Boolean operators.' + + The use of AND/OR operators is not permitted except in the cases of + modular operands, array operands, and simple stand-alone boolean + variables or boolean constants. In all other cases ‘and then’/‘or + else’ are required. + + ‘-gnatyc’ + + `Check comments, double space.' + + Comments must meet the following set of rules: + + * The ‘--’ that starts the column must either start in column + one, or else at least one blank must precede this sequence. + + * Comments that follow other tokens on a line must have at least + one blank following the ‘--’ at the start of the comment. + + * Full line comments must have at least two blanks following the + ‘--’ that starts the comment, with the following exceptions. + + * A line consisting only of the ‘--’ characters, possibly + preceded by blanks is permitted. + + * A comment starting with ‘--x’ where ‘x’ is a special character + is permitted. This allows proper processing of the output + from specialized tools such as ‘gnatprep’ (where ‘--!’ is + used) and in earlier versions of the SPARK annotation language + (where ‘--#’ is used). For the purposes of this rule, a + special character is defined as being in one of the ASCII + ranges ‘16#21#...16#2F#’ or ‘16#3A#...16#3F#’. Note that this + usage is not permitted in GNAT implementation units (i.e., + when ‘-gnatg’ is used). + + * A line consisting entirely of minus signs, possibly preceded + by blanks, is permitted. This allows the construction of box + comments where lines of minus signs are used to form the top + and bottom of the box. + + * A comment that starts and ends with ‘--’ is permitted as long + as at least one blank follows the initial ‘--’. Together with + the preceding rule, this allows the construction of box + comments, as shown in the following example: + + --------------------------- + -- This is a box comment -- + -- with two text lines. -- + --------------------------- + + ‘-gnatyC’ + + `Check comments, single space.' + + This is identical to ‘c’ except that only one space is required + following the ‘--’ of a comment instead of two. + + ‘-gnatyd’ + + `Check no DOS line terminators present.' + + All lines must be terminated by a single ASCII.LF character (in + particular the DOS line terminator sequence CR/LF is not allowed). + + ‘-gnatyD’ + + `Check declared identifiers in mixed case.' + + Declared identifiers must be in mixed case, as in + This_Is_An_Identifier. Use -gnatyr in addition to ensure that + references match declarations. + + ‘-gnatye’ + + `Check end/exit labels.' + + Optional labels on ‘end’ statements ending subprograms and on + ‘exit’ statements exiting named loops, are required to be present. + + ‘-gnatyf’ + + `No form feeds or vertical tabs.' + + Neither form feeds nor vertical tab characters are permitted in the + source text. + + ‘-gnatyg’ + + `GNAT style mode.' + + The set of style check switches is set to match that used by the + GNAT sources. This may be useful when developing code that is + eventually intended to be incorporated into GNAT. Currently this is + equivalent to ‘-gnatyydISux’) but additional style switches may be + added to this set in the future without advance notice. + + ‘-gnatyh’ + + `No horizontal tabs.' + + Horizontal tab characters are not permitted in the source text. + Together with the b (no blanks at end of line) check, this enforces + a canonical form for the use of blanks to separate source tokens. + + ‘-gnatyi’ + + `Check if-then layout.' + + The keyword ‘then’ must appear either on the same line as + corresponding ‘if’, or on a line on its own, lined up under the + ‘if’. + + ‘-gnatyI’ + + `check mode IN keywords.' + + Mode ‘in’ (the default mode) is not allowed to be given explicitly. + ‘in out’ is fine, but not ‘in’ on its own. + + ‘-gnatyk’ + + `Check keyword casing.' + + All keywords must be in lower case (with the exception of keywords + such as ‘digits’ used as attribute names to which this check does + not apply). A single error is reported for each line breaking this + rule even if multiple casing issues exist on a same line. + + ‘-gnatyl’ + + `Check layout.' + + Layout of statement and declaration constructs must follow the + recommendations in the Ada Reference Manual, as indicated by the + form of the syntax rules. For example an ‘else’ keyword must be + lined up with the corresponding ‘if’ keyword. + + There are two respects in which the style rule enforced by this + check option are more liberal than those in the Ada Reference + Manual. First in the case of record declarations, it is + permissible to put the ‘record’ keyword on the same line as the + ‘type’ keyword, and then the ‘end’ in ‘end record’ must line up + under ‘type’. This is also permitted when the type declaration is + split on two lines. For example, any of the following three + layouts is acceptable: + + type q is record + a : integer; + b : integer; + end record; + + type q is + record + a : integer; + b : integer; + end record; + + type q is + record + a : integer; + b : integer; + end record; + + Second, in the case of a block statement, a permitted alternative + is to put the block label on the same line as the ‘declare’ or + ‘begin’ keyword, and then line the ‘end’ keyword up under the block + label. For example both the following are permitted: + + Block : declare + A : Integer := 3; + begin + Proc (A, A); + end Block; + + Block : + declare + A : Integer := 3; + begin + Proc (A, A); + end Block; + + The same alternative format is allowed for loops. For example, + both of the following are permitted: + + Clear : while J < 10 loop + A (J) := 0; + end loop Clear; + + Clear : + while J < 10 loop + A (J) := 0; + end loop Clear; + + ‘-gnatyL’ + + `Set maximum nesting level.' + + The maximum level of nesting of constructs (including subprograms, + loops, blocks, packages, and conditionals) may not exceed the given + value `nnn'. A value of zero disconnects this style check. + + ‘-gnatym’ + + `Check maximum line length.' + + The length of source lines must not exceed 79 characters, including + any trailing blanks. The value of 79 allows convenient display on + an 80 character wide device or window, allowing for possible + special treatment of 80 character lines. Note that this count is + of characters in the source text. This means that a tab character + counts as one character in this count and a wide character sequence + counts as a single character (however many bytes are needed in the + encoding). + + ‘-gnatyM’ + + `Set maximum line length.' + + The length of lines must not exceed the given value `nnn'. The + maximum value that can be specified is 32767. If neither style + option for setting the line length is used, then the default is + 255. This also controls the maximum length of lexical elements, + where the only restriction is that they must fit on a single line. + + ‘-gnatyn’ + + `Check casing of entities in Standard.' + + Any identifier from Standard must be cased to match the + presentation in the Ada Reference Manual (for example, ‘Integer’ + and ‘ASCII.NUL’). + + ‘-gnatyN’ + + `Turn off all style checks.' + + All style check options are turned off. + + ‘-gnatyo’ + + `Check order of subprogram bodies.' + + All subprogram bodies in a given scope (e.g., a package body) must + be in alphabetical order. The ordering rule uses normal Ada rules + for comparing strings, ignoring casing of letters, except that if + there is a trailing numeric suffix, then the value of this suffix + is used in the ordering (e.g., Junk2 comes before Junk10). + + ‘-gnatyO’ + + `Check that overriding subprograms are explicitly marked as such.' + + This applies to all subprograms of a derived type that override a + primitive operation of the type, for both tagged and untagged + types. In particular, the declaration of a primitive operation of + a type extension that overrides an inherited operation must carry + an overriding indicator. Another case is the declaration of a + function that overrides a predefined operator (such as an equality + operator). + + ‘-gnatyp’ + + `Check pragma casing.' + + Pragma names must be written in mixed case, that is, the initial + letter and any letter following an underscore must be uppercase. + All other letters must be lowercase. An exception is that + SPARK_Mode is allowed as an alternative for Spark_Mode. + + ‘-gnatyr’ + + `Check references.' + + All identifier references must be cased in the same way as the + corresponding declaration. No specific casing style is imposed on + identifiers. The only requirement is for consistency of references + with declarations. + + ‘-gnatys’ + + `Check separate specs.' + + Separate declarations (‘specs’) are required for subprograms (a + body is not allowed to serve as its own declaration). The only + exception is that parameterless library level procedures are not + required to have a separate declaration. This exception covers the + most frequent form of main program procedures. + + ‘-gnatyS’ + + `Check no statements after then/else.' + + No statements are allowed on the same line as a ‘then’ or ‘else’ + keyword following the keyword in an ‘if’ statement. ‘or else’ and + ‘and then’ are not affected, and a special exception allows a + pragma to appear after ‘else’. + + ‘-gnatyt’ + + `Check token spacing.' + + The following token spacing rules are enforced: + + * The keywords ‘abs’ and ‘not’ must be followed by a space. + + * The token ‘=>’ must be surrounded by spaces. + + * The token ‘<>’ must be preceded by a space or a left + parenthesis. + + * Binary operators other than ‘**’ must be surrounded by spaces. + There is no restriction on the layout of the ‘**’ binary + operator. + + * Colon must be surrounded by spaces. + + * Colon-equal (assignment, initialization) must be surrounded by + spaces. + + * Comma must be the first non-blank character on the line, or be + immediately preceded by a non-blank character, and must be + followed by a space. + + * If the token preceding a left parenthesis ends with a letter + or digit, then a space must separate the two tokens. + + * If the token following a right parenthesis starts with a + letter or digit, then a space must separate the two tokens. + + * A right parenthesis must either be the first non-blank + character on a line, or it must be preceded by a non-blank + character. + + * A semicolon must not be preceded by a space, and must not be + followed by a non-blank character. + + * A unary plus or minus may not be followed by a space. + + * A vertical bar must be surrounded by spaces. + + Exactly one blank (and no other white space) must appear between a + ‘not’ token and a following ‘in’ token. + + ‘-gnatyu’ + + `Check unnecessary blank lines.' + + Unnecessary blank lines are not allowed. A blank line is + considered unnecessary if it appears at the end of the file, or if + more than one blank line occurs in sequence. + + ‘-gnatyx’ + + `Check extra parentheses.' + + Unnecessary extra level of parentheses (C-style) are not allowed + around conditions in ‘if’ statements, ‘while’ statements and ‘exit’ + statements. + + ‘-gnatyy’ + + `Set all standard style check options.' + + This is equivalent to ‘gnaty3aAbcefhiklmnprst’, that is all + checking options enabled with the exception of ‘-gnatyB’, + ‘-gnatyd’, ‘-gnatyI’, ‘-gnatyLnnn’, ‘-gnatyo’, ‘-gnatyO’, + ‘-gnatyS’, ‘-gnatyu’, and ‘-gnatyx’. + + ‘-gnaty-’ + + `Remove style check options.' + + This causes any subsequent options in the string to act as + canceling the corresponding style check option. To cancel maximum + nesting level control, use the ‘L’ parameter without any integer + value after that, because any digit following `-' in the parameter + string of the ‘-gnaty’ option will be treated as canceling the + indentation check. The same is true for the ‘M’ parameter. ‘y’ + and ‘N’ parameters are not allowed after `-'. + + ‘-gnaty+’ + + `Enable style check options.' + + This causes any subsequent options in the string to enable the + corresponding style check option. That is, it cancels the effect + of a previous -, if any. + + In the above rules, appearing in column one is always permitted, that + is, counts as meeting either a requirement for a required preceding + space, or as meeting a requirement for no preceding space. + + Appearing at the end of a line is also always permitted, that is, counts + as meeting either a requirement for a following space, or as meeting a + requirement for no following space. + + If any of these style rules is violated, a message is generated giving + details on the violation. The initial characters of such messages are + always ‘‘(style)’’. Note that these messages are treated as warning + messages, so they normally do not prevent the generation of an object + file. The ‘-gnatwe’ switch can be used to treat warning messages, + including style messages, as fatal errors. + + The switch ‘-gnaty’ on its own (that is not followed by any letters or + digits) is equivalent to the use of ‘-gnatyy’ as described above, that + is all built-in standard style check options are enabled. + + The switch ‘-gnatyN’ clears any previously set style checks. + +  + File: gnat_ugn.info, Node: Run-Time Checks, Next: Using gcc for Syntax Checking, Prev: Style Checking, Up: Compiler Switches + + 4.3.7 Run-Time Checks + --------------------- + + By default, the following checks are suppressed: stack overflow checks, + and checks for access before elaboration on subprogram calls. All other + checks, including overflow checks, range checks and array bounds checks, + are turned on by default. The following ‘gcc’ switches refine this + default behavior. + + ‘-gnatp’ + + This switch causes the unit to be compiled as though ‘pragma + Suppress (All_checks)’ had been present in the source. Validity + checks are also eliminated (in other words ‘-gnatp’ also implies + ‘-gnatVn’. Use this switch to improve the performance of the code + at the expense of safety in the presence of invalid data or program + bugs. + + Note that when checks are suppressed, the compiler is allowed, but + not required, to omit the checking code. If the run-time cost of + the checking code is zero or near-zero, the compiler will generate + it even if checks are suppressed. In particular, if the compiler + can prove that a certain check will necessarily fail, it will + generate code to do an unconditional ‘raise’, even if checks are + suppressed. The compiler warns in this case. Another case in + which checks may not be eliminated is when they are embedded in + certain run-time routines such as math library routines. + + Of course, run-time checks are omitted whenever the compiler can + prove that they will not fail, whether or not checks are + suppressed. + + Note that if you suppress a check that would have failed, program + execution is erroneous, which means the behavior is totally + unpredictable. The program might crash, or print wrong answers, or + do anything else. It might even do exactly what you wanted it to + do (and then it might start failing mysteriously next week or next + year). The compiler will generate code based on the assumption + that the condition being checked is true, which can result in + erroneous execution if that assumption is wrong. + + The checks subject to suppression include all the checks defined by + the Ada standard, the additional implementation defined checks + ‘Alignment_Check’, ‘Duplicated_Tag_Check’, ‘Predicate_Check’, + ‘Container_Checks’, ‘Tampering_Check’, and ‘Validity_Check’, as + well as any checks introduced using ‘pragma Check_Name’. Note that + ‘Atomic_Synchronization’ is not automatically suppressed by use of + this option. + + If the code depends on certain checks being active, you can use + pragma ‘Unsuppress’ either as a configuration pragma or as a local + pragma to make sure that a specified check is performed even if + ‘gnatp’ is specified. + + The ‘-gnatp’ switch has no effect if a subsequent ‘-gnat-p’ switch + appears. + + ‘-gnat-p’ + + This switch cancels the effect of a previous ‘gnatp’ switch. + + ‘-gnato??’ + + This switch controls the mode used for computing intermediate + arithmetic integer operations, and also enables overflow checking. + For a full description of overflow mode and checking control, see + the ‘Overflow Check Handling in GNAT’ appendix in this User’s + Guide. + + Overflow checks are always enabled by this switch. The argument + controls the mode, using the codes + + `1 = STRICT' + + In STRICT mode, intermediate operations are always done using + the base type, and overflow checking ensures that the result + is within the base type range. + + `2 = MINIMIZED' + + In MINIMIZED mode, overflows in intermediate operations are + avoided where possible by using a larger integer type for the + computation (typically ‘Long_Long_Integer’). Overflow + checking ensures that the result fits in this larger integer + type. + + `3 = ELIMINATED' + + In ELIMINATED mode, overflows in intermediate operations are + avoided by using multi-precision arithmetic. In this case, + overflow checking has no effect on intermediate operations + (since overflow is impossible). + + If two digits are present after ‘-gnato’ then the first digit sets + the mode for expressions outside assertions, and the second digit + sets the mode for expressions within assertions. Here assertions + is used in the technical sense (which includes for example + precondition and postcondition expressions). + + If one digit is present, the corresponding mode is applicable to + both expressions within and outside assertion expressions. + + If no digits are present, the default is to enable overflow checks + and set STRICT mode for both kinds of expressions. This is + compatible with the use of ‘-gnato’ in previous versions of GNAT. + + Note that the ‘-gnato??’ switch does not affect the code generated + for any floating-point operations; it applies only to integer + semantics. For floating-point, GNAT has the ‘Machine_Overflows’ + attribute set to ‘False’ and the normal mode of operation is to + generate IEEE NaN and infinite values on overflow or invalid + operations (such as dividing 0.0 by 0.0). + + The reason that we distinguish overflow checking from other kinds + of range constraint checking is that a failure of an overflow + check, unlike for example the failure of a range check, can result + in an incorrect value, but cannot cause random memory destruction + (like an out of range subscript), or a wild jump (from an out of + range case value). Overflow checking is also quite expensive in + time and space, since in general it requires the use of double + length arithmetic. + + Note again that the default is ‘-gnato11’ (equivalent to + ‘-gnato1’), so overflow checking is performed in STRICT mode by + default. + + ‘-gnatE’ + + Enables dynamic checks for access-before-elaboration on subprogram + calls and generic instantiations. Note that ‘-gnatE’ is not + necessary for safety, because in the default mode, GNAT ensures + statically that the checks would not fail. For full details of the + effect and use of this switch, *note Compiling with gcc: c7. + + ‘-fstack-check’ + + Activates stack overflow checking. For full details of the effect + and use of this switch see *note Stack Overflow Checking: e5. + + The setting of these switches only controls the default setting of the + checks. You may modify them using either ‘Suppress’ (to remove checks) + or ‘Unsuppress’ (to add back suppressed checks) pragmas in the program + source. + +  + File: gnat_ugn.info, Node: Using gcc for Syntax Checking, Next: Using gcc for Semantic Checking, Prev: Run-Time Checks, Up: Compiler Switches + + 4.3.8 Using ‘gcc’ for Syntax Checking + ------------------------------------- + + ‘-gnats’ + + The ‘s’ stands for ‘syntax’. + + Run GNAT in syntax checking only mode. For example, the command + + $ gcc -c -gnats x.adb + + compiles file ‘x.adb’ in syntax-check-only mode. You can check a + series of files in a single command , and can use wildcards to + specify such a group of files. Note that you must specify the ‘-c’ + (compile only) flag in addition to the ‘-gnats’ flag. + + You may use other switches in conjunction with ‘-gnats’. In + particular, ‘-gnatl’ and ‘-gnatv’ are useful to control the format + of any generated error messages. + + When the source file is empty or contains only empty lines and/or + comments, the output is a warning: + + $ gcc -c -gnats -x ada toto.txt + toto.txt:1:01: warning: empty file, contains no compilation units + $ + + Otherwise, the output is simply the error messages, if any. No + object file or ALI file is generated by a syntax-only compilation. + Also, no units other than the one specified are accessed. For + example, if a unit ‘X’ `with's a unit ‘Y’, compiling unit ‘X’ in + syntax check only mode does not access the source file containing + unit ‘Y’. + + Normally, GNAT allows only a single unit in a source file. + However, this restriction does not apply in syntax-check-only mode, + and it is possible to check a file containing multiple compilation + units concatenated together. This is primarily used by the + ‘gnatchop’ utility (*note Renaming Files with gnatchop: 1d.). + +  + File: gnat_ugn.info, Node: Using gcc for Semantic Checking, Next: Compiling Different Versions of Ada, Prev: Using gcc for Syntax Checking, Up: Compiler Switches + + 4.3.9 Using ‘gcc’ for Semantic Checking + --------------------------------------- + + ‘-gnatc’ + + The ‘c’ stands for ‘check’. Causes the compiler to operate in + semantic check mode, with full checking for all illegalities + specified in the Ada Reference Manual, but without generation of + any object code (no object file is generated). + + Because dependent files must be accessed, you must follow the GNAT + semantic restrictions on file structuring to operate in this mode: + + * The needed source files must be accessible (see *note Search + Paths and the Run-Time Library (RTL): 73.). + + * Each file must contain only one compilation unit. + + * The file name and unit name must match (*note File Naming + Rules: 3b.). + + The output consists of error messages as appropriate. No object + file is generated. An ‘ALI’ file is generated for use in the + context of cross-reference tools, but this file is marked as not + being suitable for binding (since no object file is generated). + The checking corresponds exactly to the notion of legality in the + Ada Reference Manual. + + Any unit can be compiled in semantics-checking-only mode, including + units that would not normally be compiled (subunits, and + specifications where a separate body is present). + +  + File: gnat_ugn.info, Node: Compiling Different Versions of Ada, Next: Character Set Control, Prev: Using gcc for Semantic Checking, Up: Compiler Switches + + 4.3.10 Compiling Different Versions of Ada + ------------------------------------------ + + The switches described in this section allow you to explicitly specify + the version of the Ada language that your programs are written in. The + default mode is Ada 2012, but you can also specify Ada 95, Ada 2005 + mode, or indicate Ada 83 compatibility mode. + + ‘-gnat83’ (Ada 83 Compatibility Mode) + + Although GNAT is primarily an Ada 95 / Ada 2005 compiler, this + switch specifies that the program is to be compiled in Ada 83 mode. + With ‘-gnat83’, GNAT rejects most post-Ada 83 extensions and + applies Ada 83 semantics where this can be done easily. It is not + possible to guarantee this switch does a perfect job; some subtle + tests, such as are found in earlier ACVC tests (and that have been + removed from the ACATS suite for Ada 95), might not compile + correctly. Nevertheless, this switch may be useful in some + circumstances, for example where, due to contractual reasons, + existing code needs to be maintained using only Ada 83 features. + + With few exceptions (most notably the need to use ‘<>’ on + unconstrained generic formal parameters, the use of the new Ada 95 + / Ada 2005 reserved words, and the use of packages with optional + bodies), it is not necessary to specify the ‘-gnat83’ switch when + compiling Ada 83 programs, because, with rare exceptions, Ada 95 + and Ada 2005 are upwardly compatible with Ada 83. Thus a correct + Ada 83 program is usually also a correct program in these later + versions of the language standard. For further information please + refer to the `Compatibility and Porting Guide' chapter in the ‘GNAT + Reference Manual’. + + ‘-gnat95’ (Ada 95 mode) + + This switch directs the compiler to implement the Ada 95 version of + the language. Since Ada 95 is almost completely upwards compatible + with Ada 83, Ada 83 programs may generally be compiled using this + switch (see the description of the ‘-gnat83’ switch for further + information about Ada 83 mode). If an Ada 2005 program is compiled + in Ada 95 mode, uses of the new Ada 2005 features will cause error + messages or warnings. + + This switch also can be used to cancel the effect of a previous + ‘-gnat83’, ‘-gnat05/2005’, or ‘-gnat12/2012’ switch earlier in the + command line. + + ‘-gnat05’ or ‘-gnat2005’ (Ada 2005 mode) + + This switch directs the compiler to implement the Ada 2005 version + of the language, as documented in the official Ada standards + document. Since Ada 2005 is almost completely upwards compatible + with Ada 95 (and thus also with Ada 83), Ada 83 and Ada 95 programs + may generally be compiled using this switch (see the description of + the ‘-gnat83’ and ‘-gnat95’ switches for further information). + + ‘-gnat12’ or ‘-gnat2012’ (Ada 2012 mode) + + This switch directs the compiler to implement the Ada 2012 version + of the language (also the default). Since Ada 2012 is almost + completely upwards compatible with Ada 2005 (and thus also with Ada + 83, and Ada 95), Ada 83 and Ada 95 programs may generally be + compiled using this switch (see the description of the ‘-gnat83’, + ‘-gnat95’, and ‘-gnat05/2005’ switches for further information). + + ‘-gnat2022’ (Ada 2022 mode) + + This switch directs the compiler to implement the Ada 2022 version + of the language. + + ‘-gnatX’ (Enable GNAT Extensions) + + This switch directs the compiler to implement the latest version of + the language (currently Ada 2022) and also to enable certain GNAT + implementation extensions that are not part of any Ada standard. + For a full list of these extensions, see the GNAT reference manual, + ‘Pragma Extensions_Allowed’. + +  + File: gnat_ugn.info, Node: Character Set Control, Next: File Naming Control, Prev: Compiling Different Versions of Ada, Up: Compiler Switches + + 4.3.11 Character Set Control + ---------------------------- + + ‘-gnati`c'’ + + Normally GNAT recognizes the Latin-1 character set in source + program identifiers, as described in the Ada Reference Manual. + This switch causes GNAT to recognize alternate character sets in + identifiers. ‘c’ is a single character indicating the character + set, as follows: + + `1' ISO 8859-1 (Latin-1) identifiers + + + `2' ISO 8859-2 (Latin-2) letters allowed in identifiers + + + `3' ISO 8859-3 (Latin-3) letters allowed in identifiers + + + `4' ISO 8859-4 (Latin-4) letters allowed in identifiers + + + `5' ISO 8859-5 (Cyrillic) letters allowed in identifiers + + + `9' ISO 8859-15 (Latin-9) letters allowed in identifiers + + + `p' IBM PC letters (code page 437) allowed in identifiers + + + `8' IBM PC letters (code page 850) allowed in identifiers + + + `f' Full upper-half codes allowed in identifiers + + + `n' No upper-half codes allowed in identifiers + + + `w' Wide-character codes (that is, codes greater than 255) + allowed in identifiers + + + See *note Foreign Language Representation: 23. for full details on + the implementation of these character sets. + + ‘-gnatW`e'’ + + Specify the method of encoding for wide characters. ‘e’ is one of + the following: + + `h' Hex encoding (brackets coding also recognized) + + + `u' Upper half encoding (brackets encoding also recognized) + + + `s' Shift/JIS encoding (brackets encoding also recognized) + + + `e' EUC encoding (brackets encoding also recognized) + + + `8' UTF-8 encoding (brackets encoding also recognized) + + + `b' Brackets encoding only (default value) + + + For full details on these encoding methods see *note Wide_Character + Encodings: 37. Note that brackets coding is always accepted, even + if one of the other options is specified, so for example ‘-gnatW8’ + specifies that both brackets and UTF-8 encodings will be + recognized. The units that are with’ed directly or indirectly will + be scanned using the specified representation scheme, and so if one + of the non-brackets scheme is used, it must be used consistently + throughout the program. However, since brackets encoding is always + recognized, it may be conveniently used in standard libraries, + allowing these libraries to be used with any of the available + coding schemes. + + Note that brackets encoding only applies to program text. Within + comments, brackets are considered to be normal graphic characters, + and bracket sequences are never recognized as wide characters. + + If no ‘-gnatW?’ parameter is present, then the default + representation is normally Brackets encoding only. However, if the + first three characters of the file are 16#EF# 16#BB# 16#BF# (the + standard byte order mark or BOM for UTF-8), then these three + characters are skipped and the default representation for the file + is set to UTF-8. + + Note that the wide character representation that is specified + (explicitly or by default) for the main program also acts as the + default encoding used for Wide_Text_IO files if not specifically + overridden by a WCEM form parameter. + + When no ‘-gnatW?’ is specified, then characters (other than wide + characters represented using brackets notation) are treated as 8-bit + Latin-1 codes. The codes recognized are the Latin-1 graphic characters, + and ASCII format effectors (CR, LF, HT, VT). Other lower half control + characters in the range 16#00#..16#1F# are not accepted in program text + or in comments. Upper half control characters (16#80#..16#9F#) are + rejected in program text, but allowed and ignored in comments. Note in + particular that the Next Line (NEL) character whose encoding is 16#85# + is not recognized as an end of line in this default mode. If your + source program contains instances of the NEL character used as a line + terminator, you must use UTF-8 encoding for the whole source program. + In default mode, all lines must be ended by a standard end of line + sequence (CR, CR/LF, or LF). + + Note that the convention of simply accepting all upper half characters + in comments means that programs that use standard ASCII for program + text, but UTF-8 encoding for comments are accepted in default mode, + providing that the comments are ended by an appropriate (CR, or CR/LF, + or LF) line terminator. This is a common mode for many programs with + foreign language comments. + +  + File: gnat_ugn.info, Node: File Naming Control, Next: Subprogram Inlining Control, Prev: Character Set Control, Up: Compiler Switches + + 4.3.12 File Naming Control + -------------------------- + + ‘-gnatk`n'’ + + Activates file name ‘krunching’. ‘n’, a decimal integer in the + range 1-999, indicates the maximum allowable length of a file name + (not including the ‘.ads’ or ‘.adb’ extension). The default is not + to enable file name krunching. + + For the source file naming rules, *note File Naming Rules: 3b. + +  + File: gnat_ugn.info, Node: Subprogram Inlining Control, Next: Auxiliary Output Control, Prev: File Naming Control, Up: Compiler Switches + + 4.3.13 Subprogram Inlining Control + ---------------------------------- + + ‘-gnatn[12]’ + + The ‘n’ here is intended to suggest the first syllable of the word + ‘inline’. GNAT recognizes and processes ‘Inline’ pragmas. + However, for inlining to actually occur, optimization must be + enabled and, by default, inlining of subprograms across units is + not performed. If you want to additionally enable inlining of + subprograms specified by pragma ‘Inline’ across units, you must + also specify this switch. + + In the absence of this switch, GNAT does not attempt inlining + across units and does not access the bodies of subprograms for + which ‘pragma Inline’ is specified if they are not in the current + unit. + + You can optionally specify the inlining level: 1 for moderate + inlining across units, which is a good compromise between + compilation times and performances at run time, or 2 for full + inlining across units, which may bring about longer compilation + times. If no inlining level is specified, the compiler will pick + it based on the optimization level: 1 for ‘-O1’, ‘-O2’ or ‘-Os’ and + 2 for ‘-O3’. + + If you specify this switch the compiler will access these bodies, + creating an extra source dependency for the resulting object file, + and where possible, the call will be inlined. For further details + on when inlining is possible see *note Inlining of Subprograms: + 100. + + ‘-gnatN’ + + This switch activates front-end inlining which also generates + additional dependencies. + + When using a gcc-based back end, then the use of ‘-gnatN’ is + deprecated, and the use of ‘-gnatn’ is preferred. Historically + front end inlining was more extensive than the gcc back end + inlining, but that is no longer the case. + +  + File: gnat_ugn.info, Node: Auxiliary Output Control, Next: Debugging Control, Prev: Subprogram Inlining Control, Up: Compiler Switches + + 4.3.14 Auxiliary Output Control + ------------------------------- + + ‘-gnatu’ + + Print a list of units required by this compilation on ‘stdout’. + The listing includes all units on which the unit being compiled + depends either directly or indirectly. + + ‘-pass-exit-codes’ + + If this switch is not used, the exit code returned by ‘gcc’ when + compiling multiple files indicates whether all source files have + been successfully used to generate object files or not. + + When ‘-pass-exit-codes’ is used, ‘gcc’ exits with an extended exit + status and allows an integrated development environment to better + react to a compilation failure. Those exit status are: + + `5' There was an error in at least one source file. + + + `3' At least one source file did not generate an object file. + + + `2' The compiler died unexpectedly (internal error for example). + + + `0' An object file has been generated for every source file. + + +  + File: gnat_ugn.info, Node: Debugging Control, Next: Exception Handling Control, Prev: Auxiliary Output Control, Up: Compiler Switches + + 4.3.15 Debugging Control + ------------------------ + + ‘-gnatd`x'’ + + Activate internal debugging switches. ‘x’ is a letter or digit, or + string of letters or digits, which specifies the type of debugging + outputs desired. Normally these are used only for internal + development or system debugging purposes. You can find full + documentation for these switches in the body of the ‘Debug’ unit in + the compiler source file ‘debug.adb’. + + ‘-gnatG[=`nn']’ + + This switch causes the compiler to generate auxiliary output + containing a pseudo-source listing of the generated expanded code. + Like most Ada compilers, GNAT works by first transforming the high + level Ada code into lower level constructs. For example, tasking + operations are transformed into calls to the tasking run-time + routines. A unique capability of GNAT is to list this expanded + code in a form very close to normal Ada source. This is very + useful in understanding the implications of various Ada usage on + the efficiency of the generated code. There are many cases in Ada + (e.g., the use of controlled types), where simple Ada statements + can generate a lot of run-time code. By using ‘-gnatG’ you can + identify these cases, and consider whether it may be desirable to + modify the coding approach to improve efficiency. + + The optional parameter ‘nn’ if present after -gnatG specifies an + alternative maximum line length that overrides the normal default + of 72. This value is in the range 40-999999, values less than 40 + being silently reset to 40. The equal sign is optional. + + The format of the output is very similar to standard Ada source, + and is easily understood by an Ada programmer. The following + special syntactic additions correspond to low level features used + in the generated code that do not have any exact analogies in pure + Ada source form. The following is a partial list of these special + constructions. See the spec of package ‘Sprint’ in file + ‘sprint.ads’ for a full list. + + If the switch ‘-gnatL’ is used in conjunction with ‘-gnatG’, then + the original source lines are interspersed in the expanded source + (as comment lines with the original line number). + + ‘new `xxx' [storage_pool = `yyy']’ + + Shows the storage pool being used for an allocator. + + ‘at end `procedure-name';’ + + Shows the finalization (cleanup) procedure for a scope. + + ‘(if `expr' then `expr' else `expr')’ + + Conditional expression equivalent to the ‘x?y:z’ construction + in C. + + ‘`target'^(`source')’ + + A conversion with floating-point truncation instead of + rounding. + + ‘`target'?(`source')’ + + A conversion that bypasses normal Ada semantic checking. In + particular enumeration types and fixed-point types are treated + simply as integers. + + ‘`target'?^(`source')’ + + Combines the above two cases. + + ‘`x' #/ `y'’ + + ‘`x' #mod `y'’ + + ‘`x' # `y'’ + + ‘`x' #rem `y'’ + + A division or multiplication of fixed-point values which are + treated as integers without any kind of scaling. + + ‘free `expr' [storage_pool = `xxx']’ + + Shows the storage pool associated with a ‘free’ statement. + + ‘[subtype or type declaration]’ + + Used to list an equivalent declaration for an internally + generated type that is referenced elsewhere in the listing. + + ‘freeze `type-name' [`actions']’ + + Shows the point at which ‘type-name’ is frozen, with possible + associated actions to be performed at the freeze point. + + ‘reference `itype'’ + + Reference (and hence definition) to internal type ‘itype’. + + ‘`function-name'! (`arg', `arg', `arg')’ + + Intrinsic function call. + + ‘`label-name' : label’ + + Declaration of label ‘labelname’. + + ‘#$ `subprogram-name'’ + + An implicit call to a run-time support routine (to meet the + requirement of H.3.1(9) in a convenient manner). + + ‘`expr' && `expr' && `expr' ... && `expr'’ + + A multiple concatenation (same effect as ‘expr’ & ‘expr’ & + ‘expr’, but handled more efficiently). + + ‘[constraint_error]’ + + Raise the ‘Constraint_Error’ exception. + + ‘`expression''reference’ + + A pointer to the result of evaluating {expression}. + + ‘`target-type'!(`source-expression')’ + + An unchecked conversion of ‘source-expression’ to + ‘target-type’. + + ‘[`numerator'/`denominator']’ + + Used to represent internal real literals (that) have no exact + representation in base 2-16 (for example, the result of + compile time evaluation of the expression 1.0/27.0). + + ‘-gnatD[=nn]’ + + When used in conjunction with ‘-gnatG’, this switch causes the + expanded source, as described above for ‘-gnatG’ to be written to + files with names ‘xxx.dg’, where ‘xxx’ is the normal file name, + instead of to the standard output file. For example, if the source + file name is ‘hello.adb’, then a file ‘hello.adb.dg’ will be + written. The debugging information generated by the ‘gcc’ ‘-g’ + switch will refer to the generated ‘xxx.dg’ file. This allows you + to do source level debugging using the generated code which is + sometimes useful for complex code, for example to find out exactly + which part of a complex construction raised an exception. This + switch also suppresses generation of cross-reference information + (see ‘-gnatx’) since otherwise the cross-reference information + would refer to the ‘.dg’ file, which would cause confusion since + this is not the original source file. + + Note that ‘-gnatD’ actually implies ‘-gnatG’ automatically, so it + is not necessary to give both options. In other words ‘-gnatD’ is + equivalent to ‘-gnatDG’). + + If the switch ‘-gnatL’ is used in conjunction with ‘-gnatDG’, then + the original source lines are interspersed in the expanded source + (as comment lines with the original line number). + + The optional parameter ‘nn’ if present after -gnatD specifies an + alternative maximum line length that overrides the normal default + of 72. This value is in the range 40-999999, values less than 40 + being silently reset to 40. The equal sign is optional. + + ‘-gnatr’ + + This switch causes pragma Restrictions to be treated as + Restriction_Warnings so that violation of restrictions causes + warnings rather than illegalities. This is useful during the + development process when new restrictions are added or + investigated. The switch also causes pragma Profile to be treated + as Profile_Warnings, and pragma Restricted_Run_Time and pragma + Ravenscar set restriction warnings rather than restrictions. + + ‘-gnatR[0|1|2|3|4][e][j][m][s]’ + + This switch controls output from the compiler of a listing showing + representation information for declared types, objects and + subprograms. For ‘-gnatR0’, no information is output (equivalent + to omitting the ‘-gnatR’ switch). For ‘-gnatR1’ (which is the + default, so ‘-gnatR’ with no parameter has the same effect), size + and alignment information is listed for declared array and record + types. + + For ‘-gnatR2’, size and alignment information is listed for all + declared types and objects. The ‘Linker_Section’ is also listed + for any entity for which the ‘Linker_Section’ is set explicitly or + implicitly (the latter case occurs for objects of a type for which + a ‘Linker_Section’ is set). + + For ‘-gnatR3’, symbolic expressions for values that are computed at + run time for records are included. These symbolic expressions have + a mostly obvious format with #n being used to represent the value + of the n’th discriminant. See source files ‘repinfo.ads/adb’ in + the GNAT sources for full details on the format of ‘-gnatR3’ + output. + + For ‘-gnatR4’, information for relevant compiler-generated types is + also listed, i.e. when they are structurally part of other + declared types and objects. + + If the switch is followed by an ‘e’ (e.g. ‘-gnatR2e’), then + extended representation information for record sub-components of + records is included. + + If the switch is followed by an ‘m’ (e.g. ‘-gnatRm’), then + subprogram conventions and parameter passing mechanisms for all the + subprograms are included. + + If the switch is followed by a ‘j’ (e.g., ‘-gnatRj’), then the + output is in the JSON data interchange format specified by the + ECMA-404 standard. The semantic description of this JSON output is + available in the specification of the Repinfo unit present in the + compiler sources. + + If the switch is followed by an ‘s’ (e.g., ‘-gnatR3s’), then the + output is to a file with the name ‘file.rep’ where ‘file’ is the + name of the corresponding source file, except if ‘j’ is also + specified, in which case the file name is ‘file.json’. + + Note that it is possible for record components to have zero size. + In this case, the component clause uses an obvious extension of + permitted Ada syntax, for example ‘at 0 range 0 .. -1’. + + ‘-gnatS’ + + The use of the switch ‘-gnatS’ for an Ada compilation will cause + the compiler to output a representation of package Standard in a + form very close to standard Ada. It is not quite possible to do + this entirely in standard Ada (since new numeric base types cannot + be created in standard Ada), but the output is easily readable to + any Ada programmer, and is useful to determine the characteristics + of target dependent types in package Standard. + + ‘-gnatx’ + + Normally the compiler generates full cross-referencing information + in the ‘ALI’ file. This information is used by a number of tools, + including ‘gnatfind’ and ‘gnatxref’. The ‘-gnatx’ switch + suppresses this information. This saves some space and may + slightly speed up compilation, but means that these tools cannot be + used. + + ‘-fgnat-encodings=[all|gdb|minimal]’ + + This switch controls the balance between GNAT encodings and + standard DWARF emitted in the debug information. + + Historically, old debug formats like stabs were not powerful enough + to express some Ada types (for instance, variant records or + fixed-point types). To work around this, GNAT introduced + proprietary encodings that embed the missing information (“GNAT + encodings”). + + Recent versions of the DWARF debug information format are now able + to correctly describe most of these Ada constructs (“standard + DWARF”). As third-party tools started to use this format, GNAT has + been enhanced to generate it. However, most tools (including GDB) + are still relying on GNAT encodings. + + To support all tools, GNAT needs to be versatile about the balance + between generation of GNAT encodings and standard DWARF. This is + what ‘-fgnat-encodings’ is about. + + * ‘=all’: Emit all GNAT encodings, and then emit as much + standard DWARF as possible so it does not conflict with GNAT + encodings. + + * ‘=gdb’: Emit as much standard DWARF as possible as long as the + current GDB handles it. Emit GNAT encodings for the rest. + + * ‘=minimal’: Emit as much standard DWARF as possible and emit + GNAT encodings for the rest. + +  + File: gnat_ugn.info, Node: Exception Handling Control, Next: Units to Sources Mapping Files, Prev: Debugging Control, Up: Compiler Switches + + 4.3.16 Exception Handling Control + --------------------------------- + + GNAT uses two methods for handling exceptions at run time. The + ‘setjmp/longjmp’ method saves the context when entering a frame with an + exception handler. Then when an exception is raised, the context can be + restored immediately, without the need for tracing stack frames. This + method provides very fast exception propagation, but introduces + significant overhead for the use of exception handlers, even if no + exception is raised. + + The other approach is called ‘zero cost’ exception handling. With this + method, the compiler builds static tables to describe the exception + ranges. No dynamic code is required when entering a frame containing an + exception handler. When an exception is raised, the tables are used to + control a back trace of the subprogram invocation stack to locate the + required exception handler. This method has considerably poorer + performance for the propagation of exceptions, but there is no overhead + for exception handlers if no exception is raised. Note that in this + mode and in the context of mixed Ada and C/C++ programming, to propagate + an exception through a C/C++ code, the C/C++ code must be compiled with + the ‘-funwind-tables’ GCC’s option. + + The following switches may be used to control which of the two exception + handling methods is used. + + ‘--RTS=sjlj’ + + This switch causes the setjmp/longjmp run-time (when available) to + be used for exception handling. If the default mechanism for the + target is zero cost exceptions, then this switch can be used to + modify this default, and must be used for all units in the + partition. This option is rarely used. One case in which it may + be advantageous is if you have an application where exception + raising is common and the overall performance of the application is + improved by favoring exception propagation. + + ‘--RTS=zcx’ + + This switch causes the zero cost approach to be used for exception + handling. If this is the default mechanism for the target (see + below), then this switch is unneeded. If the default mechanism for + the target is setjmp/longjmp exceptions, then this switch can be + used to modify this default, and must be used for all units in the + partition. This option can only be used if the zero cost approach + is available for the target in use, otherwise it will generate an + error. + + The same option ‘--RTS’ must be used both for ‘gcc’ and ‘gnatbind’. + Passing this option to ‘gnatmake’ (*note Switches for gnatmake: ce.) + will ensure the required consistency through the compilation and binding + steps. + +  + File: gnat_ugn.info, Node: Units to Sources Mapping Files, Next: Code Generation Control, Prev: Exception Handling Control, Up: Compiler Switches + + 4.3.17 Units to Sources Mapping Files + ------------------------------------- + + ‘-gnatem=`path'’ + + A mapping file is a way to communicate to the compiler two + mappings: from unit names to file names (without any directory + information) and from file names to path names (with full directory + information). These mappings are used by the compiler to + short-circuit the path search. + + The use of mapping files is not required for correct operation of + the compiler, but mapping files can improve efficiency, + particularly when sources are read over a slow network connection. + In normal operation, you need not be concerned with the format or + use of mapping files, and the ‘-gnatem’ switch is not a switch that + you would use explicitly. It is intended primarily for use by + automatic tools such as ‘gnatmake’ running under the project file + facility. The description here of the format of mapping files is + provided for completeness and for possible use by other tools. + + A mapping file is a sequence of sets of three lines. In each set, + the first line is the unit name, in lower case, with ‘%s’ appended + for specs and ‘%b’ appended for bodies; the second line is the file + name; and the third line is the path name. + + Example: + + main%b + main.2.ada + /gnat/project1/sources/main.2.ada + + When the switch ‘-gnatem’ is specified, the compiler will create in + memory the two mappings from the specified file. If there is any + problem (nonexistent file, truncated file or duplicate entries), no + mapping will be created. + + Several ‘-gnatem’ switches may be specified; however, only the last + one on the command line will be taken into account. + + When using a project file, ‘gnatmake’ creates a temporary mapping + file and communicates it to the compiler using this switch. + +  + File: gnat_ugn.info, Node: Code Generation Control, Prev: Units to Sources Mapping Files, Up: Compiler Switches + + 4.3.18 Code Generation Control + ------------------------------ + + The GCC technology provides a wide range of target dependent ‘-m’ + switches for controlling details of code generation with respect to + different versions of architectures. This includes variations in + instruction sets (e.g., different members of the power pc family), and + different requirements for optimal arrangement of instructions (e.g., + different members of the x86 family). The list of available ‘-m’ + switches may be found in the GCC documentation. + + Use of these ‘-m’ switches may in some cases result in improved code + performance. + + The GNAT technology is tested and qualified without any ‘-m’ switches, + so generally the most reliable approach is to avoid the use of these + switches. However, we generally expect most of these switches to work + successfully with GNAT, and many customers have reported successful use + of these options. + + Our general advice is to avoid the use of ‘-m’ switches unless special + needs lead to requirements in this area. In particular, there is no + point in using ‘-m’ switches to improve performance unless you actually + see a performance improvement. + +  + File: gnat_ugn.info, Node: Linker Switches, Next: Binding with gnatbind, Prev: Compiler Switches, Up: Building Executable Programs with GNAT + + 4.4 Linker Switches + =================== + + Linker switches can be specified after ‘-largs’ builder switch. + + ‘-fuse-ld=`name'’ + + Linker to be used. The default is ‘bfd’ for ‘ld.bfd’, the + alternative being ‘gold’ for ‘ld.gold’. The later is a more recent + and faster linker, but only available on GNU/Linux platforms. + +  + File: gnat_ugn.info, Node: Binding with gnatbind, Next: Linking with gnatlink, Prev: Linker Switches, Up: Building Executable Programs with GNAT + + 4.5 Binding with ‘gnatbind’ + =========================== + + This chapter describes the GNAT binder, ‘gnatbind’, which is used to + bind compiled GNAT objects. + + The ‘gnatbind’ program performs four separate functions: + + * Checks that a program is consistent, in accordance with the rules + in Chapter 10 of the Ada Reference Manual. In particular, error + messages are generated if a program uses inconsistent versions of a + given unit. + + * Checks that an acceptable order of elaboration exists for the + program and issues an error message if it cannot find an order of + elaboration that satisfies the rules in Chapter 10 of the Ada + Language Manual. + + * Generates a main program incorporating the given elaboration order. + This program is a small Ada package (body and spec) that must be + subsequently compiled using the GNAT compiler. The necessary + compilation step is usually performed automatically by ‘gnatlink’. + The two most important functions of this program are to call the + elaboration routines of units in an appropriate order and to call + the main program. + + * Determines the set of object files required by the given main + program. This information is output in the forms of comments in + the generated program, to be read by the ‘gnatlink’ utility used to + link the Ada application. + + * Menu: + + * Running gnatbind:: + * Switches for gnatbind:: + * Command-Line Access:: + * Search Paths for gnatbind:: + * Examples of gnatbind Usage:: + +  + File: gnat_ugn.info, Node: Running gnatbind, Next: Switches for gnatbind, Up: Binding with gnatbind + + 4.5.1 Running ‘gnatbind’ + ------------------------ + + The form of the ‘gnatbind’ command is + + $ gnatbind [ switches ] mainprog[.ali] [ switches ] + + where ‘mainprog.adb’ is the Ada file containing the main program unit + body. ‘gnatbind’ constructs an Ada package in two files whose names are + ‘b~mainprog.ads’, and ‘b~mainprog.adb’. For example, if given the + parameter ‘hello.ali’, for a main program contained in file ‘hello.adb’, + the binder output files would be ‘b~hello.ads’ and ‘b~hello.adb’. + + When doing consistency checking, the binder takes into consideration any + source files it can locate. For example, if the binder determines that + the given main program requires the package ‘Pack’, whose ‘.ALI’ file is + ‘pack.ali’ and whose corresponding source spec file is ‘pack.ads’, it + attempts to locate the source file ‘pack.ads’ (using the same search + path conventions as previously described for the ‘gcc’ command). If it + can locate this source file, it checks that the time stamps or source + checksums of the source and its references to in ‘ALI’ files match. In + other words, any ‘ALI’ files that mentions this spec must have resulted + from compiling this version of the source file (or in the case where the + source checksums match, a version close enough that the difference does + not matter). + + The effect of this consistency checking, which includes source files, is + that the binder ensures that the program is consistent with the latest + version of the source files that can be located at bind time. Editing a + source file without compiling files that depend on the source file cause + error messages to be generated by the binder. + + For example, suppose you have a main program ‘hello.adb’ and a package + ‘P’, from file ‘p.ads’ and you perform the following steps: + + * Enter ‘gcc -c hello.adb’ to compile the main program. + + * Enter ‘gcc -c p.ads’ to compile package ‘P’. + + * Edit file ‘p.ads’. + + * Enter ‘gnatbind hello’. + + At this point, the file ‘p.ali’ contains an out-of-date time stamp + because the file ‘p.ads’ has been edited. The attempt at binding fails, + and the binder generates the following error messages: + + error: "hello.adb" must be recompiled ("p.ads" has been modified) + error: "p.ads" has been modified and must be recompiled + + Now both files must be recompiled as indicated, and then the bind can + succeed, generating a main program. You need not normally be concerned + with the contents of this file, but for reference purposes a sample + binder output file is given in *note Example of Binder Output File: e. + + In most normal usage, the default mode of ‘gnatbind’ which is to + generate the main package in Ada, as described in the previous section. + In particular, this means that any Ada programmer can read and + understand the generated main program. It can also be debugged just + like any other Ada code provided the ‘-g’ switch is used for ‘gnatbind’ + and ‘gnatlink’. + +  + File: gnat_ugn.info, Node: Switches for gnatbind, Next: Command-Line Access, Prev: Running gnatbind, Up: Binding with gnatbind + + 4.5.2 Switches for ‘gnatbind’ + ----------------------------- + + The following switches are available with ‘gnatbind’; details will be + presented in subsequent sections. + + ‘--version’ + + Display Copyright and version, then exit disregarding all other + options. + + ‘--help’ + + If ‘--version’ was not used, display usage, then exit disregarding + all other options. + + ‘-a’ + + Indicates that, if supported by the platform, the adainit procedure + should be treated as an initialisation routine by the linker (a + constructor). This is intended to be used by the Project Manager + to automatically initialize shared Stand-Alone Libraries. + + ‘-aO’ + + Specify directory to be searched for ALI files. + + ‘-aI’ + + Specify directory to be searched for source file. + + ‘-A[=`filename']’ + + Output ALI list (to standard output or to the named file). + + ‘-b’ + + Generate brief messages to ‘stderr’ even if verbose mode set. + + ‘-c’ + + Check only, no generation of binder output file. + + ‘-d`nn'[k|m]’ + + This switch can be used to change the default task stack size value + to a specified size ‘nn’, which is expressed in bytes by default, + or in kilobytes when suffixed with ‘k’ or in megabytes when + suffixed with ‘m’. In the absence of a ‘[k|m]’ suffix, this switch + is equivalent, in effect, to completing all task specs with + + pragma Storage_Size (nn); + + When they do not already have such a pragma. + + ‘-D`nn'[k|m]’ + + Set the default secondary stack size to ‘nn’. The suffix indicates + whether the size is in bytes (no suffix), kilobytes (‘k’ suffix) or + megabytes (‘m’ suffix). + + The secondary stack holds objects of unconstrained types that are + returned by functions, for example unconstrained Strings. The size + of the secondary stack can be dynamic or fixed depending on the + target. + + For most targets, the secondary stack grows on demand and is + implemented as a chain of blocks in the heap. In this case, the + default secondary stack size determines the initial size of the + secondary stack for each task and the smallest amount the secondary + stack can grow by. + + For Ravenscar, ZFP, and Cert run-times the size of the secondary + stack is fixed. This switch can be used to change the default size + of these stacks. The default secondary stack size can be + overridden on a per-task basis if individual tasks have different + secondary stack requirements. This is achieved through the + Secondary_Stack_Size aspect that takes the size of the secondary + stack in bytes. + + ‘-e’ + + Output complete list of elaboration-order dependencies. + + ‘-Ea’ + + Store tracebacks in exception occurrences when the target supports + it. The “a” is for “address”; tracebacks will contain hexadecimal + addresses, unless symbolic tracebacks are enabled. + + See also the packages ‘GNAT.Traceback’ and + ‘GNAT.Traceback.Symbolic’ for more information. Note that on x86 + ports, you must not use ‘-fomit-frame-pointer’ ‘gcc’ option. + + ‘-Es’ + + Store tracebacks in exception occurrences when the target supports + it. The “s” is for “symbolic”; symbolic tracebacks are enabled. + + ‘-E’ + + Currently the same as ‘-Ea’. + + ‘-f`elab-order'’ + + Force elaboration order. For further details see *note Elaboration + Control: 111. and *note Elaboration Order Handling in GNAT: f. + + ‘-F’ + + Force the checks of elaboration flags. ‘gnatbind’ does not + normally generate checks of elaboration flags for the main + executable, except when a Stand-Alone Library is used. However, + there are cases when this cannot be detected by gnatbind. An + example is importing an interface of a Stand-Alone Library through + a pragma Import and only specifying through a linker switch this + Stand-Alone Library. This switch is used to guarantee that + elaboration flag checks are generated. + + ‘-h’ + + Output usage (help) information. + + ‘-H’ + + Legacy elaboration order model enabled. For further details see + *note Elaboration Order Handling in GNAT: f. + + ‘-H32’ + + Use 32-bit allocations for ‘__gnat_malloc’ (and thus for access + types). For further details see *note Dynamic Allocation Control: + 112. + + ‘-H64’ + + Use 64-bit allocations for ‘__gnat_malloc’ (and thus for access + types). For further details see *note Dynamic Allocation Control: + 112. + + ‘-I’ + + Specify directory to be searched for source and ALI files. + + ‘-I-’ + + Do not look for sources in the current directory where ‘gnatbind’ + was invoked, and do not look for ALI files in the directory + containing the ALI file named in the ‘gnatbind’ command line. + + ‘-l’ + + Output chosen elaboration order. + + ‘-L`xxx'’ + + Bind the units for library building. In this case the ‘adainit’ + and ‘adafinal’ procedures (*note Binding with Non-Ada Main + Programs: a0.) are renamed to ‘`xxx'init’ and ‘`xxx'final’. + Implies -n. (*note GNAT and Libraries: 2a, for more details.) + + ‘-M`xyz'’ + + Rename generated main program from main to xyz. This option is + supported on cross environments only. + + ‘-m`n'’ + + Limit number of detected errors or warnings to ‘n’, where ‘n’ is in + the range 1..999999. The default value if no switch is given is + 9999. If the number of warnings reaches this limit, then a message + is output and further warnings are suppressed, the bind continues + in this case. If the number of errors reaches this limit, then a + message is output and the bind is abandoned. A value of zero means + that no limit is enforced. The equal sign is optional. + + ‘-minimal’ + + Generate a binder file suitable for space-constrained applications. + When active, binder-generated objects not required for program + operation are no longer generated. `Warning:' this option comes + with the following limitations: + + * Starting the program’s execution in the debugger will cause it + to stop at the start of the ‘main’ function instead of the + main subprogram. This can be worked around by manually + inserting a breakpoint on that subprogram and resuming the + program’s execution until reaching that breakpoint. + + * Programs using GNAT.Compiler_Version will not link. + + ‘-n’ + + No main program. + + ‘-nostdinc’ + + Do not look for sources in the system default directory. + + ‘-nostdlib’ + + Do not look for library files in the system default directory. + + ‘--RTS=`rts-path'’ + + Specifies the default location of the run-time library. Same + meaning as the equivalent ‘gnatmake’ flag (*note Switches for + gnatmake: ce.). + + ‘-o `file'’ + + Name the output file ‘file’ (default is ‘b~`xxx’.adb‘). Note that + if this option is used, then linking must be done manually, + gnatlink cannot be used. + + ‘-O[=`filename']’ + + Output object list (to standard output or to the named file). + + ‘-p’ + + Pessimistic (worst-case) elaboration order. + + ‘-P’ + + Generate binder file suitable for CodePeer. + + ‘-R’ + + Output closure source list, which includes all non-run-time units + that are included in the bind. + + ‘-Ra’ + + Like ‘-R’ but the list includes run-time units. + + ‘-s’ + + Require all source files to be present. + + ‘-S`xxx'’ + + Specifies the value to be used when detecting uninitialized scalar + objects with pragma Initialize_Scalars. The ‘xxx’ string specified + with the switch is one of: + + * ‘in’ for an invalid value. + + If zero is invalid for the discrete type in question, then the + scalar value is set to all zero bits. For signed discrete + types, the largest possible negative value of the underlying + scalar is set (i.e. a one bit followed by all zero bits). + For unsigned discrete types, the underlying scalar value is + set to all one bits. For floating-point types, a NaN value is + set (see body of package System.Scalar_Values for exact + values). + + * ‘lo’ for low value. + + If zero is invalid for the discrete type in question, then the + scalar value is set to all zero bits. For signed discrete + types, the largest possible negative value of the underlying + scalar is set (i.e. a one bit followed by all zero bits). + For unsigned discrete types, the underlying scalar value is + set to all zero bits. For floating-point, a small value is + set (see body of package System.Scalar_Values for exact + values). + + * ‘hi’ for high value. + + If zero is invalid for the discrete type in question, then the + scalar value is set to all one bits. For signed discrete + types, the largest possible positive value of the underlying + scalar is set (i.e. a zero bit followed by all one bits). + For unsigned discrete types, the underlying scalar value is + set to all one bits. For floating-point, a large value is set + (see body of package System.Scalar_Values for exact values). + + * ‘xx’ for hex value (two hex digits). + + The underlying scalar is set to a value consisting of repeated + bytes, whose value corresponds to the given value. For + example if ‘BF’ is given, then a 32-bit scalar value will be + set to the bit patterm ‘16#BFBFBFBF#’. + + In addition, you can specify ‘-Sev’ to indicate that the value is + to be set at run time. In this case, the program will look for an + environment variable of the form ‘GNAT_INIT_SCALARS=`yy'’, where + ‘yy’ is one of ‘in/lo/hi/`xx'’ with the same meanings as above. If + no environment variable is found, or if it does not have a valid + value, then the default is ‘in’ (invalid values). + + ‘-static’ + + Link against a static GNAT run-time. + + ‘-shared’ + + Link against a shared GNAT run-time when available. + + ‘-t’ + + Tolerate time stamp and other consistency errors. + + ‘-T`n'’ + + Set the time slice value to ‘n’ milliseconds. If the system + supports the specification of a specific time slice value, then the + indicated value is used. If the system does not support specific + time slice values, but does support some general notion of + round-robin scheduling, then any nonzero value will activate + round-robin scheduling. + + A value of zero is treated specially. It turns off time slicing, + and in addition, indicates to the tasking run-time that the + semantics should match as closely as possible the Annex D + requirements of the Ada RM, and in particular sets the default + scheduling policy to ‘FIFO_Within_Priorities’. + + ‘-u`n'’ + + Enable dynamic stack usage, with ‘n’ results stored and displayed + at program termination. A result is generated when a task + terminates. Results that can’t be stored are displayed on the fly, + at task termination. This option is currently not supported on + Itanium platforms. (See *note Dynamic Stack Usage Analysis: 113. + for details.) + + ‘-v’ + + Verbose mode. Write error messages, header, summary output to + ‘stdout’. + + ‘-V`key'=`value'’ + + Store the given association of ‘key’ to ‘value’ in the bind + environment. Values stored this way can be retrieved at run time + using ‘GNAT.Bind_Environment’. + + ‘-w`x'’ + + Warning mode; ‘x’ = s/e for suppress/treat as error. + + ‘-Wx`e'’ + + Override default wide character encoding for standard Text_IO + files. + + ‘-x’ + + Exclude source files (check object consistency only). + + ‘-xdr’ + + Use the target-independent XDR protocol for stream oriented + attributes instead of the default implementation which is based on + direct binary representations and is therefore target-and + endianness-dependent. However it does not support 128-bit integer + types and the exception ‘Ada.IO_Exceptions.Device_Error’ is raised + if any attempt is made at streaming 128-bit integer types with it. + + ‘-X`nnn'’ + + Set default exit status value, normally 0 for POSIX compliance. + + ‘-y’ + + Enable leap seconds support in ‘Ada.Calendar’ and its children. + + ‘-z’ + + No main subprogram. + + You may obtain this listing of switches by running ‘gnatbind’ with no + arguments. + + * Menu: + + * Consistency-Checking Modes:: + * Binder Error Message Control:: + * Elaboration Control:: + * Output Control:: + * Dynamic Allocation Control:: + * Binding with Non-Ada Main Programs:: + * Binding Programs with No Main Subprogram:: + +  + File: gnat_ugn.info, Node: Consistency-Checking Modes, Next: Binder Error Message Control, Up: Switches for gnatbind + + 4.5.2.1 Consistency-Checking Modes + .................................. + + As described earlier, by default ‘gnatbind’ checks that object files are + consistent with one another and are consistent with any source files it + can locate. The following switches control binder access to sources. + + ‘-s’ + + Require source files to be present. In this mode, the binder must + be able to locate all source files that are referenced, in order to + check their consistency. In normal mode, if a source file cannot + be located it is simply ignored. If you specify this switch, a + missing source file is an error. + + ‘-Wx`e'’ + + Override default wide character encoding for standard Text_IO + files. Normally the default wide character encoding method used + for standard [Wide_[Wide_]]Text_IO files is taken from the encoding + specified for the main source input (see description of switch + ‘-gnatWx’ for the compiler). The use of this switch for the binder + (which has the same set of possible arguments) overrides this + default as specified. + + ‘-x’ + + Exclude source files. In this mode, the binder only checks that + ALI files are consistent with one another. Source files are not + accessed. The binder runs faster in this mode, and there is still + a guarantee that the resulting program is self-consistent. If a + source file has been edited since it was last compiled, and you + specify this switch, the binder will not detect that the object + file is out of date with respect to the source file. Note that + this is the mode that is automatically used by ‘gnatmake’ because + in this case the checking against sources has already been + performed by ‘gnatmake’ in the course of compilation (i.e., before + binding). + +  + File: gnat_ugn.info, Node: Binder Error Message Control, Next: Elaboration Control, Prev: Consistency-Checking Modes, Up: Switches for gnatbind + + 4.5.2.2 Binder Error Message Control + .................................... + + The following switches provide control over the generation of error + messages from the binder: + + ‘-v’ + + Verbose mode. In the normal mode, brief error messages are + generated to ‘stderr’. If this switch is present, a header is + written to ‘stdout’ and any error messages are directed to + ‘stdout’. All that is written to ‘stderr’ is a brief summary + message. + + ‘-b’ + + Generate brief error messages to ‘stderr’ even if verbose mode is + specified. This is relevant only when used with the ‘-v’ switch. + + ‘-m`n'’ + + Limits the number of error messages to ‘n’, a decimal integer in + the range 1-999. The binder terminates immediately if this limit + is reached. + + ‘-M`xxx'’ + + Renames the generated main program from ‘main’ to ‘xxx’. This is + useful in the case of some cross-building environments, where the + actual main program is separate from the one generated by + ‘gnatbind’. + + ‘-ws’ + + Suppress all warning messages. + + ‘-we’ + + Treat any warning messages as fatal errors. + + ‘-t’ + + The binder performs a number of consistency checks including: + + * Check that time stamps of a given source unit are consistent + + * Check that checksums of a given source unit are consistent + + * Check that consistent versions of ‘GNAT’ were used for + compilation + + * Check consistency of configuration pragmas as required + + Normally failure of such checks, in accordance with the consistency + requirements of the Ada Reference Manual, causes error messages to + be generated which abort the binder and prevent the output of a + binder file and subsequent link to obtain an executable. + + The ‘-t’ switch converts these error messages into warnings, so + that binding and linking can continue to completion even in the + presence of such errors. The result may be a failed link (due to + missing symbols), or a non-functional executable which has + undefined semantics. + + Note: This means that ‘-t’ should be used only in unusual + situations, with extreme care. + +  + File: gnat_ugn.info, Node: Elaboration Control, Next: Output Control, Prev: Binder Error Message Control, Up: Switches for gnatbind + + 4.5.2.3 Elaboration Control + ........................... + + The following switches provide additional control over the elaboration + order. For further details see *note Elaboration Order Handling in + GNAT: f. + + ‘-f`elab-order'’ + + Force elaboration order. + + ‘elab-order’ should be the name of a “forced elaboration order + file”, that is, a text file containing library item names, one per + line. A name of the form “some.unit%s” or “some.unit (spec)” + denotes the spec of Some.Unit. A name of the form “some.unit%b” or + “some.unit (body)” denotes the body of Some.Unit. Each pair of + lines is taken to mean that there is an elaboration dependence of + the second line on the first. For example, if the file contains: + + this (spec) + this (body) + that (spec) + that (body) + + then the spec of This will be elaborated before the body of This, + and the body of This will be elaborated before the spec of That, + and the spec of That will be elaborated before the body of That. + The first and last of these three dependences are already required + by Ada rules, so this file is really just forcing the body of This + to be elaborated before the spec of That. + + The given order must be consistent with Ada rules, or else + ‘gnatbind’ will give elaboration cycle errors. For example, if you + say x (body) should be elaborated before x (spec), there will be a + cycle, because Ada rules require x (spec) to be elaborated before x + (body); you can’t have the spec and body both elaborated before + each other. + + If you later add “with That;” to the body of This, there will be a + cycle, in which case you should erase either “this (body)” or “that + (spec)” from the above forced elaboration order file. + + Blank lines and Ada-style comments are ignored. Unit names that do + not exist in the program are ignored. Units in the GNAT predefined + library are also ignored. + + ‘-p’ + + Pessimistic elaboration order + + This switch is only applicable to the pre-20.x legacy elaboration + models. The post-20.x elaboration model uses a more informed + approach of ordering the units. + + Normally the binder attempts to choose an elaboration order that is + likely to minimize the likelihood of an elaboration order error + resulting in raising a ‘Program_Error’ exception. This switch + reverses the action of the binder, and requests that it + deliberately choose an order that is likely to maximize the + likelihood of an elaboration error. This is useful in ensuring + portability and avoiding dependence on accidental fortuitous + elaboration ordering. + + Normally it only makes sense to use the ‘-p’ switch if dynamic + elaboration checking is used (‘-gnatE’ switch used for + compilation). This is because in the default static elaboration + mode, all necessary ‘Elaborate’ and ‘Elaborate_All’ pragmas are + implicitly inserted. These implicit pragmas are still respected by + the binder in ‘-p’ mode, so a safe elaboration order is assured. + + Note that ‘-p’ is not intended for production use; it is more for + debugging/experimental use. + +  + File: gnat_ugn.info, Node: Output Control, Next: Dynamic Allocation Control, Prev: Elaboration Control, Up: Switches for gnatbind + + 4.5.2.4 Output Control + ...................... + + The following switches allow additional control over the output + generated by the binder. + + ‘-c’ + + Check only. Do not generate the binder output file. In this mode + the binder performs all error checks but does not generate an + output file. + + ‘-e’ + + Output complete list of elaboration-order dependencies, showing the + reason for each dependency. This output can be rather extensive + but may be useful in diagnosing problems with elaboration order. + The output is written to ‘stdout’. + + ‘-h’ + + Output usage information. The output is written to ‘stdout’. + + ‘-K’ + + Output linker options to ‘stdout’. Includes library search paths, + contents of pragmas Ident and Linker_Options, and libraries added + by ‘gnatbind’. + + ‘-l’ + + Output chosen elaboration order. The output is written to + ‘stdout’. + + ‘-O’ + + Output full names of all the object files that must be linked to + provide the Ada component of the program. The output is written to + ‘stdout’. This list includes the files explicitly supplied and + referenced by the user as well as implicitly referenced run-time + unit files. The latter are omitted if the corresponding units + reside in shared libraries. The directory names for the run-time + units depend on the system configuration. + + ‘-o `file'’ + + Set name of output file to ‘file’ instead of the normal + ‘b~`mainprog’.adb‘ default. Note that ‘file’ denote the Ada binder + generated body filename. Note that if this option is used, then + linking must be done manually. It is not possible to use gnatlink + in this case, since it cannot locate the binder file. + + ‘-r’ + + Generate list of ‘pragma Restrictions’ that could be applied to the + current unit. This is useful for code audit purposes, and also may + be used to improve code generation in some cases. + +  + File: gnat_ugn.info, Node: Dynamic Allocation Control, Next: Binding with Non-Ada Main Programs, Prev: Output Control, Up: Switches for gnatbind + + 4.5.2.5 Dynamic Allocation Control + .................................. + + The heap control switches – ‘-H32’ and ‘-H64’ – determine whether + dynamic allocation uses 32-bit or 64-bit memory. They only affect + compiler-generated allocations via ‘__gnat_malloc’; explicit calls to + ‘malloc’ and related functions from the C run-time library are + unaffected. + + ‘-H32’ + + Allocate memory on 32-bit heap + + ‘-H64’ + + Allocate memory on 64-bit heap. This is the default unless + explicitly overridden by a ‘'Size’ clause on the access type. + + These switches are only effective on VMS platforms. + +  + File: gnat_ugn.info, Node: Binding with Non-Ada Main Programs, Next: Binding Programs with No Main Subprogram, Prev: Dynamic Allocation Control, Up: Switches for gnatbind + + 4.5.2.6 Binding with Non-Ada Main Programs + .......................................... + + The description so far has assumed that the main program is in Ada, and + that the task of the binder is to generate a corresponding function + ‘main’ that invokes this Ada main program. GNAT also supports the + building of executable programs where the main program is not in Ada, + but some of the called routines are written in Ada and compiled using + GNAT (*note Mixed Language Programming: 2c.). The following switch is + used in this situation: + + ‘-n’ + + No main program. The main program is not in Ada. + + In this case, most of the functions of the binder are still required, + but instead of generating a main program, the binder generates a file + containing the following callable routines: + + ‘adainit’ + + You must call this routine to initialize the Ada part of the + program by calling the necessary elaboration routines. A call + to ‘adainit’ is required before the first call to an Ada + subprogram. + + Note that it is assumed that the basic execution environment + must be setup to be appropriate for Ada execution at the point + where the first Ada subprogram is called. In particular, if + the Ada code will do any floating-point operations, then the + FPU must be setup in an appropriate manner. For the case of + the x86, for example, full precision mode is required. The + procedure GNAT.Float_Control.Reset may be used to ensure that + the FPU is in the right state. + + ‘adafinal’ + + You must call this routine to perform any library-level + finalization required by the Ada subprograms. A call to + ‘adafinal’ is required after the last call to an Ada + subprogram, and before the program terminates. + + If the ‘-n’ switch is given, more than one ALI file may appear on the + command line for ‘gnatbind’. The normal ‘closure’ calculation is + performed for each of the specified units. Calculating the closure + means finding out the set of units involved by tracing `with' + references. The reason it is necessary to be able to specify more than + one ALI file is that a given program may invoke two or more quite + separate groups of Ada units. + + The binder takes the name of its output file from the last specified ALI + file, unless overridden by the use of the ‘-o file’. + + The output is an Ada unit in source form that can be compiled with GNAT. + This compilation occurs automatically as part of the ‘gnatlink’ + processing. + + Currently the GNAT run-time requires a FPU using 80 bits mode precision. + Under targets where this is not the default it is required to call + GNAT.Float_Control.Reset before using floating point numbers (this + include float computation, float input and output) in the Ada code. A + side effect is that this could be the wrong mode for the foreign code + where floating point computation could be broken after this call. + +  + File: gnat_ugn.info, Node: Binding Programs with No Main Subprogram, Prev: Binding with Non-Ada Main Programs, Up: Switches for gnatbind + + 4.5.2.7 Binding Programs with No Main Subprogram + ................................................ + + It is possible to have an Ada program which does not have a main + subprogram. This program will call the elaboration routines of all the + packages, then the finalization routines. + + The following switch is used to bind programs organized in this manner: + + ‘-z’ + + Normally the binder checks that the unit name given on the command + line corresponds to a suitable main subprogram. When this switch + is used, a list of ALI files can be given, and the execution of the + program consists of elaboration of these units in an appropriate + order. Note that the default wide character encoding method for + standard Text_IO files is always set to Brackets if this switch is + set (you can use the binder switch ‘-Wx’ to override this default). + +  + File: gnat_ugn.info, Node: Command-Line Access, Next: Search Paths for gnatbind, Prev: Switches for gnatbind, Up: Binding with gnatbind + + 4.5.3 Command-Line Access + ------------------------- + + The package ‘Ada.Command_Line’ provides access to the command-line + arguments and program name. In order for this interface to operate + correctly, the two variables + + int gnat_argc; + char **gnat_argv; + + are declared in one of the GNAT library routines. These variables must + be set from the actual ‘argc’ and ‘argv’ values passed to the main + program. With no `n' present, ‘gnatbind’ generates the C main program + to automatically set these variables. If the `n' switch is used, there + is no automatic way to set these variables. If they are not set, the + procedures in ‘Ada.Command_Line’ will not be available, and any attempt + to use them will raise ‘Constraint_Error’. If command line access is + required, your main program must set ‘gnat_argc’ and ‘gnat_argv’ from + the ‘argc’ and ‘argv’ values passed to it. + +  + File: gnat_ugn.info, Node: Search Paths for gnatbind, Next: Examples of gnatbind Usage, Prev: Command-Line Access, Up: Binding with gnatbind + + 4.5.4 Search Paths for ‘gnatbind’ + --------------------------------- + + The binder takes the name of an ALI file as its argument and needs to + locate source files as well as other ALI files to verify object + consistency. + + For source files, it follows exactly the same search rules as ‘gcc’ (see + *note Search Paths and the Run-Time Library (RTL): 73.). For ALI files + the directories searched are: + + * The directory containing the ALI file named in the command line, + unless the switch ‘-I-’ is specified. + + * All directories specified by ‘-I’ switches on the ‘gnatbind’ + command line, in the order given. + + * Each of the directories listed in the text file whose name is given + by the ‘ADA_PRJ_OBJECTS_FILE’ environment variable. + + ‘ADA_PRJ_OBJECTS_FILE’ is normally set by gnatmake or by the gnat + driver when project files are used. It should not normally be set + by other means. + + * Each of the directories listed in the value of the + ‘ADA_OBJECTS_PATH’ environment variable. Construct this value + exactly as the ‘PATH’ environment variable: a list of directory + names separated by colons (semicolons when working with the NT + version of GNAT). + + * The content of the ‘ada_object_path’ file which is part of the GNAT + installation tree and is used to store standard libraries such as + the GNAT Run-Time Library (RTL) unless the switch ‘-nostdlib’ is + specified. See *note Installing a library: 72. + + In the binder the switch ‘-I’ is used to specify both source and library + file paths. Use ‘-aI’ instead if you want to specify source paths only, + and ‘-aO’ if you want to specify library paths only. This means that + for the binder ‘-I`dir'’ is equivalent to ‘-aI`dir'’ ‘-aO``dir'’. The + binder generates the bind file (a C language source file) in the current + working directory. + + The packages ‘Ada’, ‘System’, and ‘Interfaces’ and their children make + up the GNAT Run-Time Library, together with the package GNAT and its + children, which contain a set of useful additional library functions + provided by GNAT. The sources for these units are needed by the compiler + and are kept together in one directory. The ALI files and object files + generated by compiling the RTL are needed by the binder and the linker + and are kept together in one directory, typically different from the + directory containing the sources. In a normal installation, you need + not specify these directory names when compiling or binding. Either the + environment variables or the built-in defaults cause these files to be + found. + + Besides simplifying access to the RTL, a major use of search paths is in + compiling sources from multiple directories. This can make development + environments much more flexible. + +  + File: gnat_ugn.info, Node: Examples of gnatbind Usage, Prev: Search Paths for gnatbind, Up: Binding with gnatbind + + 4.5.5 Examples of ‘gnatbind’ Usage + ---------------------------------- + + Here are some examples of ‘gnatbind’ invovations: + + gnatbind hello + + The main program ‘Hello’ (source program in ‘hello.adb’) is bound + using the standard switch settings. The generated main program is + ‘b~hello.adb’. This is the normal, default use of the binder. + + gnatbind hello -o mainprog.adb + + The main program ‘Hello’ (source program in ‘hello.adb’) is bound + using the standard switch settings. The generated main program is + ‘mainprog.adb’ with the associated spec in ‘mainprog.ads’. Note + that you must specify the body here not the spec. Note that if + this option is used, then linking must be done manually, since + gnatlink will not be able to find the generated file. + +  + File: gnat_ugn.info, Node: Linking with gnatlink, Next: Using the GNU make Utility, Prev: Binding with gnatbind, Up: Building Executable Programs with GNAT + + 4.6 Linking with ‘gnatlink’ + =========================== + + This chapter discusses ‘gnatlink’, a tool that links an Ada program and + builds an executable file. This utility invokes the system linker (via + the ‘gcc’ command) with a correct list of object files and library + references. ‘gnatlink’ automatically determines the list of files and + references for the Ada part of a program. It uses the binder file + generated by the ‘gnatbind’ to determine this list. + + * Menu: + + * Running gnatlink:: + * Switches for gnatlink:: + +  + File: gnat_ugn.info, Node: Running gnatlink, Next: Switches for gnatlink, Up: Linking with gnatlink + + 4.6.1 Running ‘gnatlink’ + ------------------------ + + The form of the ‘gnatlink’ command is + + $ gnatlink [ switches ] mainprog [.ali] + [ non-Ada objects ] [ linker options ] + + The arguments of ‘gnatlink’ (switches, main ‘ALI’ file, non-Ada objects + or linker options) may be in any order, provided that no non-Ada object + may be mistaken for a main ‘ALI’ file. Any file name ‘F’ without the + ‘.ali’ extension will be taken as the main ‘ALI’ file if a file exists + whose name is the concatenation of ‘F’ and ‘.ali’. + + ‘mainprog.ali’ references the ALI file of the main program. The ‘.ali’ + extension of this file can be omitted. From this reference, ‘gnatlink’ + locates the corresponding binder file ‘b~mainprog.adb’ and, using the + information in this file along with the list of non-Ada objects and + linker options, constructs a linker command file to create the + executable. + + The arguments other than the ‘gnatlink’ switches and the main ‘ALI’ file + are passed to the linker uninterpreted. They typically include the + names of object files for units written in other languages than Ada and + any library references required to resolve references in any of these + foreign language units, or in ‘Import’ pragmas in any Ada units. + + ‘linker options’ is an optional list of linker specific switches. The + default linker called by gnatlink is ‘gcc’ which in turn calls the + appropriate system linker. + + One useful option for the linker is ‘-s’: it reduces the size of the + executable by removing all symbol table and relocation information from + the executable. + + Standard options for the linker such as ‘-lmy_lib’ or ‘-Ldir’ can be + added as is. For options that are not recognized by ‘gcc’ as linker + options, use the ‘gcc’ switches ‘-Xlinker’ or ‘-Wl,’. + + Refer to the GCC documentation for details. + + Here is an example showing how to generate a linker map: + + $ gnatlink my_prog -Wl,-Map,MAPFILE + + Using ‘linker options’ it is possible to set the program stack and heap + size. See *note Setting Stack Size from gnatlink: 127. and *note + Setting Heap Size from gnatlink: 128. + + ‘gnatlink’ determines the list of objects required by the Ada program + and prepends them to the list of objects passed to the linker. + ‘gnatlink’ also gathers any arguments set by the use of ‘pragma + Linker_Options’ and adds them to the list of arguments presented to the + linker. + +  + File: gnat_ugn.info, Node: Switches for gnatlink, Prev: Running gnatlink, Up: Linking with gnatlink + + 4.6.2 Switches for ‘gnatlink’ + ----------------------------- + + The following switches are available with the ‘gnatlink’ utility: + + ‘--version’ + + Display Copyright and version, then exit disregarding all other + options. + + ‘--help’ + + If ‘--version’ was not used, display usage, then exit disregarding + all other options. + + ‘-f’ + + On some targets, the command line length is limited, and ‘gnatlink’ + will generate a separate file for the linker if the list of object + files is too long. The ‘-f’ switch forces this file to be + generated even if the limit is not exceeded. This is useful in + some cases to deal with special situations where the command line + length is exceeded. + + ‘-g’ + + The option to include debugging information causes the Ada bind + file (in other words, ‘b~mainprog.adb’) to be compiled with ‘-g’. + In addition, the binder does not delete the ‘b~mainprog.adb’, + ‘b~mainprog.o’ and ‘b~mainprog.ali’ files. Without ‘-g’, the + binder removes these files by default. + + ‘-n’ + + Do not compile the file generated by the binder. This may be used + when a link is rerun with different options, but there is no need + to recompile the binder file. + + ‘-v’ + + Verbose mode. Causes additional information to be output, + including a full list of the included object files. This switch + option is most useful when you want to see what set of object files + are being used in the link step. + + ‘-v -v’ + + Very verbose mode. Requests that the compiler operate in verbose + mode when it compiles the binder file, and that the system linker + run in verbose mode. + + ‘-o `exec-name'’ + + ‘exec-name’ specifies an alternate name for the generated + executable program. If this switch is omitted, the executable has + the same name as the main unit. For example, ‘gnatlink try.ali’ + creates an executable called ‘try’. + + ‘-B`dir'’ + + Load compiler executables (for example, ‘gnat1’, the Ada compiler) + from ‘dir’ instead of the default location. Only use this switch + when multiple versions of the GNAT compiler are available. See the + ‘Directory Options’ section in ‘The_GNU_Compiler_Collection’ for + further details. You would normally use the ‘-b’ or ‘-V’ switch + instead. + + ‘-M’ + + When linking an executable, create a map file. The name of the map + file has the same name as the executable with extension “.map”. + + ‘-M=`mapfile'’ + + When linking an executable, create a map file. The name of the map + file is ‘mapfile’. + + ‘--GCC=`compiler_name'’ + + Program used for compiling the binder file. The default is ‘gcc’. + You need to use quotes around ‘compiler_name’ if ‘compiler_name’ + contains spaces or other separator characters. As an example + ‘--GCC="foo -x -y"’ will instruct ‘gnatlink’ to use ‘foo -x -y’ as + your compiler. Note that switch ‘-c’ is always inserted after your + command name. Thus in the above example the compiler command that + will be used by ‘gnatlink’ will be ‘foo -c -x -y’. A limitation of + this syntax is that the name and path name of the executable itself + must not include any embedded spaces. If the compiler executable + is different from the default one (gcc or -gcc), then the + back-end switches in the ALI file are not used to compile the + binder generated source. For example, this is the case with + ‘--GCC="foo -x -y"’. But the back end switches will be used for + ‘--GCC="gcc -gnatv"’. If several ‘--GCC=compiler_name’ are used, + only the last ‘compiler_name’ is taken into account. However, all + the additional switches are also taken into account. Thus, + ‘--GCC="foo -x -y" --GCC="bar -z -t"’ is equivalent to ‘--GCC="bar + -x -y -z -t"’. + + ‘--LINK=`name'’ + + ‘name’ is the name of the linker to be invoked. This is especially + useful in mixed language programs since languages such as C++ + require their own linker to be used. When this switch is omitted, + the default name for the linker is ‘gcc’. When this switch is + used, the specified linker is called instead of ‘gcc’ with exactly + the same parameters that would have been passed to ‘gcc’ so if the + desired linker requires different parameters it is necessary to use + a wrapper script that massages the parameters before invoking the + real linker. It may be useful to control the exact invocation by + using the verbose switch. + +  + File: gnat_ugn.info, Node: Using the GNU make Utility, Prev: Linking with gnatlink, Up: Building Executable Programs with GNAT + + 4.7 Using the GNU ‘make’ Utility + ================================ + + This chapter offers some examples of makefiles that solve specific + problems. It does not explain how to write a makefile, nor does it try + to replace the ‘gnatmake’ utility (*note Building with gnatmake: c6.). + + All the examples in this section are specific to the GNU version of + make. Although ‘make’ is a standard utility, and the basic language is + the same, these examples use some advanced features found only in ‘GNU + make’. + + * Menu: + + * Using gnatmake in a Makefile:: + * Automatically Creating a List of Directories:: + * Generating the Command Line Switches:: + * Overcoming Command Line Length Limits:: + +  + File: gnat_ugn.info, Node: Using gnatmake in a Makefile, Next: Automatically Creating a List of Directories, Up: Using the GNU make Utility + + 4.7.1 Using gnatmake in a Makefile + ---------------------------------- + + Complex project organizations can be handled in a very powerful way by + using GNU make combined with gnatmake. For instance, here is a Makefile + which allows you to build each subsystem of a big project into a + separate shared library. Such a makefile allows you to significantly + reduce the link time of very big applications while maintaining full + coherence at each step of the build process. + + The list of dependencies are handled automatically by ‘gnatmake’. The + Makefile is simply used to call gnatmake in each of the appropriate + directories. + + Note that you should also read the example on how to automatically + create the list of directories (*note Automatically Creating a List of + Directories: 12e.) which might help you in case your project has a lot + of subdirectories. + + ## This Makefile is intended to be used with the following directory + ## configuration: + ## - The sources are split into a series of csc (computer software components) + ## Each of these csc is put in its own directory. + ## Their name are referenced by the directory names. + ## They will be compiled into shared library (although this would also work + ## with static libraries + ## - The main program (and possibly other packages that do not belong to any + ## csc is put in the top level directory (where the Makefile is). + ## toplevel_dir __ first_csc (sources) __ lib (will contain the library) + ## \\_ second_csc (sources) __ lib (will contain the library) + ## \\_ ... + ## Although this Makefile is build for shared library, it is easy to modify + ## to build partial link objects instead (modify the lines with -shared and + ## gnatlink below) + ## + ## With this makefile, you can change any file in the system or add any new + ## file, and everything will be recompiled correctly (only the relevant shared + ## objects will be recompiled, and the main program will be re-linked). + + # The list of computer software component for your project. This might be + # generated automatically. + CSC_LIST=aa bb cc + + # Name of the main program (no extension) + MAIN=main + + # If we need to build objects with -fPIC, uncomment the following line + #NEED_FPIC=-fPIC + + # The following variable should give the directory containing libgnat.so + # You can get this directory through 'gnatls -v'. This is usually the last + # directory in the Object_Path. + GLIB=... + + # The directories for the libraries + # (This macro expands the list of CSC to the list of shared libraries, you + # could simply use the expanded form: + # LIB_DIR=aa/lib/libaa.so bb/lib/libbb.so cc/lib/libcc.so + LIB_DIR=${foreach dir,${CSC_LIST},${dir}/lib/lib${dir}.so} + + ${MAIN}: objects ${LIB_DIR} + gnatbind ${MAIN} ${CSC_LIST:%=-aO%/lib} -shared + gnatlink ${MAIN} ${CSC_LIST:%=-l%} + + objects:: + # recompile the sources + gnatmake -c -i ${MAIN}.adb ${NEED_FPIC} ${CSC_LIST:%=-I%} + + # Note: In a future version of GNAT, the following commands will be simplified + # by a new tool, gnatmlib + ${LIB_DIR}: + mkdir -p ${dir $@ } + cd ${dir $@ } && gcc -shared -o ${notdir $@ } ../*.o -L${GLIB} -lgnat + cd ${dir $@ } && cp -f ../*.ali . + + # The dependencies for the modules + # Note that we have to force the expansion of *.o, since in some cases + # make won't be able to do it itself. + aa/lib/libaa.so: ${wildcard aa/*.o} + bb/lib/libbb.so: ${wildcard bb/*.o} + cc/lib/libcc.so: ${wildcard cc/*.o} + + # Make sure all of the shared libraries are in the path before starting the + # program + run:: + LD_LIBRARY_PATH=`pwd`/aa/lib:`pwd`/bb/lib:`pwd`/cc/lib ./${MAIN} + + clean:: + ${RM} -rf ${CSC_LIST:%=%/lib} + ${RM} ${CSC_LIST:%=%/*.ali} + ${RM} ${CSC_LIST:%=%/*.o} + ${RM} *.o *.ali ${MAIN} + +  + File: gnat_ugn.info, Node: Automatically Creating a List of Directories, Next: Generating the Command Line Switches, Prev: Using gnatmake in a Makefile, Up: Using the GNU make Utility + + 4.7.2 Automatically Creating a List of Directories + -------------------------------------------------- + + In most makefiles, you will have to specify a list of directories, and + store it in a variable. For small projects, it is often easier to + specify each of them by hand, since you then have full control over what + is the proper order for these directories, which ones should be + included. + + However, in larger projects, which might involve hundreds of + subdirectories, it might be more convenient to generate this list + automatically. + + The example below presents two methods. The first one, although less + general, gives you more control over the list. It involves wildcard + characters, that are automatically expanded by ‘make’. Its shortcoming + is that you need to explicitly specify some of the organization of your + project, such as for instance the directory tree depth, whether some + directories are found in a separate tree, etc. + + The second method is the most general one. It requires an external + program, called ‘find’, which is standard on all Unix systems. All the + directories found under a given root directory will be added to the + list. + + # The examples below are based on the following directory hierarchy: + # All the directories can contain any number of files + # ROOT_DIRECTORY -> a -> aa -> aaa + # -> ab + # -> ac + # -> b -> ba -> baa + # -> bb + # -> bc + # This Makefile creates a variable called DIRS, that can be reused any time + # you need this list (see the other examples in this section) + + # The root of your project's directory hierarchy + ROOT_DIRECTORY=. + + #### + # First method: specify explicitly the list of directories + # This allows you to specify any subset of all the directories you need. + #### + + DIRS := a/aa/ a/ab/ b/ba/ + + #### + # Second method: use wildcards + # Note that the argument(s) to wildcard below should end with a '/'. + # Since wildcards also return file names, we have to filter them out + # to avoid duplicate directory names. + # We thus use make's ``dir`` and ``sort`` functions. + # It sets DIRs to the following value (note that the directories aaa and baa + # are not given, unless you change the arguments to wildcard). + # DIRS= ./a/a/ ./b/ ./a/aa/ ./a/ab/ ./a/ac/ ./b/ba/ ./b/bb/ ./b/bc/ + #### + + DIRS := ${sort ${dir ${wildcard ${ROOT_DIRECTORY}/*/ + ${ROOT_DIRECTORY}/*/*/}}} + + #### + # Third method: use an external program + # This command is much faster if run on local disks, avoiding NFS slowdowns. + # This is the most complete command: it sets DIRs to the following value: + # DIRS= ./a ./a/aa ./a/aa/aaa ./a/ab ./a/ac ./b ./b/ba ./b/ba/baa ./b/bb ./b/bc + #### + + DIRS := ${shell find ${ROOT_DIRECTORY} -type d -print} + +  + File: gnat_ugn.info, Node: Generating the Command Line Switches, Next: Overcoming Command Line Length Limits, Prev: Automatically Creating a List of Directories, Up: Using the GNU make Utility + + 4.7.3 Generating the Command Line Switches + ------------------------------------------ + + Once you have created the list of directories as explained in the + previous section (*note Automatically Creating a List of Directories: + 12e.), you can easily generate the command line arguments to pass to + gnatmake. + + For the sake of completeness, this example assumes that the source path + is not the same as the object path, and that you have two separate lists + of directories. + + # see "Automatically creating a list of directories" to create + # these variables + SOURCE_DIRS= + OBJECT_DIRS= + + GNATMAKE_SWITCHES := ${patsubst %,-aI%,${SOURCE_DIRS}} + GNATMAKE_SWITCHES += ${patsubst %,-aO%,${OBJECT_DIRS}} + + all: + gnatmake ${GNATMAKE_SWITCHES} main_unit + +  + File: gnat_ugn.info, Node: Overcoming Command Line Length Limits, Prev: Generating the Command Line Switches, Up: Using the GNU make Utility + + 4.7.4 Overcoming Command Line Length Limits + ------------------------------------------- + + One problem that might be encountered on big projects is that many + operating systems limit the length of the command line. It is thus hard + to give gnatmake the list of source and object directories. + + This example shows how you can set up environment variables, which will + make ‘gnatmake’ behave exactly as if the directories had been specified + on the command line, but have a much higher length limit (or even none + on most systems). + + It assumes that you have created a list of directories in your Makefile, + using one of the methods presented in *note Automatically Creating a + List of Directories: 12e. For the sake of completeness, we assume that + the object path (where the ALI files are found) is different from the + sources patch. + + Note a small trick in the Makefile below: for efficiency reasons, we + create two temporary variables (SOURCE_LIST and OBJECT_LIST), that are + expanded immediately by ‘make’. This way we overcome the standard make + behavior which is to expand the variables only when they are actually + used. + + On Windows, if you are using the standard Windows command shell, you + must replace colons with semicolons in the assignments to these + variables. + + # In this example, we create both ADA_INCLUDE_PATH and ADA_OBJECTS_PATH. + # This is the same thing as putting the -I arguments on the command line. + # (the equivalent of using -aI on the command line would be to define + # only ADA_INCLUDE_PATH, the equivalent of -aO is ADA_OBJECTS_PATH). + # You can of course have different values for these variables. + # + # Note also that we need to keep the previous values of these variables, since + # they might have been set before running 'make' to specify where the GNAT + # library is installed. + + # see "Automatically creating a list of directories" to create these + # variables + SOURCE_DIRS= + OBJECT_DIRS= + + empty:= + space:=${empty} ${empty} + SOURCE_LIST := ${subst ${space},:,${SOURCE_DIRS}} + OBJECT_LIST := ${subst ${space},:,${OBJECT_DIRS}} + ADA_INCLUDE_PATH += ${SOURCE_LIST} + ADA_OBJECTS_PATH += ${OBJECT_LIST} + export ADA_INCLUDE_PATH + export ADA_OBJECTS_PATH + + all: + gnatmake main_unit + +  + File: gnat_ugn.info, Node: GNAT Utility Programs, Next: GNAT and Program Execution, Prev: Building Executable Programs with GNAT, Up: Top + + 5 GNAT Utility Programs + *********************** + + This chapter describes a number of utility programs: + + * *note The File Cleanup Utility gnatclean: 136. + + * *note The GNAT Library Browser gnatls: 137. + + Other GNAT utilities are described elsewhere in this manual: + + * *note Handling Arbitrary File Naming Conventions with gnatname: 42. + + * *note File Name Krunching with gnatkr: 4c. + + * *note Renaming Files with gnatchop: 1d. + + * *note Preprocessing with gnatprep: 8f. + + * Menu: + + * The File Cleanup Utility gnatclean:: + * The GNAT Library Browser gnatls:: + +  + File: gnat_ugn.info, Node: The File Cleanup Utility gnatclean, Next: The GNAT Library Browser gnatls, Up: GNAT Utility Programs + + 5.1 The File Cleanup Utility ‘gnatclean’ + ======================================== + + ‘gnatclean’ is a tool that allows the deletion of files produced by the + compiler, binder and linker, including ALI files, object files, tree + files, expanded source files, library files, interface copy source + files, binder generated files and executable files. + + * Menu: + + * Running gnatclean:: + * Switches for gnatclean:: + +  + File: gnat_ugn.info, Node: Running gnatclean, Next: Switches for gnatclean, Up: The File Cleanup Utility gnatclean + + 5.1.1 Running ‘gnatclean’ + ------------------------- + + The ‘gnatclean’ command has the form: + + $ gnatclean switches names + + where ‘names’ is a list of source file names. Suffixes ‘.ads’ and ‘adb’ + may be omitted. If a project file is specified using switch ‘-P’, then + ‘names’ may be completely omitted. + + In normal mode, ‘gnatclean’ delete the files produced by the compiler + and, if switch ‘-c’ is not specified, by the binder and the linker. In + informative-only mode, specified by switch ‘-n’, the list of files that + would have been deleted in normal mode is listed, but no file is + actually deleted. + +  + File: gnat_ugn.info, Node: Switches for gnatclean, Prev: Running gnatclean, Up: The File Cleanup Utility gnatclean + + 5.1.2 Switches for ‘gnatclean’ + ------------------------------ + + ‘gnatclean’ recognizes the following switches: + + ‘--version’ + + Display copyright and version, then exit disregarding all other + options. + + ‘--help’ + + If ‘--version’ was not used, display usage, then exit disregarding + all other options. + + ‘--subdirs=`subdir'’ + + Actual object directory of each project file is the subdirectory + subdir of the object directory specified or defaulted in the + project file. + + ‘--unchecked-shared-lib-imports’ + + By default, shared library projects are not allowed to import + static library projects. When this switch is used on the command + line, this restriction is relaxed. + + ‘-c’ + + Only attempt to delete the files produced by the compiler, not + those produced by the binder or the linker. The files that are not + to be deleted are library files, interface copy files, binder + generated files and executable files. + + ‘-D `dir'’ + + Indicate that ALI and object files should normally be found in + directory ‘dir’. + + ‘-F’ + + When using project files, if some errors or warnings are detected + during parsing and verbose mode is not in effect (no use of switch + -v), then error lines start with the full path name of the project + file, rather than its simple file name. + + ‘-h’ + + Output a message explaining the usage of ‘gnatclean’. + + ‘-n’ + + Informative-only mode. Do not delete any files. Output the list + of the files that would have been deleted if this switch was not + specified. + + ‘-P`project'’ + + Use project file ‘project’. Only one such switch can be used. + When cleaning a project file, the files produced by the compilation + of the immediate sources or inherited sources of the project files + are to be deleted. This is not depending on the presence or not of + executable names on the command line. + + ‘-q’ + + Quiet output. If there are no errors, do not output anything, + except in verbose mode (switch -v) or in informative-only mode + (switch -n). + + ‘-r’ + + When a project file is specified (using switch -P), clean all + imported and extended project files, recursively. If this switch + is not specified, only the files related to the main project file + are to be deleted. This switch has no effect if no project file is + specified. + + ‘-v’ + + Verbose mode. + + ‘-vP`x'’ + + Indicates the verbosity of the parsing of GNAT project files. + *note Switches Related to Project Files: cf. + + ‘-X`name'=`value'’ + + Indicates that external variable ‘name’ has the value ‘value’. The + Project Manager will use this value for occurrences of + ‘external(name)’ when parsing the project file. See *note Switches + Related to Project Files: cf. + + ‘-aO`dir'’ + + When searching for ALI and object files, look in directory ‘dir’. + + ‘-I`dir'’ + + Equivalent to ‘-aO`dir'’. + + ‘-I-’ + + Do not look for ALI or object files in the directory where + ‘gnatclean’ was invoked. + +  + File: gnat_ugn.info, Node: The GNAT Library Browser gnatls, Prev: The File Cleanup Utility gnatclean, Up: GNAT Utility Programs + + 5.2 The GNAT Library Browser ‘gnatls’ + ===================================== + + ‘gnatls’ is a tool that outputs information about compiled units. It + gives the relationship between objects, unit names and source files. It + can also be used to check the source dependencies of a unit as well as + various characteristics. + + * Menu: + + * Running gnatls:: + * Switches for gnatls:: + * Example of gnatls Usage:: + +  + File: gnat_ugn.info, Node: Running gnatls, Next: Switches for gnatls, Up: The GNAT Library Browser gnatls + + 5.2.1 Running ‘gnatls’ + ---------------------- + + The ‘gnatls’ command has the form + + $ gnatls switches object_or_ali_file + + The main argument is the list of object or ‘ali’ files (see *note The + Ada Library Information Files: 28.) for which information is requested. + + In normal mode, without additional option, ‘gnatls’ produces a + four-column listing. Each line represents information for a specific + object. The first column gives the full path of the object, the second + column gives the name of the principal unit in this object, the third + column gives the status of the source and the fourth column gives the + full path of the source representing this unit. Here is a simple + example of use: + + $ gnatls *.o + ./demo1.o demo1 DIF demo1.adb + ./demo2.o demo2 OK demo2.adb + ./hello.o h1 OK hello.adb + ./instr-child.o instr.child MOK instr-child.adb + ./instr.o instr OK instr.adb + ./tef.o tef DIF tef.adb + ./text_io_example.o text_io_example OK text_io_example.adb + ./tgef.o tgef DIF tgef.adb + + The first line can be interpreted as follows: the main unit which is + contained in object file ‘demo1.o’ is demo1, whose main source is in + ‘demo1.adb’. Furthermore, the version of the source used for the + compilation of demo1 has been modified (DIF). Each source file has a + status qualifier which can be: + + `OK (unchanged)' + + The version of the source file used for the compilation of the + specified unit corresponds exactly to the actual source file. + + `MOK (slightly modified)' + + The version of the source file used for the compilation of the + specified unit differs from the actual source file but not enough + to require recompilation. If you use gnatmake with the option ‘-m’ + (minimal recompilation), a file marked MOK will not be recompiled. + + `DIF (modified)' + + No version of the source found on the path corresponds to the + source used to build this object. + + `??? (file not found)' + + No source file was found for this unit. + + `HID (hidden, unchanged version not first on PATH)' + + The version of the source that corresponds exactly to the source + used for compilation has been found on the path but it is hidden by + another version of the same source that has been modified. + +  + File: gnat_ugn.info, Node: Switches for gnatls, Next: Example of gnatls Usage, Prev: Running gnatls, Up: The GNAT Library Browser gnatls + + 5.2.2 Switches for ‘gnatls’ + --------------------------- + + ‘gnatls’ recognizes the following switches: + + ‘--version’ + + Display copyright and version, then exit disregarding all other + options. + + ‘--help’ + + If ‘--version’ was not used, display usage, then exit disregarding + all other options. + + ‘-a’ + + Consider all units, including those of the predefined Ada library. + Especially useful with ‘-d’. + + ‘-d’ + + List sources from which specified units depend on. + + ‘-h’ + + Output the list of options. + + ‘-o’ + + Only output information about object files. + + ‘-s’ + + Only output information about source files. + + ‘-u’ + + Only output information about compilation units. + + ‘-files=`file'’ + + Take as arguments the files listed in text file ‘file’. Text file + ‘file’ may contain empty lines that are ignored. Each nonempty + line should contain the name of an existing file. Several such + switches may be specified simultaneously. + + ‘-aO`dir'’, ‘-aI`dir'’, ‘-I`dir'’, ‘-I-’, ‘-nostdinc’ + + Source path manipulation. Same meaning as the equivalent + ‘gnatmake’ flags (*note Switches for gnatmake: ce.). + + ‘-aP`dir'’ + + Add ‘dir’ at the beginning of the project search dir. + + ‘--RTS=`rts-path'’ + + Specifies the default location of the runtime library. Same + meaning as the equivalent ‘gnatmake’ flag (*note Switches for + gnatmake: ce.). + + ‘-v’ + + Verbose mode. Output the complete source, object and project + paths. Do not use the default column layout but instead use long + format giving as much as information possible on each requested + units, including special characteristics such as: + + * `Preelaborable': The unit is preelaborable in the Ada sense. + + * `No_Elab_Code': No elaboration code has been produced by the + compiler for this unit. + + * `Pure': The unit is pure in the Ada sense. + + * `Elaborate_Body': The unit contains a pragma Elaborate_Body. + + * `Remote_Types': The unit contains a pragma Remote_Types. + + * `Shared_Passive': The unit contains a pragma Shared_Passive. + + * `Predefined': This unit is part of the predefined environment + and cannot be modified by the user. + + * `Remote_Call_Interface': The unit contains a pragma + Remote_Call_Interface. + +  + File: gnat_ugn.info, Node: Example of gnatls Usage, Prev: Switches for gnatls, Up: The GNAT Library Browser gnatls + + 5.2.3 Example of ‘gnatls’ Usage + ------------------------------- + + Example of using the verbose switch. Note how the source and object + paths are affected by the -I switch. + + $ gnatls -v -I.. demo1.o + + GNATLS 5.03w (20041123-34) + Copyright 1997-2004 Free Software Foundation, Inc. + + Source Search Path: + + ../ + /home/comar/local/adainclude/ + + Object Search Path: + + ../ + /home/comar/local/lib/gcc-lib/x86-linux/3.4.3/adalib/ + + Project Search Path: + + /home/comar/local/lib/gnat/ + + ./demo1.o + Unit => + Name => demo1 + Kind => subprogram body + Flags => No_Elab_Code + Source => demo1.adb modified + + The following is an example of use of the dependency list. Note the use + of the -s switch which gives a straight list of source files. This can + be useful for building specialized scripts. + + $ gnatls -d demo2.o + ./demo2.o demo2 OK demo2.adb + OK gen_list.ads + OK gen_list.adb + OK instr.ads + OK instr-child.ads + + $ gnatls -d -s -a demo1.o + demo1.adb + /home/comar/local/adainclude/ada.ads + /home/comar/local/adainclude/a-finali.ads + /home/comar/local/adainclude/a-filico.ads + /home/comar/local/adainclude/a-stream.ads + /home/comar/local/adainclude/a-tags.ads + gen_list.ads + gen_list.adb + /home/comar/local/adainclude/gnat.ads + /home/comar/local/adainclude/g-io.ads + instr.ads + /home/comar/local/adainclude/system.ads + /home/comar/local/adainclude/s-exctab.ads + /home/comar/local/adainclude/s-finimp.ads + /home/comar/local/adainclude/s-finroo.ads + /home/comar/local/adainclude/s-secsta.ads + /home/comar/local/adainclude/s-stalib.ads + /home/comar/local/adainclude/s-stoele.ads + /home/comar/local/adainclude/s-stratt.ads + /home/comar/local/adainclude/s-tasoli.ads + /home/comar/local/adainclude/s-unstyp.ads + /home/comar/local/adainclude/unchconv.ads + +  + File: gnat_ugn.info, Node: GNAT and Program Execution, Next: Platform-Specific Information, Prev: GNAT Utility Programs, Up: Top + + 6 GNAT and Program Execution + **************************** + + This chapter covers several topics: + + * *note Running and Debugging Ada Programs: 146. + + * *note Profiling: 147. + + * *note Improving Performance: 148. + + * *note Overflow Check Handling in GNAT: 149. + + * *note Performing Dimensionality Analysis in GNAT: 14a. + + * *note Stack Related Facilities: 14b. + + * *note Memory Management Issues: 14c. + + * Menu: + + * Running and Debugging Ada Programs:: + * Profiling:: + * Improving Performance:: + * Overflow Check Handling in GNAT:: + * Performing Dimensionality Analysis in GNAT:: + * Stack Related Facilities:: + * Memory Management Issues:: + +  + File: gnat_ugn.info, Node: Running and Debugging Ada Programs, Next: Profiling, Up: GNAT and Program Execution + + 6.1 Running and Debugging Ada Programs + ====================================== + + This section discusses how to debug Ada programs. + + An incorrect Ada program may be handled in three ways by the GNAT + compiler: + + * The illegality may be a violation of the static semantics of Ada. + In that case GNAT diagnoses the constructs in the program that are + illegal. It is then a straightforward matter for the user to + modify those parts of the program. + + * The illegality may be a violation of the dynamic semantics of Ada. + In that case the program compiles and executes, but may generate + incorrect results, or may terminate abnormally with some exception. + + * When presented with a program that contains convoluted errors, GNAT + itself may terminate abnormally without providing full diagnostics + on the incorrect user program. + + * Menu: + + * The GNAT Debugger GDB:: + * Running GDB:: + * Introduction to GDB Commands:: + * Using Ada Expressions:: + * Calling User-Defined Subprograms:: + * Using the next Command in a Function:: + * Stopping When Ada Exceptions Are Raised:: + * Ada Tasks:: + * Debugging Generic Units:: + * Remote Debugging with gdbserver:: + * GNAT Abnormal Termination or Failure to Terminate:: + * Naming Conventions for GNAT Source Files:: + * Getting Internal Debugging Information:: + * Stack Traceback:: + * Pretty-Printers for the GNAT runtime:: + +  + File: gnat_ugn.info, Node: The GNAT Debugger GDB, Next: Running GDB, Up: Running and Debugging Ada Programs + + 6.1.1 The GNAT Debugger GDB + --------------------------- + + ‘GDB’ is a general purpose, platform-independent debugger that can be + used to debug mixed-language programs compiled with ‘gcc’, and in + particular is capable of debugging Ada programs compiled with GNAT. The + latest versions of ‘GDB’ are Ada-aware and can handle complex Ada data + structures. + + See ‘Debugging with GDB’, for full details on the usage of ‘GDB’, + including a section on its usage on programs. This manual should be + consulted for full details. The section that follows is a brief + introduction to the philosophy and use of ‘GDB’. + + When GNAT programs are compiled, the compiler optionally writes + debugging information into the generated object file, including + information on line numbers, and on declared types and variables. This + information is separate from the generated code. It makes the object + files considerably larger, but it does not add to the size of the actual + executable that will be loaded into memory, and has no impact on + run-time performance. The generation of debug information is triggered + by the use of the ‘-g’ switch in the ‘gcc’ or ‘gnatmake’ command used to + carry out the compilations. It is important to emphasize that the use + of these options does not change the generated code. + + The debugging information is written in standard system formats that are + used by many tools, including debuggers and profilers. The format of + the information is typically designed to describe C types and semantics, + but GNAT implements a translation scheme which allows full details about + Ada types and variables to be encoded into these standard C formats. + Details of this encoding scheme may be found in the file exp_dbug.ads in + the GNAT source distribution. However, the details of this encoding + are, in general, of no interest to a user, since ‘GDB’ automatically + performs the necessary decoding. + + When a program is bound and linked, the debugging information is + collected from the object files, and stored in the executable image of + the program. Again, this process significantly increases the size of + the generated executable file, but it does not increase the size of the + executable program itself. Furthermore, if this program is run in the + normal manner, it runs exactly as if the debug information were not + present, and takes no more actual memory. + + However, if the program is run under control of ‘GDB’, the debugger is + activated. The image of the program is loaded, at which point it is + ready to run. If a run command is given, then the program will run + exactly as it would have if ‘GDB’ were not present. This is a crucial + part of the ‘GDB’ design philosophy. ‘GDB’ is entirely non-intrusive + until a breakpoint is encountered. If no breakpoint is ever hit, the + program will run exactly as it would if no debugger were present. When + a breakpoint is hit, ‘GDB’ accesses the debugging information and can + respond to user commands to inspect variables, and more generally to + report on the state of execution. + +  + File: gnat_ugn.info, Node: Running GDB, Next: Introduction to GDB Commands, Prev: The GNAT Debugger GDB, Up: Running and Debugging Ada Programs + + 6.1.2 Running GDB + ----------------- + + This section describes how to initiate the debugger. + + The debugger can be launched from a ‘GNAT Studio’ menu or directly from + the command line. The description below covers the latter use. All the + commands shown can be used in the ‘GNAT Studio’ debug console window, + but there are usually more GUI-based ways to achieve the same effect. + + The command to run ‘GDB’ is + + $ gdb program + + where ‘program’ is the name of the executable file. This activates the + debugger and results in a prompt for debugger commands. The simplest + command is simply ‘run’, which causes the program to run exactly as if + the debugger were not present. The following section describes some of + the additional commands that can be given to ‘GDB’. + +  + File: gnat_ugn.info, Node: Introduction to GDB Commands, Next: Using Ada Expressions, Prev: Running GDB, Up: Running and Debugging Ada Programs + + 6.1.3 Introduction to GDB Commands + ---------------------------------- + + ‘GDB’ contains a large repertoire of commands. See ‘Debugging with GDB’ + for extensive documentation on the use of these commands, together with + examples of their use. Furthermore, the command `help' invoked from + within GDB activates a simple help facility which summarizes the + available commands and their options. In this section we summarize a + few of the most commonly used commands to give an idea of what ‘GDB’ is + about. You should create a simple program with debugging information + and experiment with the use of these ‘GDB’ commands on the program as + you read through the following section. + + * + ‘set args `arguments'’ + + The `arguments' list above is a list of arguments to be passed + to the program on a subsequent run command, just as though the + arguments had been entered on a normal invocation of the + program. The ‘set args’ command is not needed if the program + does not require arguments. + + * + ‘run’ + + The ‘run’ command causes execution of the program to start + from the beginning. If the program is already running, that + is to say if you are currently positioned at a breakpoint, + then a prompt will ask for confirmation that you want to + abandon the current execution and restart. + + * + ‘breakpoint `location'’ + + The breakpoint command sets a breakpoint, that is to say a + point at which execution will halt and ‘GDB’ will await + further commands. `location' is either a line number within a + file, given in the format ‘file:linenumber’, or it is the name + of a subprogram. If you request that a breakpoint be set on a + subprogram that is overloaded, a prompt will ask you to + specify on which of those subprograms you want to breakpoint. + You can also specify that all of them should be breakpointed. + If the program is run and execution encounters the breakpoint, + then the program stops and ‘GDB’ signals that the breakpoint + was encountered by printing the line of code before which the + program is halted. + + * + ‘catch exception `name'’ + + This command causes the program execution to stop whenever + exception ‘name’ is raised. If ‘name’ is omitted, then the + execution is suspended when any exception is raised. + + * + ‘print `expression'’ + + This will print the value of the given expression. Most + simple Ada expression formats are properly handled by ‘GDB’, + so the expression can contain function calls, variables, + operators, and attribute references. + + * + ‘continue’ + + Continues execution following a breakpoint, until the next + breakpoint or the termination of the program. + + * + ‘step’ + + Executes a single line after a breakpoint. If the next + statement is a subprogram call, execution continues into (the + first statement of) the called subprogram. + + * + ‘next’ + + Executes a single line. If this line is a subprogram call, + executes and returns from the call. + + * + ‘list’ + + Lists a few lines around the current source location. In + practice, it is usually more convenient to have a separate + edit window open with the relevant source file displayed. + Successive applications of this command print subsequent + lines. The command can be given an argument which is a line + number, in which case it displays a few lines around the + specified one. + + * + ‘backtrace’ + + Displays a backtrace of the call chain. This command is + typically used after a breakpoint has occurred, to examine the + sequence of calls that leads to the current breakpoint. The + display includes one line for each activation record (frame) + corresponding to an active subprogram. + + * + ‘up’ + + At a breakpoint, ‘GDB’ can display the values of variables + local to the current frame. The command ‘up’ can be used to + examine the contents of other active frames, by moving the + focus up the stack, that is to say from callee to caller, one + frame at a time. + + * + ‘down’ + + Moves the focus of ‘GDB’ down from the frame currently being + examined to the frame of its callee (the reverse of the + previous command), + + * + ‘frame `n'’ + + Inspect the frame with the given number. The value 0 denotes + the frame of the current breakpoint, that is to say the top of + the call stack. + + * + ‘kill’ + + Kills the child process in which the program is running under + GDB. This may be useful for several purposes: + + * It allows you to recompile and relink your program, since + on many systems you cannot regenerate an executable file + while it is running in a process. + + * You can run your program outside the debugger, on systems + that do not permit executing a program outside GDB while + breakpoints are set within GDB. + + * It allows you to debug a core dump rather than a running + process. + + The above list is a very short introduction to the commands that ‘GDB’ + provides. Important additional capabilities, including conditional + breakpoints, the ability to execute command sequences on a breakpoint, + the ability to debug at the machine instruction level and many other + features are described in detail in ‘Debugging with GDB’. Note that most + commands can be abbreviated (for example, c for continue, bt for + backtrace). + +  + File: gnat_ugn.info, Node: Using Ada Expressions, Next: Calling User-Defined Subprograms, Prev: Introduction to GDB Commands, Up: Running and Debugging Ada Programs + + 6.1.4 Using Ada Expressions + --------------------------- + + ‘GDB’ supports a fairly large subset of Ada expression syntax, with some + extensions. The philosophy behind the design of this subset is + + * That ‘GDB’ should provide basic literals and access to + operations for arithmetic, dereferencing, field selection, + indexing, and subprogram calls, leaving more sophisticated + computations to subprograms written into the program (which + therefore may be called from ‘GDB’). + + * That type safety and strict adherence to Ada language + restrictions are not particularly relevant in a debugging + context. + + * That brevity is important to the ‘GDB’ user. + + Thus, for brevity, the debugger acts as if there were implicit ‘with’ + and ‘use’ clauses in effect for all user-written packages, thus making + it unnecessary to fully qualify most names with their packages, + regardless of context. Where this causes ambiguity, ‘GDB’ asks the + user’s intent. + + For details on the supported Ada syntax, see ‘Debugging with GDB’. + +  + File: gnat_ugn.info, Node: Calling User-Defined Subprograms, Next: Using the next Command in a Function, Prev: Using Ada Expressions, Up: Running and Debugging Ada Programs + + 6.1.5 Calling User-Defined Subprograms + -------------------------------------- + + An important capability of ‘GDB’ is the ability to call user-defined + subprograms while debugging. This is achieved simply by entering a + subprogram call statement in the form: + + call subprogram-name (parameters) + + The keyword ‘call’ can be omitted in the normal case where the + ‘subprogram-name’ does not coincide with any of the predefined ‘GDB’ + commands. + + The effect is to invoke the given subprogram, passing it the list of + parameters that is supplied. The parameters can be expressions and can + include variables from the program being debugged. The subprogram must + be defined at the library level within your program, and ‘GDB’ will call + the subprogram within the environment of your program execution (which + means that the subprogram is free to access or even modify variables + within your program). + + The most important use of this facility is in allowing the inclusion of + debugging routines that are tailored to particular data structures in + your program. Such debugging routines can be written to provide a + suitably high-level description of an abstract type, rather than a + low-level dump of its physical layout. After all, the standard ‘GDB + print’ command only knows the physical layout of your types, not their + abstract meaning. Debugging routines can provide information at the + desired semantic level and are thus enormously useful. + + For example, when debugging GNAT itself, it is crucial to have access to + the contents of the tree nodes used to represent the program internally. + But tree nodes are represented simply by an integer value (which in turn + is an index into a table of nodes). Using the ‘print’ command on a tree + node would simply print this integer value, which is not very useful. + But the PN routine (defined in file treepr.adb in the GNAT sources) + takes a tree node as input, and displays a useful high level + representation of the tree node, which includes the syntactic category + of the node, its position in the source, the integers that denote + descendant nodes and parent node, as well as varied semantic + information. To study this example in more detail, you might want to + look at the body of the PN procedure in the stated file. + + Another useful application of this capability is to deal with situations + of complex data which are not handled suitably by GDB. For example, if + you specify Convention Fortran for a multi-dimensional array, GDB does + not know that the ordering of array elements has been switched and will + not properly address the array elements. In such a case, instead of + trying to print the elements directly from GDB, you can write a callable + procedure that prints the elements in the desired format. + +  + File: gnat_ugn.info, Node: Using the next Command in a Function, Next: Stopping When Ada Exceptions Are Raised, Prev: Calling User-Defined Subprograms, Up: Running and Debugging Ada Programs + + 6.1.6 Using the `next' Command in a Function + -------------------------------------------- + + When you use the ‘next’ command in a function, the current source + location will advance to the next statement as usual. A special case + arises in the case of a ‘return’ statement. + + Part of the code for a return statement is the ‘epilogue’ of the + function. This is the code that returns to the caller. There is only + one copy of this epilogue code, and it is typically associated with the + last return statement in the function if there is more than one return. + In some implementations, this epilogue is associated with the first + statement of the function. + + The result is that if you use the ‘next’ command from a return statement + that is not the last return statement of the function you may see a + strange apparent jump to the last return statement or to the start of + the function. You should simply ignore this odd jump. The value + returned is always that from the first return statement that was stepped + through. + +  + File: gnat_ugn.info, Node: Stopping When Ada Exceptions Are Raised, Next: Ada Tasks, Prev: Using the next Command in a Function, Up: Running and Debugging Ada Programs + + 6.1.7 Stopping When Ada Exceptions Are Raised + --------------------------------------------- + + You can set catchpoints that stop the program execution when your + program raises selected exceptions. + + * + ‘catch exception’ + + Set a catchpoint that stops execution whenever (any task in + the) program raises any exception. + + * + ‘catch exception `name'’ + + Set a catchpoint that stops execution whenever (any task in + the) program raises the exception `name'. + + * + ‘catch exception unhandled’ + + Set a catchpoint that stops executing whenever (any task in + the) program raises an exception for which there is no + handler. + + * + ‘info exceptions’, ‘info exceptions `regexp'’ + + The ‘info exceptions’ command permits the user to examine all + defined exceptions within Ada programs. With a regular + expression, `regexp', as argument, prints out only those + exceptions whose name matches `regexp'. + +  + File: gnat_ugn.info, Node: Ada Tasks, Next: Debugging Generic Units, Prev: Stopping When Ada Exceptions Are Raised, Up: Running and Debugging Ada Programs + + 6.1.8 Ada Tasks + --------------- + + ‘GDB’ allows the following task-related commands: + + * + ‘info tasks’ + + This command shows a list of current Ada tasks, as in the + following example: + + (gdb) info tasks + ID TID P-ID Thread Pri State Name + 1 8088000 0 807e000 15 Child Activation Wait main_task + 2 80a4000 1 80ae000 15 Accept/Select Wait b + 3 809a800 1 80a4800 15 Child Activation Wait a + * 4 80ae800 3 80b8000 15 Running c + + In this listing, the asterisk before the first task indicates + it to be the currently running task. The first column lists + the task ID that is used to refer to tasks in the following + commands. + + * ‘break``*linespec* ``task’ `taskid', ‘break’ `linespec' ‘task’ + `taskid' ‘if’ … + + These commands are like the ‘break ... thread ...’. + `linespec' specifies source lines. + + Use the qualifier ‘task `taskid'’ with a breakpoint command to + specify that you only want ‘GDB’ to stop the program when a + particular Ada task reaches this breakpoint. `taskid' is one + of the numeric task identifiers assigned by ‘GDB’, shown in + the first column of the ‘info tasks’ display. + + If you do not specify ‘task `taskid'’ when you set a + breakpoint, the breakpoint applies to `all' tasks of your + program. + + You can use the ‘task’ qualifier on conditional breakpoints as + well; in this case, place ‘task `taskid'’ before the + breakpoint condition (before the ‘if’). + + * ‘task `taskno'’ + + This command allows switching to the task referred by + `taskno'. In particular, this allows browsing of the + backtrace of the specified task. It is advisable to switch + back to the original task before continuing execution + otherwise the scheduling of the program may be perturbed. + + For more detailed information on the tasking support, see ‘Debugging + with GDB’. + +  + File: gnat_ugn.info, Node: Debugging Generic Units, Next: Remote Debugging with gdbserver, Prev: Ada Tasks, Up: Running and Debugging Ada Programs + + 6.1.9 Debugging Generic Units + ----------------------------- + + GNAT always uses code expansion for generic instantiation. This means + that each time an instantiation occurs, a complete copy of the original + code is made, with appropriate substitutions of formals by actuals. + + It is not possible to refer to the original generic entities in ‘GDB’, + but it is always possible to debug a particular instance of a generic, + by using the appropriate expanded names. For example, if we have + + procedure g is + + generic package k is + procedure kp (v1 : in out integer); + end k; + + package body k is + procedure kp (v1 : in out integer) is + begin + v1 := v1 + 1; + end kp; + end k; + + package k1 is new k; + package k2 is new k; + + var : integer := 1; + + begin + k1.kp (var); + k2.kp (var); + k1.kp (var); + k2.kp (var); + end; + + Then to break on a call to procedure kp in the k2 instance, simply use + the command: + + (gdb) break g.k2.kp + + When the breakpoint occurs, you can step through the code of the + instance in the normal manner and examine the values of local variables, + as for other units. + +  + File: gnat_ugn.info, Node: Remote Debugging with gdbserver, Next: GNAT Abnormal Termination or Failure to Terminate, Prev: Debugging Generic Units, Up: Running and Debugging Ada Programs + + 6.1.10 Remote Debugging with gdbserver + -------------------------------------- + + On platforms where gdbserver is supported, it is possible to use this + tool to debug your application remotely. This can be useful in + situations where the program needs to be run on a target host that is + different from the host used for development, particularly when the + target has a limited amount of resources (either CPU and/or memory). + + To do so, start your program using gdbserver on the target machine. + gdbserver then automatically suspends the execution of your program at + its entry point, waiting for a debugger to connect to it. The following + commands starts an application and tells gdbserver to wait for a + connection with the debugger on localhost port 4444. + + $ gdbserver localhost:4444 program + Process program created; pid = 5685 + Listening on port 4444 + + Once gdbserver has started listening, we can tell the debugger to + establish a connection with this gdbserver, and then start the same + debugging session as if the program was being debugged on the same host, + directly under the control of GDB. + + $ gdb program + (gdb) target remote targethost:4444 + Remote debugging using targethost:4444 + 0x00007f29936d0af0 in ?? () from /lib64/ld-linux-x86-64.so. + (gdb) b foo.adb:3 + Breakpoint 1 at 0x401f0c: file foo.adb, line 3. + (gdb) continue + Continuing. + + Breakpoint 1, foo () at foo.adb:4 + 4 end foo; + + It is also possible to use gdbserver to attach to an already running + program, in which case the execution of that program is simply suspended + until the connection between the debugger and gdbserver is established. + + For more information on how to use gdbserver, see the `Using the + gdbserver Program' section in ‘Debugging with GDB’. GNAT provides + support for gdbserver on x86-linux, x86-windows and x86_64-linux. + +  + File: gnat_ugn.info, Node: GNAT Abnormal Termination or Failure to Terminate, Next: Naming Conventions for GNAT Source Files, Prev: Remote Debugging with gdbserver, Up: Running and Debugging Ada Programs + + 6.1.11 GNAT Abnormal Termination or Failure to Terminate + -------------------------------------------------------- + + When presented with programs that contain serious errors in syntax or + semantics, GNAT may on rare occasions experience problems in operation, + such as aborting with a segmentation fault or illegal memory access, + raising an internal exception, terminating abnormally, or failing to + terminate at all. In such cases, you can activate various features of + GNAT that can help you pinpoint the construct in your program that is + the likely source of the problem. + + The following strategies are presented in increasing order of + difficulty, corresponding to your experience in using GNAT and your + familiarity with compiler internals. + + * Run ‘gcc’ with the ‘-gnatf’. This first switch causes all errors + on a given line to be reported. In its absence, only the first + error on a line is displayed. + + The ‘-gnatdO’ switch causes errors to be displayed as soon as they + are encountered, rather than after compilation is terminated. If + GNAT terminates prematurely or goes into an infinite loop, the last + error message displayed may help to pinpoint the culprit. + + * Run ‘gcc’ with the ‘-v’ (verbose) switch. In this mode, ‘gcc’ + produces ongoing information about the progress of the compilation + and provides the name of each procedure as code is generated. This + switch allows you to find which Ada procedure was being compiled + when it encountered a code generation problem. + + * Run ‘gcc’ with the ‘-gnatdc’ switch. This is a GNAT specific + switch that does for the front-end what ‘-v’ does for the back end. + The system prints the name of each unit, either a compilation unit + or nested unit, as it is being analyzed. + + * Finally, you can start ‘gdb’ directly on the ‘gnat1’ executable. + ‘gnat1’ is the front-end of GNAT, and can be run independently + (normally it is just called from ‘gcc’). You can use ‘gdb’ on + ‘gnat1’ as you would on a C program (but *note The GNAT Debugger + GDB: 14f. for caveats). The ‘where’ command is the first line of + attack; the variable ‘lineno’ (seen by ‘print lineno’), used by the + second phase of ‘gnat1’ and by the ‘gcc’ backend, indicates the + source line at which the execution stopped, and ‘input_file name’ + indicates the name of the source file. + +  + File: gnat_ugn.info, Node: Naming Conventions for GNAT Source Files, Next: Getting Internal Debugging Information, Prev: GNAT Abnormal Termination or Failure to Terminate, Up: Running and Debugging Ada Programs + + 6.1.12 Naming Conventions for GNAT Source Files + ----------------------------------------------- + + In order to examine the workings of the GNAT system, the following brief + description of its organization may be helpful: + + * Files with prefix ‘sc’ contain the lexical scanner. + + * All files prefixed with ‘par’ are components of the parser. The + numbers correspond to chapters of the Ada Reference Manual. For + example, parsing of select statements can be found in + ‘par-ch9.adb’. + + * All files prefixed with ‘sem’ perform semantic analysis. The + numbers correspond to chapters of the Ada standard. For example, + all issues involving context clauses can be found in + ‘sem_ch10.adb’. In addition, some features of the language require + sufficient special processing to justify their own semantic files: + sem_aggr for aggregates, sem_disp for dynamic dispatching, etc. + + * All files prefixed with ‘exp’ perform normalization and expansion + of the intermediate representation (abstract syntax tree, or AST). + these files use the same numbering scheme as the parser and + semantics files. For example, the construction of record + initialization procedures is done in ‘exp_ch3.adb’. + + * The files prefixed with ‘bind’ implement the binder, which verifies + the consistency of the compilation, determines an order of + elaboration, and generates the bind file. + + * The files ‘atree.ads’ and ‘atree.adb’ detail the low-level data + structures used by the front-end. + + * The files ‘sinfo.ads’ and ‘sinfo.adb’ detail the structure of the + abstract syntax tree as produced by the parser. + + * The files ‘einfo.ads’ and ‘einfo.adb’ detail the attributes of all + entities, computed during semantic analysis. + + * Library management issues are dealt with in files with prefix + ‘lib’. + + * Ada files with the prefix ‘a-’ are children of ‘Ada’, as defined in + Annex A. + + * Files with prefix ‘i-’ are children of ‘Interfaces’, as defined in + Annex B. + + * Files with prefix ‘s-’ are children of ‘System’. This includes + both language-defined children and GNAT run-time routines. + + * Files with prefix ‘g-’ are children of ‘GNAT’. These are useful + general-purpose packages, fully documented in their specs. All the + other ‘.c’ files are modifications of common ‘gcc’ files. + +  + File: gnat_ugn.info, Node: Getting Internal Debugging Information, Next: Stack Traceback, Prev: Naming Conventions for GNAT Source Files, Up: Running and Debugging Ada Programs + + 6.1.13 Getting Internal Debugging Information + --------------------------------------------- + + Most compilers have internal debugging switches and modes. GNAT does + also, except GNAT internal debugging switches and modes are not secret. + A summary and full description of all the compiler and binder debug + flags are in the file ‘debug.adb’. You must obtain the sources of the + compiler to see the full detailed effects of these flags. + + The switches that print the source of the program (reconstructed from + the internal tree) are of general interest for user programs, as are the + options to print the full internal tree, and the entity table (the + symbol table information). The reconstructed source provides a readable + version of the program after the front-end has completed analysis and + expansion, and is useful when studying the performance of specific + constructs. For example, constraint checks are indicated, complex + aggregates are replaced with loops and assignments, and tasking + primitives are replaced with run-time calls. + +  + File: gnat_ugn.info, Node: Stack Traceback, Next: Pretty-Printers for the GNAT runtime, Prev: Getting Internal Debugging Information, Up: Running and Debugging Ada Programs + + 6.1.14 Stack Traceback + ---------------------- + + Traceback is a mechanism to display the sequence of subprogram calls + that leads to a specified execution point in a program. Often (but not + always) the execution point is an instruction at which an exception has + been raised. This mechanism is also known as `stack unwinding' because + it obtains its information by scanning the run-time stack and recovering + the activation records of all active subprograms. Stack unwinding is + one of the most important tools for program debugging. + + The first entry stored in traceback corresponds to the deepest calling + level, that is to say the subprogram currently executing the instruction + from which we want to obtain the traceback. + + Note that there is no runtime performance penalty when stack traceback + is enabled, and no exception is raised during program execution. + + * Menu: + + * Non-Symbolic Traceback:: + * Symbolic Traceback:: + +  + File: gnat_ugn.info, Node: Non-Symbolic Traceback, Next: Symbolic Traceback, Up: Stack Traceback + + 6.1.14.1 Non-Symbolic Traceback + ............................... + + Note: this feature is not supported on all platforms. See + ‘GNAT.Traceback’ spec in ‘g-traceb.ads’ for a complete list of supported + platforms. + + Tracebacks From an Unhandled Exception + ...................................... + + A runtime non-symbolic traceback is a list of addresses of call + instructions. To enable this feature you must use the ‘-E’ ‘gnatbind’ + option. With this option a stack traceback is stored as part of + exception information. You can retrieve this information using the + ‘addr2line’ tool. + + Here is a simple example: + + procedure STB is + + procedure P1 is + begin + raise Constraint_Error; + end P1; + + procedure P2 is + begin + P1; + end P2; + + begin + P2; + end STB; + + $ gnatmake stb -bargs -E + $ stb + + Execution terminated by unhandled exception + Exception name: CONSTRAINT_ERROR + Message: stb.adb:5 + Call stack traceback locations: + 0x401373 0x40138b 0x40139c 0x401335 0x4011c4 0x4011f1 0x77e892a4 + + As we see the traceback lists a sequence of addresses for the unhandled + exception ‘CONSTRAINT_ERROR’ raised in procedure P1. It is easy to + guess that this exception come from procedure P1. To translate these + addresses into the source lines where the calls appear, the ‘addr2line’ + tool, described below, is invaluable. The use of this tool requires the + program to be compiled with debug information. + + $ gnatmake -g stb -bargs -E + $ stb + + Execution terminated by unhandled exception + Exception name: CONSTRAINT_ERROR + Message: stb.adb:5 + Call stack traceback locations: + 0x401373 0x40138b 0x40139c 0x401335 0x4011c4 0x4011f1 0x77e892a4 + + $ addr2line --exe=stb 0x401373 0x40138b 0x40139c 0x401335 0x4011c4 + 0x4011f1 0x77e892a4 + + 00401373 at d:/stb/stb.adb:5 + 0040138B at d:/stb/stb.adb:10 + 0040139C at d:/stb/stb.adb:14 + 00401335 at d:/stb/b~stb.adb:104 + 004011C4 at /build/.../crt1.c:200 + 004011F1 at /build/.../crt1.c:222 + 77E892A4 in ?? at ??:0 + + The ‘addr2line’ tool has several other useful options: + + ‘--functions’ to get the function name corresponding to any location + + + ‘--demangle=gnat’ to use the gnat decoding mode for the function names. + Note that for binutils version 2.9.x the option is simply + ‘--demangle’. + + + $ addr2line --exe=stb --functions --demangle=gnat 0x401373 0x40138b + 0x40139c 0x401335 0x4011c4 0x4011f1 + + 00401373 in stb.p1 at d:/stb/stb.adb:5 + 0040138B in stb.p2 at d:/stb/stb.adb:10 + 0040139C in stb at d:/stb/stb.adb:14 + 00401335 in main at d:/stb/b~stb.adb:104 + 004011C4 in <__mingw_CRTStartup> at /build/.../crt1.c:200 + 004011F1 in at /build/.../crt1.c:222 + + From this traceback we can see that the exception was raised in + ‘stb.adb’ at line 5, which was reached from a procedure call in + ‘stb.adb’ at line 10, and so on. The ‘b~std.adb’ is the binder file, + which contains the call to the main program. *note Running gnatbind: + 10e. The remaining entries are assorted runtime routines, and the + output will vary from platform to platform. + + It is also possible to use ‘GDB’ with these traceback addresses to debug + the program. For example, we can break at a given code location, as + reported in the stack traceback: + + $ gdb -nw stb + + Furthermore, this feature is not implemented inside Windows DLL. Only + the non-symbolic traceback is reported in this case. + + (gdb) break *0x401373 + Breakpoint 1 at 0x401373: file stb.adb, line 5. + + It is important to note that the stack traceback addresses do not change + when debug information is included. This is particularly useful because + it makes it possible to release software without debug information (to + minimize object size), get a field report that includes a stack + traceback whenever an internal bug occurs, and then be able to retrieve + the sequence of calls with the same program compiled with debug + information. + + Tracebacks From Exception Occurrences + ..................................... + + Non-symbolic tracebacks are obtained by using the ‘-E’ binder argument. + The stack traceback is attached to the exception information string, and + can be retrieved in an exception handler within the Ada program, by + means of the Ada facilities defined in ‘Ada.Exceptions’. Here is a + simple example: + + with Ada.Text_IO; + with Ada.Exceptions; + + procedure STB is + + use Ada; + use Ada.Exceptions; + + procedure P1 is + K : Positive := 1; + begin + K := K - 1; + exception + when E : others => + Text_IO.Put_Line (Exception_Information (E)); + end P1; + + procedure P2 is + begin + P1; + end P2; + + begin + P2; + end STB; + + This program will output: + + $ stb + + Exception name: CONSTRAINT_ERROR + Message: stb.adb:12 + Call stack traceback locations: + 0x4015e4 0x401633 0x401644 0x401461 0x4011c4 0x4011f1 0x77e892a4 + + Tracebacks From Anywhere in a Program + ..................................... + + It is also possible to retrieve a stack traceback from anywhere in a + program. For this you need to use the ‘GNAT.Traceback’ API. This + package includes a procedure called ‘Call_Chain’ that computes a + complete stack traceback, as well as useful display procedures described + below. It is not necessary to use the ‘-E’ ‘gnatbind’ option in this + case, because the stack traceback mechanism is invoked explicitly. + + In the following example we compute a traceback at a specific location + in the program, and we display it using ‘GNAT.Debug_Utilities.Image’ to + convert addresses to strings: + + with Ada.Text_IO; + with GNAT.Traceback; + with GNAT.Debug_Utilities; + + procedure STB is + + use Ada; + use GNAT; + use GNAT.Traceback; + + procedure P1 is + TB : Tracebacks_Array (1 .. 10); + -- We are asking for a maximum of 10 stack frames. + Len : Natural; + -- Len will receive the actual number of stack frames returned. + begin + Call_Chain (TB, Len); + + Text_IO.Put ("In STB.P1 : "); + + for K in 1 .. Len loop + Text_IO.Put (Debug_Utilities.Image (TB (K))); + Text_IO.Put (' '); + end loop; + + Text_IO.New_Line; + end P1; + + procedure P2 is + begin + P1; + end P2; + + begin + P2; + end STB; + + $ gnatmake -g stb + $ stb + + In STB.P1 : 16#0040_F1E4# 16#0040_14F2# 16#0040_170B# 16#0040_171C# + 16#0040_1461# 16#0040_11C4# 16#0040_11F1# 16#77E8_92A4# + + You can then get further information by invoking the ‘addr2line’ tool as + described earlier (note that the hexadecimal addresses need to be + specified in C format, with a leading ‘0x’). + +  + File: gnat_ugn.info, Node: Symbolic Traceback, Prev: Non-Symbolic Traceback, Up: Stack Traceback + + 6.1.14.2 Symbolic Traceback + ........................... + + A symbolic traceback is a stack traceback in which procedure names are + associated with each code location. + + Note that this feature is not supported on all platforms. See + ‘GNAT.Traceback.Symbolic’ spec in ‘g-trasym.ads’ for a complete list of + currently supported platforms. + + Note that the symbolic traceback requires that the program be compiled + with debug information. If it is not compiled with debug information + only the non-symbolic information will be valid. + + Tracebacks From Exception Occurrences + ..................................... + + Here is an example: + + with Ada.Text_IO; + with GNAT.Traceback.Symbolic; + + procedure STB is + + procedure P1 is + begin + raise Constraint_Error; + end P1; + + procedure P2 is + begin + P1; + end P2; + + procedure P3 is + begin + P2; + end P3; + + begin + P3; + exception + when E : others => + Ada.Text_IO.Put_Line (GNAT.Traceback.Symbolic.Symbolic_Traceback (E)); + end STB; + + $ gnatmake -g .\stb -bargs -E + $ stb + + 0040149F in stb.p1 at stb.adb:8 + 004014B7 in stb.p2 at stb.adb:13 + 004014CF in stb.p3 at stb.adb:18 + 004015DD in ada.stb at stb.adb:22 + 00401461 in main at b~stb.adb:168 + 004011C4 in __mingw_CRTStartup at crt1.c:200 + 004011F1 in mainCRTStartup at crt1.c:222 + 77E892A4 in ?? at ??:0 + + In the above example the ‘.\’ syntax in the ‘gnatmake’ command is + currently required by ‘addr2line’ for files that are in the current + working directory. Moreover, the exact sequence of linker options may + vary from platform to platform. The above ‘-largs’ section is for + Windows platforms. By contrast, under Unix there is no need for the + ‘-largs’ section. Differences across platforms are due to details of + linker implementation. + + Tracebacks From Anywhere in a Program + ..................................... + + It is possible to get a symbolic stack traceback from anywhere in a + program, just as for non-symbolic tracebacks. The first step is to + obtain a non-symbolic traceback, and then call ‘Symbolic_Traceback’ to + compute the symbolic information. Here is an example: + + with Ada.Text_IO; + with GNAT.Traceback; + with GNAT.Traceback.Symbolic; + + procedure STB is + + use Ada; + use GNAT.Traceback; + use GNAT.Traceback.Symbolic; + + procedure P1 is + TB : Tracebacks_Array (1 .. 10); + -- We are asking for a maximum of 10 stack frames. + Len : Natural; + -- Len will receive the actual number of stack frames returned. + begin + Call_Chain (TB, Len); + Text_IO.Put_Line (Symbolic_Traceback (TB (1 .. Len))); + end P1; + + procedure P2 is + begin + P1; + end P2; + + begin + P2; + end STB; + + Automatic Symbolic Tracebacks + ............................. + + Symbolic tracebacks may also be enabled by using the -Es switch to + gnatbind (as in ‘gprbuild -g ... -bargs -Es’). This will cause the + Exception_Information to contain a symbolic traceback, which will also + be printed if an unhandled exception terminates the program. + +  + File: gnat_ugn.info, Node: Pretty-Printers for the GNAT runtime, Prev: Stack Traceback, Up: Running and Debugging Ada Programs + + 6.1.15 Pretty-Printers for the GNAT runtime + ------------------------------------------- + + As discussed in ‘Calling User-Defined Subprograms’, GDB’s ‘print’ + command only knows about the physical layout of program data structures + and therefore normally displays only low-level dumps, which are often + hard to understand. + + An example of this is when trying to display the contents of an Ada + standard container, such as ‘Ada.Containers.Ordered_Maps.Map’: + + with Ada.Containers.Ordered_Maps; + + procedure PP is + package Int_To_Nat is + new Ada.Containers.Ordered_Maps (Integer, Natural); + + Map : Int_To_Nat.Map; + begin + Map.Insert (1, 10); + Map.Insert (2, 20); + Map.Insert (3, 30); + + Map.Clear; -- BREAK HERE + end PP; + + When this program is built with debugging information and run under GDB + up to the ‘Map.Clear’ statement, trying to print ‘Map’ will yield + information that is only relevant to the developers of our standard + containers: + + (gdb) print map + $1 = ( + tree => ( + first => 0x64e010, + last => 0x64e070, + root => 0x64e040, + length => 3, + tc => ( + busy => 0, + lock => 0 + ) + ) + ) + + Fortunately, GDB has a feature called pretty-printers(1), which allows + customizing how GDB displays data structures. The GDB shipped with GNAT + embeds such pretty-printers for the most common containers in the + standard library. To enable them, either run the following command + manually under GDB or add it to your ‘.gdbinit’ file: + + python import gnatdbg; gnatdbg.setup() + + Once this is done, GDB’s ‘print’ command will automatically use these + pretty-printers when appropriate. Using the previous example: + + (gdb) print map + $1 = pp.int_to_nat.map of length 3 = { + [1] = 10, + [2] = 20, + [3] = 30 + } + + Pretty-printers are invoked each time GDB tries to display a value, + including when displaying the arguments of a called subprogram (in GDB’s + ‘backtrace’ command) or when printing the value returned by a function + (in GDB’s ‘finish’ command). + + To display a value without involving pretty-printers, ‘print’ can be + invoked with its ‘/r’ option: + + (gdb) print/r map + $1 = ( + tree => (... + + Finer control of pretty-printers is also possible: see GDB’s online + documentation(2) for more information. + + ---------- Footnotes ---------- + + (1) + http://docs.adacore.com/gdb-docs/html/gdb.html#Pretty_002dPrinter-Introduction + + (2) + http://docs.adacore.com/gdb-docs/html/gdb.html#Pretty_002dPrinter-Commands + +  + File: gnat_ugn.info, Node: Profiling, Next: Improving Performance, Prev: Running and Debugging Ada Programs, Up: GNAT and Program Execution + + 6.2 Profiling + ============= + + This section describes how to use the ‘gprof’ profiler tool on Ada + programs. + + * Menu: + + * Profiling an Ada Program with gprof:: + +  + File: gnat_ugn.info, Node: Profiling an Ada Program with gprof, Up: Profiling + + 6.2.1 Profiling an Ada Program with gprof + ----------------------------------------- + + This section is not meant to be an exhaustive documentation of ‘gprof’. + Full documentation for it can be found in the ‘GNU Profiler User’s + Guide’ documentation that is part of this GNAT distribution. + + Profiling a program helps determine the parts of a program that are + executed most often, and are therefore the most time-consuming. + + ‘gprof’ is the standard GNU profiling tool; it has been enhanced to + better handle Ada programs and multitasking. It is currently supported + on the following platforms + + * linux x86/x86_64 + + * windows x86 + + In order to profile a program using ‘gprof’, several steps are needed: + + 1. Instrument the code, which requires a full recompilation of the + project with the proper switches. + + 2. Execute the program under the analysis conditions, i.e. with the + desired input. + + 3. Analyze the results using the ‘gprof’ tool. + + The following sections detail the different steps, and indicate how to + interpret the results. + + * Menu: + + * Compilation for profiling:: + * Program execution:: + * Running gprof:: + * Interpretation of profiling results:: + +  + File: gnat_ugn.info, Node: Compilation for profiling, Next: Program execution, Up: Profiling an Ada Program with gprof + + 6.2.1.1 Compilation for profiling + ................................. + + In order to profile a program the first step is to tell the compiler to + generate the necessary profiling information. The compiler switch to be + used is ‘-pg’, which must be added to other compilation switches. This + switch needs to be specified both during compilation and link stages, + and can be specified once when using gnatmake: + + $ gnatmake -f -pg -P my_project + + Note that only the objects that were compiled with the ‘-pg’ switch will + be profiled; if you need to profile your whole project, use the ‘-f’ + gnatmake switch to force full recompilation. + +  + File: gnat_ugn.info, Node: Program execution, Next: Running gprof, Prev: Compilation for profiling, Up: Profiling an Ada Program with gprof + + 6.2.1.2 Program execution + ......................... + + Once the program has been compiled for profiling, you can run it as + usual. + + The only constraint imposed by profiling is that the program must + terminate normally. An interrupted program (via a Ctrl-C, kill, etc.) + will not be properly analyzed. + + Once the program completes execution, a data file called ‘gmon.out’ is + generated in the directory where the program was launched from. If this + file already exists, it will be overwritten. + +  + File: gnat_ugn.info, Node: Running gprof, Next: Interpretation of profiling results, Prev: Program execution, Up: Profiling an Ada Program with gprof + + 6.2.1.3 Running gprof + ..................... + + The ‘gprof’ tool is called as follow: + + $ gprof my_prog gmon.out + + or simply: + + $ gprof my_prog + + The complete form of the gprof command line is the following: + + $ gprof [switches] [executable [data-file]] + + ‘gprof’ supports numerous switches. The order of these switch does not + matter. The full list of options can be found in the GNU Profiler + User’s Guide documentation that comes with this documentation. + + The following is the subset of those switches that is most relevant: + + ‘--demangle[=`style']’, ‘--no-demangle’ + + These options control whether symbol names should be demangled when + printing output. The default is to demangle C++ symbols. The + ‘--no-demangle’ option may be used to turn off demangling. + Different compilers have different mangling styles. The optional + demangling style argument can be used to choose an appropriate + demangling style for your compiler, in particular Ada symbols + generated by GNAT can be demangled using ‘--demangle=gnat’. + + ‘-e `function_name'’ + + The ‘-e `function'’ option tells ‘gprof’ not to print information + about the function ‘function_name’ (and its children…) in the call + graph. The function will still be listed as a child of any + functions that call it, but its index number will be shown as ‘[not + printed]’. More than one ‘-e’ option may be given; only one + ‘function_name’ may be indicated with each ‘-e’ option. + + ‘-E `function_name'’ + + The ‘-E `function'’ option works like the ‘-e’ option, but + execution time spent in the function (and children who were not + called from anywhere else), will not be used to compute the + percentages-of-time for the call graph. More than one ‘-E’ option + may be given; only one ‘function_name’ may be indicated with each + ‘-E`’ option. + + ‘-f `function_name'’ + + The ‘-f `function'’ option causes ‘gprof’ to limit the call graph + to the function ‘function_name’ and its children (and their + children…). More than one ‘-f’ option may be given; only one + ‘function_name’ may be indicated with each ‘-f’ option. + + ‘-F `function_name'’ + + The ‘-F `function'’ option works like the ‘-f’ option, but only + time spent in the function and its children (and their children…) + will be used to determine total-time and percentages-of-time for + the call graph. More than one ‘-F’ option may be given; only one + ‘function_name’ may be indicated with each ‘-F’ option. The ‘-F’ + option overrides the ‘-E’ option. + +  + File: gnat_ugn.info, Node: Interpretation of profiling results, Prev: Running gprof, Up: Profiling an Ada Program with gprof + + 6.2.1.4 Interpretation of profiling results + ........................................... + + The results of the profiling analysis are represented by two arrays: the + ‘flat profile’ and the ‘call graph’. Full documentation of those + outputs can be found in the GNU Profiler User’s Guide. + + The flat profile shows the time spent in each function of the program, + and how many time it has been called. This allows you to locate easily + the most time-consuming functions. + + The call graph shows, for each subprogram, the subprograms that call it, + and the subprograms that it calls. It also provides an estimate of the + time spent in each of those callers/called subprograms. + +  + File: gnat_ugn.info, Node: Improving Performance, Next: Overflow Check Handling in GNAT, Prev: Profiling, Up: GNAT and Program Execution + + 6.3 Improving Performance + ========================= + + This section presents several topics related to program performance. It + first describes some of the tradeoffs that need to be considered and + some of the techniques for making your program run faster. + + It then documents the unused subprogram/data elimination feature, which + can reduce the size of program executables. + + * Menu: + + * Performance Considerations:: + * Text_IO Suggestions:: + * Reducing Size of Executables with Unused Subprogram/Data Elimination:: + +  + File: gnat_ugn.info, Node: Performance Considerations, Next: Text_IO Suggestions, Up: Improving Performance + + 6.3.1 Performance Considerations + -------------------------------- + + The GNAT system provides a number of options that allow a trade-off + between + + * performance of the generated code + + * speed of compilation + + * minimization of dependences and recompilation + + * the degree of run-time checking. + + The defaults (if no options are selected) aim at improving the speed of + compilation and minimizing dependences, at the expense of performance of + the generated code: + + * no optimization + + * no inlining of subprogram calls + + * all run-time checks enabled except overflow and elaboration checks + + These options are suitable for most program development purposes. This + section describes how you can modify these choices, and also provides + some guidelines on debugging optimized code. + + * Menu: + + * Controlling Run-Time Checks:: + * Use of Restrictions:: + * Optimization Levels:: + * Debugging Optimized Code:: + * Inlining of Subprograms:: + * Floating Point Operations:: + * Vectorization of loops:: + * Other Optimization Switches:: + * Optimization and Strict Aliasing:: + * Aliased Variables and Optimization:: + * Atomic Variables and Optimization:: + * Passive Task Optimization:: + +  + File: gnat_ugn.info, Node: Controlling Run-Time Checks, Next: Use of Restrictions, Up: Performance Considerations + + 6.3.1.1 Controlling Run-Time Checks + ................................... + + By default, GNAT generates all run-time checks, except stack overflow + checks, and checks for access before elaboration on subprogram calls. + The latter are not required in default mode, because all necessary + checking is done at compile time. + + The gnat switch, ‘-gnatp’ allows this default to be modified. See *note + Run-Time Checks: ea. + + Our experience is that the default is suitable for most development + purposes. + + Elaboration checks are off by default, and also not needed by default, + since GNAT uses a static elaboration analysis approach that avoids the + need for run-time checking. This manual contains a full chapter + discussing the issue of elaboration checks, and if the default is not + satisfactory for your use, you should read this chapter. + + For validity checks, the minimal checks required by the Ada Reference + Manual (for case statements and assignments to array elements) are on by + default. These can be suppressed by use of the ‘-gnatVn’ switch. Note + that in Ada 83, there were no validity checks, so if the Ada 83 mode is + acceptable (or when comparing GNAT performance with an Ada 83 compiler), + it may be reasonable to routinely use ‘-gnatVn’. Validity checks are + also suppressed entirely if ‘-gnatp’ is used. + + Note that the setting of the switches controls the default setting of + the checks. They may be modified using either ‘pragma Suppress’ (to + remove checks) or ‘pragma Unsuppress’ (to add back suppressed checks) in + the program source. + +  + File: gnat_ugn.info, Node: Use of Restrictions, Next: Optimization Levels, Prev: Controlling Run-Time Checks, Up: Performance Considerations + + 6.3.1.2 Use of Restrictions + ........................... + + The use of pragma Restrictions allows you to control which features are + permitted in your program. Apart from the obvious point that if you + avoid relatively expensive features like finalization (enforceable by + the use of pragma Restrictions (No_Finalization), the use of this pragma + does not affect the generated code in most cases. + + One notable exception to this rule is that the possibility of task abort + results in some distributed overhead, particularly if finalization or + exception handlers are used. The reason is that certain sections of + code have to be marked as non-abortable. + + If you use neither the ‘abort’ statement, nor asynchronous transfer of + control (‘select ... then abort’), then this distributed overhead is + removed, which may have a general positive effect in improving overall + performance. Especially code involving frequent use of tasking + constructs and controlled types will show much improved performance. + The relevant restrictions pragmas are + + pragma Restrictions (No_Abort_Statements); + pragma Restrictions (Max_Asynchronous_Select_Nesting => 0); + + It is recommended that these restriction pragmas be used if possible. + Note that this also means that you can write code without worrying about + the possibility of an immediate abort at any point. + +  + File: gnat_ugn.info, Node: Optimization Levels, Next: Debugging Optimized Code, Prev: Use of Restrictions, Up: Performance Considerations + + 6.3.1.3 Optimization Levels + ........................... + + Without any optimization option, the compiler’s goal is to reduce the + cost of compilation and to make debugging produce the expected results. + Statements are independent: if you stop the program with a breakpoint + between statements, you can then assign a new value to any variable or + change the program counter to any other statement in the subprogram and + get exactly the results you would expect from the source code. + + Turning on optimization makes the compiler attempt to improve the + performance and/or code size at the expense of compilation time and + possibly the ability to debug the program. + + If you use multiple -O options, with or without level numbers, the last + such option is the one that is effective. + + The default is optimization off. This results in the fastest compile + times, but GNAT makes absolutely no attempt to optimize, and the + generated programs are considerably larger and slower than when + optimization is enabled. You can use the ‘-O’ switch (the permitted + forms are ‘-O0’, ‘-O1’ ‘-O2’, ‘-O3’, and ‘-Os’) to ‘gcc’ to control the + optimization level: + + * + ‘-O0’ + + No optimization (the default); generates unoptimized code but + has the fastest compilation time. + + Note that many other compilers do substantial optimization + even if ‘no optimization’ is specified. With gcc, it is very + unusual to use ‘-O0’ for production if execution time is of + any concern, since ‘-O0’ means (almost) no optimization. This + difference between gcc and other compilers should be kept in + mind when doing performance comparisons. + + * + ‘-O1’ + + Moderate optimization; optimizes reasonably well but does not + degrade compilation time significantly. + + * + ‘-O2’ + + Full optimization; generates highly optimized code and has the + slowest compilation time. + + * + ‘-O3’ + + Full optimization as in ‘-O2’; also uses more aggressive + automatic inlining of subprograms within a unit (*note + Inlining of Subprograms: 100.) and attempts to vectorize + loops. + + * + ‘-Os’ + + Optimize space usage (code and data) of resulting program. + + Higher optimization levels perform more global transformations on the + program and apply more expensive analysis algorithms in order to + generate faster and more compact code. The price in compilation time, + and the resulting improvement in execution time, both depend on the + particular application and the hardware environment. You should + experiment to find the best level for your application. + + Since the precise set of optimizations done at each level will vary from + release to release (and sometime from target to target), it is best to + think of the optimization settings in general terms. See the `Options + That Control Optimization' section in ‘Using the GNU Compiler Collection + (GCC)’ for details about the ‘-O’ settings and a number of ‘-f’ options + that individually enable or disable specific optimizations. + + Unlike some other compilation systems, ‘gcc’ has been tested extensively + at all optimization levels. There are some bugs which appear only with + optimization turned on, but there have also been bugs which show up only + in `unoptimized' code. Selecting a lower level of optimization does not + improve the reliability of the code generator, which in practice is + highly reliable at all optimization levels. + + Note regarding the use of ‘-O3’: The use of this optimization level + ought not to be automatically preferred over that of level ‘-O2’, since + it often results in larger executables which may run more slowly. See + further discussion of this point in *note Inlining of Subprograms: 100. + +  + File: gnat_ugn.info, Node: Debugging Optimized Code, Next: Inlining of Subprograms, Prev: Optimization Levels, Up: Performance Considerations + + 6.3.1.4 Debugging Optimized Code + ................................ + + Although it is possible to do a reasonable amount of debugging at + nonzero optimization levels, the higher the level the more likely that + source-level constructs will have been eliminated by optimization. For + example, if a loop is strength-reduced, the loop control variable may be + completely eliminated and thus cannot be displayed in the debugger. + This can only happen at ‘-O2’ or ‘-O3’. Explicit temporary variables + that you code might be eliminated at level ‘-O1’ or higher. + + The use of the ‘-g’ switch, which is needed for source-level debugging, + affects the size of the program executable on disk, and indeed the + debugging information can be quite large. However, it has no effect on + the generated code (and thus does not degrade performance) + + Since the compiler generates debugging tables for a compilation unit + before it performs optimizations, the optimizing transformations may + invalidate some of the debugging data. You therefore need to anticipate + certain anomalous situations that may arise while debugging optimized + code. These are the most common cases: + + * `The ‘hopping Program Counter’:' Repeated ‘step’ or ‘next’ commands + show the PC bouncing back and forth in the code. This may result + from any of the following optimizations: + + - `Common subexpression elimination:' using a single instance of + code for a quantity that the source computes several times. + As a result you may not be able to stop on what looks like a + statement. + + - `Invariant code motion:' moving an expression that does not + change within a loop, to the beginning of the loop. + + - `Instruction scheduling:' moving instructions so as to overlap + loads and stores (typically) with other code, or in general to + move computations of values closer to their uses. Often this + causes you to pass an assignment statement without the + assignment happening and then later bounce back to the + statement when the value is actually needed. Placing a + breakpoint on a line of code and then stepping over it may, + therefore, not always cause all the expected side-effects. + + * `The ‘big leap’:' More commonly known as `cross-jumping', in which + two identical pieces of code are merged and the program counter + suddenly jumps to a statement that is not supposed to be executed, + simply because it (and the code following) translates to the same + thing as the code that `was' supposed to be executed. This effect + is typically seen in sequences that end in a jump, such as a + ‘goto’, a ‘return’, or a ‘break’ in a C ‘switch’ statement. + + * `The ‘roving variable’:' The symptom is an unexpected value in a + variable. There are various reasons for this effect: + + - In a subprogram prologue, a parameter may not yet have been + moved to its ‘home’. + + - A variable may be dead, and its register re-used. This is + probably the most common cause. + + - As mentioned above, the assignment of a value to a variable + may have been moved. + + - A variable may be eliminated entirely by value propagation or + other means. In this case, GCC may incorrectly generate + debugging information for the variable + + In general, when an unexpected value appears for a local variable + or parameter you should first ascertain if that value was actually + computed by your program, as opposed to being incorrectly reported + by the debugger. Record fields or array elements in an object + designated by an access value are generally less of a problem, once + you have ascertained that the access value is sensible. Typically, + this means checking variables in the preceding code and in the + calling subprogram to verify that the value observed is explainable + from other values (one must apply the procedure recursively to + those other values); or re-running the code and stopping a little + earlier (perhaps before the call) and stepping to better see how + the variable obtained the value in question; or continuing to step + `from' the point of the strange value to see if code motion had + simply moved the variable’s assignments later. + + In light of such anomalies, a recommended technique is to use ‘-O0’ + early in the software development cycle, when extensive debugging + capabilities are most needed, and then move to ‘-O1’ and later ‘-O2’ as + the debugger becomes less critical. Whether to use the ‘-g’ switch in + the release version is a release management issue. Note that if you use + ‘-g’ you can then use the ‘strip’ program on the resulting executable, + which removes both debugging information and global symbols. + +  + File: gnat_ugn.info, Node: Inlining of Subprograms, Next: Floating Point Operations, Prev: Debugging Optimized Code, Up: Performance Considerations + + 6.3.1.5 Inlining of Subprograms + ............................... + + A call to a subprogram in the current unit is inlined if all the + following conditions are met: + + * The optimization level is at least ‘-O1’. + + * The called subprogram is suitable for inlining: It must be small + enough and not contain something that ‘gcc’ cannot support in + inlined subprograms. + + * Any one of the following applies: ‘pragma Inline’ is applied to the + subprogram; the subprogram is local to the unit and called once + from within it; the subprogram is small and optimization level + ‘-O2’ is specified; optimization level ‘-O3’ is specified. + + Calls to subprograms in `with'ed units are normally not inlined. To + achieve actual inlining (that is, replacement of the call by the code in + the body of the subprogram), the following conditions must all be true: + + * The optimization level is at least ‘-O1’. + + * The called subprogram is suitable for inlining: It must be small + enough and not contain something that ‘gcc’ cannot support in + inlined subprograms. + + * There is a ‘pragma Inline’ for the subprogram. + + * The ‘-gnatn’ switch is used on the command line. + + Even if all these conditions are met, it may not be possible for the + compiler to inline the call, due to the length of the body, or features + in the body that make it impossible for the compiler to do the inlining. + + Note that specifying the ‘-gnatn’ switch causes additional compilation + dependencies. Consider the following: + + package R is + procedure Q; + pragma Inline (Q); + end R; + package body R is + ... + end R; + + with R; + procedure Main is + begin + ... + R.Q; + end Main; + + With the default behavior (no ‘-gnatn’ switch specified), the + compilation of the ‘Main’ procedure depends only on its own source, + ‘main.adb’, and the spec of the package in file ‘r.ads’. This means + that editing the body of ‘R’ does not require recompiling ‘Main’. + + On the other hand, the call ‘R.Q’ is not inlined under these + circumstances. If the ‘-gnatn’ switch is present when ‘Main’ is + compiled, the call will be inlined if the body of ‘Q’ is small enough, + but now ‘Main’ depends on the body of ‘R’ in ‘r.adb’ as well as on the + spec. This means that if this body is edited, the main program must be + recompiled. Note that this extra dependency occurs whether or not the + call is in fact inlined by ‘gcc’. + + The use of front end inlining with ‘-gnatN’ generates similar additional + dependencies. + + Note: The ‘-fno-inline’ switch overrides all other conditions and + ensures that no inlining occurs, unless requested with pragma + Inline_Always for ‘gcc’ back-ends. The extra dependences resulting from + ‘-gnatn’ will still be active, even if this switch is used to suppress + the resulting inlining actions. + + Note: The ‘-fno-inline-functions’ switch can be used to prevent + automatic inlining of subprograms if ‘-O3’ is used. + + Note: The ‘-fno-inline-small-functions’ switch can be used to prevent + automatic inlining of small subprograms if ‘-O2’ is used. + + Note: The ‘-fno-inline-functions-called-once’ switch can be used to + prevent inlining of subprograms local to the unit and called once from + within it if ‘-O1’ is used. + + Note regarding the use of ‘-O3’: ‘-gnatn’ is made up of two sub-switches + ‘-gnatn1’ and ‘-gnatn2’ that can be directly specified in lieu of it, + ‘-gnatn’ being translated into one of them based on the optimization + level. With ‘-O2’ or below, ‘-gnatn’ is equivalent to ‘-gnatn1’ which + activates pragma ‘Inline’ with moderate inlining across modules. With + ‘-O3’, ‘-gnatn’ is equivalent to ‘-gnatn2’ which activates pragma + ‘Inline’ with full inlining across modules. If you have used pragma + ‘Inline’ in appropriate cases, then it is usually much better to use + ‘-O2’ and ‘-gnatn’ and avoid the use of ‘-O3’ which has the additional + effect of inlining subprograms you did not think should be inlined. We + have found that the use of ‘-O3’ may slow down the compilation and + increase the code size by performing excessive inlining, leading to + increased instruction cache pressure from the increased code size and + thus minor performance improvements. So the bottom line here is that + you should not automatically assume that ‘-O3’ is better than ‘-O2’, and + indeed you should use ‘-O3’ only if tests show that it actually improves + performance for your program. + +  + File: gnat_ugn.info, Node: Floating Point Operations, Next: Vectorization of loops, Prev: Inlining of Subprograms, Up: Performance Considerations + + 6.3.1.6 Floating Point Operations + ................................. + + On almost all targets, GNAT maps Float and Long_Float to the 32-bit and + 64-bit standard IEEE floating-point representations, and operations will + use standard IEEE arithmetic as provided by the processor. On most, but + not all, architectures, the attribute Machine_Overflows is False for + these types, meaning that the semantics of overflow is + implementation-defined. In the case of GNAT, these semantics correspond + to the normal IEEE treatment of infinities and NaN (not a number) + values. For example, 1.0 / 0.0 yields plus infinitiy and 0.0 / 0.0 + yields a NaN. By avoiding explicit overflow checks, the performance is + greatly improved on many targets. However, if required, floating-point + overflow can be enabled by the use of the pragma Check_Float_Overflow. + + Another consideration that applies specifically to x86 32-bit + architectures is which form of floating-point arithmetic is used. By + default the operations use the old style x86 floating-point, which + implements an 80-bit extended precision form (on these architectures the + type Long_Long_Float corresponds to that form). In addition, generation + of efficient code in this mode means that the extended precision form + will be used for intermediate results. This may be helpful in improving + the final precision of a complex expression. However it means that the + results obtained on the x86 will be different from those on other + architectures, and for some algorithms, the extra intermediate precision + can be detrimental. + + In addition to this old-style floating-point, all modern x86 chips + implement an alternative floating-point operation model referred to as + SSE2. In this model there is no extended form, and furthermore + execution performance is significantly enhanced. To force GNAT to use + this more modern form, use both of the switches: + + -msse2 -mfpmath=sse + + A unit compiled with these switches will automatically use the more + efficient SSE2 instruction set for Float and Long_Float operations. + Note that the ABI has the same form for both floating-point models, so + it is permissible to mix units compiled with and without these switches. + +  + File: gnat_ugn.info, Node: Vectorization of loops, Next: Other Optimization Switches, Prev: Floating Point Operations, Up: Performance Considerations + + 6.3.1.7 Vectorization of loops + .............................. + + You can take advantage of the auto-vectorizer present in the ‘gcc’ back + end to vectorize loops with GNAT. The corresponding command line switch + is ‘-ftree-vectorize’ but, as it is enabled by default at ‘-O3’ and + other aggressive optimizations helpful for vectorization also are + enabled by default at this level, using ‘-O3’ directly is recommended. + + You also need to make sure that the target architecture features a + supported SIMD instruction set. For example, for the x86 architecture, + you should at least specify ‘-msse2’ to get significant vectorization + (but you don’t need to specify it for x86-64 as it is part of the base + 64-bit architecture). Similarly, for the PowerPC architecture, you + should specify ‘-maltivec’. + + The preferred loop form for vectorization is the ‘for’ iteration scheme. + Loops with a ‘while’ iteration scheme can also be vectorized if they are + very simple, but the vectorizer will quickly give up otherwise. With + either iteration scheme, the flow of control must be straight, in + particular no ‘exit’ statement may appear in the loop body. The loop + may however contain a single nested loop, if it can be vectorized when + considered alone: + + A : array (1..4, 1..4) of Long_Float; + S : array (1..4) of Long_Float; + + procedure Sum is + begin + for I in A'Range(1) loop + for J in A'Range(2) loop + S (I) := S (I) + A (I, J); + end loop; + end loop; + end Sum; + + The vectorizable operations depend on the targeted SIMD instruction set, + but the adding and some of the multiplying operators are generally + supported, as well as the logical operators for modular types. Note + that compiling with ‘-gnatp’ might well reveal cases where some checks + do thwart vectorization. + + Type conversions may also prevent vectorization if they involve + semantics that are not directly supported by the code generator or the + SIMD instruction set. A typical example is direct conversion from + floating-point to integer types. The solution in this case is to use + the following idiom: + + Integer (S'Truncation (F)) + + if ‘S’ is the subtype of floating-point object ‘F’. + + In most cases, the vectorizable loops are loops that iterate over + arrays. All kinds of array types are supported, i.e. constrained array + types with static bounds: + + type Array_Type is array (1 .. 4) of Long_Float; + + constrained array types with dynamic bounds: + + type Array_Type is array (1 .. Q.N) of Long_Float; + + type Array_Type is array (Q.K .. 4) of Long_Float; + + type Array_Type is array (Q.K .. Q.N) of Long_Float; + + or unconstrained array types: + + type Array_Type is array (Positive range <>) of Long_Float; + + The quality of the generated code decreases when the dynamic aspect of + the array type increases, the worst code being generated for + unconstrained array types. This is so because, the less information the + compiler has about the bounds of the array, the more fallback code it + needs to generate in order to fix things up at run time. + + It is possible to specify that a given loop should be subject to + vectorization preferably to other optimizations by means of pragma + ‘Loop_Optimize’: + + pragma Loop_Optimize (Vector); + + placed immediately within the loop will convey the appropriate hint to + the compiler for this loop. + + It is also possible to help the compiler generate better vectorized code + for a given loop by asserting that there are no loop-carried + dependencies in the loop. Consider for example the procedure: + + type Arr is array (1 .. 4) of Long_Float; + + procedure Add (X, Y : not null access Arr; R : not null access Arr) is + begin + for I in Arr'Range loop + R(I) := X(I) + Y(I); + end loop; + end; + + By default, the compiler cannot unconditionally vectorize the loop + because assigning to a component of the array designated by R in one + iteration could change the value read from the components of the array + designated by X or Y in a later iteration. As a result, the compiler + will generate two versions of the loop in the object code, one + vectorized and the other not vectorized, as well as a test to select the + appropriate version at run time. This can be overcome by another hint: + + pragma Loop_Optimize (Ivdep); + + placed immediately within the loop will tell the compiler that it can + safely omit the non-vectorized version of the loop as well as the + run-time test. + +  + File: gnat_ugn.info, Node: Other Optimization Switches, Next: Optimization and Strict Aliasing, Prev: Vectorization of loops, Up: Performance Considerations + + 6.3.1.8 Other Optimization Switches + ................................... + + Since GNAT uses the ‘gcc’ back end, all the specialized ‘gcc’ + optimization switches are potentially usable. These switches have not + been extensively tested with GNAT but can generally be expected to work. + Examples of switches in this category are ‘-funroll-loops’ and the + various target-specific ‘-m’ options (in particular, it has been + observed that ‘-march=xxx’ can significantly improve performance on + appropriate machines). For full details of these switches, see the + `Submodel Options' section in the `Hardware Models and Configurations' + chapter of ‘Using the GNU Compiler Collection (GCC)’. + +  + File: gnat_ugn.info, Node: Optimization and Strict Aliasing, Next: Aliased Variables and Optimization, Prev: Other Optimization Switches, Up: Performance Considerations + + 6.3.1.9 Optimization and Strict Aliasing + ........................................ + + The strong typing capabilities of Ada allow an optimizer to generate + efficient code in situations where other languages would be forced to + make worst case assumptions preventing such optimizations. Consider the + following example: + + procedure R is + type Int1 is new Integer; + type Int2 is new Integer; + type Int1A is access Int1; + type Int2A is access Int2; + Int1V : Int1A; + Int2V : Int2A; + ... + + begin + ... + for J in Data'Range loop + if Data (J) = Int1V.all then + Int2V.all := Int2V.all + 1; + end if; + end loop; + ... + end R; + + In this example, since the variable ‘Int1V’ can only access objects of + type ‘Int1’, and ‘Int2V’ can only access objects of type ‘Int2’, there + is no possibility that the assignment to ‘Int2V.all’ affects the value + of ‘Int1V.all’. This means that the compiler optimizer can “know” that + the value ‘Int1V.all’ is constant for all iterations of the loop and + avoid the extra memory reference required to dereference it each time + through the loop. + + This kind of optimization, called strict aliasing analysis, is triggered + by specifying an optimization level of ‘-O2’ or higher or ‘-Os’ and + allows GNAT to generate more efficient code when access values are + involved. + + However, although this optimization is always correct in terms of the + formal semantics of the Ada Reference Manual, difficulties can arise if + features like ‘Unchecked_Conversion’ are used to break the typing + system. Consider the following complete program example: + + package p1 is + type int1 is new integer; + type int2 is new integer; + type a1 is access int1; + type a2 is access int2; + end p1; + + with p1; use p1; + package p2 is + function to_a2 (Input : a1) return a2; + end p2; + + with Unchecked_Conversion; + package body p2 is + function to_a2 (Input : a1) return a2 is + function to_a2u is + new Unchecked_Conversion (a1, a2); + begin + return to_a2u (Input); + end to_a2; + end p2; + + with p2; use p2; + with p1; use p1; + with Text_IO; use Text_IO; + procedure m is + v1 : a1 := new int1; + v2 : a2 := to_a2 (v1); + begin + v1.all := 1; + v2.all := 0; + put_line (int1'image (v1.all)); + end; + + This program prints out 0 in ‘-O0’ or ‘-O1’ mode, but it prints out 1 in + ‘-O2’ mode. That’s because in strict aliasing mode, the compiler can + and does assume that the assignment to ‘v2.all’ could not affect the + value of ‘v1.all’, since different types are involved. + + This behavior is not a case of non-conformance with the standard, since + the Ada RM specifies that an unchecked conversion where the resulting + bit pattern is not a correct value of the target type can result in an + abnormal value and attempting to reference an abnormal value makes the + execution of a program erroneous. That’s the case here since the result + does not point to an object of type ‘int2’. This means that the effect + is entirely unpredictable. + + However, although that explanation may satisfy a language lawyer, in + practice an applications programmer expects an unchecked conversion + involving pointers to create true aliases and the behavior of printing 1 + seems plain wrong. In this case, the strict aliasing optimization is + unwelcome. + + Indeed the compiler recognizes this possibility, and the unchecked + conversion generates a warning: + + p2.adb:5:07: warning: possible aliasing problem with type "a2" + p2.adb:5:07: warning: use -fno-strict-aliasing switch for references + p2.adb:5:07: warning: or use "pragma No_Strict_Aliasing (a2);" + + Unfortunately the problem is recognized when compiling the body of + package ‘p2’, but the actual “bad” code is generated while compiling the + body of ‘m’ and this latter compilation does not see the suspicious + ‘Unchecked_Conversion’. + + As implied by the warning message, there are approaches you can use to + avoid the unwanted strict aliasing optimization in a case like this. + + One possibility is to simply avoid the use of ‘-O2’, but that is a bit + drastic, since it throws away a number of useful optimizations that do + not involve strict aliasing assumptions. + + A less drastic approach is to compile the program using the option + ‘-fno-strict-aliasing’. Actually it is only the unit containing the + dereferencing of the suspicious pointer that needs to be compiled. So + in this case, if we compile unit ‘m’ with this switch, then we get the + expected value of zero printed. Analyzing which units might need the + switch can be painful, so a more reasonable approach is to compile the + entire program with options ‘-O2’ and ‘-fno-strict-aliasing’. If the + performance is satisfactory with this combination of options, then the + advantage is that the entire issue of possible “wrong” optimization due + to strict aliasing is avoided. + + To avoid the use of compiler switches, the configuration pragma + ‘No_Strict_Aliasing’ with no parameters may be used to specify that for + all access types, the strict aliasing optimization should be suppressed. + + However, these approaches are still overkill, in that they causes all + manipulations of all access values to be deoptimized. A more refined + approach is to concentrate attention on the specific access type + identified as problematic. + + First, if a careful analysis of uses of the pointer shows that there are + no possible problematic references, then the warning can be suppressed + by bracketing the instantiation of ‘Unchecked_Conversion’ to turn the + warning off: + + pragma Warnings (Off); + function to_a2u is + new Unchecked_Conversion (a1, a2); + pragma Warnings (On); + + Of course that approach is not appropriate for this particular example, + since indeed there is a problematic reference. In this case we can take + one of two other approaches. + + The first possibility is to move the instantiation of unchecked + conversion to the unit in which the type is declared. In this example, + we would move the instantiation of ‘Unchecked_Conversion’ from the body + of package ‘p2’ to the spec of package ‘p1’. Now the warning + disappears. That’s because any use of the access type knows there is a + suspicious unchecked conversion, and the strict aliasing optimization is + automatically suppressed for the type. + + If it is not practical to move the unchecked conversion to the same unit + in which the destination access type is declared (perhaps because the + source type is not visible in that unit), you may use pragma + ‘No_Strict_Aliasing’ for the type. This pragma must occur in the same + declarative sequence as the declaration of the access type: + + type a2 is access int2; + pragma No_Strict_Aliasing (a2); + + Here again, the compiler now knows that the strict aliasing optimization + should be suppressed for any reference to type ‘a2’ and the expected + behavior is obtained. + + Finally, note that although the compiler can generate warnings for + simple cases of unchecked conversions, there are tricker and more + indirect ways of creating type incorrect aliases which the compiler + cannot detect. Examples are the use of address overlays and unchecked + conversions involving composite types containing access types as + components. In such cases, no warnings are generated, but there can + still be aliasing problems. One safe coding practice is to forbid the + use of address clauses for type overlaying, and to allow unchecked + conversion only for primitive types. This is not really a significant + restriction since any possible desired effect can be achieved by + unchecked conversion of access values. + + The aliasing analysis done in strict aliasing mode can certainly have + significant benefits. We have seen cases of large scale application + code where the time is increased by up to 5% by turning this + optimization off. If you have code that includes significant usage of + unchecked conversion, you might want to just stick with ‘-O1’ and avoid + the entire issue. If you get adequate performance at this level of + optimization level, that’s probably the safest approach. If tests show + that you really need higher levels of optimization, then you can + experiment with ‘-O2’ and ‘-O2 -fno-strict-aliasing’ to see how much + effect this has on size and speed of the code. If you really need to + use ‘-O2’ with strict aliasing in effect, then you should review any + uses of unchecked conversion of access types, particularly if you are + getting the warnings described above. + +  + File: gnat_ugn.info, Node: Aliased Variables and Optimization, Next: Atomic Variables and Optimization, Prev: Optimization and Strict Aliasing, Up: Performance Considerations + + 6.3.1.10 Aliased Variables and Optimization + ........................................... + + There are scenarios in which programs may use low level techniques to + modify variables that otherwise might be considered to be unassigned. + For example, a variable can be passed to a procedure by reference, which + takes the address of the parameter and uses the address to modify the + variable’s value, even though it is passed as an IN parameter. Consider + the following example: + + procedure P is + Max_Length : constant Natural := 16; + type Char_Ptr is access all Character; + + procedure Get_String(Buffer: Char_Ptr; Size : Integer); + pragma Import (C, Get_String, "get_string"); + + Name : aliased String (1 .. Max_Length) := (others => ' '); + Temp : Char_Ptr; + + function Addr (S : String) return Char_Ptr is + function To_Char_Ptr is + new Ada.Unchecked_Conversion (System.Address, Char_Ptr); + begin + return To_Char_Ptr (S (S'First)'Address); + end; + + begin + Temp := Addr (Name); + Get_String (Temp, Max_Length); + end; + + where Get_String is a C function that uses the address in Temp to modify + the variable ‘Name’. This code is dubious, and arguably erroneous, and + the compiler would be entitled to assume that ‘Name’ is never modified, + and generate code accordingly. + + However, in practice, this would cause some existing code that seems to + work with no optimization to start failing at high levels of + optimzization. + + What the compiler does for such cases is to assume that marking a + variable as aliased indicates that some “funny business” may be going + on. The optimizer recognizes the aliased keyword and inhibits + optimizations that assume the value cannot be assigned. This means that + the above example will in fact “work” reliably, that is, it will produce + the expected results. + +  + File: gnat_ugn.info, Node: Atomic Variables and Optimization, Next: Passive Task Optimization, Prev: Aliased Variables and Optimization, Up: Performance Considerations + + 6.3.1.11 Atomic Variables and Optimization + .......................................... + + There are two considerations with regard to performance when atomic + variables are used. + + First, the RM only guarantees that access to atomic variables be atomic, + it has nothing to say about how this is achieved, though there is a + strong implication that this should not be achieved by explicit locking + code. Indeed GNAT will never generate any locking code for atomic + variable access (it will simply reject any attempt to make a variable or + type atomic if the atomic access cannot be achieved without such locking + code). + + That being said, it is important to understand that you cannot assume + that the entire variable will always be accessed. Consider this + example: + + type R is record + A,B,C,D : Character; + end record; + for R'Size use 32; + for R'Alignment use 4; + + RV : R; + pragma Atomic (RV); + X : Character; + ... + X := RV.B; + + You cannot assume that the reference to ‘RV.B’ will read the entire + 32-bit variable with a single load instruction. It is perfectly + legitimate if the hardware allows it to do a byte read of just the B + field. This read is still atomic, which is all the RM requires. GNAT + can and does take advantage of this, depending on the architecture and + optimization level. Any assumption to the contrary is non-portable and + risky. Even if you examine the assembly language and see a full 32-bit + load, this might change in a future version of the compiler. + + If your application requires that all accesses to ‘RV’ in this example + be full 32-bit loads, you need to make a copy for the access as in: + + declare + RV_Copy : constant R := RV; + begin + X := RV_Copy.B; + end; + + Now the reference to RV must read the whole variable. Actually one can + imagine some compiler which figures out that the whole copy is not + required (because only the B field is actually accessed), but GNAT + certainly won’t do that, and we don’t know of any compiler that would + not handle this right, and the above code will in practice work portably + across all architectures (that permit the Atomic declaration). + + The second issue with atomic variables has to do with the possible + requirement of generating synchronization code. For more details on + this, consult the sections on the pragmas + Enable/Disable_Atomic_Synchronization in the GNAT Reference Manual. If + performance is critical, and such synchronization code is not required, + it may be useful to disable it. + +  + File: gnat_ugn.info, Node: Passive Task Optimization, Prev: Atomic Variables and Optimization, Up: Performance Considerations + + 6.3.1.12 Passive Task Optimization + .................................. + + A passive task is one which is sufficiently simple that in theory a + compiler could recognize it an implement it efficiently without creating + a new thread. The original design of Ada 83 had in mind this kind of + passive task optimization, but only a few Ada 83 compilers attempted it. + The problem was that it was difficult to determine the exact conditions + under which the optimization was possible. The result is a very fragile + optimization where a very minor change in the program can suddenly + silently make a task non-optimizable. + + With the revisiting of this issue in Ada 95, there was general agreement + that this approach was fundamentally flawed, and the notion of protected + types was introduced. When using protected types, the restrictions are + well defined, and you KNOW that the operations will be optimized, and + furthermore this optimized performance is fully portable. + + Although it would theoretically be possible for GNAT to attempt to do + this optimization, but it really doesn’t make sense in the context of + Ada 95, and none of the Ada 95 compilers implement this optimization as + far as we know. In particular GNAT never attempts to perform this + optimization. + + In any new Ada 95 code that is written, you should always use protected + types in place of tasks that might be able to be optimized in this + manner. Of course this does not help if you have legacy Ada 83 code + that depends on this optimization, but it is unusual to encounter a case + where the performance gains from this optimization are significant. + + Your program should work correctly without this optimization. If you + have performance problems, then the most practical approach is to figure + out exactly where these performance problems arise, and update those + particular tasks to be protected types. Note that typically clients of + the tasks who call entries, will not have to be modified, only the task + definition itself. + +  + File: gnat_ugn.info, Node: Text_IO Suggestions, Next: Reducing Size of Executables with Unused Subprogram/Data Elimination, Prev: Performance Considerations, Up: Improving Performance + + 6.3.2 ‘Text_IO’ Suggestions + --------------------------- + + The ‘Ada.Text_IO’ package has fairly high overheads due in part to the + requirement of maintaining page and line counts. If performance is + critical, a recommendation is to use ‘Stream_IO’ instead of ‘Text_IO’ + for volume output, since this package has less overhead. + + If ‘Text_IO’ must be used, note that by default output to the standard + output and standard error files is unbuffered (this provides better + behavior when output statements are used for debugging, or if the + progress of a program is observed by tracking the output, e.g. by using + the Unix `tail -f' command to watch redirected output. + + If you are generating large volumes of output with ‘Text_IO’ and + performance is an important factor, use a designated file instead of the + standard output file, or change the standard output file to be buffered + using ‘Interfaces.C_Streams.setvbuf’. + +  + File: gnat_ugn.info, Node: Reducing Size of Executables with Unused Subprogram/Data Elimination, Prev: Text_IO Suggestions, Up: Improving Performance + + 6.3.3 Reducing Size of Executables with Unused Subprogram/Data Elimination + -------------------------------------------------------------------------- + + This section describes how you can eliminate unused subprograms and data + from your executable just by setting options at compilation time. + + * Menu: + + * About unused subprogram/data elimination:: + * Compilation options:: + * Example of unused subprogram/data elimination:: + +  + File: gnat_ugn.info, Node: About unused subprogram/data elimination, Next: Compilation options, Up: Reducing Size of Executables with Unused Subprogram/Data Elimination + + 6.3.3.1 About unused subprogram/data elimination + ................................................ + + By default, an executable contains all code and data of its composing + objects (directly linked or coming from statically linked libraries), + even data or code never used by this executable. + + This feature will allow you to eliminate such unused code from your + executable, making it smaller (in disk and in memory). + + This functionality is available on all Linux platforms except for the + IA-64 architecture and on all cross platforms using the ELF binary file + format. In both cases GNU binutils version 2.16 or later are required + to enable it. + +  + File: gnat_ugn.info, Node: Compilation options, Next: Example of unused subprogram/data elimination, Prev: About unused subprogram/data elimination, Up: Reducing Size of Executables with Unused Subprogram/Data Elimination + + 6.3.3.2 Compilation options + ........................... + + The operation of eliminating the unused code and data from the final + executable is directly performed by the linker. + + In order to do this, it has to work with objects compiled with the + following options: ‘-ffunction-sections’ ‘-fdata-sections’. + + These options are usable with C and Ada files. They will place + respectively each function or data in a separate section in the + resulting object file. + + Once the objects and static libraries are created with these options, + the linker can perform the dead code elimination. You can do this by + setting the ‘-Wl,--gc-sections’ option to gcc command or in the ‘-largs’ + section of ‘gnatmake’. This will perform a garbage collection of code + and data never referenced. + + If the linker performs a partial link (‘-r’ linker option), then you + will need to provide the entry point using the ‘-e’ / ‘--entry’ linker + option. + + Note that objects compiled without the ‘-ffunction-sections’ and + ‘-fdata-sections’ options can still be linked with the executable. + However, no dead code elimination will be performed on those objects + (they will be linked as is). + + The GNAT static library is now compiled with -ffunction-sections and + -fdata-sections on some platforms. This allows you to eliminate the + unused code and data of the GNAT library from your executable. + +  + File: gnat_ugn.info, Node: Example of unused subprogram/data elimination, Prev: Compilation options, Up: Reducing Size of Executables with Unused Subprogram/Data Elimination + + 6.3.3.3 Example of unused subprogram/data elimination + ..................................................... + + Here is a simple example: + + with Aux; + + procedure Test is + begin + Aux.Used (10); + end Test; + + package Aux is + Used_Data : Integer; + Unused_Data : Integer; + + procedure Used (Data : Integer); + procedure Unused (Data : Integer); + end Aux; + + package body Aux is + procedure Used (Data : Integer) is + begin + Used_Data := Data; + end Used; + + procedure Unused (Data : Integer) is + begin + Unused_Data := Data; + end Unused; + end Aux; + + ‘Unused’ and ‘Unused_Data’ are never referenced in this code excerpt, + and hence they may be safely removed from the final executable. + + $ gnatmake test + + $ nm test | grep used + 020015f0 T aux__unused + 02005d88 B aux__unused_data + 020015cc T aux__used + 02005d84 B aux__used_data + + $ gnatmake test -cargs -fdata-sections -ffunction-sections \\ + -largs -Wl,--gc-sections + + $ nm test | grep used + 02005350 T aux__used + 0201ffe0 B aux__used_data + + It can be observed that the procedure ‘Unused’ and the object + ‘Unused_Data’ are removed by the linker when using the appropriate + options. + +  + File: gnat_ugn.info, Node: Overflow Check Handling in GNAT, Next: Performing Dimensionality Analysis in GNAT, Prev: Improving Performance, Up: GNAT and Program Execution + + 6.4 Overflow Check Handling in GNAT + =================================== + + This section explains how to control the handling of overflow checks. + + * Menu: + + * Background:: + * Management of Overflows in GNAT:: + * Specifying the Desired Mode:: + * Default Settings:: + * Implementation Notes:: + +  + File: gnat_ugn.info, Node: Background, Next: Management of Overflows in GNAT, Up: Overflow Check Handling in GNAT + + 6.4.1 Background + ---------------- + + Overflow checks are checks that the compiler may make to ensure that + intermediate results are not out of range. For example: + + A : Integer; + ... + A := A + 1; + + If ‘A’ has the value ‘Integer'Last’, then the addition may cause + overflow since the result is out of range of the type ‘Integer’. In + this case ‘Constraint_Error’ will be raised if checks are enabled. + + A trickier situation arises in examples like the following: + + A, C : Integer; + ... + A := (A + 1) + C; + + where ‘A’ is ‘Integer'Last’ and ‘C’ is ‘-1’. Now the final result of + the expression on the right hand side is ‘Integer'Last’ which is in + range, but the question arises whether the intermediate addition of ‘(A + + 1)’ raises an overflow error. + + The (perhaps surprising) answer is that the Ada language definition does + not answer this question. Instead it leaves it up to the implementation + to do one of two things if overflow checks are enabled. + + * raise an exception (‘Constraint_Error’), or + + * yield the correct mathematical result which is then used in + subsequent operations. + + If the compiler chooses the first approach, then the assignment of this + example will indeed raise ‘Constraint_Error’ if overflow checking is + enabled, or result in erroneous execution if overflow checks are + suppressed. + + But if the compiler chooses the second approach, then it can perform + both additions yielding the correct mathematical result, which is in + range, so no exception will be raised, and the right result is obtained, + regardless of whether overflow checks are suppressed. + + Note that in the first example an exception will be raised in either + case, since if the compiler gives the correct mathematical result for + the addition, it will be out of range of the target type of the + assignment, and thus fails the range check. + + This lack of specified behavior in the handling of overflow for + intermediate results is a source of non-portability, and can thus be + problematic when programs are ported. Most typically this arises in a + situation where the original compiler did not raise an exception, and + then the application is moved to a compiler where the check is performed + on the intermediate result and an unexpected exception is raised. + + Furthermore, when using Ada 2012’s preconditions and other assertion + forms, another issue arises. Consider: + + procedure P (A, B : Integer) with + Pre => A + B <= Integer'Last; + + One often wants to regard arithmetic in a context like this from a + mathematical point of view. So for example, if the two actual + parameters for a call to ‘P’ are both ‘Integer'Last’, then the + precondition should be regarded as False. If we are executing in a mode + with run-time checks enabled for preconditions, then we would like this + precondition to fail, rather than raising an exception because of the + intermediate overflow. + + However, the language definition leaves the specification of whether the + above condition fails (raising ‘Assert_Error’) or causes an intermediate + overflow (raising ‘Constraint_Error’) up to the implementation. + + The situation is worse in a case such as the following: + + procedure Q (A, B, C : Integer) with + Pre => A + B + C <= Integer'Last; + + Consider the call + + Q (A => Integer'Last, B => 1, C => -1); + + From a mathematical point of view the precondition is True, but at run + time we may (but are not guaranteed to) get an exception raised because + of the intermediate overflow (and we really would prefer this + precondition to be considered True at run time). + +  + File: gnat_ugn.info, Node: Management of Overflows in GNAT, Next: Specifying the Desired Mode, Prev: Background, Up: Overflow Check Handling in GNAT + + 6.4.2 Management of Overflows in GNAT + ------------------------------------- + + To deal with the portability issue, and with the problem of mathematical + versus run-time interpretation of the expressions in assertions, GNAT + provides comprehensive control over the handling of intermediate + overflow. GNAT can operate in three modes, and furthemore, permits + separate selection of operating modes for the expressions within + assertions (here the term ‘assertions’ is used in the technical sense, + which includes preconditions and so forth) and for expressions appearing + outside assertions. + + The three modes are: + + * `Use base type for intermediate operations' (‘STRICT’) + + In this mode, all intermediate results for predefined arithmetic + operators are computed using the base type, and the result must be + in range of the base type. If this is not the case then either an + exception is raised (if overflow checks are enabled) or the + execution is erroneous (if overflow checks are suppressed). This + is the normal default mode. + + * `Most intermediate overflows avoided' (‘MINIMIZED’) + + In this mode, the compiler attempts to avoid intermediate overflows + by using a larger integer type, typically ‘Long_Long_Integer’, as + the type in which arithmetic is performed for predefined arithmetic + operators. This may be slightly more expensive at run time + (compared to suppressing intermediate overflow checks), though the + cost is negligible on modern 64-bit machines. For the examples + given earlier, no intermediate overflows would have resulted in + exceptions, since the intermediate results are all in the range of + ‘Long_Long_Integer’ (typically 64-bits on nearly all + implementations of GNAT). In addition, if checks are enabled, this + reduces the number of checks that must be made, so this choice may + actually result in an improvement in space and time behavior. + + However, there are cases where ‘Long_Long_Integer’ is not large + enough, consider the following example: + + procedure R (A, B, C, D : Integer) with + Pre => (A**2 * B**2) / (C**2 * D**2) <= 10; + + where ‘A’ = ‘B’ = ‘C’ = ‘D’ = ‘Integer'Last’. Now the intermediate + results are out of the range of ‘Long_Long_Integer’ even though the + final result is in range and the precondition is True (from a + mathematical point of view). In such a case, operating in this + mode, an overflow occurs for the intermediate computation (which is + why this mode says `most' intermediate overflows are avoided). In + this case, an exception is raised if overflow checks are enabled, + and the execution is erroneous if overflow checks are suppressed. + + * `All intermediate overflows avoided' (‘ELIMINATED’) + + In this mode, the compiler avoids all intermediate overflows by + using arbitrary precision arithmetic as required. In this mode, + the above example with ‘A**2 * B**2’ would not cause intermediate + overflow, because the intermediate result would be evaluated using + sufficient precision, and the result of evaluating the precondition + would be True. + + This mode has the advantage of avoiding any intermediate overflows, + but at the expense of significant run-time overhead, including the + use of a library (included automatically in this mode) for + multiple-precision arithmetic. + + This mode provides cleaner semantics for assertions, since now the + run-time behavior emulates true arithmetic behavior for the + predefined arithmetic operators, meaning that there is never a + conflict between the mathematical view of the assertion, and its + run-time behavior. + + Note that in this mode, the behavior is unaffected by whether or + not overflow checks are suppressed, since overflow does not occur. + It is possible for gigantic intermediate expressions to raise + ‘Storage_Error’ as a result of attempting to compute the results of + such expressions (e.g. ‘Integer'Last ** Integer'Last’) but + overflow is impossible. + + Note that these modes apply only to the evaluation of predefined + arithmetic, membership, and comparison operators for signed integer + arithmetic. + + For fixed-point arithmetic, checks can be suppressed. But if checks are + enabled then fixed-point values are always checked for overflow against + the base type for intermediate expressions (that is such checks always + operate in the equivalent of ‘STRICT’ mode). + + For floating-point, on nearly all architectures, ‘Machine_Overflows’ is + False, and IEEE infinities are generated, so overflow exceptions are + never raised. If you want to avoid infinities, and check that final + results of expressions are in range, then you can declare a constrained + floating-point type, and range checks will be carried out in the normal + manner (with infinite values always failing all range checks). + +  + File: gnat_ugn.info, Node: Specifying the Desired Mode, Next: Default Settings, Prev: Management of Overflows in GNAT, Up: Overflow Check Handling in GNAT + + 6.4.3 Specifying the Desired Mode + --------------------------------- + + The desired mode of for handling intermediate overflow can be specified + using either the ‘Overflow_Mode’ pragma or an equivalent compiler + switch. The pragma has the form + + pragma Overflow_Mode ([General =>] MODE [, [Assertions =>] MODE]); + + where ‘MODE’ is one of + + * ‘STRICT’: intermediate overflows checked (using base type) + + * ‘MINIMIZED’: minimize intermediate overflows + + * ‘ELIMINATED’: eliminate intermediate overflows + + The case is ignored, so ‘MINIMIZED’, ‘Minimized’ and ‘minimized’ all + have the same effect. + + If only the ‘General’ parameter is present, then the given ‘MODE’ + applies to expressions both within and outside assertions. If both + arguments are present, then ‘General’ applies to expressions outside + assertions, and ‘Assertions’ applies to expressions within assertions. + For example: + + pragma Overflow_Mode + (General => Minimized, Assertions => Eliminated); + + specifies that general expressions outside assertions be evaluated in + ‘minimize intermediate overflows’ mode, and expressions within + assertions be evaluated in ‘eliminate intermediate overflows’ mode. + This is often a reasonable choice, avoiding excessive overhead outside + assertions, but assuring a high degree of portability when importing + code from another compiler, while incurring the extra overhead for + assertion expressions to ensure that the behavior at run time matches + the expected mathematical behavior. + + The ‘Overflow_Mode’ pragma has the same scoping and placement rules as + pragma ‘Suppress’, so it can occur either as a configuration pragma, + specifying a default for the whole program, or in a declarative scope, + where it applies to the remaining declarations and statements in that + scope. + + Note that pragma ‘Overflow_Mode’ does not affect whether overflow checks + are enabled or suppressed. It only controls the method used to compute + intermediate values. To control whether overflow checking is enabled or + suppressed, use pragma ‘Suppress’ or ‘Unsuppress’ in the usual manner. + + Additionally, a compiler switch ‘-gnato?’ or ‘-gnato??’ can be used to + control the checking mode default (which can be subsequently overridden + using pragmas). + + Here ‘?’ is one of the digits ‘1’ through ‘3’: + + ‘1’ use base type for intermediate operations (‘STRICT’) + + + ‘2’ minimize intermediate overflows (‘MINIMIZED’) + + + ‘3’ eliminate intermediate overflows (‘ELIMINATED’) + + + As with the pragma, if only one digit appears then it applies to all + cases; if two digits are given, then the first applies outside + assertions, and the second within assertions. Thus the equivalent of + the example pragma above would be ‘-gnato23’. + + If no digits follow the ‘-gnato’, then it is equivalent to ‘-gnato11’, + causing all intermediate operations to be computed using the base type + (‘STRICT’ mode). + +  + File: gnat_ugn.info, Node: Default Settings, Next: Implementation Notes, Prev: Specifying the Desired Mode, Up: Overflow Check Handling in GNAT + + 6.4.4 Default Settings + ---------------------- + + The default mode for overflow checks is + + General => Strict + + which causes all computations both inside and outside assertions to use + the base type. + + This retains compatibility with previous versions of GNAT which + suppressed overflow checks by default and always used the base type for + computation of intermediate results. + + The switch ‘-gnato’ (with no digits following) is equivalent to + + General => Strict + + which causes overflow checking of all intermediate overflows both inside + and outside assertions against the base type. + + The pragma ‘Suppress (Overflow_Check)’ disables overflow checking, but + it has no effect on the method used for computing intermediate results. + + The pragma ‘Unsuppress (Overflow_Check)’ enables overflow checking, but + it has no effect on the method used for computing intermediate results. + +  + File: gnat_ugn.info, Node: Implementation Notes, Prev: Default Settings, Up: Overflow Check Handling in GNAT + + 6.4.5 Implementation Notes + -------------------------- + + In practice on typical 64-bit machines, the ‘MINIMIZED’ mode is + reasonably efficient, and can be generally used. It also helps to + ensure compatibility with code imported from some other compiler to + GNAT. + + Setting all intermediate overflows checking (‘CHECKED’ mode) makes sense + if you want to make sure that your code is compatible with any other + possible Ada implementation. This may be useful in ensuring portability + for code that is to be exported to some other compiler than GNAT. + + The Ada standard allows the reassociation of expressions at the same + precedence level if no parentheses are present. For example, ‘A+B+C’ + parses as though it were ‘(A+B)+C’, but the compiler can reintepret this + as ‘A+(B+C)’, possibly introducing or eliminating an overflow exception. + The GNAT compiler never takes advantage of this freedom, and the + expression ‘A+B+C’ will be evaluated as ‘(A+B)+C’. If you need the + other order, you can write the parentheses explicitly ‘A+(B+C)’ and GNAT + will respect this order. + + The use of ‘ELIMINATED’ mode will cause the compiler to automatically + include an appropriate arbitrary precision integer arithmetic package. + The compiler will make calls to this package, though only in cases where + it cannot be sure that ‘Long_Long_Integer’ is sufficient to guard + against intermediate overflows. This package does not use dynamic + allocation, but it does use the secondary stack, so an appropriate + secondary stack package must be present (this is always true for + standard full Ada, but may require specific steps for restricted run + times such as ZFP). + + Although ‘ELIMINATED’ mode causes expressions to use arbitrary precision + arithmetic, avoiding overflow, the final result must be in an + appropriate range. This is true even if the final result is of type + ‘[Long_[Long_]]Integer'Base’, which still has the same bounds as its + associated constrained type at run-time. + + Currently, the ‘ELIMINATED’ mode is only available on target platforms + for which ‘Long_Long_Integer’ is 64-bits (nearly all GNAT platforms). + +  + File: gnat_ugn.info, Node: Performing Dimensionality Analysis in GNAT, Next: Stack Related Facilities, Prev: Overflow Check Handling in GNAT, Up: GNAT and Program Execution + + 6.5 Performing Dimensionality Analysis in GNAT + ============================================== + + The GNAT compiler supports dimensionality checking. The user can + specify physical units for objects, and the compiler will verify that + uses of these objects are compatible with their dimensions, in a fashion + that is familiar to engineering practice. The dimensions of algebraic + expressions (including powers with static exponents) are computed from + their constituents. + + This feature depends on Ada 2012 aspect specifications, and is available + from version 7.0.1 of GNAT onwards. The GNAT-specific aspect + ‘Dimension_System’ allows you to define a system of units; the aspect + ‘Dimension’ then allows the user to declare dimensioned quantities + within a given system. (These aspects are described in the + `Implementation Defined Aspects' chapter of the `GNAT Reference + Manual'). + + The major advantage of this model is that it does not require the + declaration of multiple operators for all possible combinations of + types: it is only necessary to use the proper subtypes in object + declarations. + + The simplest way to impose dimensionality checking on a computation is + to make use of one of the instantiations of the package + ‘System.Dim.Generic_Mks’, which are part of the GNAT library. This + generic package defines a floating-point type ‘MKS_Type’, for which a + sequence of dimension names are specified, together with their + conventional abbreviations. The following should be read together with + the full specification of the package, in file ‘s-digemk.ads’. + + type Mks_Type is new Float_Type + with + Dimension_System => ( + (Unit_Name => Meter, Unit_Symbol => 'm', Dim_Symbol => 'L'), + (Unit_Name => Kilogram, Unit_Symbol => "kg", Dim_Symbol => 'M'), + (Unit_Name => Second, Unit_Symbol => 's', Dim_Symbol => 'T'), + (Unit_Name => Ampere, Unit_Symbol => 'A', Dim_Symbol => 'I'), + (Unit_Name => Kelvin, Unit_Symbol => 'K', Dim_Symbol => "Theta"), + (Unit_Name => Mole, Unit_Symbol => "mol", Dim_Symbol => 'N'), + (Unit_Name => Candela, Unit_Symbol => "cd", Dim_Symbol => 'J')); + + The package then defines a series of subtypes that correspond to these + conventional units. For example: + + subtype Length is Mks_Type + with + Dimension => (Symbol => 'm', Meter => 1, others => 0); + + and similarly for ‘Mass’, ‘Time’, ‘Electric_Current’, + ‘Thermodynamic_Temperature’, ‘Amount_Of_Substance’, and + ‘Luminous_Intensity’ (the standard set of units of the SI system). + + The package also defines conventional names for values of each unit, for + example: + + m : constant Length := 1.0; + kg : constant Mass := 1.0; + s : constant Time := 1.0; + A : constant Electric_Current := 1.0; + + as well as useful multiples of these units: + + cm : constant Length := 1.0E-02; + g : constant Mass := 1.0E-03; + min : constant Time := 60.0; + day : constant Time := 60.0 * 24.0 * min; + ... + + There are three instantiations of ‘System.Dim.Generic_Mks’ defined in + the GNAT library: + + * ‘System.Dim.Float_Mks’ based on ‘Float’ defined in ‘s-diflmk.ads’. + + * ‘System.Dim.Long_Mks’ based on ‘Long_Float’ defined in + ‘s-dilomk.ads’. + + * ‘System.Dim.Mks’ based on ‘Long_Long_Float’ defined in + ‘s-dimmks.ads’. + + Using one of these packages, you can then define a derived unit by + providing the aspect that specifies its dimensions within the MKS + system, as well as the string to be used for output of a value of that + unit: + + subtype Acceleration is Mks_Type + with Dimension => ("m/sec^2", + Meter => 1, + Second => -2, + others => 0); + + Here is a complete example of use: + + with System.Dim.MKS; use System.Dim.Mks; + with System.Dim.Mks_IO; use System.Dim.Mks_IO; + with Text_IO; use Text_IO; + procedure Free_Fall is + subtype Acceleration is Mks_Type + with Dimension => ("m/sec^2", 1, 0, -2, others => 0); + G : constant acceleration := 9.81 * m / (s ** 2); + T : Time := 10.0*s; + Distance : Length; + + begin + Put ("Gravitational constant: "); + Put (G, Aft => 2, Exp => 0); Put_Line (""); + Distance := 0.5 * G * T ** 2; + Put ("distance travelled in 10 seconds of free fall "); + Put (Distance, Aft => 2, Exp => 0); + Put_Line (""); + end Free_Fall; + + Execution of this program yields: + + Gravitational constant: 9.81 m/sec^2 + distance travelled in 10 seconds of free fall 490.50 m + + However, incorrect assignments such as: + + Distance := 5.0; + Distance := 5.0 * kg; + + are rejected with the following diagnoses: + + Distance := 5.0; + >>> dimensions mismatch in assignment + >>> left-hand side has dimension [L] + >>> right-hand side is dimensionless + + Distance := 5.0 * kg: + >>> dimensions mismatch in assignment + >>> left-hand side has dimension [L] + >>> right-hand side has dimension [M] + + The dimensions of an expression are properly displayed, even if there is + no explicit subtype for it. If we add to the program: + + Put ("Final velocity: "); + Put (G * T, Aft =>2, Exp =>0); + Put_Line (""); + + then the output includes: + + Final velocity: 98.10 m.s**(-1) + + The type ‘Mks_Type’ is said to be a `dimensionable type' since it has a + ‘Dimension_System’ aspect, and the subtypes ‘Length’, ‘Mass’, etc., are + said to be `dimensioned subtypes' since each one has a ‘Dimension’ + aspect. + + The ‘Dimension’ aspect of a dimensioned subtype ‘S’ defines a mapping + from the base type’s Unit_Names to integer (or, more generally, + rational) values. This mapping is the `dimension vector' (also referred + to as the `dimensionality') for that subtype, denoted by ‘DV(S)’, and + thus for each object of that subtype. Intuitively, the value specified + for each ‘Unit_Name’ is the exponent associated with that unit; a zero + value means that the unit is not used. For example: + + declare + Acc : Acceleration; + ... + begin + ... + end; + + Here ‘DV(Acc)’ = ‘DV(Acceleration)’ = ‘(Meter=>1, Kilogram=>0, + Second=>-2, Ampere=>0, Kelvin=>0, Mole=>0, Candela=>0)’. Symbolically, + we can express this as ‘Meter / Second**2’. + + The dimension vector of an arithmetic expression is synthesized from the + dimension vectors of its components, with compile-time dimensionality + checks that help prevent mismatches such as using an ‘Acceleration’ + where a ‘Length’ is required. + + The dimension vector of the result of an arithmetic expression `expr', + or ‘DV(`expr')’, is defined as follows, assuming conventional + mathematical definitions for the vector operations that are used: + + * If `expr' is of the type `universal_real', or is not of a + dimensioned subtype, then `expr' is dimensionless; ‘DV(`expr')’ is + the empty vector. + + * ‘DV(`op expr')’, where `op' is a unary operator, is ‘DV(`expr')’ + + * ‘DV(`expr1 op expr2')’ where `op' is “+” or “-” is ‘DV(`expr1')’ + provided that ‘DV(`expr1')’ = ‘DV(`expr2')’. If this condition is + not met then the construct is illegal. + + * ‘DV(`expr1' * `expr2')’ is ‘DV(`expr1')’ + ‘DV(`expr2')’, and + ‘DV(`expr1' / `expr2')’ = ‘DV(`expr1')’ - ‘DV(`expr2')’. In this + context if one of the `expr's is dimensionless then its empty + dimension vector is treated as ‘(others => 0)’. + + * ‘DV(`expr' ** `power')’ is `power' * ‘DV(`expr')’, provided that + `power' is a static rational value. If this condition is not met + then the construct is illegal. + + Note that, by the above rules, it is illegal to use binary “+” or “-” to + combine a dimensioned and dimensionless value. Thus an expression such + as ‘acc-10.0’ is illegal, where ‘acc’ is an object of subtype + ‘Acceleration’. + + The dimensionality checks for relationals use the same rules as for “+” + and “-“, except when comparing to a literal; thus + + acc > len + + is equivalent to + + acc-len > 0.0 + + and is thus illegal, but + + acc > 10.0 + + is accepted with a warning. Analogously a conditional expression + requires the same dimension vector for each branch (with no exception + for literals). + + The dimension vector of a type conversion ‘T(`expr')’ is defined as + follows, based on the nature of ‘T’: + + * If ‘T’ is a dimensioned subtype then ‘DV(T(`expr'))’ is ‘DV(T)’ + provided that either `expr' is dimensionless or ‘DV(T)’ = + ‘DV(`expr')’. The conversion is illegal if `expr' is dimensioned + and ‘DV(`expr')’ /= ‘DV(T)’. Note that vector equality does not + require that the corresponding Unit_Names be the same. + + As a consequence of the above rule, it is possible to convert + between different dimension systems that follow the same + international system of units, with the seven physical components + given in the standard order (length, mass, time, etc.). Thus a + length in meters can be converted to a length in inches (with a + suitable conversion factor) but cannot be converted, for example, + to a mass in pounds. + + * If ‘T’ is the base type for `expr' (and the dimensionless root type + of the dimension system), then ‘DV(T(`expr'))’ is ‘DV(expr)’. + Thus, if `expr' is of a dimensioned subtype of ‘T’, the conversion + may be regarded as a “view conversion” that preserves + dimensionality. + + This rule makes it possible to write generic code that can be + instantiated with compatible dimensioned subtypes. The generic + unit will contain conversions that will consequently be present in + instantiations, but conversions to the base type will preserve + dimensionality and make it possible to write generic code that is + correct with respect to dimensionality. + + * Otherwise (i.e., ‘T’ is neither a dimensioned subtype nor a + dimensionable base type), ‘DV(T(`expr'))’ is the empty vector. + Thus a dimensioned value can be explicitly converted to a + non-dimensioned subtype, which of course then escapes + dimensionality analysis. + + The dimension vector for a type qualification ‘T'(`expr')’ is the same + as for the type conversion ‘T(`expr')’. + + An assignment statement + + Source := Target; + + requires ‘DV(Source)’ = ‘DV(Target)’, and analogously for parameter + passing (the dimension vector for the actual parameter must be equal to + the dimension vector for the formal parameter). + +  + File: gnat_ugn.info, Node: Stack Related Facilities, Next: Memory Management Issues, Prev: Performing Dimensionality Analysis in GNAT, Up: GNAT and Program Execution + + 6.6 Stack Related Facilities + ============================ + + This section describes some useful tools associated with stack checking + and analysis. In particular, it deals with dynamic and static stack + usage measurements. + + * Menu: + + * Stack Overflow Checking:: + * Static Stack Usage Analysis:: + * Dynamic Stack Usage Analysis:: + +  + File: gnat_ugn.info, Node: Stack Overflow Checking, Next: Static Stack Usage Analysis, Up: Stack Related Facilities + + 6.6.1 Stack Overflow Checking + ----------------------------- + + For most operating systems, ‘gcc’ does not perform stack overflow + checking by default. This means that if the main environment task or + some other task exceeds the available stack space, then unpredictable + behavior will occur. Most native systems offer some level of protection + by adding a guard page at the end of each task stack. This mechanism is + usually not enough for dealing properly with stack overflow situations + because a large local variable could “jump” above the guard page. + Furthermore, when the guard page is hit, there may not be any space left + on the stack for executing the exception propagation code. Enabling + stack checking avoids such situations. + + To activate stack checking, compile all units with the ‘gcc’ option + ‘-fstack-check’. For example: + + $ gcc -c -fstack-check package1.adb + + Units compiled with this option will generate extra instructions to + check that any use of the stack (for procedure calls or for declaring + local variables in declare blocks) does not exceed the available stack + space. If the space is exceeded, then a ‘Storage_Error’ exception is + raised. + + For declared tasks, the default stack size is defined by the GNAT + runtime, whose size may be modified at bind time through the ‘-d’ bind + switch (*note Switches for gnatbind: 110.). Task specific stack sizes + may be set using the ‘Storage_Size’ pragma. + + For the environment task, the stack size is determined by the operating + system. Consequently, to modify the size of the environment task please + refer to your operating system documentation. + +  + File: gnat_ugn.info, Node: Static Stack Usage Analysis, Next: Dynamic Stack Usage Analysis, Prev: Stack Overflow Checking, Up: Stack Related Facilities + + 6.6.2 Static Stack Usage Analysis + --------------------------------- + + A unit compiled with ‘-fstack-usage’ will generate an extra file that + specifies the maximum amount of stack used, on a per-function basis. + The file has the same basename as the target object file with a ‘.su’ + extension. Each line of this file is made up of three fields: + + * The name of the function. + + * A number of bytes. + + * One or more qualifiers: ‘static’, ‘dynamic’, ‘bounded’. + + The second field corresponds to the size of the known part of the + function frame. + + The qualifier ‘static’ means that the function frame size is purely + static. It usually means that all local variables have a static size. + In this case, the second field is a reliable measure of the function + stack utilization. + + The qualifier ‘dynamic’ means that the function frame size is not + static. It happens mainly when some local variables have a dynamic + size. When this qualifier appears alone, the second field is not a + reliable measure of the function stack analysis. When it is qualified + with ‘bounded’, it means that the second field is a reliable maximum of + the function stack utilization. + + A unit compiled with ‘-Wstack-usage’ will issue a warning for each + subprogram whose stack usage might be larger than the specified amount + of bytes. The wording is in keeping with the qualifier documented + above. + +  + File: gnat_ugn.info, Node: Dynamic Stack Usage Analysis, Prev: Static Stack Usage Analysis, Up: Stack Related Facilities + + 6.6.3 Dynamic Stack Usage Analysis + ---------------------------------- + + It is possible to measure the maximum amount of stack used by a task, by + adding a switch to ‘gnatbind’, as: + + $ gnatbind -u0 file + + With this option, at each task termination, its stack usage is output on + ‘stderr’. Note that this switch is not compatible with tools like + Valgrind and DrMemory; they will report errors. + + It is not always convenient to output the stack usage when the program + is still running. Hence, it is possible to delay this output until + program termination. for a given number of tasks specified as the + argument of the ‘-u’ option. For instance: + + $ gnatbind -u100 file + + will buffer the stack usage information of the first 100 tasks to + terminate and output this info at program termination. Results are + displayed in four columns: + + Index | Task Name | Stack Size | Stack Usage + + where: + + * `Index' is a number associated with each task. + + * `Task Name' is the name of the task analyzed. + + * `Stack Size' is the maximum size for the stack. + + * `Stack Usage' is the measure done by the stack analyzer. In order + to prevent overflow, the stack is not entirely analyzed, and it’s + not possible to know exactly how much has actually been used. + + By default the environment task stack, the stack that contains the main + unit, is not processed. To enable processing of the environment task + stack, the environment variable GNAT_STACK_LIMIT needs to be set to the + maximum size of the environment task stack. This amount is given in + kilobytes. For example: + + $ set GNAT_STACK_LIMIT 1600 + + would specify to the analyzer that the environment task stack has a + limit of 1.6 megabytes. Any stack usage beyond this will be ignored by + the analysis. + + The package ‘GNAT.Task_Stack_Usage’ provides facilities to get + stack-usage reports at run time. See its body for the details. + +  + File: gnat_ugn.info, Node: Memory Management Issues, Prev: Stack Related Facilities, Up: GNAT and Program Execution + + 6.7 Memory Management Issues + ============================ + + This section describes some useful memory pools provided in the GNAT + library and in particular the GNAT Debug Pool facility, which can be + used to detect incorrect uses of access values (including ‘dangling + references’). + + * Menu: + + * Some Useful Memory Pools:: + * The GNAT Debug Pool Facility:: + +  + File: gnat_ugn.info, Node: Some Useful Memory Pools, Next: The GNAT Debug Pool Facility, Up: Memory Management Issues + + 6.7.1 Some Useful Memory Pools + ------------------------------ + + The ‘System.Pool_Global’ package offers the Unbounded_No_Reclaim_Pool + storage pool. Allocations use the standard system call ‘malloc’ while + deallocations use the standard system call ‘free’. No reclamation is + performed when the pool goes out of scope. For performance reasons, the + standard default Ada allocators/deallocators do not use any explicit + storage pools but if they did, they could use this storage pool without + any change in behavior. That is why this storage pool is used when the + user manages to make the default implicit allocator explicit as in this + example: + + type T1 is access Something; + -- no Storage pool is defined for T2 + + type T2 is access Something_Else; + for T2'Storage_Pool use T1'Storage_Pool; + -- the above is equivalent to + for T2'Storage_Pool use System.Pool_Global.Global_Pool_Object; + + The ‘System.Pool_Local’ package offers the ‘Unbounded_Reclaim_Pool’ + storage pool. The allocation strategy is similar to ‘Pool_Local’ except + that the all storage allocated with this pool is reclaimed when the pool + object goes out of scope. This pool provides a explicit mechanism + similar to the implicit one provided by several Ada 83 compilers for + allocations performed through a local access type and whose purpose was + to reclaim memory when exiting the scope of a given local access. As an + example, the following program does not leak memory even though it does + not perform explicit deallocation: + + with System.Pool_Local; + procedure Pooloc1 is + procedure Internal is + type A is access Integer; + X : System.Pool_Local.Unbounded_Reclaim_Pool; + for A'Storage_Pool use X; + v : A; + begin + for I in 1 .. 50 loop + v := new Integer; + end loop; + end Internal; + begin + for I in 1 .. 100 loop + Internal; + end loop; + end Pooloc1; + + The ‘System.Pool_Size’ package implements the ‘Stack_Bounded_Pool’ used + when ‘Storage_Size’ is specified for an access type. The whole storage + for the pool is allocated at once, usually on the stack at the point + where the access type is elaborated. It is automatically reclaimed when + exiting the scope where the access type is defined. This package is not + intended to be used directly by the user and it is implicitly used for + each such declaration: + + type T1 is access Something; + for T1'Storage_Size use 10_000; + +  + File: gnat_ugn.info, Node: The GNAT Debug Pool Facility, Prev: Some Useful Memory Pools, Up: Memory Management Issues + + 6.7.2 The GNAT Debug Pool Facility + ---------------------------------- + + The use of unchecked deallocation and unchecked conversion can easily + lead to incorrect memory references. The problems generated by such + references are usually difficult to tackle because the symptoms can be + very remote from the origin of the problem. In such cases, it is very + helpful to detect the problem as early as possible. This is the purpose + of the Storage Pool provided by ‘GNAT.Debug_Pools’. + + In order to use the GNAT specific debugging pool, the user must + associate a debug pool object with each of the access types that may be + related to suspected memory problems. See Ada Reference Manual 13.11. + + type Ptr is access Some_Type; + Pool : GNAT.Debug_Pools.Debug_Pool; + for Ptr'Storage_Pool use Pool; + + ‘GNAT.Debug_Pools’ is derived from a GNAT-specific kind of pool: the + ‘Checked_Pool’. Such pools, like standard Ada storage pools, allow the + user to redefine allocation and deallocation strategies. They also + provide a checkpoint for each dereference, through the use of the + primitive operation ‘Dereference’ which is implicitly called at each + dereference of an access value. + + Once an access type has been associated with a debug pool, operations on + values of the type may raise four distinct exceptions, which correspond + to four potential kinds of memory corruption: + + * ‘GNAT.Debug_Pools.Accessing_Not_Allocated_Storage’ + + * ‘GNAT.Debug_Pools.Accessing_Deallocated_Storage’ + + * ‘GNAT.Debug_Pools.Freeing_Not_Allocated_Storage’ + + * ‘GNAT.Debug_Pools.Freeing_Deallocated_Storage’ + + For types associated with a Debug_Pool, dynamic allocation is performed + using the standard GNAT allocation routine. References to all allocated + chunks of memory are kept in an internal dictionary. Several + deallocation strategies are provided, whereupon the user can choose to + release the memory to the system, keep it allocated for further invalid + access checks, or fill it with an easily recognizable pattern for debug + sessions. The memory pattern is the old IBM hexadecimal convention: + ‘16#DEADBEEF#’. + + See the documentation in the file g-debpoo.ads for more information on + the various strategies. + + Upon each dereference, a check is made that the access value denotes a + properly allocated memory location. Here is a complete example of use + of ‘Debug_Pools’, that includes typical instances of memory corruption: + + with Gnat.Io; use Gnat.Io; + with Unchecked_Deallocation; + with Unchecked_Conversion; + with GNAT.Debug_Pools; + with System.Storage_Elements; + with Ada.Exceptions; use Ada.Exceptions; + procedure Debug_Pool_Test is + + type T is access Integer; + type U is access all T; + + P : GNAT.Debug_Pools.Debug_Pool; + for T'Storage_Pool use P; + + procedure Free is new Unchecked_Deallocation (Integer, T); + function UC is new Unchecked_Conversion (U, T); + A, B : aliased T; + + procedure Info is new GNAT.Debug_Pools.Print_Info(Put_Line); + + begin + Info (P); + A := new Integer; + B := new Integer; + B := A; + Info (P); + Free (A); + begin + Put_Line (Integer'Image(B.all)); + exception + when E : others => Put_Line ("raised: " & Exception_Name (E)); + end; + begin + Free (B); + exception + when E : others => Put_Line ("raised: " & Exception_Name (E)); + end; + B := UC(A'Access); + begin + Put_Line (Integer'Image(B.all)); + exception + when E : others => Put_Line ("raised: " & Exception_Name (E)); + end; + begin + Free (B); + exception + when E : others => Put_Line ("raised: " & Exception_Name (E)); + end; + Info (P); + end Debug_Pool_Test; + + The debug pool mechanism provides the following precise diagnostics on + the execution of this erroneous program: + + Debug Pool info: + Total allocated bytes : 0 + Total deallocated bytes : 0 + Current Water Mark: 0 + High Water Mark: 0 + + Debug Pool info: + Total allocated bytes : 8 + Total deallocated bytes : 0 + Current Water Mark: 8 + High Water Mark: 8 + + raised: GNAT.DEBUG_POOLS.ACCESSING_DEALLOCATED_STORAGE + raised: GNAT.DEBUG_POOLS.FREEING_DEALLOCATED_STORAGE + raised: GNAT.DEBUG_POOLS.ACCESSING_NOT_ALLOCATED_STORAGE + raised: GNAT.DEBUG_POOLS.FREEING_NOT_ALLOCATED_STORAGE + Debug Pool info: + Total allocated bytes : 8 + Total deallocated bytes : 4 + Current Water Mark: 4 + High Water Mark: 8 + +  + File: gnat_ugn.info, Node: Platform-Specific Information, Next: Example of Binder Output File, Prev: GNAT and Program Execution, Up: Top + + 7 Platform-Specific Information + ******************************* + + This appendix contains information relating to the implementation of + run-time libraries on various platforms and also covers topics related + to the GNAT implementation on Windows and Mac OS. + + * Menu: + + * Run-Time Libraries:: + * Specifying a Run-Time Library:: + * GNU/Linux Topics:: + * Microsoft Windows Topics:: + * Mac OS Topics:: + +  + File: gnat_ugn.info, Node: Run-Time Libraries, Next: Specifying a Run-Time Library, Up: Platform-Specific Information + + 7.1 Run-Time Libraries + ====================== + + The GNAT run-time implementation may vary with respect to both the + underlying threads library and the exception-handling scheme. For + threads support, the default run-time will bind to the thread package of + the underlying operating system. + + For exception handling, either or both of two models are supplied: + + * `Zero-Cost Exceptions' (“ZCX”), which uses binder-generated tables + that are interrogated at run time to locate a handler. + + * `setjmp / longjmp' (‘SJLJ’), which uses dynamically-set data to + establish the set of handlers + + Most programs should experience a substantial speed improvement by being + compiled with a ZCX run-time. This is especially true for tasking + applications or applications with many exception handlers. Note however + that the ZCX run-time does not support asynchronous abort of tasks + (‘abort’ and ‘select-then-abort’ constructs) and will instead implement + abort by polling points in the runtime. You can also add additional + polling points explicitly if needed in your application via ‘pragma + Abort_Defer’. + + This section summarizes which combinations of threads and exception + support are supplied on various GNAT platforms. + + * Menu: + + * Summary of Run-Time Configurations:: + +  + File: gnat_ugn.info, Node: Summary of Run-Time Configurations, Up: Run-Time Libraries + + 7.1.1 Summary of Run-Time Configurations + ---------------------------------------- + + Platform Run-Time Tasking Exceptions + + ---------------------------------------------------------------------------------------- + + GNU/Linux rts-native pthread library ZCX + (default) + + + rts-sjlj pthread library SJLJ + + + Windows rts-native native Win32 threads ZCX + (default) + + + rts-sjlj native Win32 SJLJ + threads + + + Mac OS rts-native pthread library ZCX + + +  + File: gnat_ugn.info, Node: Specifying a Run-Time Library, Next: GNU/Linux Topics, Prev: Run-Time Libraries, Up: Platform-Specific Information + + 7.2 Specifying a Run-Time Library + ================================= + + The ‘adainclude’ subdirectory containing the sources of the GNAT + run-time library, and the ‘adalib’ subdirectory containing the ‘ALI’ + files and the static and/or shared GNAT library, are located in the gcc + target-dependent area: + + target=$prefix/lib/gcc/gcc-*dumpmachine*/gcc-*dumpversion*/ + + As indicated above, on some platforms several run-time libraries are + supplied. These libraries are installed in the target dependent area + and contain a complete source and binary subdirectory. The detailed + description below explains the differences between the different + libraries in terms of their thread support. + + The default run-time library (when GNAT is installed) is `rts-native'. + This default run-time is selected by the means of soft links. For + example on x86-linux: + + $(target-dir) + __/ / \ \___ + _______/ / \ \_________________ + / / \ \ + / / \ \ + ADAINCLUDE ADALIB rts-native rts-sjlj + : : / \ / \ + : : / \ / \ + : : / \ / \ + : : / \ / \ + +-------------> adainclude adalib adainclude adalib + : ^ + : : + +---------------------+ + + Run-Time Library Directory Structure + (Upper-case names and dotted/dashed arrows represent soft links) + + If the `rts-sjlj' library is to be selected on a permanent basis, these + soft links can be modified with the following commands: + + $ cd $target + $ rm -f adainclude adalib + $ ln -s rts-sjlj/adainclude adainclude + $ ln -s rts-sjlj/adalib adalib + + Alternatively, you can specify ‘rts-sjlj/adainclude’ in the file + ‘$target/ada_source_path’ and ‘rts-sjlj/adalib’ in + ‘$target/ada_object_path’. + + Selecting another run-time library temporarily can be achieved by using + the ‘--RTS’ switch, e.g., ‘--RTS=sjlj’ + + * Menu: + + * Choosing the Scheduling Policy:: + +  + File: gnat_ugn.info, Node: Choosing the Scheduling Policy, Up: Specifying a Run-Time Library + + 7.2.1 Choosing the Scheduling Policy + ------------------------------------ + + When using a POSIX threads implementation, you have a choice of several + scheduling policies: ‘SCHED_FIFO’, ‘SCHED_RR’ and ‘SCHED_OTHER’. + + Typically, the default is ‘SCHED_OTHER’, while using ‘SCHED_FIFO’ or + ‘SCHED_RR’ requires special (e.g., root) privileges. + + By default, GNAT uses the ‘SCHED_OTHER’ policy. To specify + ‘SCHED_FIFO’, you can use one of the following: + + * ‘pragma Time_Slice (0.0)’ + + * the corresponding binder option ‘-T0’ + + * ‘pragma Task_Dispatching_Policy (FIFO_Within_Priorities)’ + + To specify ‘SCHED_RR’, you should use ‘pragma Time_Slice’ with a value + greater than 0.0, or else use the corresponding ‘-T’ binder option. + + To make sure a program is running as root, you can put something like + this in a library package body in your application: + + function geteuid return Integer; + pragma Import (C, geteuid, "geteuid"); + Ignore : constant Boolean := + (if geteuid = 0 then True else raise Program_Error with "must be root"); + + It gets the effective user id, and if it’s not 0 (i.e. root), it raises + Program_Error. Note that if you re running the code in a container, + this may not be sufficient, as you may have sufficient priviledge on the + container, but not on the host machine running the container, so check + that you also have sufficient priviledge for running the container + image. + +  + File: gnat_ugn.info, Node: GNU/Linux Topics, Next: Microsoft Windows Topics, Prev: Specifying a Run-Time Library, Up: Platform-Specific Information + + 7.3 GNU/Linux Topics + ==================== + + This section describes topics that are specific to GNU/Linux platforms. + * Menu: + + * Required Packages on GNU/Linux:: + * A GNU/Linux Debug Quirk:: + +  + File: gnat_ugn.info, Node: Required Packages on GNU/Linux, Next: A GNU/Linux Debug Quirk, Up: GNU/Linux Topics + + 7.3.1 Required Packages on GNU/Linux + ------------------------------------ + + GNAT requires the C library developer’s package to be installed. The + name of of that package depends on your GNU/Linux distribution: + + * RedHat, SUSE: ‘glibc-devel’; + + * Debian, Ubuntu: ‘libc6-dev’ (normally installed by default). + + If using the 32-bit version of GNAT on a 64-bit version of GNU/Linux, + you’ll need the 32-bit version of the following packages: + + * RedHat, SUSE: ‘glibc.i686’, ‘glibc-devel.i686’, ‘ncurses-libs.i686’ + + * Debian, Ubuntu: ‘libc6:i386’, ‘libc6-dev:i386’, ‘lib32ncursesw5’ + + Other GNU/Linux distributions might be choosing a different name for + those packages. + +  + File: gnat_ugn.info, Node: A GNU/Linux Debug Quirk, Prev: Required Packages on GNU/Linux, Up: GNU/Linux Topics + + 7.3.2 A GNU/Linux Debug Quirk + ----------------------------- + + On SuSE 15, some kernels have a defect causing issues when debugging + programs using threads or Ada tasks. Due to the lack of documentation + found regarding this kernel issue, we can only provide limited + information about which kernels are impacted: kernel version 5.3.18 is + known to be impacted, and kernels in the 5.14 range or newer are + believed to fix this problem. + + The bug affects the debugging of 32-bit processes on a 64-bit system. + Symptoms can vary: Unexpected ‘SIGABRT’ signals being received by the + program, “The futex facility returned an unexpected error code” error + message, and inferior programs hanging indefinitely range among the + symptoms most commonly observed. + +  + File: gnat_ugn.info, Node: Microsoft Windows Topics, Next: Mac OS Topics, Prev: GNU/Linux Topics, Up: Platform-Specific Information + + 7.4 Microsoft Windows Topics + ============================ + + This section describes topics that are specific to the Microsoft Windows + platforms. + + * Menu: + + * Using GNAT on Windows:: + * Using a network installation of GNAT:: + * CONSOLE and WINDOWS subsystems:: + * Temporary Files:: + * Disabling Command Line Argument Expansion:: + * Windows Socket Timeouts:: + * Mixed-Language Programming on Windows:: + * Windows Specific Add-Ons:: + +  + File: gnat_ugn.info, Node: Using GNAT on Windows, Next: Using a network installation of GNAT, Up: Microsoft Windows Topics + + 7.4.1 Using GNAT on Windows + --------------------------- + + One of the strengths of the GNAT technology is that its tool set (‘gcc’, + ‘gnatbind’, ‘gnatlink’, ‘gnatmake’, the ‘gdb’ debugger, etc.) is used + in the same way regardless of the platform. + + On Windows this tool set is complemented by a number of + Microsoft-specific tools that have been provided to facilitate + interoperability with Windows when this is required. With these tools: + + * You can build applications using the ‘CONSOLE’ or ‘WINDOWS’ + subsystems. + + * You can use any Dynamically Linked Library (DLL) in your Ada code + (both relocatable and non-relocatable DLLs are supported). + + * You can build Ada DLLs for use in other applications. These + applications can be written in a language other than Ada (e.g., C, + C++, etc). Again both relocatable and non-relocatable Ada DLLs are + supported. + + * You can include Windows resources in your Ada application. + + * You can use or create COM/DCOM objects. + + Immediately below are listed all known general GNAT-for-Windows + restrictions. Other restrictions about specific features like Windows + Resources and DLLs are listed in separate sections below. + + * It is not possible to use ‘GetLastError’ and ‘SetLastError’ when + tasking, protected records, or exceptions are used. In these + cases, in order to implement Ada semantics, the GNAT run-time + system calls certain Win32 routines that set the last error + variable to 0 upon success. It should be possible to use + ‘GetLastError’ and ‘SetLastError’ when tasking, protected record, + and exception features are not used, but it is not guaranteed to + work. + + * It is not possible to link against Microsoft C++ libraries except + for import libraries. Interfacing must be done by the mean of + DLLs. + + * It is possible to link against Microsoft C libraries. Yet the + preferred solution is to use C/C++ compiler that comes with GNAT, + since it doesn’t require having two different development + environments and makes the inter-language debugging experience + smoother. + + * When the compilation environment is located on FAT32 drives, users + may experience recompilations of the source files that have not + changed if Daylight Saving Time (DST) state has changed since the + last time files were compiled. NTFS drives do not have this + problem. + + * No components of the GNAT toolset use any entries in the Windows + registry. The only entries that can be created are file + associations and PATH settings, provided the user has chosen to + create them at installation time, as well as some minimal + book-keeping information needed to correctly uninstall or integrate + different GNAT products. + +  + File: gnat_ugn.info, Node: Using a network installation of GNAT, Next: CONSOLE and WINDOWS subsystems, Prev: Using GNAT on Windows, Up: Microsoft Windows Topics + + 7.4.2 Using a network installation of GNAT + ------------------------------------------ + + Make sure the system on which GNAT is installed is accessible from the + current machine, i.e., the install location is shared over the network. + Shared resources are accessed on Windows by means of UNC paths, which + have the format ‘\\\\server\\sharename\\path’ + + In order to use such a network installation, simply add the UNC path of + the ‘bin’ directory of your GNAT installation in front of your PATH. For + example, if GNAT is installed in ‘\GNAT’ directory of a share location + called ‘c-drive’ on a machine ‘LOKI’, the following command will make it + available: + + $ path \\loki\c-drive\gnat\bin;%path%` + + Be aware that every compilation using the network installation results + in the transfer of large amounts of data across the network and will + likely cause serious performance penalty. + +  + File: gnat_ugn.info, Node: CONSOLE and WINDOWS subsystems, Next: Temporary Files, Prev: Using a network installation of GNAT, Up: Microsoft Windows Topics + + 7.4.3 CONSOLE and WINDOWS subsystems + ------------------------------------ + + There are two main subsystems under Windows. The ‘CONSOLE’ subsystem + (which is the default subsystem) will always create a console when + launching the application. This is not something desirable when the + application has a Windows GUI. To get rid of this console the + application must be using the ‘WINDOWS’ subsystem. To do so the + ‘-mwindows’ linker option must be specified. + + $ gnatmake winprog -largs -mwindows + +  + File: gnat_ugn.info, Node: Temporary Files, Next: Disabling Command Line Argument Expansion, Prev: CONSOLE and WINDOWS subsystems, Up: Microsoft Windows Topics + + 7.4.4 Temporary Files + --------------------- + + It is possible to control where temporary files gets created by setting + the ‘TMP’ environment variable. The file will be created: + + * Under the directory pointed to by the ‘TMP’ environment variable if + this directory exists. + + * Under ‘c:\temp’, if the ‘TMP’ environment variable is not set (or + not pointing to a directory) and if this directory exists. + + * Under the current working directory otherwise. + + This allows you to determine exactly where the temporary file will be + created. This is particularly useful in networked environments where + you may not have write access to some directories. + +  + File: gnat_ugn.info, Node: Disabling Command Line Argument Expansion, Next: Windows Socket Timeouts, Prev: Temporary Files, Up: Microsoft Windows Topics + + 7.4.5 Disabling Command Line Argument Expansion + ----------------------------------------------- + + By default, an executable compiled for the Windows platform will do the + following postprocessing on the arguments passed on the command line: + + * If the argument contains the characters ‘*’ and/or ‘?’, then file + expansion will be attempted. For example, if the current directory + contains ‘a.txt’ and ‘b.txt’, then when calling: + + $ my_ada_program *.txt + + The following arguments will effectively be passed to the main + program (for example when using ‘Ada.Command_Line.Argument’): + + Ada.Command_Line.Argument (1) -> "a.txt" + Ada.Command_Line.Argument (2) -> "b.txt" + + * Filename expansion can be disabled for a given argument by using + single quotes. Thus, calling: + + $ my_ada_program '*.txt' + + will result in: + + Ada.Command_Line.Argument (1) -> "*.txt" + + Note that if the program is launched from a shell such as Cygwin Bash + then quote removal might be performed by the shell. + + In some contexts it might be useful to disable this feature (for example + if the program performs its own argument expansion). In order to do + this, a C symbol needs to be defined and set to ‘0’. You can do this by + adding the following code fragment in one of your Ada units: + + Do_Argv_Expansion : Integer := 0; + pragma Export (C, Do_Argv_Expansion, "__gnat_do_argv_expansion"); + + The results of previous examples will be respectively: + + Ada.Command_Line.Argument (1) -> "*.txt" + + and: + + Ada.Command_Line.Argument (1) -> "'*.txt'" + +  + File: gnat_ugn.info, Node: Windows Socket Timeouts, Next: Mixed-Language Programming on Windows, Prev: Disabling Command Line Argument Expansion, Up: Microsoft Windows Topics + + 7.4.6 Windows Socket Timeouts + ----------------------------- + + Microsoft Windows desktops older than ‘8.0’ and Microsoft Windows + Servers older than ‘2019’ set a socket timeout 500 milliseconds longer + than the value set by setsockopt with ‘SO_RCVTIMEO’ and ‘SO_SNDTIMEO’ + options. The GNAT runtime makes a correction for the difference in the + corresponding Windows versions. For Windows Server starting with + version ‘2019’, the user must provide a manifest file for the GNAT + runtime to be able to recognize that the Windows version does not need + the timeout correction. The manifest file should be located in the same + directory as the executable file, and its file name must match the + executable name suffixed by ‘.manifest’. For example, if the executable + name is ‘sock_wto.exe’, then the manifest file name has to be + ‘sock_wto.exe.manifest’. The manifest file must contain at least the + following data: + + + + + + + + + + + + + + + + + + + + Without the manifest file, the socket timeout is going to be + overcorrected on these Windows Server versions and the actual time is + going to be 500 milliseconds shorter than what was set with + GNAT.Sockets.Set_Socket_Option. Note that on Microsoft Windows versions + where correction is necessary, there is no way to set a socket timeout + shorter than 500 ms. If a socket timeout shorter than 500 ms is needed + on these Windows versions, a call to Check_Selector should be added + before any socket read or write operations. + +  + File: gnat_ugn.info, Node: Mixed-Language Programming on Windows, Next: Windows Specific Add-Ons, Prev: Windows Socket Timeouts, Up: Microsoft Windows Topics + + 7.4.7 Mixed-Language Programming on Windows + ------------------------------------------- + + Developing pure Ada applications on Windows is no different than on + other GNAT-supported platforms. However, when developing or porting an + application that contains a mix of Ada and C/C++, the choice of your + Windows C/C++ development environment conditions your overall + interoperability strategy. + + If you use ‘gcc’ or Microsoft C to compile the non-Ada part of your + application, there are no Windows-specific restrictions that affect the + overall interoperability with your Ada code. If you do want to use the + Microsoft tools for your C++ code, you have two choices: + + * Encapsulate your C++ code in a DLL to be linked with your Ada + application. In this case, use the Microsoft or whatever + environment to build the DLL and use GNAT to build your executable + (*note Using DLLs with GNAT: 1cf.). + + * Or you can encapsulate your Ada code in a DLL to be linked with the + other part of your application. In this case, use GNAT to build + the DLL (*note Building DLLs with GNAT Project files: 1d0.) and use + the Microsoft or whatever environment to build your executable. + + In addition to the description about C main in *note Mixed Language + Programming: 2c. section, if the C main uses a stand-alone library it is + required on x86-windows to setup the SEH context. For this the C main + must looks like this: + + /* main.c */ + extern void adainit (void); + extern void adafinal (void); + extern void __gnat_initialize(void*); + extern void call_to_ada (void); + + int main (int argc, char *argv[]) + { + int SEH [2]; + + /* Initialize the SEH context */ + __gnat_initialize (&SEH); + + adainit(); + + /* Then call Ada services in the stand-alone library */ + + call_to_ada(); + + adafinal(); + } + + Note that this is not needed on x86_64-windows where the Windows native + SEH support is used. + + * Menu: + + * Windows Calling Conventions:: + * Introduction to Dynamic Link Libraries (DLLs): Introduction to Dynamic Link Libraries DLLs. + * Using DLLs with GNAT:: + * Building DLLs with GNAT Project files:: + * Building DLLs with GNAT:: + * Building DLLs with gnatdll:: + * Ada DLLs and Finalization:: + * Creating a Spec for Ada DLLs:: + * GNAT and Windows Resources:: + * Using GNAT DLLs from Microsoft Visual Studio Applications:: + * Debugging a DLL:: + * Setting Stack Size from gnatlink:: + * Setting Heap Size from gnatlink:: + +  + File: gnat_ugn.info, Node: Windows Calling Conventions, Next: Introduction to Dynamic Link Libraries DLLs, Up: Mixed-Language Programming on Windows + + 7.4.7.1 Windows Calling Conventions + ................................... + + This section pertain only to Win32. On Win64 there is a single native + calling convention. All convention specifiers are ignored on this + platform. + + When a subprogram ‘F’ (caller) calls a subprogram ‘G’ (callee), there + are several ways to push ‘G’‘s parameters on the stack and there are + several possible scenarios to clean up the stack upon ‘G’‘s return. A + calling convention is an agreed upon software protocol whereby the + responsibilities between the caller (‘F’) and the callee (‘G’) are + clearly defined. Several calling conventions are available for Windows: + + * ‘C’ (Microsoft defined) + + * ‘Stdcall’ (Microsoft defined) + + * ‘Win32’ (GNAT specific) + + * ‘DLL’ (GNAT specific) + + * Menu: + + * C Calling Convention:: + * Stdcall Calling Convention:: + * Win32 Calling Convention:: + * DLL Calling Convention:: + +  + File: gnat_ugn.info, Node: C Calling Convention, Next: Stdcall Calling Convention, Up: Windows Calling Conventions + + 7.4.7.2 ‘C’ Calling Convention + .............................. + + This is the default calling convention used when interfacing to C/C++ + routines compiled with either ‘gcc’ or Microsoft Visual C++. + + In the ‘C’ calling convention subprogram parameters are pushed on the + stack by the caller from right to left. The caller itself is in charge + of cleaning up the stack after the call. In addition, the name of a + routine with ‘C’ calling convention is mangled by adding a leading + underscore. + + The name to use on the Ada side when importing (or exporting) a routine + with ‘C’ calling convention is the name of the routine. For instance + the C function: + + int get_val (long); + + should be imported from Ada as follows: + + function Get_Val (V : Interfaces.C.long) return Interfaces.C.int; + pragma Import (C, Get_Val, External_Name => "get_val"); + + Note that in this particular case the ‘External_Name’ parameter could + have been omitted since, when missing, this parameter is taken to be the + name of the Ada entity in lower case. When the ‘Link_Name’ parameter is + missing, as in the above example, this parameter is set to be the + ‘External_Name’ with a leading underscore. + + When importing a variable defined in C, you should always use the ‘C’ + calling convention unless the object containing the variable is part of + a DLL (in which case you should use the ‘Stdcall’ calling convention, + *note Stdcall Calling Convention: 1d5.). + +  + File: gnat_ugn.info, Node: Stdcall Calling Convention, Next: Win32 Calling Convention, Prev: C Calling Convention, Up: Windows Calling Conventions + + 7.4.7.3 ‘Stdcall’ Calling Convention + .................................... + + This convention, which was the calling convention used for Pascal + programs, is used by Microsoft for all the routines in the Win32 API for + efficiency reasons. It must be used to import any routine for which + this convention was specified. + + In the ‘Stdcall’ calling convention subprogram parameters are pushed on + the stack by the caller from right to left. The callee (and not the + caller) is in charge of cleaning the stack on routine exit. In + addition, the name of a routine with ‘Stdcall’ calling convention is + mangled by adding a leading underscore (as for the ‘C’ calling + convention) and a trailing ‘@`nn'’, where ‘nn’ is the overall size (in + bytes) of the parameters passed to the routine. + + The name to use on the Ada side when importing a C routine with a + ‘Stdcall’ calling convention is the name of the C routine. The leading + underscore and trailing ‘@`nn'’ are added automatically by the compiler. + For instance the Win32 function: + + APIENTRY int get_val (long); + + should be imported from Ada as follows: + + function Get_Val (V : Interfaces.C.long) return Interfaces.C.int; + pragma Import (Stdcall, Get_Val); + -- On the x86 a long is 4 bytes, so the Link_Name is "_get_val@4" + + As for the ‘C’ calling convention, when the ‘External_Name’ parameter is + missing, it is taken to be the name of the Ada entity in lower case. If + instead of writing the above import pragma you write: + + function Get_Val (V : Interfaces.C.long) return Interfaces.C.int; + pragma Import (Stdcall, Get_Val, External_Name => "retrieve_val"); + + then the imported routine is ‘_retrieve_val@4’. However, if instead of + specifying the ‘External_Name’ parameter you specify the ‘Link_Name’ as + in the following example: + + function Get_Val (V : Interfaces.C.long) return Interfaces.C.int; + pragma Import (Stdcall, Get_Val, Link_Name => "retrieve_val"); + + then the imported routine is ‘retrieve_val’, that is, there is no + decoration at all. No leading underscore and no Stdcall suffix ‘@`nn'’. + + This is especially important as in some special cases a DLL’s entry + point name lacks a trailing ‘@`nn'’ while the exported name generated + for a call has it. + + It is also possible to import variables defined in a DLL by using an + import pragma for a variable. As an example, if a DLL contains a + variable defined as: + + int my_var; + + then, to access this variable from Ada you should write: + + My_Var : Interfaces.C.int; + pragma Import (Stdcall, My_Var); + + Note that to ease building cross-platform bindings this convention will + be handled as a ‘C’ calling convention on non-Windows platforms. + +  + File: gnat_ugn.info, Node: Win32 Calling Convention, Next: DLL Calling Convention, Prev: Stdcall Calling Convention, Up: Windows Calling Conventions + + 7.4.7.4 ‘Win32’ Calling Convention + .................................. + + This convention, which is GNAT-specific is fully equivalent to the + ‘Stdcall’ calling convention described above. + +  + File: gnat_ugn.info, Node: DLL Calling Convention, Prev: Win32 Calling Convention, Up: Windows Calling Conventions + + 7.4.7.5 ‘DLL’ Calling Convention + ................................ + + This convention, which is GNAT-specific is fully equivalent to the + ‘Stdcall’ calling convention described above. + +  + File: gnat_ugn.info, Node: Introduction to Dynamic Link Libraries DLLs, Next: Using DLLs with GNAT, Prev: Windows Calling Conventions, Up: Mixed-Language Programming on Windows + + 7.4.7.6 Introduction to Dynamic Link Libraries (DLLs) + ..................................................... + + A Dynamically Linked Library (DLL) is a library that can be shared by + several applications running under Windows. A DLL can contain any + number of routines and variables. + + One advantage of DLLs is that you can change and enhance them without + forcing all the applications that depend on them to be relinked or + recompiled. However, you should be aware than all calls to DLL routines + are slower since, as you will understand below, such calls are indirect. + + To illustrate the remainder of this section, suppose that an application + wants to use the services of a DLL ‘API.dll’. To use the services + provided by ‘API.dll’ you must statically link against the DLL or an + import library which contains a jump table with an entry for each + routine and variable exported by the DLL. In the Microsoft world this + import library is called ‘API.lib’. When using GNAT this import library + is called either ‘libAPI.dll.a’, ‘libapi.dll.a’, ‘libAPI.a’ or + ‘libapi.a’ (names are case insensitive). + + After you have linked your application with the DLL or the import + library and you run your application, here is what happens: + + * Your application is loaded into memory. + + * The DLL ‘API.dll’ is mapped into the address space of your + application. This means that: + + - The DLL will use the stack of the calling thread. + + - The DLL will use the virtual address space of the calling + process. + + - The DLL will allocate memory from the virtual address space of + the calling process. + + - Handles (pointers) can be safely exchanged between routines in + the DLL routines and routines in the application using the + DLL. + + * The entries in the jump table (from the import library + ‘libAPI.dll.a’ or ‘API.lib’ or automatically created when linking + against a DLL) which is part of your application are initialized + with the addresses of the routines and variables in ‘API.dll’. + + * If present in ‘API.dll’, routines ‘DllMain’ or ‘DllMainCRTStartup’ + are invoked. These routines typically contain the initialization + code needed for the well-being of the routines and variables + exported by the DLL. + + There is an additional point which is worth mentioning. In the Windows + world there are two kind of DLLs: relocatable and non-relocatable DLLs. + Non-relocatable DLLs can only be loaded at a very specific address in + the target application address space. If the addresses of two + non-relocatable DLLs overlap and these happen to be used by the same + application, a conflict will occur and the application will run + incorrectly. Hence, when possible, it is always preferable to use and + build relocatable DLLs. Both relocatable and non-relocatable DLLs are + supported by GNAT. Note that the ‘-s’ linker option (see GNU Linker + User’s Guide) removes the debugging symbols from the DLL but the DLL can + still be relocated. + + As a side note, an interesting difference between Microsoft DLLs and + Unix shared libraries, is the fact that on most Unix systems all public + routines are exported by default in a Unix shared library, while under + Windows it is possible (but not required) to list exported routines in a + definition file (see *note The Definition File: 1dd.). + +  + File: gnat_ugn.info, Node: Using DLLs with GNAT, Next: Building DLLs with GNAT Project files, Prev: Introduction to Dynamic Link Libraries DLLs, Up: Mixed-Language Programming on Windows + + 7.4.7.7 Using DLLs with GNAT + ............................ + + To use the services of a DLL, say ‘API.dll’, in your Ada application you + must have: + + * The Ada spec for the routines and/or variables you want to access + in ‘API.dll’. If not available this Ada spec must be built from + the C/C++ header files provided with the DLL. + + * The import library (‘libAPI.dll.a’ or ‘API.lib’). As previously + mentioned an import library is a statically linked library + containing the import table which will be filled at load time to + point to the actual ‘API.dll’ routines. Sometimes you don’t have + an import library for the DLL you want to use. The following + sections will explain how to build one. Note that this is + optional. + + * The actual DLL, ‘API.dll’. + + Once you have all the above, to compile an Ada application that uses the + services of ‘API.dll’ and whose main subprogram is ‘My_Ada_App’, you + simply issue the command + + $ gnatmake my_ada_app -largs -lAPI + + The argument ‘-largs -lAPI’ at the end of the ‘gnatmake’ command tells + the GNAT linker to look for an import library. The linker will look for + a library name in this specific order: + + * ‘libAPI.dll.a’ + + * ‘API.dll.a’ + + * ‘libAPI.a’ + + * ‘API.lib’ + + * ‘libAPI.dll’ + + * ‘API.dll’ + + The first three are the GNU style import libraries. The third is the + Microsoft style import libraries. The last two are the actual DLL + names. + + Note that if the Ada package spec for ‘API.dll’ contains the following + pragma + + pragma Linker_Options ("-lAPI"); + + you do not have to add ‘-largs -lAPI’ at the end of the ‘gnatmake’ + command. + + If any one of the items above is missing you will have to create it + yourself. The following sections explain how to do so using as an + example a fictitious DLL called ‘API.dll’. + + * Menu: + + * Creating an Ada Spec for the DLL Services:: + * Creating an Import Library:: + +  + File: gnat_ugn.info, Node: Creating an Ada Spec for the DLL Services, Next: Creating an Import Library, Up: Using DLLs with GNAT + + 7.4.7.8 Creating an Ada Spec for the DLL Services + ................................................. + + A DLL typically comes with a C/C++ header file which provides the + definitions of the routines and variables exported by the DLL. The Ada + equivalent of this header file is a package spec that contains + definitions for the imported entities. If the DLL you intend to use + does not come with an Ada spec you have to generate one such spec + yourself. For example if the header file of ‘API.dll’ is a file ‘api.h’ + containing the following two definitions: + + int some_var; + int get (char *); + + then the equivalent Ada spec could be: + + with Interfaces.C.Strings; + package API is + use Interfaces; + + Some_Var : C.int; + function Get (Str : C.Strings.Chars_Ptr) return C.int; + + private + pragma Import (C, Get); + pragma Import (DLL, Some_Var); + end API; + +  + File: gnat_ugn.info, Node: Creating an Import Library, Prev: Creating an Ada Spec for the DLL Services, Up: Using DLLs with GNAT + + 7.4.7.9 Creating an Import Library + .................................. + + If a Microsoft-style import library ‘API.lib’ or a GNAT-style import + library ‘libAPI.dll.a’ or ‘libAPI.a’ is available with ‘API.dll’ you can + skip this section. You can also skip this section if ‘API.dll’ or + ‘libAPI.dll’ is built with GNU tools as in this case it is possible to + link directly against the DLL. Otherwise read on. + + The Definition File + ................... + + As previously mentioned, and unlike Unix systems, the list of symbols + that are exported from a DLL must be provided explicitly in Windows. + The main goal of a definition file is precisely that: list the symbols + exported by a DLL. A definition file (usually a file with a ‘.def’ + suffix) has the following structure: + + [LIBRARY ``name``] + [DESCRIPTION ``string``] + EXPORTS + ``symbol1`` + ``symbol2`` + ... + + `LIBRARY name' + + This section, which is optional, gives the name of the DLL. + + `DESCRIPTION string' + + This section, which is optional, gives a description string that + will be embedded in the import library. + + `EXPORTS' + + This section gives the list of exported symbols (procedures, + functions or variables). For instance in the case of ‘API.dll’ the + ‘EXPORTS’ section of ‘API.def’ looks like: + + EXPORTS + some_var + get + + Note that you must specify the correct suffix (‘@`nn'’) (see *note + Windows Calling Conventions: 1d2.) for a Stdcall calling convention + function in the exported symbols list. + + There can actually be other sections in a definition file, but these + sections are not relevant to the discussion at hand. + + Creating a Definition File Automatically + ........................................ + + You can automatically create the definition file ‘API.def’ (see *note + The Definition File: 1dd.) from a DLL. For that use the ‘dlltool’ + program as follows: + + $ dlltool API.dll -z API.def --export-all-symbols + + Note that if some routines in the DLL have the ‘Stdcall’ convention + (*note Windows Calling Conventions: 1d2.) with stripped ‘@`nn'’ + suffix then you’ll have to edit ‘api.def’ to add it, and specify + ‘-k’ to ‘gnatdll’ when creating the import library. + + Here are some hints to find the right ‘@`nn'’ suffix. + + - If you have the Microsoft import library (.lib), it is + possible to get the right symbols by using Microsoft ‘dumpbin’ + tool (see the corresponding Microsoft documentation for + further details). + + $ dumpbin /exports api.lib + + - If you have a message about a missing symbol at link time the + compiler tells you what symbol is expected. You just have to + go back to the definition file and add the right suffix. + + GNAT-Style Import Library + ......................... + + To create a static import library from ‘API.dll’ with the GNAT tools you + should create the .def file, then use ‘gnatdll’ tool (see *note Using + gnatdll: 1e5.) as follows: + + $ gnatdll -e API.def -d API.dll + + ‘gnatdll’ takes as input a definition file ‘API.def’ and the name + of the DLL containing the services listed in the definition file + ‘API.dll’. The name of the static import library generated is + computed from the name of the definition file as follows: if the + definition file name is ‘xyz.def’, the import library name will be + ‘libxyz.a’. Note that in the previous example option ‘-e’ could + have been removed because the name of the definition file (before + the ‘.def’ suffix) is the same as the name of the DLL (*note Using + gnatdll: 1e5. for more information about ‘gnatdll’). + + Microsoft-Style Import Library + .............................. + + A Microsoft import library is needed only if you plan to make an Ada DLL + available to applications developed with Microsoft tools (*note + Mixed-Language Programming on Windows: 1ce.). + + To create a Microsoft-style import library for ‘API.dll’ you should + create the .def file, then build the actual import library using + Microsoft’s ‘lib’ utility: + + $ lib -machine:IX86 -def:API.def -out:API.lib + + If you use the above command the definition file ‘API.def’ must + contain a line giving the name of the DLL: + + LIBRARY "API" + + See the Microsoft documentation for further details about the usage + of ‘lib’. + +  + File: gnat_ugn.info, Node: Building DLLs with GNAT Project files, Next: Building DLLs with GNAT, Prev: Using DLLs with GNAT, Up: Mixed-Language Programming on Windows + + 7.4.7.10 Building DLLs with GNAT Project files + .............................................. + + There is nothing specific to Windows in the build process. See the + `Library Projects' section in the `GNAT Project Manager' chapter of the + `GPRbuild User’s Guide'. + + Due to a system limitation, it is not possible under Windows to create + threads when inside the ‘DllMain’ routine which is used for + auto-initialization of shared libraries, so it is not possible to have + library level tasks in SALs. + +  + File: gnat_ugn.info, Node: Building DLLs with GNAT, Next: Building DLLs with gnatdll, Prev: Building DLLs with GNAT Project files, Up: Mixed-Language Programming on Windows + + 7.4.7.11 Building DLLs with GNAT + ................................ + + This section explain how to build DLLs using the GNAT built-in DLL + support. With the following procedure it is straight forward to build + and use DLLs with GNAT. + + * Building object files. The first step is to build all objects + files that are to be included into the DLL. This is done by using + the standard ‘gnatmake’ tool. + + * Building the DLL. To build the DLL you must use the ‘gcc’ ‘-shared’ + and ‘-shared-libgcc’ options. It is quite simple to use this + method: + + $ gcc -shared -shared-libgcc -o api.dll obj1.o obj2.o ... + + It is important to note that in this case all symbols found in the + object files are automatically exported. It is possible to + restrict the set of symbols to export by passing to ‘gcc’ a + definition file (see *note The Definition File: 1dd.). For + example: + + $ gcc -shared -shared-libgcc -o api.dll api.def obj1.o obj2.o ... + + If you use a definition file you must export the elaboration + procedures for every package that required one. Elaboration + procedures are named using the package name followed by “_E”. + + * Preparing DLL to be used. For the DLL to be used by client + programs the bodies must be hidden from it and the .ali set with + read-only attribute. This is very important otherwise GNAT will + recompile all packages and will not actually use the code in the + DLL. For example: + + $ mkdir apilib + $ copy *.ads *.ali api.dll apilib + $ attrib +R apilib\\*.ali + + At this point it is possible to use the DLL by directly linking against + it. Note that you must use the GNAT shared runtime when using GNAT + shared libraries. This is achieved by using the ‘-shared’ binder + option. + + $ gnatmake main -Iapilib -bargs -shared -largs -Lapilib -lAPI + +  + File: gnat_ugn.info, Node: Building DLLs with gnatdll, Next: Ada DLLs and Finalization, Prev: Building DLLs with GNAT, Up: Mixed-Language Programming on Windows + + 7.4.7.12 Building DLLs with gnatdll + ................................... + + Note that it is preferred to use GNAT Project files (*note Building DLLs + with GNAT Project files: 1d0.) or the built-in GNAT DLL support (*note + Building DLLs with GNAT: 1e8.) or to build DLLs. + + This section explains how to build DLLs containing Ada code using + ‘gnatdll’. These DLLs will be referred to as Ada DLLs in the remainder + of this section. + + The steps required to build an Ada DLL that is to be used by Ada as well + as non-Ada applications are as follows: + + * You need to mark each Ada entity exported by the DLL with a ‘C’ or + ‘Stdcall’ calling convention to avoid any Ada name mangling for the + entities exported by the DLL (see *note Exporting Ada Entities: + 1ec.). You can skip this step if you plan to use the Ada DLL only + from Ada applications. + + * Your Ada code must export an initialization routine which calls the + routine ‘adainit’ generated by ‘gnatbind’ to perform the + elaboration of the Ada code in the DLL (*note Ada DLLs and + Elaboration: 1ed.). The initialization routine exported by the Ada + DLL must be invoked by the clients of the DLL to initialize the + DLL. + + * When useful, the DLL should also export a finalization routine + which calls routine ‘adafinal’ generated by ‘gnatbind’ to perform + the finalization of the Ada code in the DLL (*note Ada DLLs and + Finalization: 1ee.). The finalization routine exported by the Ada + DLL must be invoked by the clients of the DLL when the DLL services + are no further needed. + + * You must provide a spec for the services exported by the Ada DLL in + each of the programming languages to which you plan to make the DLL + available. + + * You must provide a definition file listing the exported entities + (*note The Definition File: 1dd.). + + * Finally you must use ‘gnatdll’ to produce the DLL and the import + library (*note Using gnatdll: 1e5.). + + Note that a relocatable DLL stripped using the ‘strip’ binutils tool + will not be relocatable anymore. To build a DLL without debug + information pass ‘-largs -s’ to ‘gnatdll’. This restriction does not + apply to a DLL built using a Library Project. See the `Library + Projects' section in the `GNAT Project Manager' chapter of the `GPRbuild + User’s Guide'. + + * Menu: + + * Limitations When Using Ada DLLs from Ada:: + * Exporting Ada Entities:: + * Ada DLLs and Elaboration:: + +  + File: gnat_ugn.info, Node: Limitations When Using Ada DLLs from Ada, Next: Exporting Ada Entities, Up: Building DLLs with gnatdll + + 7.4.7.13 Limitations When Using Ada DLLs from Ada + ................................................. + + When using Ada DLLs from Ada applications there is a limitation users + should be aware of. Because on Windows the GNAT run-time is not in a + DLL of its own, each Ada DLL includes a part of the GNAT run-time. + Specifically, each Ada DLL includes the services of the GNAT run-time + that are necessary to the Ada code inside the DLL. As a result, when an + Ada program uses an Ada DLL there are two independent GNAT run-times: + one in the Ada DLL and one in the main program. + + It is therefore not possible to exchange GNAT run-time objects between + the Ada DLL and the main Ada program. Example of GNAT run-time objects + are file handles (e.g., ‘Text_IO.File_Type’), tasks types, protected + objects types, etc. + + It is completely safe to exchange plain elementary, array or record + types, Windows object handles, etc. + +  + File: gnat_ugn.info, Node: Exporting Ada Entities, Next: Ada DLLs and Elaboration, Prev: Limitations When Using Ada DLLs from Ada, Up: Building DLLs with gnatdll + + 7.4.7.14 Exporting Ada Entities + ............................... + + Building a DLL is a way to encapsulate a set of services usable from any + application. As a result, the Ada entities exported by a DLL should be + exported with the ‘C’ or ‘Stdcall’ calling conventions to avoid any Ada + name mangling. As an example here is an Ada package ‘API’, spec and + body, exporting two procedures, a function, and a variable: + + with Interfaces.C; use Interfaces; + package API is + Count : C.int := 0; + function Factorial (Val : C.int) return C.int; + + procedure Initialize_API; + procedure Finalize_API; + -- Initialization & Finalization routines. More in the next section. + private + pragma Export (C, Initialize_API); + pragma Export (C, Finalize_API); + pragma Export (C, Count); + pragma Export (C, Factorial); + end API; + + package body API is + function Factorial (Val : C.int) return C.int is + Fact : C.int := 1; + begin + Count := Count + 1; + for K in 1 .. Val loop + Fact := Fact * K; + end loop; + return Fact; + end Factorial; + + procedure Initialize_API is + procedure Adainit; + pragma Import (C, Adainit); + begin + Adainit; + end Initialize_API; + + procedure Finalize_API is + procedure Adafinal; + pragma Import (C, Adafinal); + begin + Adafinal; + end Finalize_API; + end API; + + If the Ada DLL you are building will only be used by Ada applications + you do not have to export Ada entities with a ‘C’ or ‘Stdcall’ + convention. As an example, the previous package could be written as + follows: + + package API is + Count : Integer := 0; + function Factorial (Val : Integer) return Integer; + + procedure Initialize_API; + procedure Finalize_API; + -- Initialization and Finalization routines. + end API; + + package body API is + function Factorial (Val : Integer) return Integer is + Fact : Integer := 1; + begin + Count := Count + 1; + for K in 1 .. Val loop + Fact := Fact * K; + end loop; + return Fact; + end Factorial; + + ... + -- The remainder of this package body is unchanged. + end API; + + Note that if you do not export the Ada entities with a ‘C’ or ‘Stdcall’ + convention you will have to provide the mangled Ada names in the + definition file of the Ada DLL (*note Creating the Definition File: + 1f1.). + +  + File: gnat_ugn.info, Node: Ada DLLs and Elaboration, Prev: Exporting Ada Entities, Up: Building DLLs with gnatdll + + 7.4.7.15 Ada DLLs and Elaboration + ................................. + + The DLL that you are building contains your Ada code as well as all the + routines in the Ada library that are needed by it. The first thing a + user of your DLL must do is elaborate the Ada code (*note Elaboration + Order Handling in GNAT: f.). + + To achieve this you must export an initialization routine + (‘Initialize_API’ in the previous example), which must be invoked before + using any of the DLL services. This elaboration routine must call the + Ada elaboration routine ‘adainit’ generated by the GNAT binder (*note + Binding with Non-Ada Main Programs: a0.). See the body of + ‘Initialize_Api’ for an example. Note that the GNAT binder is + automatically invoked during the DLL build process by the ‘gnatdll’ tool + (*note Using gnatdll: 1e5.). + + When a DLL is loaded, Windows systematically invokes a routine called + ‘DllMain’. It would therefore be possible to call ‘adainit’ directly + from ‘DllMain’ without having to provide an explicit initialization + routine. Unfortunately, it is not possible to call ‘adainit’ from the + ‘DllMain’ if your program has library level tasks because access to the + ‘DllMain’ entry point is serialized by the system (that is, only a + single thread can execute ‘through’ it at a time), which means that the + GNAT run-time will deadlock waiting for the newly created task to + complete its initialization. + +  + File: gnat_ugn.info, Node: Ada DLLs and Finalization, Next: Creating a Spec for Ada DLLs, Prev: Building DLLs with gnatdll, Up: Mixed-Language Programming on Windows + + 7.4.7.16 Ada DLLs and Finalization + .................................. + + When the services of an Ada DLL are no longer needed, the client code + should invoke the DLL finalization routine, if available. The DLL + finalization routine is in charge of releasing all resources acquired by + the DLL. In the case of the Ada code contained in the DLL, this is + achieved by calling routine ‘adafinal’ generated by the GNAT binder + (*note Binding with Non-Ada Main Programs: a0.). See the body of + ‘Finalize_Api’ for an example. As already pointed out the GNAT binder + is automatically invoked during the DLL build process by the ‘gnatdll’ + tool (*note Using gnatdll: 1e5.). + +  + File: gnat_ugn.info, Node: Creating a Spec for Ada DLLs, Next: GNAT and Windows Resources, Prev: Ada DLLs and Finalization, Up: Mixed-Language Programming on Windows + + 7.4.7.17 Creating a Spec for Ada DLLs + ..................................... + + To use the services exported by the Ada DLL from another programming + language (e.g., C), you have to translate the specs of the exported Ada + entities in that language. For instance in the case of ‘API.dll’, the + corresponding C header file could look like: + + extern int *_imp__count; + #define count (*_imp__count) + int factorial (int); + + It is important to understand that when building an Ada DLL to be used + by other Ada applications, you need two different specs for the packages + contained in the DLL: one for building the DLL and the other for using + the DLL. This is because the ‘DLL’ calling convention is needed to use a + variable defined in a DLL, but when building the DLL, the variable must + have either the ‘Ada’ or ‘C’ calling convention. As an example consider + a DLL comprising the following package ‘API’: + + package API is + Count : Integer := 0; + ... + -- Remainder of the package omitted. + end API; + + After producing a DLL containing package ‘API’, the spec that must be + used to import ‘API.Count’ from Ada code outside of the DLL is: + + package API is + Count : Integer; + pragma Import (DLL, Count); + end API; + + * Menu: + + * Creating the Definition File:: + * Using gnatdll:: + +  + File: gnat_ugn.info, Node: Creating the Definition File, Next: Using gnatdll, Up: Creating a Spec for Ada DLLs + + 7.4.7.18 Creating the Definition File + ..................................... + + The definition file is the last file needed to build the DLL. It lists + the exported symbols. As an example, the definition file for a DLL + containing only package ‘API’ (where all the entities are exported with + a ‘C’ calling convention) is: + + EXPORTS + count + factorial + finalize_api + initialize_api + + If the ‘C’ calling convention is missing from package ‘API’, then the + definition file contains the mangled Ada names of the above entities, + which in this case are: + + EXPORTS + api__count + api__factorial + api__finalize_api + api__initialize_api + +  + File: gnat_ugn.info, Node: Using gnatdll, Prev: Creating the Definition File, Up: Creating a Spec for Ada DLLs + + 7.4.7.19 Using ‘gnatdll’ + ........................ + + ‘gnatdll’ is a tool to automate the DLL build process once all the Ada + and non-Ada sources that make up your DLL have been compiled. ‘gnatdll’ + is actually in charge of two distinct tasks: build the static import + library for the DLL and the actual DLL. The form of the ‘gnatdll’ + command is + + $ gnatdll [ switches ] list-of-files [ -largs opts ] + + where ‘list-of-files’ is a list of ALI and object files. The object + file list must be the exact list of objects corresponding to the non-Ada + sources whose services are to be included in the DLL. The ALI file list + must be the exact list of ALI files for the corresponding Ada sources + whose services are to be included in the DLL. If ‘list-of-files’ is + missing, only the static import library is generated. + + You may specify any of the following switches to ‘gnatdll’: + + ‘-a[`address']’ + + Build a non-relocatable DLL at ‘address’. If ‘address’ is not + specified the default address ‘0x11000000’ will be used. By + default, when this switch is missing, ‘gnatdll’ builds relocatable + DLL. We advise the reader to build relocatable DLL. + + ‘-b `address'’ + + Set the relocatable DLL base address. By default the address is + ‘0x11000000’. + + ‘-bargs `opts'’ + + Binder options. Pass ‘opts’ to the binder. + + ‘-d `dllfile'’ + + ‘dllfile’ is the name of the DLL. This switch must be present for + ‘gnatdll’ to do anything. The name of the generated import library + is obtained algorithmically from ‘dllfile’ as shown in the + following example: if ‘dllfile’ is ‘xyz.dll’, the import library + name is ‘libxyz.dll.a’. The name of the definition file to use (if + not specified by option ‘-e’) is obtained algorithmically from + ‘dllfile’ as shown in the following example: if ‘dllfile’ is + ‘xyz.dll’, the definition file used is ‘xyz.def’. + + ‘-e `deffile'’ + + ‘deffile’ is the name of the definition file. + + ‘-g’ + + Generate debugging information. This information is stored in the + object file and copied from there to the final DLL file by the + linker, where it can be read by the debugger. You must use the + ‘-g’ switch if you plan on using the debugger or the symbolic stack + traceback. + + ‘-h’ + + Help mode. Displays ‘gnatdll’ switch usage information. + + ‘-I`dir'’ + + Direct ‘gnatdll’ to search the ‘dir’ directory for source and + object files needed to build the DLL. (*note Search Paths and the + Run-Time Library (RTL): 73.). + + ‘-k’ + + Removes the ‘@`nn'’ suffix from the import library’s exported + names, but keeps them for the link names. You must specify this + option if you want to use a ‘Stdcall’ function in a DLL for which + the ‘@`nn'’ suffix has been removed. This is the case for most of + the Windows NT DLL for example. This option has no effect when + ‘-n’ option is specified. + + ‘-l `file'’ + + The list of ALI and object files used to build the DLL are listed + in ‘file’, instead of being given in the command line. Each line + in ‘file’ contains the name of an ALI or object file. + + ‘-n’ + + No Import. Do not create the import library. + + ‘-q’ + + Quiet mode. Do not display unnecessary messages. + + ‘-v’ + + Verbose mode. Display extra information. + + ‘-largs `opts'’ + + Linker options. Pass ‘opts’ to the linker. + + ‘gnatdll’ Example + ................. + + As an example the command to build a relocatable DLL from ‘api.adb’ once + ‘api.adb’ has been compiled and ‘api.def’ created is + + $ gnatdll -d api.dll api.ali + + The above command creates two files: ‘libapi.dll.a’ (the import library) + and ‘api.dll’ (the actual DLL). If you want to create only the DLL, just + type: + + $ gnatdll -d api.dll -n api.ali + + Alternatively if you want to create just the import library, type: + + $ gnatdll -d api.dll + + ‘gnatdll’ behind the Scenes + ........................... + + This section details the steps involved in creating a DLL. ‘gnatdll’ + does these steps for you. Unless you are interested in understanding + what goes on behind the scenes, you should skip this section. + + We use the previous example of a DLL containing the Ada package ‘API’, + to illustrate the steps necessary to build a DLL. The starting point is + a set of objects that will make up the DLL and the corresponding ALI + files. In the case of this example this means that ‘api.o’ and + ‘api.ali’ are available. To build a relocatable DLL, ‘gnatdll’ does the + following: + + * ‘gnatdll’ builds the base file (‘api.base’). A base file gives the + information necessary to generate relocation information for the + DLL. + + $ gnatbind -n api + $ gnatlink api -o api.jnk -mdll -Wl,--base-file,api.base + + In addition to the base file, the ‘gnatlink’ command generates an + output file ‘api.jnk’ which can be discarded. The ‘-mdll’ switch + asks ‘gnatlink’ to generate the routines ‘DllMain’ and + ‘DllMainCRTStartup’ that are called by the Windows loader when the + DLL is loaded into memory. + + * ‘gnatdll’ uses ‘dlltool’ (see *note Using dlltool: 1f8.) to build + the export table (‘api.exp’). The export table contains the + relocation information in a form which can be used during the final + link to ensure that the Windows loader is able to place the DLL + anywhere in memory. + + $ dlltool --dllname api.dll --def api.def --base-file api.base \\ + --output-exp api.exp + + * ‘gnatdll’ builds the base file using the new export table. Note + that ‘gnatbind’ must be called once again since the binder + generated file has been deleted during the previous call to + ‘gnatlink’. + + $ gnatbind -n api + $ gnatlink api -o api.jnk api.exp -mdll + -Wl,--base-file,api.base + + * ‘gnatdll’ builds the new export table using the new base file and + generates the DLL import library ‘libAPI.dll.a’. + + $ dlltool --dllname api.dll --def api.def --base-file api.base \\ + --output-exp api.exp --output-lib libAPI.a + + * Finally ‘gnatdll’ builds the relocatable DLL using the final export + table. + + $ gnatbind -n api + $ gnatlink api api.exp -o api.dll -mdll + + Using ‘dlltool’ + ............... + + ‘dlltool’ is the low-level tool used by ‘gnatdll’ to build DLLs and + static import libraries. This section summarizes the most common + ‘dlltool’ switches. The form of the ‘dlltool’ command is + + $ dlltool [`switches`] + + ‘dlltool’ switches include: + + ‘--base-file `basefile'’ + + Read the base file ‘basefile’ generated by the linker. This switch + is used to create a relocatable DLL. + + ‘--def `deffile'’ + + Read the definition file. + + ‘--dllname `name'’ + + Gives the name of the DLL. This switch is used to embed the name of + the DLL in the static import library generated by ‘dlltool’ with + switch ‘--output-lib’. + + ‘-k’ + + Kill ‘@`nn'’ from exported names (*note Windows Calling + Conventions: 1d2. for a discussion about ‘Stdcall’-style symbols. + + ‘--help’ + + Prints the ‘dlltool’ switches with a concise description. + + ‘--output-exp `exportfile'’ + + Generate an export file ‘exportfile’. The export file contains the + export table (list of symbols in the DLL) and is used to create the + DLL. + + ‘--output-lib `libfile'’ + + Generate a static import library ‘libfile’. + + ‘-v’ + + Verbose mode. + + ‘--as `assembler-name'’ + + Use ‘assembler-name’ as the assembler. The default is ‘as’. + +  + File: gnat_ugn.info, Node: GNAT and Windows Resources, Next: Using GNAT DLLs from Microsoft Visual Studio Applications, Prev: Creating a Spec for Ada DLLs, Up: Mixed-Language Programming on Windows + + 7.4.7.20 GNAT and Windows Resources + ................................... + + Resources are an easy way to add Windows specific objects to your + application. The objects that can be added as resources include: + + * menus + + * accelerators + + * dialog boxes + + * string tables + + * bitmaps + + * cursors + + * icons + + * fonts + + * version information + + For example, a version information resource can be defined as follow and + embedded into an executable or DLL: + + A version information resource can be used to embed information into an + executable or a DLL. These information can be viewed using the file + properties from the Windows Explorer. Here is an example of a version + information resource: + + 1 VERSIONINFO + FILEVERSION 1,0,0,0 + PRODUCTVERSION 1,0,0,0 + BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "080904E4" + BEGIN + VALUE "CompanyName", "My Company Name" + VALUE "FileDescription", "My application" + VALUE "FileVersion", "1.0" + VALUE "InternalName", "my_app" + VALUE "LegalCopyright", "My Name" + VALUE "OriginalFilename", "my_app.exe" + VALUE "ProductName", "My App" + VALUE "ProductVersion", "1.0" + END + END + + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x809, 1252 + END + END + + The value ‘0809’ (langID) is for the U.K English language and ‘04E4’ + (charsetID), which is equal to ‘1252’ decimal, for multilingual. + + This section explains how to build, compile and use resources. Note + that this section does not cover all resource objects, for a complete + description see the corresponding Microsoft documentation. + + * Menu: + + * Building Resources:: + * Compiling Resources:: + * Using Resources:: + +  + File: gnat_ugn.info, Node: Building Resources, Next: Compiling Resources, Up: GNAT and Windows Resources + + 7.4.7.21 Building Resources + ........................... + + A resource file is an ASCII file. By convention resource files have an + ‘.rc’ extension. The easiest way to build a resource file is to use + Microsoft tools such as ‘imagedit.exe’ to build bitmaps, icons and + cursors and ‘dlgedit.exe’ to build dialogs. It is always possible to + build an ‘.rc’ file yourself by writing a resource script. + + It is not our objective to explain how to write a resource file. A + complete description of the resource script language can be found in the + Microsoft documentation. + +  + File: gnat_ugn.info, Node: Compiling Resources, Next: Using Resources, Prev: Building Resources, Up: GNAT and Windows Resources + + 7.4.7.22 Compiling Resources + ............................ + + This section describes how to build a GNAT-compatible (COFF) object file + containing the resources. This is done using the Resource Compiler + ‘windres’ as follows: + + $ windres -i myres.rc -o myres.o + + By default ‘windres’ will run ‘gcc’ to preprocess the ‘.rc’ file. You + can specify an alternate preprocessor (usually named ‘cpp.exe’) using + the ‘windres’ ‘--preprocessor’ parameter. A list of all possible + options may be obtained by entering the command ‘windres’ ‘--help’. + + It is also possible to use the Microsoft resource compiler ‘rc.exe’ to + produce a ‘.res’ file (binary resource file). See the corresponding + Microsoft documentation for further details. In this case you need to + use ‘windres’ to translate the ‘.res’ file to a GNAT-compatible object + file as follows: + + $ windres -i myres.res -o myres.o + +  + File: gnat_ugn.info, Node: Using Resources, Prev: Compiling Resources, Up: GNAT and Windows Resources + + 7.4.7.23 Using Resources + ........................ + + To include the resource file in your program just add the + GNAT-compatible object file for the resource(s) to the linker arguments. + With ‘gnatmake’ this is done by using the ‘-largs’ option: + + $ gnatmake myprog -largs myres.o + +  + File: gnat_ugn.info, Node: Using GNAT DLLs from Microsoft Visual Studio Applications, Next: Debugging a DLL, Prev: GNAT and Windows Resources, Up: Mixed-Language Programming on Windows + + 7.4.7.24 Using GNAT DLLs from Microsoft Visual Studio Applications + .................................................................. + + This section describes a common case of mixed GNAT/Microsoft Visual + Studio application development, where the main program is developed + using MSVS, and is linked with a DLL developed using GNAT. Such a mixed + application should be developed following the general guidelines + outlined above; below is the cookbook-style sequence of steps to follow: + + 1. First develop and build the GNAT shared library using a library + project (let’s assume the project is ‘mylib.gpr’, producing the + library ‘libmylib.dll’): + + $ gprbuild -p mylib.gpr + + 2. Produce a .def file for the symbols you need to interface with, + either by hand or automatically with possibly some manual + adjustments (see *note Creating Definition File Automatically: + 1e3.): + + $ dlltool libmylib.dll -z libmylib.def --export-all-symbols + + 3. Make sure that MSVS command-line tools are accessible on the path. + + 4. Create the Microsoft-style import library (see *note MSVS-Style + Import Library: 1e6.): + + $ lib -machine:IX86 -def:libmylib.def -out:libmylib.lib + + If you are using a 64-bit toolchain, the above becomes… + + $ lib -machine:X64 -def:libmylib.def -out:libmylib.lib + + 5. Build the C main + + $ cl /O2 /MD main.c libmylib.lib + + 6. Before running the executable, make sure you have set the PATH to + the DLL, or copy the DLL into into the directory containing the + .exe. + +  + File: gnat_ugn.info, Node: Debugging a DLL, Next: Setting Stack Size from gnatlink, Prev: Using GNAT DLLs from Microsoft Visual Studio Applications, Up: Mixed-Language Programming on Windows + + 7.4.7.25 Debugging a DLL + ........................ + + Debugging a DLL is similar to debugging a standard program. But we have + to deal with two different executable parts: the DLL and the program + that uses it. We have the following four possibilities: + + * The program and the DLL are built with GCC/GNAT. + + * The program is built with foreign tools and the DLL is built with + GCC/GNAT. + + * The program is built with GCC/GNAT and the DLL is built with + foreign tools. + + In this section we address only cases one and two above. There is no + point in trying to debug a DLL with GNU/GDB, if there is no + GDB-compatible debugging information in it. To do so you must use a + debugger compatible with the tools suite used to build the DLL. + + * Menu: + + * Program and DLL Both Built with GCC/GNAT:: + * Program Built with Foreign Tools and DLL Built with GCC/GNAT:: + +  + File: gnat_ugn.info, Node: Program and DLL Both Built with GCC/GNAT, Next: Program Built with Foreign Tools and DLL Built with GCC/GNAT, Up: Debugging a DLL + + 7.4.7.26 Program and DLL Both Built with GCC/GNAT + ................................................. + + This is the simplest case. Both the DLL and the program have ‘GDB’ + compatible debugging information. It is then possible to break anywhere + in the process. Let’s suppose here that the main procedure is named + ‘ada_main’ and that in the DLL there is an entry point named ‘ada_dll’. + + The DLL (*note Introduction to Dynamic Link Libraries (DLLs): 1dc.) and + program must have been built with the debugging information (see GNAT -g + switch). Here are the step-by-step instructions for debugging it: + + * Launch ‘GDB’ on the main program. + + $ gdb -nw ada_main + + * Start the program and stop at the beginning of the main procedure + + (gdb) start + + This step is required to be able to set a breakpoint inside the + DLL. As long as the program is not run, the DLL is not loaded. + This has the consequence that the DLL debugging information is also + not loaded, so it is not possible to set a breakpoint in the DLL. + + * Set a breakpoint inside the DLL + + (gdb) break ada_dll + (gdb) cont + + At this stage a breakpoint is set inside the DLL. From there on you can + use the standard approach to debug the whole program (*note Running and + Debugging Ada Programs: 14d.). + +  + File: gnat_ugn.info, Node: Program Built with Foreign Tools and DLL Built with GCC/GNAT, Prev: Program and DLL Both Built with GCC/GNAT, Up: Debugging a DLL + + 7.4.7.27 Program Built with Foreign Tools and DLL Built with GCC/GNAT + ..................................................................... + + In this case things are slightly more complex because it is not possible + to start the main program and then break at the beginning to load the + DLL and the associated DLL debugging information. It is not possible to + break at the beginning of the program because there is no ‘GDB’ + debugging information, and therefore there is no direct way of getting + initial control. This section addresses this issue by describing some + methods that can be used to break somewhere in the DLL to debug it. + + First suppose that the main procedure is named ‘main’ (this is for + example some C code built with Microsoft Visual C) and that there is a + DLL named ‘test.dll’ containing an Ada entry point named ‘ada_dll’. + + The DLL (see *note Introduction to Dynamic Link Libraries (DLLs): 1dc.) + must have been built with debugging information (see the GNAT ‘-g’ + option). + + Debugging the DLL Directly + .......................... + + * Find out the executable starting address + + $ objdump --file-header main.exe + + The starting address is reported on the last line. For example: + + main.exe: file format pei-i386 + architecture: i386, flags 0x0000010a: + EXEC_P, HAS_DEBUG, D_PAGED + start address 0x00401010 + + * Launch the debugger on the executable. + + $ gdb main.exe + + * Set a breakpoint at the starting address, and launch the program. + + $ (gdb) break *0x00401010 + $ (gdb) run + + The program will stop at the given address. + + * Set a breakpoint on a DLL subroutine. + + (gdb) break ada_dll.adb:45 + + Or if you want to break using a symbol on the DLL, you need first + to select the Ada language (language used by the DLL). + + (gdb) set language ada + (gdb) break ada_dll + + * Continue the program. + + (gdb) cont + + This will run the program until it reaches the breakpoint that has + been set. From that point you can use the standard way to debug a + program as described in (*note Running and Debugging Ada Programs: + 14d.). + + It is also possible to debug the DLL by attaching to a running process. + + Attaching to a Running Process + .............................. + + With ‘GDB’ it is always possible to debug a running process by attaching + to it. It is possible to debug a DLL this way. The limitation of this + approach is that the DLL must run long enough to perform the attach + operation. It may be useful for instance to insert a time wasting loop + in the code of the DLL to meet this criterion. + + * Launch the main program ‘main.exe’. + + $ main + + * Use the Windows `Task Manager' to find the process ID. Let’s say + that the process PID for ‘main.exe’ is 208. + + * Launch gdb. + + $ gdb + + * Attach to the running process to be debugged. + + (gdb) attach 208 + + * Load the process debugging information. + + (gdb) symbol-file main.exe + + * Break somewhere in the DLL. + + (gdb) break ada_dll + + * Continue process execution. + + (gdb) cont + + This last step will resume the process execution, and stop at the + breakpoint we have set. From there you can use the standard approach to + debug a program as described in *note Running and Debugging Ada + Programs: 14d. + +  + File: gnat_ugn.info, Node: Setting Stack Size from gnatlink, Next: Setting Heap Size from gnatlink, Prev: Debugging a DLL, Up: Mixed-Language Programming on Windows + + 7.4.7.28 Setting Stack Size from ‘gnatlink’ + ........................................... + + It is possible to specify the program stack size at link time. On + modern versions of Windows, starting with XP, this is mostly useful to + set the size of the main stack (environment task). The other task + stacks are set with pragma Storage_Size or with the `gnatbind -d' + command. + + Since older versions of Windows (2000, NT4, etc.) do not allow setting + the reserve size of individual tasks, the link-time stack size applies + to all tasks, and pragma Storage_Size has no effect. In particular, + Stack Overflow checks are made against this link-time specified size. + + This setting can be done with ‘gnatlink’ using either of the following: + + * ‘-Xlinker’ linker option + + $ gnatlink hello -Xlinker --stack=0x10000,0x1000 + + This sets the stack reserve size to 0x10000 bytes and the stack + commit size to 0x1000 bytes. + + * ‘-Wl’ linker option + + $ gnatlink hello -Wl,--stack=0x1000000 + + This sets the stack reserve size to 0x1000000 bytes. Note that + with ‘-Wl’ option it is not possible to set the stack commit size + because the comma is a separator for this option. + +  + File: gnat_ugn.info, Node: Setting Heap Size from gnatlink, Prev: Setting Stack Size from gnatlink, Up: Mixed-Language Programming on Windows + + 7.4.7.29 Setting Heap Size from ‘gnatlink’ + .......................................... + + Under Windows systems, it is possible to specify the program heap size + from ‘gnatlink’ using either of the following: + + * ‘-Xlinker’ linker option + + $ gnatlink hello -Xlinker --heap=0x10000,0x1000 + + This sets the heap reserve size to 0x10000 bytes and the heap + commit size to 0x1000 bytes. + + * ‘-Wl’ linker option + + $ gnatlink hello -Wl,--heap=0x1000000 + + This sets the heap reserve size to 0x1000000 bytes. Note that with + ‘-Wl’ option it is not possible to set the heap commit size because + the comma is a separator for this option. + +  + File: gnat_ugn.info, Node: Windows Specific Add-Ons, Prev: Mixed-Language Programming on Windows, Up: Microsoft Windows Topics + + 7.4.8 Windows Specific Add-Ons + ------------------------------ + + This section describes the Windows specific add-ons. + + * Menu: + + * Win32Ada:: + * wPOSIX:: + +  + File: gnat_ugn.info, Node: Win32Ada, Next: wPOSIX, Up: Windows Specific Add-Ons + + 7.4.8.1 Win32Ada + ................ + + Win32Ada is a binding for the Microsoft Win32 API. This binding can be + easily installed from the provided installer. To use the Win32Ada + binding you need to use a project file, and adding a single with_clause + will give you full access to the Win32Ada binding sources and ensure + that the proper libraries are passed to the linker. + + with "win32ada"; + project P is + for Sources use ...; + end P; + + To build the application you just need to call gprbuild for the + application’s project, here p.gpr: + + gprbuild p.gpr + +  + File: gnat_ugn.info, Node: wPOSIX, Prev: Win32Ada, Up: Windows Specific Add-Ons + + 7.4.8.2 wPOSIX + .............. + + wPOSIX is a minimal POSIX binding whose goal is to help with building + cross-platforms applications. This binding is not complete though, as + the Win32 API does not provide the necessary support for all POSIX APIs. + + To use the wPOSIX binding you need to use a project file, and adding a + single with_clause will give you full access to the wPOSIX binding + sources and ensure that the proper libraries are passed to the linker. + + with "wposix"; + project P is + for Sources use ...; + end P; + + To build the application you just need to call gprbuild for the + application’s project, here p.gpr: + + gprbuild p.gpr + +  + File: gnat_ugn.info, Node: Mac OS Topics, Prev: Microsoft Windows Topics, Up: Platform-Specific Information + + 7.5 Mac OS Topics + ================= + + This section describes topics that are specific to Apple’s OS X + platform. + + * Menu: + + * Codesigning the Debugger:: + +  + File: gnat_ugn.info, Node: Codesigning the Debugger, Up: Mac OS Topics + + 7.5.1 Codesigning the Debugger + ------------------------------ + + The Darwin Kernel requires the debugger to have special permissions + before it is allowed to control other processes. These permissions are + granted by codesigning the GDB executable. Without these permissions, + the debugger will report error messages such as: + + Starting program: /x/y/foo + Unable to find Mach task port for process-id 28885: (os/kern) failure (0x5). + (please check gdb is codesigned - see taskgated(8)) + + Codesigning requires a certificate. The following procedure explains + how to create one: + + * Start the Keychain Access application (in + /Applications/Utilities/Keychain Access.app) + + * Select the Keychain Access -> Certificate Assistant -> Create a + Certificate… menu + + * Then: + + * Choose a name for the new certificate (this procedure will use + “gdb-cert” as an example) + + * Set “Identity Type” to “Self Signed Root” + + * Set “Certificate Type” to “Code Signing” + + * Activate the “Let me override defaults” option + + * Click several times on “Continue” until the “Specify a Location For + The Certificate” screen appears, then set “Keychain” to “System” + + * Click on “Continue” until the certificate is created + + * Finally, in the view, double-click on the new certificate, and set + “When using this certificate” to “Always Trust” + + * Exit the Keychain Access application and restart the computer (this + is unfortunately required) + + Once a certificate has been created, the debugger can be codesigned as + follow. In a Terminal, run the following command: + + $ codesign -f -s "gdb-cert" /bin/gdb + + where “gdb-cert” should be replaced by the actual certificate name + chosen above, and should be replaced by the + location where you installed GNAT. Also, be sure that users are in the + Unix group ‘_developer’. + +  + File: gnat_ugn.info, Node: Example of Binder Output File, Next: Elaboration Order Handling in GNAT, Prev: Platform-Specific Information, Up: Top + + 8 Example of Binder Output File + ******************************* + + This Appendix displays the source code for the output file generated by + `gnatbind' for a simple ‘Hello World’ program. Comments have been added + for clarification purposes. + + -- The package is called Ada_Main unless this name is actually used + -- as a unit name in the partition, in which case some other unique + -- name is used. + + pragma Ada_95; + with System; + package ada_main is + pragma Warnings (Off); + + -- The main program saves the parameters (argument count, + -- argument values, environment pointer) in global variables + -- for later access by other units including + -- Ada.Command_Line. + + gnat_argc : Integer; + gnat_argv : System.Address; + gnat_envp : System.Address; + + -- The actual variables are stored in a library routine. This + -- is useful for some shared library situations, where there + -- are problems if variables are not in the library. + + pragma Import (C, gnat_argc); + pragma Import (C, gnat_argv); + pragma Import (C, gnat_envp); + + -- The exit status is similarly an external location + + gnat_exit_status : Integer; + pragma Import (C, gnat_exit_status); + + GNAT_Version : constant String := + "GNAT Version: Pro 7.4.0w (20141119-49)" & ASCII.NUL; + pragma Export (C, GNAT_Version, "__gnat_version"); + + Ada_Main_Program_Name : constant String := "_ada_hello" & ASCII.NUL; + pragma Export (C, Ada_Main_Program_Name, "__gnat_ada_main_program_name"); + + -- This is the generated adainit routine that performs + -- initialization at the start of execution. In the case + -- where Ada is the main program, this main program makes + -- a call to adainit at program startup. + + procedure adainit; + pragma Export (C, adainit, "adainit"); + + -- This is the generated adafinal routine that performs + -- finalization at the end of execution. In the case where + -- Ada is the main program, this main program makes a call + -- to adafinal at program termination. + + procedure adafinal; + pragma Export (C, adafinal, "adafinal"); + + -- This routine is called at the start of execution. It is + -- a dummy routine that is used by the debugger to breakpoint + -- at the start of execution. + + -- This is the actual generated main program (it would be + -- suppressed if the no main program switch were used). As + -- required by standard system conventions, this program has + -- the external name main. + + function main + (argc : Integer; + argv : System.Address; + envp : System.Address) + return Integer; + pragma Export (C, main, "main"); + + -- The following set of constants give the version + -- identification values for every unit in the bound + -- partition. This identification is computed from all + -- dependent semantic units, and corresponds to the + -- string that would be returned by use of the + -- Body_Version or Version attributes. + + -- The following Export pragmas export the version numbers + -- with symbolic names ending in B (for body) or S + -- (for spec) so that they can be located in a link. The + -- information provided here is sufficient to track down + -- the exact versions of units used in a given build. + + type Version_32 is mod 2 ** 32; + u00001 : constant Version_32 := 16#8ad6e54a#; + pragma Export (C, u00001, "helloB"); + u00002 : constant Version_32 := 16#fbff4c67#; + pragma Export (C, u00002, "system__standard_libraryB"); + u00003 : constant Version_32 := 16#1ec6fd90#; + pragma Export (C, u00003, "system__standard_libraryS"); + u00004 : constant Version_32 := 16#3ffc8e18#; + pragma Export (C, u00004, "adaS"); + u00005 : constant Version_32 := 16#28f088c2#; + pragma Export (C, u00005, "ada__text_ioB"); + u00006 : constant Version_32 := 16#f372c8ac#; + pragma Export (C, u00006, "ada__text_ioS"); + u00007 : constant Version_32 := 16#2c143749#; + pragma Export (C, u00007, "ada__exceptionsB"); + u00008 : constant Version_32 := 16#f4f0cce8#; + pragma Export (C, u00008, "ada__exceptionsS"); + u00009 : constant Version_32 := 16#a46739c0#; + pragma Export (C, u00009, "ada__exceptions__last_chance_handlerB"); + u00010 : constant Version_32 := 16#3aac8c92#; + pragma Export (C, u00010, "ada__exceptions__last_chance_handlerS"); + u00011 : constant Version_32 := 16#1d274481#; + pragma Export (C, u00011, "systemS"); + u00012 : constant Version_32 := 16#a207fefe#; + pragma Export (C, u00012, "system__soft_linksB"); + u00013 : constant Version_32 := 16#467d9556#; + pragma Export (C, u00013, "system__soft_linksS"); + u00014 : constant Version_32 := 16#b01dad17#; + pragma Export (C, u00014, "system__parametersB"); + u00015 : constant Version_32 := 16#630d49fe#; + pragma Export (C, u00015, "system__parametersS"); + u00016 : constant Version_32 := 16#b19b6653#; + pragma Export (C, u00016, "system__secondary_stackB"); + u00017 : constant Version_32 := 16#b6468be8#; + pragma Export (C, u00017, "system__secondary_stackS"); + u00018 : constant Version_32 := 16#39a03df9#; + pragma Export (C, u00018, "system__storage_elementsB"); + u00019 : constant Version_32 := 16#30e40e85#; + pragma Export (C, u00019, "system__storage_elementsS"); + u00020 : constant Version_32 := 16#41837d1e#; + pragma Export (C, u00020, "system__stack_checkingB"); + u00021 : constant Version_32 := 16#93982f69#; + pragma Export (C, u00021, "system__stack_checkingS"); + u00022 : constant Version_32 := 16#393398c1#; + pragma Export (C, u00022, "system__exception_tableB"); + u00023 : constant Version_32 := 16#b33e2294#; + pragma Export (C, u00023, "system__exception_tableS"); + u00024 : constant Version_32 := 16#ce4af020#; + pragma Export (C, u00024, "system__exceptionsB"); + u00025 : constant Version_32 := 16#75442977#; + pragma Export (C, u00025, "system__exceptionsS"); + u00026 : constant Version_32 := 16#37d758f1#; + pragma Export (C, u00026, "system__exceptions__machineS"); + u00027 : constant Version_32 := 16#b895431d#; + pragma Export (C, u00027, "system__exceptions_debugB"); + u00028 : constant Version_32 := 16#aec55d3f#; + pragma Export (C, u00028, "system__exceptions_debugS"); + u00029 : constant Version_32 := 16#570325c8#; + pragma Export (C, u00029, "system__img_intB"); + u00030 : constant Version_32 := 16#1ffca443#; + pragma Export (C, u00030, "system__img_intS"); + u00031 : constant Version_32 := 16#b98c3e16#; + pragma Export (C, u00031, "system__tracebackB"); + u00032 : constant Version_32 := 16#831a9d5a#; + pragma Export (C, u00032, "system__tracebackS"); + u00033 : constant Version_32 := 16#9ed49525#; + pragma Export (C, u00033, "system__traceback_entriesB"); + u00034 : constant Version_32 := 16#1d7cb2f1#; + pragma Export (C, u00034, "system__traceback_entriesS"); + u00035 : constant Version_32 := 16#8c33a517#; + pragma Export (C, u00035, "system__wch_conB"); + u00036 : constant Version_32 := 16#065a6653#; + pragma Export (C, u00036, "system__wch_conS"); + u00037 : constant Version_32 := 16#9721e840#; + pragma Export (C, u00037, "system__wch_stwB"); + u00038 : constant Version_32 := 16#2b4b4a52#; + pragma Export (C, u00038, "system__wch_stwS"); + u00039 : constant Version_32 := 16#92b797cb#; + pragma Export (C, u00039, "system__wch_cnvB"); + u00040 : constant Version_32 := 16#09eddca0#; + pragma Export (C, u00040, "system__wch_cnvS"); + u00041 : constant Version_32 := 16#6033a23f#; + pragma Export (C, u00041, "interfacesS"); + u00042 : constant Version_32 := 16#ece6fdb6#; + pragma Export (C, u00042, "system__wch_jisB"); + u00043 : constant Version_32 := 16#899dc581#; + pragma Export (C, u00043, "system__wch_jisS"); + u00044 : constant Version_32 := 16#10558b11#; + pragma Export (C, u00044, "ada__streamsB"); + u00045 : constant Version_32 := 16#2e6701ab#; + pragma Export (C, u00045, "ada__streamsS"); + u00046 : constant Version_32 := 16#db5c917c#; + pragma Export (C, u00046, "ada__io_exceptionsS"); + u00047 : constant Version_32 := 16#12c8cd7d#; + pragma Export (C, u00047, "ada__tagsB"); + u00048 : constant Version_32 := 16#ce72c228#; + pragma Export (C, u00048, "ada__tagsS"); + u00049 : constant Version_32 := 16#c3335bfd#; + pragma Export (C, u00049, "system__htableB"); + u00050 : constant Version_32 := 16#99e5f76b#; + pragma Export (C, u00050, "system__htableS"); + u00051 : constant Version_32 := 16#089f5cd0#; + pragma Export (C, u00051, "system__string_hashB"); + u00052 : constant Version_32 := 16#3bbb9c15#; + pragma Export (C, u00052, "system__string_hashS"); + u00053 : constant Version_32 := 16#807fe041#; + pragma Export (C, u00053, "system__unsigned_typesS"); + u00054 : constant Version_32 := 16#d27be59e#; + pragma Export (C, u00054, "system__val_lluB"); + u00055 : constant Version_32 := 16#fa8db733#; + pragma Export (C, u00055, "system__val_lluS"); + u00056 : constant Version_32 := 16#27b600b2#; + pragma Export (C, u00056, "system__val_utilB"); + u00057 : constant Version_32 := 16#b187f27f#; + pragma Export (C, u00057, "system__val_utilS"); + u00058 : constant Version_32 := 16#d1060688#; + pragma Export (C, u00058, "system__case_utilB"); + u00059 : constant Version_32 := 16#392e2d56#; + pragma Export (C, u00059, "system__case_utilS"); + u00060 : constant Version_32 := 16#84a27f0d#; + pragma Export (C, u00060, "interfaces__c_streamsB"); + u00061 : constant Version_32 := 16#8bb5f2c0#; + pragma Export (C, u00061, "interfaces__c_streamsS"); + u00062 : constant Version_32 := 16#6db6928f#; + pragma Export (C, u00062, "system__crtlS"); + u00063 : constant Version_32 := 16#4e6a342b#; + pragma Export (C, u00063, "system__file_ioB"); + u00064 : constant Version_32 := 16#ba56a5e4#; + pragma Export (C, u00064, "system__file_ioS"); + u00065 : constant Version_32 := 16#b7ab275c#; + pragma Export (C, u00065, "ada__finalizationB"); + u00066 : constant Version_32 := 16#19f764ca#; + pragma Export (C, u00066, "ada__finalizationS"); + u00067 : constant Version_32 := 16#95817ed8#; + pragma Export (C, u00067, "system__finalization_rootB"); + u00068 : constant Version_32 := 16#52d53711#; + pragma Export (C, u00068, "system__finalization_rootS"); + u00069 : constant Version_32 := 16#769e25e6#; + pragma Export (C, u00069, "interfaces__cB"); + u00070 : constant Version_32 := 16#4a38bedb#; + pragma Export (C, u00070, "interfaces__cS"); + u00071 : constant Version_32 := 16#07e6ee66#; + pragma Export (C, u00071, "system__os_libB"); + u00072 : constant Version_32 := 16#d7b69782#; + pragma Export (C, u00072, "system__os_libS"); + u00073 : constant Version_32 := 16#1a817b8e#; + pragma Export (C, u00073, "system__stringsB"); + u00074 : constant Version_32 := 16#639855e7#; + pragma Export (C, u00074, "system__stringsS"); + u00075 : constant Version_32 := 16#e0b8de29#; + pragma Export (C, u00075, "system__file_control_blockS"); + u00076 : constant Version_32 := 16#b5b2aca1#; + pragma Export (C, u00076, "system__finalization_mastersB"); + u00077 : constant Version_32 := 16#69316dc1#; + pragma Export (C, u00077, "system__finalization_mastersS"); + u00078 : constant Version_32 := 16#57a37a42#; + pragma Export (C, u00078, "system__address_imageB"); + u00079 : constant Version_32 := 16#bccbd9bb#; + pragma Export (C, u00079, "system__address_imageS"); + u00080 : constant Version_32 := 16#7268f812#; + pragma Export (C, u00080, "system__img_boolB"); + u00081 : constant Version_32 := 16#e8fe356a#; + pragma Export (C, u00081, "system__img_boolS"); + u00082 : constant Version_32 := 16#d7aac20c#; + pragma Export (C, u00082, "system__ioB"); + u00083 : constant Version_32 := 16#8365b3ce#; + pragma Export (C, u00083, "system__ioS"); + u00084 : constant Version_32 := 16#6d4d969a#; + pragma Export (C, u00084, "system__storage_poolsB"); + u00085 : constant Version_32 := 16#e87cc305#; + pragma Export (C, u00085, "system__storage_poolsS"); + u00086 : constant Version_32 := 16#e34550ca#; + pragma Export (C, u00086, "system__pool_globalB"); + u00087 : constant Version_32 := 16#c88d2d16#; + pragma Export (C, u00087, "system__pool_globalS"); + u00088 : constant Version_32 := 16#9d39c675#; + pragma Export (C, u00088, "system__memoryB"); + u00089 : constant Version_32 := 16#445a22b5#; + pragma Export (C, u00089, "system__memoryS"); + u00090 : constant Version_32 := 16#6a859064#; + pragma Export (C, u00090, "system__storage_pools__subpoolsB"); + u00091 : constant Version_32 := 16#e3b008dc#; + pragma Export (C, u00091, "system__storage_pools__subpoolsS"); + u00092 : constant Version_32 := 16#63f11652#; + pragma Export (C, u00092, "system__storage_pools__subpools__finalizationB"); + u00093 : constant Version_32 := 16#fe2f4b3a#; + pragma Export (C, u00093, "system__storage_pools__subpools__finalizationS"); + + -- BEGIN ELABORATION ORDER + -- ada%s + -- interfaces%s + -- system%s + -- system.case_util%s + -- system.case_util%b + -- system.htable%s + -- system.img_bool%s + -- system.img_bool%b + -- system.img_int%s + -- system.img_int%b + -- system.io%s + -- system.io%b + -- system.parameters%s + -- system.parameters%b + -- system.crtl%s + -- interfaces.c_streams%s + -- interfaces.c_streams%b + -- system.standard_library%s + -- system.exceptions_debug%s + -- system.exceptions_debug%b + -- system.storage_elements%s + -- system.storage_elements%b + -- system.stack_checking%s + -- system.stack_checking%b + -- system.string_hash%s + -- system.string_hash%b + -- system.htable%b + -- system.strings%s + -- system.strings%b + -- system.os_lib%s + -- system.traceback_entries%s + -- system.traceback_entries%b + -- ada.exceptions%s + -- system.soft_links%s + -- system.unsigned_types%s + -- system.val_llu%s + -- system.val_util%s + -- system.val_util%b + -- system.val_llu%b + -- system.wch_con%s + -- system.wch_con%b + -- system.wch_cnv%s + -- system.wch_jis%s + -- system.wch_jis%b + -- system.wch_cnv%b + -- system.wch_stw%s + -- system.wch_stw%b + -- ada.exceptions.last_chance_handler%s + -- ada.exceptions.last_chance_handler%b + -- system.address_image%s + -- system.exception_table%s + -- system.exception_table%b + -- ada.io_exceptions%s + -- ada.tags%s + -- ada.streams%s + -- ada.streams%b + -- interfaces.c%s + -- system.exceptions%s + -- system.exceptions%b + -- system.exceptions.machine%s + -- system.finalization_root%s + -- system.finalization_root%b + -- ada.finalization%s + -- ada.finalization%b + -- system.storage_pools%s + -- system.storage_pools%b + -- system.finalization_masters%s + -- system.storage_pools.subpools%s + -- system.storage_pools.subpools.finalization%s + -- system.storage_pools.subpools.finalization%b + -- system.memory%s + -- system.memory%b + -- system.standard_library%b + -- system.pool_global%s + -- system.pool_global%b + -- system.file_control_block%s + -- system.file_io%s + -- system.secondary_stack%s + -- system.file_io%b + -- system.storage_pools.subpools%b + -- system.finalization_masters%b + -- interfaces.c%b + -- ada.tags%b + -- system.soft_links%b + -- system.os_lib%b + -- system.secondary_stack%b + -- system.address_image%b + -- system.traceback%s + -- ada.exceptions%b + -- system.traceback%b + -- ada.text_io%s + -- ada.text_io%b + -- hello%b + -- END ELABORATION ORDER + + end ada_main; + + pragma Ada_95; + -- The following source file name pragmas allow the generated file + -- names to be unique for different main programs. They are needed + -- since the package name will always be Ada_Main. + + pragma Source_File_Name (ada_main, Spec_File_Name => "b~hello.ads"); + pragma Source_File_Name (ada_main, Body_File_Name => "b~hello.adb"); + + pragma Suppress (Overflow_Check); + with Ada.Exceptions; + + -- Generated package body for Ada_Main starts here + + package body ada_main is + pragma Warnings (Off); + + -- These values are reference counter associated to units which have + -- been elaborated. It is also used to avoid elaborating the + -- same unit twice. + + E72 : Short_Integer; pragma Import (Ada, E72, "system__os_lib_E"); + E13 : Short_Integer; pragma Import (Ada, E13, "system__soft_links_E"); + E23 : Short_Integer; pragma Import (Ada, E23, "system__exception_table_E"); + E46 : Short_Integer; pragma Import (Ada, E46, "ada__io_exceptions_E"); + E48 : Short_Integer; pragma Import (Ada, E48, "ada__tags_E"); + E45 : Short_Integer; pragma Import (Ada, E45, "ada__streams_E"); + E70 : Short_Integer; pragma Import (Ada, E70, "interfaces__c_E"); + E25 : Short_Integer; pragma Import (Ada, E25, "system__exceptions_E"); + E68 : Short_Integer; pragma Import (Ada, E68, "system__finalization_root_E"); + E66 : Short_Integer; pragma Import (Ada, E66, "ada__finalization_E"); + E85 : Short_Integer; pragma Import (Ada, E85, "system__storage_pools_E"); + E77 : Short_Integer; pragma Import (Ada, E77, "system__finalization_masters_E"); + E91 : Short_Integer; pragma Import (Ada, E91, "system__storage_pools__subpools_E"); + E87 : Short_Integer; pragma Import (Ada, E87, "system__pool_global_E"); + E75 : Short_Integer; pragma Import (Ada, E75, "system__file_control_block_E"); + E64 : Short_Integer; pragma Import (Ada, E64, "system__file_io_E"); + E17 : Short_Integer; pragma Import (Ada, E17, "system__secondary_stack_E"); + E06 : Short_Integer; pragma Import (Ada, E06, "ada__text_io_E"); + + Local_Priority_Specific_Dispatching : constant String := ""; + Local_Interrupt_States : constant String := ""; + + Is_Elaborated : Boolean := False; + + procedure finalize_library is + begin + E06 := E06 - 1; + declare + procedure F1; + pragma Import (Ada, F1, "ada__text_io__finalize_spec"); + begin + F1; + end; + E77 := E77 - 1; + E91 := E91 - 1; + declare + procedure F2; + pragma Import (Ada, F2, "system__file_io__finalize_body"); + begin + E64 := E64 - 1; + F2; + end; + declare + procedure F3; + pragma Import (Ada, F3, "system__file_control_block__finalize_spec"); + begin + E75 := E75 - 1; + F3; + end; + E87 := E87 - 1; + declare + procedure F4; + pragma Import (Ada, F4, "system__pool_global__finalize_spec"); + begin + F4; + end; + declare + procedure F5; + pragma Import (Ada, F5, "system__storage_pools__subpools__finalize_spec"); + begin + F5; + end; + declare + procedure F6; + pragma Import (Ada, F6, "system__finalization_masters__finalize_spec"); + begin + F6; + end; + declare + procedure Reraise_Library_Exception_If_Any; + pragma Import (Ada, Reraise_Library_Exception_If_Any, "__gnat_reraise_library_exception_if_any"); + begin + Reraise_Library_Exception_If_Any; + end; + end finalize_library; + + ------------- + -- adainit -- + ------------- + + procedure adainit is + + Main_Priority : Integer; + pragma Import (C, Main_Priority, "__gl_main_priority"); + Time_Slice_Value : Integer; + pragma Import (C, Time_Slice_Value, "__gl_time_slice_val"); + WC_Encoding : Character; + pragma Import (C, WC_Encoding, "__gl_wc_encoding"); + Locking_Policy : Character; + pragma Import (C, Locking_Policy, "__gl_locking_policy"); + Queuing_Policy : Character; + pragma Import (C, Queuing_Policy, "__gl_queuing_policy"); + Task_Dispatching_Policy : Character; + pragma Import (C, Task_Dispatching_Policy, "__gl_task_dispatching_policy"); + Priority_Specific_Dispatching : System.Address; + pragma Import (C, Priority_Specific_Dispatching, "__gl_priority_specific_dispatching"); + Num_Specific_Dispatching : Integer; + pragma Import (C, Num_Specific_Dispatching, "__gl_num_specific_dispatching"); + Main_CPU : Integer; + pragma Import (C, Main_CPU, "__gl_main_cpu"); + Interrupt_States : System.Address; + pragma Import (C, Interrupt_States, "__gl_interrupt_states"); + Num_Interrupt_States : Integer; + pragma Import (C, Num_Interrupt_States, "__gl_num_interrupt_states"); + Unreserve_All_Interrupts : Integer; + pragma Import (C, Unreserve_All_Interrupts, "__gl_unreserve_all_interrupts"); + Detect_Blocking : Integer; + pragma Import (C, Detect_Blocking, "__gl_detect_blocking"); + Default_Stack_Size : Integer; + pragma Import (C, Default_Stack_Size, "__gl_default_stack_size"); + Leap_Seconds_Support : Integer; + pragma Import (C, Leap_Seconds_Support, "__gl_leap_seconds_support"); + + procedure Runtime_Initialize; + pragma Import (C, Runtime_Initialize, "__gnat_runtime_initialize"); + + Finalize_Library_Objects : No_Param_Proc; + pragma Import (C, Finalize_Library_Objects, "__gnat_finalize_library_objects"); + + -- Start of processing for adainit + + begin + + -- Record various information for this partition. The values + -- are derived by the binder from information stored in the ali + -- files by the compiler. + + if Is_Elaborated then + return; + end if; + Is_Elaborated := True; + Main_Priority := -1; + Time_Slice_Value := -1; + WC_Encoding := 'b'; + Locking_Policy := ' '; + Queuing_Policy := ' '; + Task_Dispatching_Policy := ' '; + Priority_Specific_Dispatching := + Local_Priority_Specific_Dispatching'Address; + Num_Specific_Dispatching := 0; + Main_CPU := -1; + Interrupt_States := Local_Interrupt_States'Address; + Num_Interrupt_States := 0; + Unreserve_All_Interrupts := 0; + Detect_Blocking := 0; + Default_Stack_Size := -1; + Leap_Seconds_Support := 0; + + Runtime_Initialize; + + Finalize_Library_Objects := finalize_library'access; + + -- Now we have the elaboration calls for all units in the partition. + -- The Elab_Spec and Elab_Body attributes generate references to the + -- implicit elaboration procedures generated by the compiler for + -- each unit that requires elaboration. Increment a counter of + -- reference for each unit. + + System.Soft_Links'Elab_Spec; + System.Exception_Table'Elab_Body; + E23 := E23 + 1; + Ada.Io_Exceptions'Elab_Spec; + E46 := E46 + 1; + Ada.Tags'Elab_Spec; + Ada.Streams'Elab_Spec; + E45 := E45 + 1; + Interfaces.C'Elab_Spec; + System.Exceptions'Elab_Spec; + E25 := E25 + 1; + System.Finalization_Root'Elab_Spec; + E68 := E68 + 1; + Ada.Finalization'Elab_Spec; + E66 := E66 + 1; + System.Storage_Pools'Elab_Spec; + E85 := E85 + 1; + System.Finalization_Masters'Elab_Spec; + System.Storage_Pools.Subpools'Elab_Spec; + System.Pool_Global'Elab_Spec; + E87 := E87 + 1; + System.File_Control_Block'Elab_Spec; + E75 := E75 + 1; + System.File_Io'Elab_Body; + E64 := E64 + 1; + E91 := E91 + 1; + System.Finalization_Masters'Elab_Body; + E77 := E77 + 1; + E70 := E70 + 1; + Ada.Tags'Elab_Body; + E48 := E48 + 1; + System.Soft_Links'Elab_Body; + E13 := E13 + 1; + System.Os_Lib'Elab_Body; + E72 := E72 + 1; + System.Secondary_Stack'Elab_Body; + E17 := E17 + 1; + Ada.Text_Io'Elab_Spec; + Ada.Text_Io'Elab_Body; + E06 := E06 + 1; + end adainit; + + -------------- + -- adafinal -- + -------------- + + procedure adafinal is + procedure s_stalib_adafinal; + pragma Import (C, s_stalib_adafinal, "system__standard_library__adafinal"); + + procedure Runtime_Finalize; + pragma Import (C, Runtime_Finalize, "__gnat_runtime_finalize"); + + begin + if not Is_Elaborated then + return; + end if; + Is_Elaborated := False; + Runtime_Finalize; + s_stalib_adafinal; + end adafinal; + + -- We get to the main program of the partition by using + -- pragma Import because if we try to with the unit and + -- call it Ada style, then not only do we waste time + -- recompiling it, but also, we don't really know the right + -- switches (e.g.@: identifier character set) to be used + -- to compile it. + + procedure Ada_Main_Program; + pragma Import (Ada, Ada_Main_Program, "_ada_hello"); + + ---------- + -- main -- + ---------- + + -- main is actually a function, as in the ANSI C standard, + -- defined to return the exit status. The three parameters + -- are the argument count, argument values and environment + -- pointer. + + function main + (argc : Integer; + argv : System.Address; + envp : System.Address) + return Integer + is + -- The initialize routine performs low level system + -- initialization using a standard library routine which + -- sets up signal handling and performs any other + -- required setup. The routine can be found in file + -- a-init.c. + + procedure initialize; + pragma Import (C, initialize, "__gnat_initialize"); + + -- The finalize routine performs low level system + -- finalization using a standard library routine. The + -- routine is found in file a-final.c and in the standard + -- distribution is a dummy routine that does nothing, so + -- really this is a hook for special user finalization. + + procedure finalize; + pragma Import (C, finalize, "__gnat_finalize"); + + -- The following is to initialize the SEH exceptions + + SEH : aliased array (1 .. 2) of Integer; + + Ensure_Reference : aliased System.Address := Ada_Main_Program_Name'Address; + pragma Volatile (Ensure_Reference); + + -- Start of processing for main + + begin + -- Save global variables + + gnat_argc := argc; + gnat_argv := argv; + gnat_envp := envp; + + -- Call low level system initialization + + Initialize (SEH'Address); + + -- Call our generated Ada initialization routine + + adainit; + + -- Now we call the main program of the partition + + Ada_Main_Program; + + -- Perform Ada finalization + + adafinal; + + -- Perform low level system finalization + + Finalize; + + -- Return the proper exit status + return (gnat_exit_status); + end; + + -- This section is entirely comments, so it has no effect on the + -- compilation of the Ada_Main package. It provides the list of + -- object files and linker options, as well as some standard + -- libraries needed for the link. The gnatlink utility parses + -- this b~hello.adb file to read these comment lines to generate + -- the appropriate command line arguments for the call to the + -- system linker. The BEGIN/END lines are used for sentinels for + -- this parsing operation. + + -- The exact file names will of course depend on the environment, + -- host/target and location of files on the host system. + + -- BEGIN Object file/option list + -- ./hello.o + -- -L./ + -- -L/usr/local/gnat/lib/gcc-lib/i686-pc-linux-gnu/2.8.1/adalib/ + -- /usr/local/gnat/lib/gcc-lib/i686-pc-linux-gnu/2.8.1/adalib/libgnat.a + -- END Object file/option list + + end ada_main; + + The Ada code in the above example is exactly what is generated by the + binder. We have added comments to more clearly indicate the function of + each part of the generated ‘Ada_Main’ package. + + The code is standard Ada in all respects, and can be processed by any + tools that handle Ada. In particular, it is possible to use the + debugger in Ada mode to debug the generated ‘Ada_Main’ package. For + example, suppose that for reasons that you do not understand, your + program is crashing during elaboration of the body of ‘Ada.Text_IO’. To + locate this bug, you can place a breakpoint on the call: + + Ada.Text_Io'Elab_Body; + + and trace the elaboration routine for this package to find out where the + problem might be (more usually of course you would be debugging + elaboration code in your own application). + +  + File: gnat_ugn.info, Node: Elaboration Order Handling in GNAT, Next: Inline Assembler, Prev: Example of Binder Output File, Up: Top + + 9 Elaboration Order Handling in GNAT + ************************************ + + This appendix describes the handling of elaboration code in Ada and + GNAT, and discusses how the order of elaboration of program units can be + controlled in GNAT, either automatically or with explicit programming + features. + + * Menu: + + * Elaboration Code:: + * Elaboration Order:: + * Checking the Elaboration Order:: + * Controlling the Elaboration Order in Ada:: + * Controlling the Elaboration Order in GNAT:: + * Mixing Elaboration Models:: + * ABE Diagnostics:: + * SPARK Diagnostics:: + * Elaboration Circularities:: + * Resolving Elaboration Circularities:: + * Elaboration-related Compiler Switches:: + * Summary of Procedures for Elaboration Control:: + * Inspecting the Chosen Elaboration Order:: + +  + File: gnat_ugn.info, Node: Elaboration Code, Next: Elaboration Order, Up: Elaboration Order Handling in GNAT + + 9.1 Elaboration Code + ==================== + + Ada defines the term `execution' as the process by which a construct + achieves its run-time effect. This process is also referred to as + `elaboration' for declarations and `evaluation' for expressions. + + The execution model in Ada allows for certain sections of an Ada program + to be executed prior to execution of the program itself, primarily with + the intent of initializing data. These sections are referred to as + `elaboration code'. Elaboration code is executed as follows: + + * All partitions of an Ada program are executed in parallel with one + another, possibly in a separate address space, and possibly on a + separate computer. + + * The execution of a partition involves running the environment task + for that partition. + + * The environment task executes all elaboration code (if available) + for all units within that partition. This code is said to be + executed at `elaboration time'. + + * The environment task executes the Ada program (if available) for + that partition. + + In addition to the Ada terminology, this appendix defines the following + terms: + + * `Invocation' + + The act of calling a subprogram, instantiating a generic, or + activating a task. + + * `Scenario' + + A construct that is elaborated or invoked by elaboration code is + referred to as an `elaboration scenario' or simply a `scenario'. + GNAT recognizes the following scenarios: + + - ‘'Access’ of entries, operators, and subprograms + + - Activation of tasks + + - Calls to entries, operators, and subprograms + + - Instantiations of generic templates + + * `Target' + + A construct elaborated by a scenario is referred to as `elaboration + target' or simply `target'. GNAT recognizes the following targets: + + - For ‘'Access’ of entries, operators, and subprograms, the + target is the entry, operator, or subprogram being aliased. + + - For activation of tasks, the target is the task body + + - For calls to entries, operators, and subprograms, the target + is the entry, operator, or subprogram being invoked. + + - For instantiations of generic templates, the target is the + generic template being instantiated. + + Elaboration code may appear in two distinct contexts: + + * `Library level' + + A scenario appears at the library level when it is encapsulated by + a package [body] compilation unit, ignoring any other package + [body] declarations in between. + + with Server; + package Client is + procedure Proc; + + package Nested is + Val : ... := Server.Func; + end Nested; + end Client; + + In the example above, the call to ‘Server.Func’ is an elaboration + scenario because it appears at the library level of package + ‘Client’. Note that the declaration of package ‘Nested’ is ignored + according to the definition given above. As a result, the call to + ‘Server.Func’ will be invoked when the spec of unit ‘Client’ is + elaborated. + + * `Package body statements' + + A scenario appears within the statement sequence of a package body + when it is bounded by the region starting from the ‘begin’ keyword + of the package body and ending at the ‘end’ keyword of the package + body. + + package body Client is + procedure Proc is + begin + ... + end Proc; + begin + Proc; + end Client; + + In the example above, the call to ‘Proc’ is an elaboration scenario + because it appears within the statement sequence of package body + ‘Client’. As a result, the call to ‘Proc’ will be invoked when the + body of ‘Client’ is elaborated. + +  + File: gnat_ugn.info, Node: Elaboration Order, Next: Checking the Elaboration Order, Prev: Elaboration Code, Up: Elaboration Order Handling in GNAT + + 9.2 Elaboration Order + ===================== + + The sequence by which the elaboration code of all units within a + partition is executed is referred to as `elaboration order'. + + Within a single unit, elaboration code is executed in sequential order. + + package body Client is + Result : ... := Server.Func; + + procedure Proc is + package Inst is new Server.Gen; + begin + Inst.Eval (Result); + end Proc; + begin + Proc; + end Client; + + In the example above, the elaboration order within package body ‘Client’ + is as follows: + + 1. The object declaration of ‘Result’ is elaborated. + + * Function ‘Server.Func’ is invoked. + + 2. The subprogram body of ‘Proc’ is elaborated. + + 3. Procedure ‘Proc’ is invoked. + + * Generic unit ‘Server.Gen’ is instantiated as ‘Inst’. + + * Instance ‘Inst’ is elaborated. + + * Procedure ‘Inst.Eval’ is invoked. + + The elaboration order of all units within a partition depends on the + following factors: + + * `with'ed units + + * parent units + + * purity of units + + * preelaborability of units + + * presence of elaboration-control pragmas + + * invocations performed in elaboration code + + A program may have several elaboration orders depending on its + structure. + + package Server is + function Func (Index : Integer) return Integer; + end Server; + + package body Server is + Results : array (1 .. 5) of Integer := (1, 2, 3, 4, 5); + + function Func (Index : Integer) return Integer is + begin + return Results (Index); + end Func; + end Server; + + with Server; + package Client is + Val : constant Integer := Server.Func (3); + end Client; + + with Client; + procedure Main is begin null; end Main; + + The following elaboration order exhibits a fundamental problem referred + to as `access-before-elaboration' or simply `ABE'. + + spec of Server + spec of Client + body of Server + body of Main + + The elaboration of ‘Server’’s spec materializes function ‘Func’, making + it callable. The elaboration of ‘Client’’s spec elaborates the + declaration of ‘Val’. This invokes function ‘Server.Func’, however the + body of ‘Server.Func’ has not been elaborated yet because ‘Server’’s + body comes after ‘Client’’s spec in the elaboration order. As a result, + the value of constant ‘Val’ is now undefined. + + Without any guarantees from the language, an undetected ABE problem may + hinder proper initialization of data, which in turn may lead to + undefined behavior at run time. To prevent such ABE problems, Ada + employs dynamic checks in the same vein as index or null exclusion + checks. A failed ABE check raises exception ‘Program_Error’. + + The following elaboration order avoids the ABE problem and the program + can be successfully elaborated. + + spec of Server + body of Server + spec of Client + body of Main + + Ada states that a total elaboration order must exist, but it does not + define what this order is. A compiler is thus tasked with choosing a + suitable elaboration order which satisfies the dependencies imposed by + `with' clauses, unit categorization, elaboration-control pragmas, and + invocations performed in elaboration code. Ideally an order that avoids + ABE problems should be chosen, however a compiler may not always find + such an order due to complications with respect to control and data + flow. + +  + File: gnat_ugn.info, Node: Checking the Elaboration Order, Next: Controlling the Elaboration Order in Ada, Prev: Elaboration Order, Up: Elaboration Order Handling in GNAT + + 9.3 Checking the Elaboration Order + ================================== + + To avoid placing the entire elaboration-order burden on the programmer, + Ada provides three lines of defense: + + * `Static semantics' + + Static semantic rules restrict the possible choice of elaboration + order. For instance, if unit Client `with's unit Server, then the + spec of Server is always elaborated prior to Client. The same + principle applies to child units - the spec of a parent unit is + always elaborated prior to the child unit. + + * `Dynamic semantics' + + Dynamic checks are performed at run time, to ensure that a target + is elaborated prior to a scenario that invokes it, thus avoiding + ABE problems. A failed run-time check raises exception + ‘Program_Error’. The following restrictions apply: + + - `Restrictions on calls' + + An entry, operator, or subprogram can be called from + elaboration code only when the corresponding body has been + elaborated. + + - `Restrictions on instantiations' + + A generic unit can be instantiated by elaboration code only + when the corresponding body has been elaborated. + + - `Restrictions on task activation' + + A task can be activated by elaboration code only when the body + of the associated task type has been elaborated. + + The restrictions above can be summarized by the following rule: + + `If a target has a body, then this body must be elaborated prior to + the scenario that invokes the target.' + + * `Elaboration control' + + Pragmas are provided for the programmer to specify the desired + elaboration order. + +  + File: gnat_ugn.info, Node: Controlling the Elaboration Order in Ada, Next: Controlling the Elaboration Order in GNAT, Prev: Checking the Elaboration Order, Up: Elaboration Order Handling in GNAT + + 9.4 Controlling the Elaboration Order in Ada + ============================================ + + Ada provides several idioms and pragmas to aid the programmer with + specifying the desired elaboration order and avoiding ABE problems + altogether. + + * `Packages without a body' + + A library package which does not require a completing body does not + suffer from ABE problems. + + package Pack is + generic + type Element is private; + package Containers is + type Element_Array is array (1 .. 10) of Element; + end Containers; + end Pack; + + In the example above, package ‘Pack’ does not require a body + because it does not contain any constructs which require completion + in a body. As a result, generic ‘Pack.Containers’ can be + instantiated without encountering any ABE problems. + + * `pragma Pure' + + Pragma ‘Pure’ places sufficient restrictions on a unit to guarantee + that no scenario within the unit can result in an ABE problem. + + * `pragma Preelaborate' + + Pragma ‘Preelaborate’ is slightly less restrictive than pragma + ‘Pure’, but still strong enough to prevent ABE problems within a + unit. + + * `pragma Elaborate_Body' + + Pragma ‘Elaborate_Body’ requires that the body of a unit is + elaborated immediately after its spec. This restriction guarantees + that no client scenario can invoke a server target before the + target body has been elaborated because the spec and body are + effectively “glued” together. + + package Server is + pragma Elaborate_Body; + + function Func return Integer; + end Server; + + package body Server is + function Func return Integer is + begin + ... + end Func; + end Server; + + with Server; + package Client is + Val : constant Integer := Server.Func; + end Client; + + In the example above, pragma ‘Elaborate_Body’ guarantees the + following elaboration order: + + spec of Server + body of Server + spec of Client + + because the spec of ‘Server’ must be elaborated prior to ‘Client’ + by virtue of the `with' clause, and in addition the body of + ‘Server’ must be elaborated immediately after the spec of ‘Server’. + + Removing pragma ‘Elaborate_Body’ could result in the following + incorrect elaboration order: + + spec of Server + spec of Client + body of Server + + where ‘Client’ invokes ‘Server.Func’, but the body of ‘Server.Func’ + has not been elaborated yet. + + The pragmas outlined above allow a server unit to guarantee safe + elaboration use by client units. Thus it is a good rule to mark units + as ‘Pure’ or ‘Preelaborate’, and if this is not possible, mark them as + ‘Elaborate_Body’. + + There are however situations where ‘Pure’, ‘Preelaborate’, and + ‘Elaborate_Body’ are not applicable. Ada provides another set of + pragmas for use by client units to help ensure the elaboration safety of + server units they depend on. + + * `pragma Elaborate (Unit)' + + Pragma ‘Elaborate’ can be placed in the context clauses of a unit, + after a `with' clause. It guarantees that both the spec and body + of its argument will be elaborated prior to the unit with the + pragma. Note that other unrelated units may be elaborated in + between the spec and the body. + + package Server is + function Func return Integer; + end Server; + + package body Server is + function Func return Integer is + begin + ... + end Func; + end Server; + + with Server; + pragma Elaborate (Server); + package Client is + Val : constant Integer := Server.Func; + end Client; + + In the example above, pragma ‘Elaborate’ guarantees the following + elaboration order: + + spec of Server + body of Server + spec of Client + + Removing pragma ‘Elaborate’ could result in the following incorrect + elaboration order: + + spec of Server + spec of Client + body of Server + + where ‘Client’ invokes ‘Server.Func’, but the body of ‘Server.Func’ + has not been elaborated yet. + + * `pragma Elaborate_All (Unit)' + + Pragma ‘Elaborate_All’ is placed in the context clauses of a unit, + after a `with' clause. It guarantees that both the spec and body + of its argument will be elaborated prior to the unit with the + pragma, as well as all units `with'ed by the spec and body of the + argument, recursively. Note that other unrelated units may be + elaborated in between the spec and the body. + + package Math is + function Factorial (Val : Natural) return Natural; + end Math; + + package body Math is + function Factorial (Val : Natural) return Natural is + begin + ...; + end Factorial; + end Math; + + package Computer is + type Operation_Kind is (None, Op_Factorial); + + function Compute + (Val : Natural; + Op : Operation_Kind) return Natural; + end Computer; + + with Math; + package body Computer is + function Compute + (Val : Natural; + Op : Operation_Kind) return Natural + is + if Op = Op_Factorial then + return Math.Factorial (Val); + end if; + + return 0; + end Compute; + end Computer; + + with Computer; + pragma Elaborate_All (Computer); + package Client is + Val : constant Natural := + Computer.Compute (123, Computer.Op_Factorial); + end Client; + + In the example above, pragma ‘Elaborate_All’ can result in the + following elaboration order: + + spec of Math + body of Math + spec of Computer + body of Computer + spec of Client + + Note that there are several allowable suborders for the specs and + bodies of ‘Math’ and ‘Computer’, but the point is that these specs + and bodies will be elaborated prior to ‘Client’. + + Removing pragma ‘Elaborate_All’ could result in the following + incorrect elaboration order: + + spec of Math + spec of Computer + body of Computer + spec of Client + body of Math + + where ‘Client’ invokes ‘Computer.Compute’, which in turn invokes + ‘Math.Factorial’, but the body of ‘Math.Factorial’ has not been + elaborated yet. + + All pragmas shown above can be summarized by the following rule: + + `If a client unit elaborates a server target directly or indirectly, + then if the server unit requires a body and does not have pragma Pure, + Preelaborate, or Elaborate_Body, then the client unit should have pragma + Elaborate or Elaborate_All for the server unit.' + + If the rule outlined above is not followed, then a program may fall in + one of the following states: + + * `No elaboration order exists' + + In this case a compiler must diagnose the situation, and refuse to + build an executable program. + + * `One or more incorrect elaboration orders exist' + + In this case a compiler can build an executable program, but + ‘Program_Error’ will be raised when the program is run. + + * `Several elaboration orders exist, some correct, some incorrect' + + In this case the programmer has not controlled the elaboration + order. As a result, a compiler may or may not pick one of the + correct orders, and the program may or may not raise + ‘Program_Error’ when it is run. This is the worst possible state + because the program may fail on another compiler, or even another + version of the same compiler. + + * `One or more correct orders exist' + + In this case a compiler can build an executable program, and the + program is run successfully. This state may be guaranteed by + following the outlined rules, or may be the result of good program + architecture. + + Note that one additional advantage of using ‘Elaborate’ and + ‘Elaborate_All’ is that the program continues to stay in the last state + (one or more correct orders exist) even if maintenance changes the + bodies of targets. + +  + File: gnat_ugn.info, Node: Controlling the Elaboration Order in GNAT, Next: Mixing Elaboration Models, Prev: Controlling the Elaboration Order in Ada, Up: Elaboration Order Handling in GNAT + + 9.5 Controlling the Elaboration Order in GNAT + ============================================= + + In addition to Ada semantics and rules synthesized from them, GNAT + offers three elaboration models to aid the programmer with specifying + the correct elaboration order and to diagnose elaboration problems. + + * `Dynamic elaboration model' + + This is the most permissive of the three elaboration models and + emulates the behavior specified by the Ada Reference Manual. When + the dynamic model is in effect, GNAT makes the following + assumptions: + + - All code within all units in a partition is considered to be + elaboration code. + + - Some of the invocations in elaboration code may not take place + at run time due to conditional execution. + + GNAT performs extensive diagnostics on a unit-by-unit basis for all + scenarios that invoke internal targets. In addition, GNAT + generates run-time checks for all external targets and for all + scenarios that may exhibit ABE problems. + + The elaboration order is obtained by honoring all `with' clauses, + purity and preelaborability of units, and elaboration-control + pragmas. The dynamic model attempts to take all invocations in + elaboration code into account. If an invocation leads to a + circularity, GNAT ignores the invocation based on the assumptions + stated above. An order obtained using the dynamic model may fail + an ABE check at run time when GNAT ignored an invocation. + + The dynamic model is enabled with compiler switch ‘-gnatE’. + + * `Static elaboration model' + + This is the middle ground of the three models. When the static + model is in effect, GNAT makes the following assumptions: + + - Only code at the library level and in package body statements + within all units in a partition is considered to be + elaboration code. + + - All invocations in elaboration will take place at run time, + regardless of conditional execution. + + GNAT performs extensive diagnostics on a unit-by-unit basis for all + scenarios that invoke internal targets. In addition, GNAT + generates run-time checks for all external targets and for all + scenarios that may exhibit ABE problems. + + The elaboration order is obtained by honoring all `with' clauses, + purity and preelaborability of units, presence of + elaboration-control pragmas, and all invocations in elaboration + code. An order obtained using the static model is guaranteed to be + ABE problem-free, excluding dispatching calls and + access-to-subprogram types. + + The static model is the default model in GNAT. + + * `SPARK elaboration model' + + This is the most conservative of the three models and enforces the + SPARK rules of elaboration as defined in the SPARK Reference + Manual, section 7.7. The SPARK model is in effect only when a + scenario and a target reside in a region subject to ‘SPARK_Mode + On’, otherwise the dynamic or static model is in effect. + + The SPARK model is enabled with compiler switch ‘-gnatd.v’. + + * `Legacy elaboration models' + + In addition to the three elaboration models outlined above, GNAT + provides the following legacy models: + + - ‘Legacy elaboration-checking model’ available in pre-18.x + versions of GNAT. This model is enabled with compiler switch + ‘-gnatH’. + + - ‘Legacy elaboration-order model’ available in pre-20.x + versions of GNAT. This model is enabled with binder switch + ‘-H’. + + The dynamic, legacy, and static models can be relaxed using compiler + switch ‘-gnatJ’, making them more permissive. Note that in this mode, + GNAT may not diagnose certain elaboration issues or install run-time + checks. + +  + File: gnat_ugn.info, Node: Mixing Elaboration Models, Next: ABE Diagnostics, Prev: Controlling the Elaboration Order in GNAT, Up: Elaboration Order Handling in GNAT + + 9.6 Mixing Elaboration Models + ============================= + + It is possible to mix units compiled with a different elaboration model, + however the following rules must be observed: + + * A client unit compiled with the dynamic model can only `with' a + server unit that meets at least one of the following criteria: + + - The server unit is compiled with the dynamic model. + + - The server unit is a GNAT implementation unit from the ‘Ada’, + ‘GNAT’, ‘Interfaces’, or ‘System’ hierarchies. + + - The server unit has pragma ‘Pure’ or ‘Preelaborate’. + + - The client unit has an explicit ‘Elaborate_All’ pragma for the + server unit. + + These rules ensure that elaboration checks are not omitted. If the + rules are violated, the binder emits a warning: + + warning: "x.ads" has dynamic elaboration checks and with's + warning: "y.ads" which has static elaboration checks + + The warnings can be suppressed by binder switch ‘-ws’. + +  + File: gnat_ugn.info, Node: ABE Diagnostics, Next: SPARK Diagnostics, Prev: Mixing Elaboration Models, Up: Elaboration Order Handling in GNAT + + 9.7 ABE Diagnostics + =================== + + GNAT performs extensive diagnostics on a unit-by-unit basis for all + scenarios that invoke internal targets, regardless of whether the + dynamic, SPARK, or static model is in effect. + + Note that GNAT emits warnings rather than hard errors whenever it + encounters an elaboration problem. This is because the elaboration + model in effect may be too conservative, or a particular scenario may + not be invoked due conditional execution. The warnings can be + suppressed selectively with ‘pragma Warnings (Off)’ or globally with + compiler switch ‘-gnatwL’. + + A `guaranteed ABE' arises when the body of a target is not elaborated + early enough, and causes `all' scenarios that directly invoke the target + to fail. + + package body Guaranteed_ABE is + function ABE return Integer; + + Val : constant Integer := ABE; + + function ABE return Integer is + begin + ... + end ABE; + end Guaranteed_ABE; + + In the example above, the elaboration of ‘Guaranteed_ABE’’s body + elaborates the declaration of ‘Val’. This invokes function ‘ABE’, + however the body of ‘ABE’ has not been elaborated yet. GNAT emits the + following diagnostic: + + 4. Val : constant Integer := ABE; + | + >>> warning: cannot call "ABE" before body seen + >>> warning: Program_Error will be raised at run time + + A `conditional ABE' arises when the body of a target is not elaborated + early enough, and causes `some' scenarios that directly invoke the + target to fail. + + 1. package body Conditional_ABE is + 2. procedure Force_Body is null; + 3. + 4. generic + 5. with function Func return Integer; + 6. package Gen is + 7. Val : constant Integer := Func; + 8. end Gen; + 9. + 10. function ABE return Integer; + 11. + 12. function Cause_ABE return Boolean is + 13. package Inst is new Gen (ABE); + 14. begin + 15. ... + 16. end Cause_ABE; + 17. + 18. Val : constant Boolean := Cause_ABE; + 19. + 20. function ABE return Integer is + 21. begin + 22. ... + 23. end ABE; + 24. + 25. Safe : constant Boolean := Cause_ABE; + 26. end Conditional_ABE; + + In the example above, the elaboration of package body ‘Conditional_ABE’ + elaborates the declaration of ‘Val’. This invokes function ‘Cause_ABE’, + which instantiates generic unit ‘Gen’ as ‘Inst’. The elaboration of + ‘Inst’ invokes function ‘ABE’, however the body of ‘ABE’ has not been + elaborated yet. GNAT emits the following diagnostic: + + 13. package Inst is new Gen (ABE); + | + >>> warning: in instantiation at line 7 + >>> warning: cannot call "ABE" before body seen + >>> warning: Program_Error may be raised at run time + >>> warning: body of unit "Conditional_ABE" elaborated + >>> warning: function "Cause_ABE" called at line 18 + >>> warning: function "ABE" called at line 7, instance at line 13 + + Note that the same ABE problem does not occur with the elaboration of + declaration ‘Safe’ because the body of function ‘ABE’ has already been + elaborated at that point. + +  + File: gnat_ugn.info, Node: SPARK Diagnostics, Next: Elaboration Circularities, Prev: ABE Diagnostics, Up: Elaboration Order Handling in GNAT + + 9.8 SPARK Diagnostics + ===================== + + GNAT enforces the SPARK rules of elaboration as defined in the SPARK + Reference Manual section 7.7 when compiler switch ‘-gnatd.v’ is in + effect. Note that GNAT emits hard errors whenever it encounters a + violation of the SPARK rules. + + 1. with Server; + 2. package body SPARK_Diagnostics with SPARK_Mode is + 3. Val : constant Integer := Server.Func; + | + >>> call to "Func" during elaboration in SPARK + >>> unit "SPARK_Diagnostics" requires pragma "Elaborate_All" for "Server" + >>> body of unit "SPARK_Model" elaborated + >>> function "Func" called at line 3 + + 4. end SPARK_Diagnostics; + +  + File: gnat_ugn.info, Node: Elaboration Circularities, Next: Resolving Elaboration Circularities, Prev: SPARK Diagnostics, Up: Elaboration Order Handling in GNAT + + 9.9 Elaboration Circularities + ============================= + + An `elaboration circularity' occurs whenever the elaboration of a set of + units enters a deadlocked state, where each unit is waiting for another + unit to be elaborated. This situation may be the result of improper use + of `with' clauses, elaboration-control pragmas, or invocations in + elaboration code. + + The following example exhibits an elaboration circularity. + + with B; pragma Elaborate (B); + package A is + end A; + + package B is + procedure Force_Body; + end B; + + with C; + package body B is + procedure Force_Body is null; + + Elab : constant Integer := C.Func; + end B; + + package C is + function Func return Integer; + end C; + + with A; + package body C is + function Func return Integer is + begin + ... + end Func; + end C; + + The binder emits the following diagnostic: + + error: Elaboration circularity detected + info: + info: Reason: + info: + info: unit "a (spec)" depends on its own elaboration + info: + info: Circularity: + info: + info: unit "a (spec)" has with clause and pragma Elaborate for unit "b (spec)" + info: unit "b (body)" is in the closure of pragma Elaborate + info: unit "b (body)" invokes a construct of unit "c (body)" at elaboration time + info: unit "c (body)" has with clause for unit "a (spec)" + info: + info: Suggestions: + info: + info: remove pragma Elaborate for unit "b (body)" in unit "a (spec)" + info: use the dynamic elaboration model (compiler switch -gnatE) + + The diagnostic consist of the following sections: + + * Reason + + This section provides a short explanation describing why the set of + units could not be ordered. + + * Circularity + + This section enumerates the units comprising the deadlocked set, + along with their interdependencies. + + * Suggestions + + This section enumerates various tactics for eliminating the + circularity. + +  + File: gnat_ugn.info, Node: Resolving Elaboration Circularities, Next: Elaboration-related Compiler Switches, Prev: Elaboration Circularities, Up: Elaboration Order Handling in GNAT + + 9.10 Resolving Elaboration Circularities + ======================================== + + The most desirable option from the point of view of long-term + maintenance is to rearrange the program so that the elaboration problems + are avoided. One useful technique is to place the elaboration code into + separate child packages. Another is to move some of the initialization + code to explicitly invoked subprograms, where the program controls the + order of initialization explicitly. Although this is the most desirable + option, it may be impractical and involve too much modification, + especially in the case of complex legacy code. + + When faced with an elaboration circularity, the programmer should also + consider the tactics given in the suggestions section of the circularity + diagnostic. Depending on the units involved in the circularity, their + `with' clauses, purity, preelaborability, presence of + elaboration-control pragmas and invocations at elaboration time, the + binder may suggest one or more of the following tactics to eliminate the + circularity: + + * Pragma Elaborate elimination + + remove pragma Elaborate for unit "..." in unit "..." + + This tactic is suggested when the binder has determined that pragma + ‘Elaborate’: + + - Prevents a set of units from being elaborated. + + - The removal of the pragma will not eliminate the semantic + effects of the pragma. In other words, the argument of the + pragma will still be elaborated prior to the unit containing + the pragma. + + - The removal of the pragma will enable the successful ordering + of the units. + + The programmer should remove the pragma as advised, and rebuild the + program. + + * Pragma Elaborate_All elimination + + remove pragma Elaborate_All for unit "..." in unit "..." + + This tactic is suggested when the binder has determined that pragma + ‘Elaborate_All’: + + - Prevents a set of units from being elaborated. + + - The removal of the pragma will not eliminate the semantic + effects of the pragma. In other words, the argument of the + pragma along with its `with' closure will still be elaborated + prior to the unit containing the pragma. + + - The removal of the pragma will enable the successful ordering + of the units. + + The programmer should remove the pragma as advised, and rebuild the + program. + + * Pragma Elaborate_All downgrade + + change pragma Elaborate_All for unit "..." to Elaborate in unit "..." + + This tactic is always suggested with the pragma ‘Elaborate_All’ + elimination tactic. It offers a different alernative of + guaranteeing that the argument of the pragma will still be + elaborated prior to the unit containing the pragma. + + The programmer should update the pragma as advised, and rebuild the + program. + + * Pragma Elaborate_Body elimination + + remove pragma Elaborate_Body in unit "..." + + This tactic is suggested when the binder has determined that pragma + ‘Elaborate_Body’: + + - Prevents a set of units from being elaborated. + + - The removal of the pragma will enable the successful ordering + of the units. + + Note that the binder cannot determine whether the pragma is + required for other purposes, such as guaranteeing the + initialization of a variable declared in the spec by elaboration + code in the body. + + The programmer should remove the pragma as advised, and rebuild the + program. + + * Use of pragma Restrictions + + use pragma Restrictions (No_Entry_Calls_In_Elaboration_Code) + + This tactic is suggested when the binder has determined that a task + activation at elaboration time: + + - Prevents a set of units from being elaborated. + + Note that the binder cannot determine with certainty whether the + task will block at elaboration time. + + The programmer should create a configuration file, place the pragma + within, update the general compilation arguments, and rebuild the + program. + + * Use of dynamic elaboration model + + use the dynamic elaboration model (compiler switch -gnatE) + + This tactic is suggested when the binder has determined that an + invocation at elaboration time: + + - Prevents a set of units from being elaborated. + + - The use of the dynamic model will enable the successful + ordering of the units. + + The programmer has two options: + + - Determine the units involved in the invocation using the + detailed invocation information, and add compiler switch + ‘-gnatE’ to the compilation arguments of selected files only. + This approach will yield safer elaboration orders compared to + the other option because it will minimize the opportunities + presented to the dynamic model for ignoring invocations. + + - Add compiler switch ‘-gnatE’ to the general compilation + arguments. + + * Use of detailed invocation information + + use detailed invocation information (compiler switch -gnatd_F) + + This tactic is always suggested with the use of the dynamic model + tactic. It causes the circularity section of the circularity + diagnostic to describe the flow of elaboration code from a unit to + a unit, enumerating all such paths in the process. + + The programmer should analyze this information to determine which + units should be compiled with the dynamic model. + + * Forced-dependency elimination + + remove the dependency of unit "..." on unit "..." from the argument of switch -f + + This tactic is suggested when the binder has determined that a + dependency present in the forced-elaboration-order file indicated + by binder switch ‘-f’: + + - Prevents a set of units from being elaborated. + + - The removal of the dependency will enable the successful + ordering of the units. + + The programmer should edit the forced-elaboration-order file, + remove the dependency, and rebind the program. + + * All forced-dependency elimination + + remove switch -f + + This tactic is suggested in case editing the + forced-elaboration-order file is not an option. + + The programmer should remove binder switch ‘-f’ from the binder + arguments, and rebind. + + * Multiple-circularities diagnostic + + diagnose all circularities (binder switch -d_C) + + By default, the binder will diagnose only the highest-precedence + circularity. If the program contains multiple circularities, the + binder will suggest the use of binder switch ‘-d_C’ in order to + obtain the diagnostics of all circularities. + + The programmer should add binder switch ‘-d_C’ to the binder + arguments, and rebind. + + If none of the tactics suggested by the binder eliminate the elaboration + circularity, the programmer should consider using one of the legacy + elaboration models, in the following order: + + * Use the pre-20.x legacy elaboration-order model, with binder switch + ‘-H’. + + * Use both pre-18.x and pre-20.x legacy elaboration models, with + compiler switch ‘-gnatH’ and binder switch ‘-H’. + + * Use the relaxed static-elaboration model, with compiler switches + ‘-gnatH’ ‘-gnatJ’ and binder switch ‘-H’. + + * Use the relaxed dynamic-elaboration model, with compiler switches + ‘-gnatH’ ‘-gnatJ’ ‘-gnatE’ and binder switch ‘-H’. + +  + File: gnat_ugn.info, Node: Elaboration-related Compiler Switches, Next: Summary of Procedures for Elaboration Control, Prev: Resolving Elaboration Circularities, Up: Elaboration Order Handling in GNAT + + 9.11 Elaboration-related Compiler Switches + ========================================== + + GNAT has several switches that affect the elaboration model and + consequently the elaboration order chosen by the binder. + + ‘-gnatE’ + + Dynamic elaboration checking mode enabled + + When this switch is in effect, GNAT activates the dynamic model. + + ‘-gnatel’ + + Turn on info messages on generated Elaborate[_All] pragmas + + This switch is only applicable to the pre-20.x legacy elaboration + models. The post-20.x elaboration model no longer relies on + implicitly generated ‘Elaborate’ and ‘Elaborate_All’ pragmas to + order units. + + When this switch is in effect, GNAT will emit the following + supplementary information depending on the elaboration model in + effect. + + - `Dynamic model' + + GNAT will indicate missing ‘Elaborate’ and ‘Elaborate_All’ + pragmas for all library-level scenarios within the partition. + + - `Static model' + + GNAT will indicate all scenarios invoked during elaboration. + In addition, it will provide detailed traceback when an + implicit ‘Elaborate’ or ‘Elaborate_All’ pragma is generated. + + - `SPARK model' + + GNAT will indicate how an elaboration requirement is met by + the context of a unit. This diagnostic requires compiler + switch ‘-gnatd.v’. + + 1. with Server; pragma Elaborate_All (Server); + 2. package Client with SPARK_Mode is + 3. Val : constant Integer := Server.Func; + | + >>> info: call to "Func" during elaboration in SPARK + >>> info: "Elaborate_All" requirement for unit "Server" met by pragma at line 1 + + 4. end Client; + + ‘-gnatH’ + + Legacy elaboration checking mode enabled + + When this switch is in effect, GNAT will utilize the pre-18.x + elaboration model. + + ‘-gnatJ’ + + Relaxed elaboration checking mode enabled + + When this switch is in effect, GNAT will not process certain + scenarios, resulting in a more permissive elaboration model. Note + that this may eliminate some diagnostics and run-time checks. + + ‘-gnatw.f’ + + Turn on warnings for suspicious Subp’Access + + When this switch is in effect, GNAT will treat ‘'Access’ of an + entry, operator, or subprogram as a potential call to the target + and issue warnings: + + 1. package body Attribute_Call is + 2. function Func return Integer; + 3. type Func_Ptr is access function return Integer; + 4. + 5. Ptr : constant Func_Ptr := Func'Access; + | + >>> warning: "Access" attribute of "Func" before body seen + >>> warning: possible Program_Error on later references + >>> warning: body of unit "Attribute_Call" elaborated + >>> warning: "Access" of "Func" taken at line 5 + + 6. + 7. function Func return Integer is + 8. begin + 9. ... + 10. end Func; + 11. end Attribute_Call; + + In the example above, the elaboration of declaration ‘Ptr’ is + assigned ‘Func'Access’ before the body of ‘Func’ has been + elaborated. + + ‘-gnatwl’ + + Turn on warnings for elaboration problems + + When this switch is in effect, GNAT emits diagnostics in the form + of warnings concerning various elaboration problems. The warnings + are enabled by default. The switch is provided in case all + warnings are suppressed, but elaboration warnings are still + desired. + + ‘-gnatwL’ + + Turn off warnings for elaboration problems + + When this switch is in effect, GNAT no longer emits any diagnostics + in the form of warnings. Selective suppression of elaboration + problems is possible using ‘pragma Warnings (Off)’. + + 1. package body Selective_Suppression is + 2. function ABE return Integer; + 3. + 4. Val_1 : constant Integer := ABE; + | + >>> warning: cannot call "ABE" before body seen + >>> warning: Program_Error will be raised at run time + + 5. + 6. pragma Warnings (Off); + 7. Val_2 : constant Integer := ABE; + 8. pragma Warnings (On); + 9. + 10. function ABE return Integer is + 11. begin + 12. ... + 13. end ABE; + 14. end Selective_Suppression; + + Note that suppressing elaboration warnings does not eliminate + run-time checks. The example above will still fail at run time + with an ABE. + +  + File: gnat_ugn.info, Node: Summary of Procedures for Elaboration Control, Next: Inspecting the Chosen Elaboration Order, Prev: Elaboration-related Compiler Switches, Up: Elaboration Order Handling in GNAT + + 9.12 Summary of Procedures for Elaboration Control + ================================================== + + A programmer should first compile the program with the default options, + using none of the binder or compiler switches. If the binder succeeds + in finding an elaboration order, then apart from possible cases involing + dispatching calls and access-to-subprogram types, the program is free of + elaboration errors. + + If it is important for the program to be portable to compilers other + than GNAT, then the programmer should use compiler switch ‘-gnatel’ and + consider the messages about missing or implicitly created ‘Elaborate’ + and ‘Elaborate_All’ pragmas. + + If the binder reports an elaboration circularity, the programmer has + several options: + + * Ensure that elaboration warnings are enabled. This will allow the + static model to output trace information of elaboration issues. + The trace information could shed light on previously unforeseen + dependencies, as well as their origins. Elaboration warnings are + enabled with compiler switch ‘-gnatwl’. + + * Cosider the tactics given in the suggestions section of the + circularity diagnostic. + + * If none of the steps outlined above resolve the circularity, use a + more permissive elaboration model, in the following order: + + - Use the pre-20.x legacy elaboration-order model, with binder + switch ‘-H’. + + - Use both pre-18.x and pre-20.x legacy elaboration models, with + compiler switch ‘-gnatH’ and binder switch ‘-H’. + + - Use the relaxed static elaboration model, with compiler + switches ‘-gnatH’ ‘-gnatJ’ and binder switch ‘-H’. + + - Use the relaxed dynamic elaboration model, with compiler + switches ‘-gnatH’ ‘-gnatJ’ ‘-gnatE’ and binder switch ‘-H’. + +  + File: gnat_ugn.info, Node: Inspecting the Chosen Elaboration Order, Prev: Summary of Procedures for Elaboration Control, Up: Elaboration Order Handling in GNAT + + 9.13 Inspecting the Chosen Elaboration Order + ============================================ + + To see the elaboration order chosen by the binder, inspect the contents + of file ‘b~xxx.adb’. On certain targets, this file appears as + ‘b_xxx.adb’. The elaboration order appears as a sequence of calls to + ‘Elab_Body’ and ‘Elab_Spec’, interspersed with assignments to ‘Exxx’ + which indicates that a particular unit is elaborated. For example: + + System.Soft_Links'Elab_Body; + E14 := True; + System.Secondary_Stack'Elab_Body; + E18 := True; + System.Exception_Table'Elab_Body; + E24 := True; + Ada.Io_Exceptions'Elab_Spec; + E67 := True; + Ada.Tags'Elab_Spec; + Ada.Streams'Elab_Spec; + E43 := True; + Interfaces.C'Elab_Spec; + E69 := True; + System.Finalization_Root'Elab_Spec; + E60 := True; + System.Os_Lib'Elab_Body; + E71 := True; + System.Finalization_Implementation'Elab_Spec; + System.Finalization_Implementation'Elab_Body; + E62 := True; + Ada.Finalization'Elab_Spec; + E58 := True; + Ada.Finalization.List_Controller'Elab_Spec; + E76 := True; + System.File_Control_Block'Elab_Spec; + E74 := True; + System.File_Io'Elab_Body; + E56 := True; + Ada.Tags'Elab_Body; + E45 := True; + Ada.Text_Io'Elab_Spec; + Ada.Text_Io'Elab_Body; + E07 := True; + + Note also binder switch ‘-l’, which outputs the chosen elaboration order + and provides a more readable form of the above: + + ada (spec) + interfaces (spec) + system (spec) + system.case_util (spec) + system.case_util (body) + system.concat_2 (spec) + system.concat_2 (body) + system.concat_3 (spec) + system.concat_3 (body) + system.htable (spec) + system.parameters (spec) + system.parameters (body) + system.crtl (spec) + interfaces.c_streams (spec) + interfaces.c_streams (body) + system.restrictions (spec) + system.restrictions (body) + system.standard_library (spec) + system.exceptions (spec) + system.exceptions (body) + system.storage_elements (spec) + system.storage_elements (body) + system.secondary_stack (spec) + system.stack_checking (spec) + system.stack_checking (body) + system.string_hash (spec) + system.string_hash (body) + system.htable (body) + system.strings (spec) + system.strings (body) + system.traceback (spec) + system.traceback (body) + system.traceback_entries (spec) + system.traceback_entries (body) + ada.exceptions (spec) + ada.exceptions.last_chance_handler (spec) + system.soft_links (spec) + system.soft_links (body) + ada.exceptions.last_chance_handler (body) + system.secondary_stack (body) + system.exception_table (spec) + system.exception_table (body) + ada.io_exceptions (spec) + ada.tags (spec) + ada.streams (spec) + interfaces.c (spec) + interfaces.c (body) + system.finalization_root (spec) + system.finalization_root (body) + system.memory (spec) + system.memory (body) + system.standard_library (body) + system.os_lib (spec) + system.os_lib (body) + system.unsigned_types (spec) + system.stream_attributes (spec) + system.stream_attributes (body) + system.finalization_implementation (spec) + system.finalization_implementation (body) + ada.finalization (spec) + ada.finalization (body) + ada.finalization.list_controller (spec) + ada.finalization.list_controller (body) + system.file_control_block (spec) + system.file_io (spec) + system.file_io (body) + system.val_uns (spec) + system.val_util (spec) + system.val_util (body) + system.val_uns (body) + system.wch_con (spec) + system.wch_con (body) + system.wch_cnv (spec) + system.wch_jis (spec) + system.wch_jis (body) + system.wch_cnv (body) + system.wch_stw (spec) + system.wch_stw (body) + ada.tags (body) + ada.exceptions (body) + ada.text_io (spec) + ada.text_io (body) + text_io (spec) + gdbstr (body) + +  + File: gnat_ugn.info, Node: Inline Assembler, Next: GNU Free Documentation License, Prev: Elaboration Order Handling in GNAT, Up: Top + + 10 Inline Assembler + ******************* + + If you need to write low-level software that interacts directly with the + hardware, Ada provides two ways to incorporate assembly language code + into your program. First, you can import and invoke external routines + written in assembly language, an Ada feature fully supported by GNAT. + However, for small sections of code it may be simpler or more efficient + to include assembly language statements directly in your Ada source + program, using the facilities of the implementation-defined package + ‘System.Machine_Code’, which incorporates the gcc Inline Assembler. The + Inline Assembler approach offers a number of advantages, including the + following: + + * No need to use non-Ada tools + + * Consistent interface over different targets + + * Automatic usage of the proper calling conventions + + * Access to Ada constants and variables + + * Definition of intrinsic routines + + * Possibility of inlining a subprogram comprising assembler code + + * Code optimizer can take Inline Assembler code into account + + This appendix presents a series of examples to show you how to use the + Inline Assembler. Although it focuses on the Intel x86, the general + approach applies also to other processors. It is assumed that you are + familiar with Ada and with assembly language programming. + + * Menu: + + * Basic Assembler Syntax:: + * A Simple Example of Inline Assembler:: + * Output Variables in Inline Assembler:: + * Input Variables in Inline Assembler:: + * Inlining Inline Assembler Code:: + * Other Asm Functionality:: + +  + File: gnat_ugn.info, Node: Basic Assembler Syntax, Next: A Simple Example of Inline Assembler, Up: Inline Assembler + + 10.1 Basic Assembler Syntax + =========================== + + The assembler used by GNAT and gcc is based not on the Intel assembly + language, but rather on a language that descends from the AT&T Unix + assembler ‘as’ (and which is often referred to as ‘AT&T syntax’). The + following table summarizes the main features of ‘as’ syntax and points + out the differences from the Intel conventions. See the gcc ‘as’ and + ‘gas’ (an ‘as’ macro pre-processor) documentation for further + information. + + `Register names' + gcc / ‘as’: Prefix with ‘%’; for example ‘%eax’ + Intel: No extra punctuation; for example ‘eax’ + + `Immediate operand' + gcc / ‘as’: Prefix with ‘$’; for example ‘$4’ + Intel: No extra punctuation; for example ‘4’ + + `Address' + gcc / ‘as’: Prefix with ‘$’; for example ‘$loc’ + Intel: No extra punctuation; for example ‘loc’ + + `Memory contents' + gcc / ‘as’: No extra punctuation; for example ‘loc’ + Intel: Square brackets; for example ‘[loc]’ + + `Register contents' + gcc / ‘as’: Parentheses; for example ‘(%eax)’ + Intel: Square brackets; for example ‘[eax]’ + + `Hexadecimal numbers' + gcc / ‘as’: Leading ‘0x’ (C language syntax); for example ‘0xA0’ + Intel: Trailing ‘h’; for example ‘A0h’ + + `Operand size' + gcc / ‘as’: Explicit in op code; for example ‘movw’ to move a 16-bit word + Intel: Implicit, deduced by assembler; for example ‘mov’ + + `Instruction repetition' + gcc / ‘as’: Split into two lines; for example + ‘rep’ + ‘stosl’ + Intel: Keep on one line; for example ‘rep stosl’ + + `Order of operands' + gcc / ‘as’: Source first; for example ‘movw $4, %eax’ + Intel: Destination first; for example ‘mov eax, 4’ + +  + File: gnat_ugn.info, Node: A Simple Example of Inline Assembler, Next: Output Variables in Inline Assembler, Prev: Basic Assembler Syntax, Up: Inline Assembler + + 10.2 A Simple Example of Inline Assembler + ========================================= + + The following example will generate a single assembly language + statement, ‘nop’, which does nothing. Despite its lack of run-time + effect, the example will be useful in illustrating the basics of the + Inline Assembler facility. + + with System.Machine_Code; use System.Machine_Code; + procedure Nothing is + begin + Asm ("nop"); + end Nothing; + + ‘Asm’ is a procedure declared in package ‘System.Machine_Code’; here it + takes one parameter, a `template string' that must be a static + expression and that will form the generated instruction. ‘Asm’ may be + regarded as a compile-time procedure that parses the template string and + additional parameters (none here), from which it generates a sequence of + assembly language instructions. + + The examples in this chapter will illustrate several of the forms for + invoking ‘Asm’; a complete specification of the syntax is found in the + ‘Machine_Code_Insertions’ section of the ‘GNAT Reference Manual’. + + Under the standard GNAT conventions, the ‘Nothing’ procedure should be + in a file named ‘nothing.adb’. You can build the executable in the + usual way: + + $ gnatmake nothing + + However, the interesting aspect of this example is not its run-time + behavior but rather the generated assembly code. To see this output, + invoke the compiler as follows: + + $ gcc -c -S -fomit-frame-pointer -gnatp nothing.adb + + where the options are: + + * + ‘-c’ + + compile only (no bind or link) + + * + ‘-S’ + + generate assembler listing + + * + ‘-fomit-frame-pointer’ + + do not set up separate stack frames + + * + ‘-gnatp’ + + do not add runtime checks + + This gives a human-readable assembler version of the code. The + resulting file will have the same name as the Ada source file, but with + a ‘.s’ extension. In our example, the file ‘nothing.s’ has the + following contents: + + .file "nothing.adb" + gcc2_compiled.: + ___gnu_compiled_ada: + .text + .align 4 + .globl __ada_nothing + __ada_nothing: + #APP + nop + #NO_APP + jmp L1 + .align 2,0x90 + L1: + ret + + The assembly code you included is clearly indicated by the compiler, + between the ‘#APP’ and ‘#NO_APP’ delimiters. The character before the + ‘APP’ and ‘NOAPP’ can differ on different targets. For example, + GNU/Linux uses ‘#APP’ while on NT you will see ‘/APP’. + + If you make a mistake in your assembler code (such as using the wrong + size modifier, or using a wrong operand for the instruction) GNAT will + report this error in a temporary file, which will be deleted when the + compilation is finished. Generating an assembler file will help in such + cases, since you can assemble this file separately using the ‘as’ + assembler that comes with gcc. + + Assembling the file using the command + + $ as nothing.s + + will give you error messages whose lines correspond to the assembler + input file, so you can easily find and correct any mistakes you made. + If there are no errors, ‘as’ will generate an object file ‘nothing.out’. + +  + File: gnat_ugn.info, Node: Output Variables in Inline Assembler, Next: Input Variables in Inline Assembler, Prev: A Simple Example of Inline Assembler, Up: Inline Assembler + + 10.3 Output Variables in Inline Assembler + ========================================= + + The examples in this section, showing how to access the processor flags, + illustrate how to specify the destination operands for assembly language + statements. + + with Interfaces; use Interfaces; + with Ada.Text_IO; use Ada.Text_IO; + with System.Machine_Code; use System.Machine_Code; + procedure Get_Flags is + Flags : Unsigned_32; + use ASCII; + begin + Asm ("pushfl" & LF & HT & -- push flags on stack + "popl %%eax" & LF & HT & -- load eax with flags + "movl %%eax, %0", -- store flags in variable + Outputs => Unsigned_32'Asm_Output ("=g", Flags)); + Put_Line ("Flags register:" & Flags'Img); + end Get_Flags; + + In order to have a nicely aligned assembly listing, we have separated + multiple assembler statements in the Asm template string with linefeed + (ASCII.LF) and horizontal tab (ASCII.HT) characters. The resulting + section of the assembly output file is: + + #APP + pushfl + popl %eax + movl %eax, -40(%ebp) + #NO_APP + + It would have been legal to write the Asm invocation as: + + Asm ("pushfl popl %%eax movl %%eax, %0") + + but in the generated assembler file, this would come out as: + + #APP + pushfl popl %eax movl %eax, -40(%ebp) + #NO_APP + + which is not so convenient for the human reader. + + We use Ada comments at the end of each line to explain what the + assembler instructions actually do. This is a useful convention. + + When writing Inline Assembler instructions, you need to precede each + register and variable name with a percent sign. Since the assembler + already requires a percent sign at the beginning of a register name, you + need two consecutive percent signs for such names in the Asm template + string, thus ‘%%eax’. In the generated assembly code, one of the + percent signs will be stripped off. + + Names such as ‘%0’, ‘%1’, ‘%2’, etc., denote input or output variables: + operands you later define using ‘Input’ or ‘Output’ parameters to ‘Asm’. + An output variable is illustrated in the third statement in the Asm + template string: + + movl %%eax, %0 + + The intent is to store the contents of the eax register in a variable + that can be accessed in Ada. Simply writing ‘movl %%eax, Flags’ would + not necessarily work, since the compiler might optimize by using a + register to hold Flags, and the expansion of the ‘movl’ instruction + would not be aware of this optimization. The solution is not to store + the result directly but rather to advise the compiler to choose the + correct operand form; that is the purpose of the ‘%0’ output variable. + + Information about the output variable is supplied in the ‘Outputs’ + parameter to ‘Asm’: + + Outputs => Unsigned_32'Asm_Output ("=g", Flags)); + + The output is defined by the ‘Asm_Output’ attribute of the target type; + the general format is + + Type'Asm_Output (constraint_string, variable_name) + + The constraint string directs the compiler how to store/access the + associated variable. In the example + + Unsigned_32'Asm_Output ("=m", Flags); + + the ‘"m"’ (memory) constraint tells the compiler that the variable + ‘Flags’ should be stored in a memory variable, thus preventing the + optimizer from keeping it in a register. In contrast, + + Unsigned_32'Asm_Output ("=r", Flags); + + uses the ‘"r"’ (register) constraint, telling the compiler to store the + variable in a register. + + If the constraint is preceded by the equal character ‘=’, it tells the + compiler that the variable will be used to store data into it. + + In the ‘Get_Flags’ example, we used the ‘"g"’ (global) constraint, + allowing the optimizer to choose whatever it deems best. + + There are a fairly large number of constraints, but the ones that are + most useful (for the Intel x86 processor) are the following: + + `=' output constraint + + + `g' global (i.e., can be stored anywhere) + + + `m' in memory + + + `I' a constant + + + `a' use eax + + + `b' use ebx + + + `c' use ecx + + + `d' use edx + + + `S' use esi + + + `D' use edi + + + `r' use one of eax, ebx, ecx or edx + + + `q' use one of eax, ebx, ecx, edx, esi or edi + + + The full set of constraints is described in the gcc and ‘as’ + documentation; note that it is possible to combine certain constraints + in one constraint string. + + You specify the association of an output variable with an assembler + operand through the ‘%`n'’ notation, where `n' is a non-negative + integer. Thus in + + Asm ("pushfl" & LF & HT & -- push flags on stack + "popl %%eax" & LF & HT & -- load eax with flags + "movl %%eax, %0", -- store flags in variable + Outputs => Unsigned_32'Asm_Output ("=g", Flags)); + + ‘%0’ will be replaced in the expanded code by the appropriate operand, + whatever the compiler decided for the ‘Flags’ variable. + + In general, you may have any number of output variables: + + * Count the operands starting at 0; thus ‘%0’, ‘%1’, etc. + + * Specify the ‘Outputs’ parameter as a parenthesized comma-separated + list of ‘Asm_Output’ attributes + + For example: + + Asm ("movl %%eax, %0" & LF & HT & + "movl %%ebx, %1" & LF & HT & + "movl %%ecx, %2", + Outputs => (Unsigned_32'Asm_Output ("=g", Var_A), -- %0 = Var_A + Unsigned_32'Asm_Output ("=g", Var_B), -- %1 = Var_B + Unsigned_32'Asm_Output ("=g", Var_C))); -- %2 = Var_C + + where ‘Var_A’, ‘Var_B’, and ‘Var_C’ are variables in the Ada program. + + As a variation on the ‘Get_Flags’ example, we can use the constraints + string to direct the compiler to store the eax register into the ‘Flags’ + variable, instead of including the store instruction explicitly in the + ‘Asm’ template string: + + with Interfaces; use Interfaces; + with Ada.Text_IO; use Ada.Text_IO; + with System.Machine_Code; use System.Machine_Code; + procedure Get_Flags_2 is + Flags : Unsigned_32; + use ASCII; + begin + Asm ("pushfl" & LF & HT & -- push flags on stack + "popl %%eax", -- save flags in eax + Outputs => Unsigned_32'Asm_Output ("=a", Flags)); + Put_Line ("Flags register:" & Flags'Img); + end Get_Flags_2; + + The ‘"a"’ constraint tells the compiler that the ‘Flags’ variable will + come from the eax register. Here is the resulting code: + + #APP + pushfl + popl %eax + #NO_APP + movl %eax,-40(%ebp) + + The compiler generated the store of eax into Flags after expanding the + assembler code. + + Actually, there was no need to pop the flags into the eax register; more + simply, we could just pop the flags directly into the program variable: + + with Interfaces; use Interfaces; + with Ada.Text_IO; use Ada.Text_IO; + with System.Machine_Code; use System.Machine_Code; + procedure Get_Flags_3 is + Flags : Unsigned_32; + use ASCII; + begin + Asm ("pushfl" & LF & HT & -- push flags on stack + "pop %0", -- save flags in Flags + Outputs => Unsigned_32'Asm_Output ("=g", Flags)); + Put_Line ("Flags register:" & Flags'Img); + end Get_Flags_3; + +  + File: gnat_ugn.info, Node: Input Variables in Inline Assembler, Next: Inlining Inline Assembler Code, Prev: Output Variables in Inline Assembler, Up: Inline Assembler + + 10.4 Input Variables in Inline Assembler + ======================================== + + The example in this section illustrates how to specify the source + operands for assembly language statements. The program simply + increments its input value by 1: + + with Interfaces; use Interfaces; + with Ada.Text_IO; use Ada.Text_IO; + with System.Machine_Code; use System.Machine_Code; + procedure Increment is + + function Incr (Value : Unsigned_32) return Unsigned_32 is + Result : Unsigned_32; + begin + Asm ("incl %0", + Outputs => Unsigned_32'Asm_Output ("=a", Result), + Inputs => Unsigned_32'Asm_Input ("a", Value)); + return Result; + end Incr; + + Value : Unsigned_32; + + begin + Value := 5; + Put_Line ("Value before is" & Value'Img); + Value := Incr (Value); + Put_Line ("Value after is" & Value'Img); + end Increment; + + The ‘Outputs’ parameter to ‘Asm’ specifies that the result will be in + the eax register and that it is to be stored in the ‘Result’ variable. + + The ‘Inputs’ parameter looks much like the ‘Outputs’ parameter, but with + an ‘Asm_Input’ attribute. The ‘"="’ constraint, indicating an output + value, is not present. + + You can have multiple input variables, in the same way that you can have + more than one output variable. + + The parameter count (%0, %1) etc, still starts at the first output + statement, and continues with the input statements. + + Just as the ‘Outputs’ parameter causes the register to be stored into + the target variable after execution of the assembler statements, so does + the ‘Inputs’ parameter cause its variable to be loaded into the register + before execution of the assembler statements. + + Thus the effect of the ‘Asm’ invocation is: + + * load the 32-bit value of ‘Value’ into eax + + * execute the ‘incl %eax’ instruction + + * store the contents of eax into the ‘Result’ variable + + The resulting assembler file (with ‘-O2’ optimization) contains: + + _increment__incr.1: + subl $4,%esp + movl 8(%esp),%eax + #APP + incl %eax + #NO_APP + movl %eax,%edx + movl %ecx,(%esp) + addl $4,%esp + ret + +  + File: gnat_ugn.info, Node: Inlining Inline Assembler Code, Next: Other Asm Functionality, Prev: Input Variables in Inline Assembler, Up: Inline Assembler + + 10.5 Inlining Inline Assembler Code + =================================== + + For a short subprogram such as the ‘Incr’ function in the previous + section, the overhead of the call and return (creating / deleting the + stack frame) can be significant, compared to the amount of code in the + subprogram body. A solution is to apply Ada’s ‘Inline’ pragma to the + subprogram, which directs the compiler to expand invocations of the + subprogram at the point(s) of call, instead of setting up a stack frame + for out-of-line calls. Here is the resulting program: + + with Interfaces; use Interfaces; + with Ada.Text_IO; use Ada.Text_IO; + with System.Machine_Code; use System.Machine_Code; + procedure Increment_2 is + + function Incr (Value : Unsigned_32) return Unsigned_32 is + Result : Unsigned_32; + begin + Asm ("incl %0", + Outputs => Unsigned_32'Asm_Output ("=a", Result), + Inputs => Unsigned_32'Asm_Input ("a", Value)); + return Result; + end Incr; + pragma Inline (Increment); + + Value : Unsigned_32; + + begin + Value := 5; + Put_Line ("Value before is" & Value'Img); + Value := Increment (Value); + Put_Line ("Value after is" & Value'Img); + end Increment_2; + + Compile the program with both optimization (‘-O2’) and inlining + (‘-gnatn’) enabled. + + The ‘Incr’ function is still compiled as usual, but at the point in + ‘Increment’ where our function used to be called: + + pushl %edi + call _increment__incr.1 + + the code for the function body directly appears: + + movl %esi,%eax + #APP + incl %eax + #NO_APP + movl %eax,%edx + + thus saving the overhead of stack frame setup and an out-of-line call. + +  + File: gnat_ugn.info, Node: Other Asm Functionality, Prev: Inlining Inline Assembler Code, Up: Inline Assembler + + 10.6 Other ‘Asm’ Functionality + ============================== + + This section describes two important parameters to the ‘Asm’ procedure: + ‘Clobber’, which identifies register usage; and ‘Volatile’, which + inhibits unwanted optimizations. + + * Menu: + + * The Clobber Parameter:: + * The Volatile Parameter:: + +  + File: gnat_ugn.info, Node: The Clobber Parameter, Next: The Volatile Parameter, Up: Other Asm Functionality + + 10.6.1 The ‘Clobber’ Parameter + ------------------------------ + + One of the dangers of intermixing assembly language and a compiled + language such as Ada is that the compiler needs to be aware of which + registers are being used by the assembly code. In some cases, such as + the earlier examples, the constraint string is sufficient to indicate + register usage (e.g., ‘"a"’ for the eax register). But more generally, + the compiler needs an explicit identification of the registers that are + used by the Inline Assembly statements. + + Using a register that the compiler doesn’t know about could be a side + effect of an instruction (like ‘mull’ storing its result in both eax and + edx). It can also arise from explicit register usage in your assembly + code; for example: + + Asm ("movl %0, %%ebx" & LF & HT & + "movl %%ebx, %1", + Outputs => Unsigned_32'Asm_Output ("=g", Var_Out), + Inputs => Unsigned_32'Asm_Input ("g", Var_In)); + + where the compiler (since it does not analyze the ‘Asm’ template string) + does not know you are using the ebx register. + + In such cases you need to supply the ‘Clobber’ parameter to ‘Asm’, to + identify the registers that will be used by your assembly code: + + Asm ("movl %0, %%ebx" & LF & HT & + "movl %%ebx, %1", + Outputs => Unsigned_32'Asm_Output ("=g", Var_Out), + Inputs => Unsigned_32'Asm_Input ("g", Var_In), + Clobber => "ebx"); + + The Clobber parameter is a static string expression specifying the + register(s) you are using. Note that register names are `not' prefixed + by a percent sign. Also, if more than one register is used then their + names are separated by commas; e.g., ‘"eax, ebx"’ + + The ‘Clobber’ parameter has several additional uses: + + * Use ‘register’ name ‘cc’ to indicate that flags might have changed + + * Use ‘register’ name ‘memory’ if you changed a memory location + +  + File: gnat_ugn.info, Node: The Volatile Parameter, Prev: The Clobber Parameter, Up: Other Asm Functionality + + 10.6.2 The ‘Volatile’ Parameter + ------------------------------- + + Compiler optimizations in the presence of Inline Assembler may sometimes + have unwanted effects. For example, when an ‘Asm’ invocation with an + input variable is inside a loop, the compiler might move the loading of + the input variable outside the loop, regarding it as a one-time + initialization. + + If this effect is not desired, you can disable such optimizations by + setting the ‘Volatile’ parameter to ‘True’; for example: + + Asm ("movl %0, %%ebx" & LF & HT & + "movl %%ebx, %1", + Outputs => Unsigned_32'Asm_Output ("=g", Var_Out), + Inputs => Unsigned_32'Asm_Input ("g", Var_In), + Clobber => "ebx", + Volatile => True); + + By default, ‘Volatile’ is set to ‘False’ unless there is no ‘Outputs’ + parameter. + + Although setting ‘Volatile’ to ‘True’ prevents unwanted optimizations, + it will also disable other optimizations that might be important for + efficiency. In general, you should set ‘Volatile’ to ‘True’ only if the + compiler’s optimizations have created problems. + +  + File: gnat_ugn.info, Node: GNU Free Documentation License, Next: Index, Prev: Inline Assembler, Up: Top + + 11 GNU Free Documentation License + ********************************* + + Version 1.3, 3 November 2008 + + Copyright 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc + ‘https://fsf.org/’ + + Everyone is permitted to copy and distribute verbatim copies of this + license document, but changing it is not allowed. + + `Preamble' + + The purpose of this License is to make a manual, textbook, or other + functional and useful document “free” in the sense of freedom: to assure + everyone the effective freedom to copy and redistribute it, with or + without modifying it, either commercially or noncommercially. + Secondarily, this License preserves for the author and publisher a way + to get credit for their work, while not being considered responsible for + modifications made by others. + + This License is a kind of “copyleft”, which means that derivative works + of the document must themselves be free in the same sense. It + complements the GNU General Public License, which is a copyleft license + designed for free software. + + We have designed this License in order to use it for manuals for free + software, because free software needs free documentation: a free program + should come with manuals providing the same freedoms that the software + does. But this License is not limited to software manuals; it can be + used for any textual work, regardless of subject matter or whether it is + published as a printed book. We recommend this License principally for + works whose purpose is instruction or reference. + + `1. APPLICABILITY AND DEFINITIONS' + + This License applies to any manual or other work, in any medium, that + contains a notice placed by the copyright holder saying it can be + distributed under the terms of this License. Such a notice grants a + world-wide, royalty-free license, unlimited in duration, to use that + work under the conditions stated herein. The `Document', below, refers + to any such manual or work. Any member of the public is a licensee, and + is addressed as “`you'”. You accept the license if you copy, modify or + distribute the work in a way requiring permission under copyright law. + + A “`Modified Version'” of the Document means any work containing the + Document or a portion of it, either copied verbatim, or with + modifications and/or translated into another language. + + A “`Secondary Section'” is a named appendix or a front-matter section of + the Document that deals exclusively with the relationship of the + publishers or authors of the Document to the Document’s overall subject + (or to related matters) and contains nothing that could fall directly + within that overall subject. (Thus, if the Document is in part a + textbook of mathematics, a Secondary Section may not explain any + mathematics.) The relationship could be a matter of historical + connection with the subject or with related matters, or of legal, + commercial, philosophical, ethical or political position regarding them. + + The “`Invariant Sections'” are certain Secondary Sections whose titles + are designated, as being those of Invariant Sections, in the notice that + says that the Document is released under this License. If a section + does not fit the above definition of Secondary then it is not allowed to + be designated as Invariant. The Document may contain zero Invariant + Sections. If the Document does not identify any Invariant Sections then + there are none. + + The “`Cover Texts'” are certain short passages of text that are listed, + as Front-Cover Texts or Back-Cover Texts, in the notice that says that + the Document is released under this License. A Front-Cover Text may be + at most 5 words, and a Back-Cover Text may be at most 25 words. + + A “`Transparent'” copy of the Document means a machine-readable copy, + represented in a format whose specification is available to the general + public, that is suitable for revising the document straightforwardly + with generic text editors or (for images composed of pixels) generic + paint programs or (for drawings) some widely available drawing editor, + and that is suitable for input to text formatters or for automatic + translation to a variety of formats suitable for input to text + formatters. A copy made in an otherwise Transparent file format whose + markup, or absence of markup, has been arranged to thwart or discourage + subsequent modification by readers is not Transparent. An image format + is not Transparent if used for any substantial amount of text. A copy + that is not “Transparent” is called `Opaque'. + + Examples of suitable formats for Transparent copies include plain ASCII + without markup, Texinfo input format, LaTeX input format, SGML or XML + using a publicly available DTD, and standard-conforming simple HTML, + PostScript or PDF designed for human modification. Examples of + transparent image formats include PNG, XCF and JPG. Opaque formats + include proprietary formats that can be read and edited only by + proprietary word processors, SGML or XML for which the DTD and/or + processing tools are not generally available, and the machine-generated + HTML, PostScript or PDF produced by some word processors for output + purposes only. + + The “`Title Page'” means, for a printed book, the title page itself, + plus such following pages as are needed to hold, legibly, the material + this License requires to appear in the title page. For works in formats + which do not have any title page as such, “Title Page” means the text + near the most prominent appearance of the work’s title, preceding the + beginning of the body of the text. + + The “`publisher'” means any person or entity that distributes copies of + the Document to the public. + + A section “`Entitled XYZ'” means a named subunit of the Document whose + title either is precisely XYZ or contains XYZ in parentheses following + text that translates XYZ in another language. (Here XYZ stands for a + specific section name mentioned below, such as “`Acknowledgements'”, + “`Dedications'”, “`Endorsements'”, or “`History'”.) To “`Preserve the + Title'” of such a section when you modify the Document means that it + remains a section “Entitled XYZ” according to this definition. + + The Document may include Warranty Disclaimers next to the notice which + states that this License applies to the Document. These Warranty + Disclaimers are considered to be included by reference in this License, + but only as regards disclaiming warranties: any other implication that + these Warranty Disclaimers may have is void and has no effect on the + meaning of this License. + + `2. VERBATIM COPYING' + + You may copy and distribute the Document in any medium, either + commercially or noncommercially, provided that this License, the + copyright notices, and the license notice saying this License applies to + the Document are reproduced in all copies, and that you add no other + conditions whatsoever to those of this License. You may not use + technical measures to obstruct or control the reading or further copying + of the copies you make or distribute. However, you may accept + compensation in exchange for copies. If you distribute a large enough + number of copies you must also follow the conditions in section 3. + + You may also lend copies, under the same conditions stated above, and + you may publicly display copies. + + `3. COPYING IN QUANTITY' + + If you publish printed copies (or copies in media that commonly have + printed covers) of the Document, numbering more than 100, and the + Document’s license notice requires Cover Texts, you must enclose the + copies in covers that carry, clearly and legibly, all these Cover Texts: + Front-Cover Texts on the front cover, and Back-Cover Texts on the back + cover. Both covers must also clearly and legibly identify you as the + publisher of these copies. The front cover must present the full title + with all words of the title equally prominent and visible. You may add + other material on the covers in addition. Copying with changes limited + to the covers, as long as they preserve the title of the Document and + satisfy these conditions, can be treated as verbatim copying in other + respects. + + If the required texts for either cover are too voluminous to fit + legibly, you should put the first ones listed (as many as fit + reasonably) on the actual cover, and continue the rest onto adjacent + pages. + + If you publish or distribute Opaque copies of the Document numbering + more than 100, you must either include a machine-readable Transparent + copy along with each Opaque copy, or state in or with each Opaque copy a + computer-network location from which the general network-using public + has access to download using public-standard network protocols a + complete Transparent copy of the Document, free of added material. If + you use the latter option, you must take reasonably prudent steps, when + you begin distribution of Opaque copies in quantity, to ensure that this + Transparent copy will remain thus accessible at the stated location + until at least one year after the last time you distribute an Opaque + copy (directly or through your agents or retailers) of that edition to + the public. + + It is requested, but not required, that you contact the authors of the + Document well before redistributing any large number of copies, to give + them a chance to provide you with an updated version of the Document. + + `4. MODIFICATIONS' + + You may copy and distribute a Modified Version of the Document under the + conditions of sections 2 and 3 above, provided that you release the + Modified Version under precisely this License, with the Modified Version + filling the role of the Document, thus licensing distribution and + modification of the Modified Version to whoever possesses a copy of it. + In addition, you must do these things in the Modified Version: + + A. Use in the Title Page (and on the covers, if any) a title distinct + from that of the Document, and from those of previous versions + (which should, if there were any, be listed in the History section + of the Document). You may use the same title as a previous version + if the original publisher of that version gives permission. + + B. List on the Title Page, as authors, one or more persons or entities + responsible for authorship of the modifications in the Modified + Version, together with at least five of the principal authors of + the Document (all of its principal authors, if it has fewer than + five), unless they release you from this requirement. + + C. State on the Title page the name of the publisher of the Modified + Version, as the publisher. + + D. Preserve all the copyright notices of the Document. + + E. Add an appropriate copyright notice for your modifications adjacent + to the other copyright notices. + + F. Include, immediately after the copyright notices, a license notice + giving the public permission to use the Modified Version under the + terms of this License, in the form shown in the Addendum below. + + G. Preserve in that license notice the full lists of Invariant + Sections and required Cover Texts given in the Document’s license + notice. + + H. Include an unaltered copy of this License. + + I. Preserve the section Entitled “History”, Preserve its Title, and + add to it an item stating at least the title, year, new authors, + and publisher of the Modified Version as given on the Title Page. + If there is no section Entitled “History” in the Document, create + one stating the title, year, authors, and publisher of the Document + as given on its Title Page, then add an item describing the + Modified Version as stated in the previous sentence. + + J. Preserve the network location, if any, given in the Document for + public access to a Transparent copy of the Document, and likewise + the network locations given in the Document for previous versions + it was based on. These may be placed in the “History” section. + You may omit a network location for a work that was published at + least four years before the Document itself, or if the original + publisher of the version it refers to gives permission. + + K. For any section Entitled “Acknowledgements” or “Dedications”, + Preserve the Title of the section, and preserve in the section all + the substance and tone of each of the contributor acknowledgements + and/or dedications given therein. + + L. Preserve all the Invariant Sections of the Document, unaltered in + their text and in their titles. Section numbers or the equivalent + are not considered part of the section titles. + + M. Delete any section Entitled “Endorsements”. Such a section may not + be included in the Modified Version. + + N. Do not retitle any existing section to be Entitled “Endorsements” + or to conflict in title with any Invariant Section. + + O. Preserve any Warranty Disclaimers. + + If the Modified Version includes new front-matter sections or appendices + that qualify as Secondary Sections and contain no material copied from + the Document, you may at your option designate some or all of these + sections as invariant. To do this, add their titles to the list of + Invariant Sections in the Modified Version’s license notice. These + titles must be distinct from any other section titles. + + You may add a section Entitled “Endorsements”, provided it contains + nothing but endorsements of your Modified Version by various parties—for + example, statements of peer review or that the text has been approved by + an organization as the authoritative definition of a standard. + + You may add a passage of up to five words as a Front-Cover Text, and a + passage of up to 25 words as a Back-Cover Text, to the end of the list + of Cover Texts in the Modified Version. Only one passage of Front-Cover + Text and one of Back-Cover Text may be added by (or through arrangements + made by) any one entity. If the Document already includes a cover text + for the same cover, previously added by you or by arrangement made by + the same entity you are acting on behalf of, you may not add another; + but you may replace the old one, on explicit permission from the + previous publisher that added the old one. + + The author(s) and publisher(s) of the Document do not by this License + give permission to use their names for publicity for or to assert or + imply endorsement of any Modified Version. + + `5. COMBINING DOCUMENTS' + + You may combine the Document with other documents released under this + License, under the terms defined in section 4 above for modified + versions, provided that you include in the combination all of the + Invariant Sections of all of the original documents, unmodified, and + list them all as Invariant Sections of your combined work in its license + notice, and that you preserve all their Warranty Disclaimers. + + The combined work need only contain one copy of this License, and + multiple identical Invariant Sections may be replaced with a single + copy. If there are multiple Invariant Sections with the same name but + different contents, make the title of each such section unique by adding + at the end of it, in parentheses, the name of the original author or + publisher of that section if known, or else a unique number. Make the + same adjustment to the section titles in the list of Invariant Sections + in the license notice of the combined work. + + In the combination, you must combine any sections Entitled “History” in + the various original documents, forming one section Entitled “History”; + likewise combine any sections Entitled “Acknowledgements”, and any + sections Entitled “Dedications”. You must delete all sections Entitled + “Endorsements”. + + `6. COLLECTIONS OF DOCUMENTS' + + You may make a collection consisting of the Document and other documents + released under this License, and replace the individual copies of this + License in the various documents with a single copy that is included in + the collection, provided that you follow the rules of this License for + verbatim copying of each of the documents in all other respects. + + You may extract a single document from such a collection, and distribute + it individually under this License, provided you insert a copy of this + License into the extracted document, and follow this License in all + other respects regarding verbatim copying of that document. + + `7. AGGREGATION WITH INDEPENDENT WORKS' + + A compilation of the Document or its derivatives with other separate and + independent documents or works, in or on a volume of a storage or + distribution medium, is called an “aggregate” if the copyright resulting + from the compilation is not used to limit the legal rights of the + compilation’s users beyond what the individual works permit. When the + Document is included in an aggregate, this License does not apply to the + other works in the aggregate which are not themselves derivative works + of the Document. + + If the Cover Text requirement of section 3 is applicable to these copies + of the Document, then if the Document is less than one half of the + entire aggregate, the Document’s Cover Texts may be placed on covers + that bracket the Document within the aggregate, or the electronic + equivalent of covers if the Document is in electronic form. Otherwise + they must appear on printed covers that bracket the whole aggregate. + + `8. TRANSLATION' + + Translation is considered a kind of modification, so you may distribute + translations of the Document under the terms of section 4. Replacing + Invariant Sections with translations requires special permission from + their copyright holders, but you may include translations of some or all + Invariant Sections in addition to the original versions of these + Invariant Sections. You may include a translation of this License, and + all the license notices in the Document, and any Warranty Disclaimers, + provided that you also include the original English version of this + License and the original versions of those notices and disclaimers. In + case of a disagreement between the translation and the original version + of this License or a notice or disclaimer, the original version will + prevail. + + If a section in the Document is Entitled “Acknowledgements”, + “Dedications”, or “History”, the requirement (section 4) to Preserve its + Title (section 1) will typically require changing the actual title. + + `9. TERMINATION' + + You may not copy, modify, sublicense, or distribute the Document except + as expressly provided under this License. Any attempt otherwise to + copy, modify, sublicense, or distribute it is void, and will + automatically terminate your rights under this License. + + However, if you cease all violation of this License, then your license + from a particular copyright holder is reinstated (a) provisionally, + unless and until the copyright holder explicitly and finally terminates + your license, and (b) permanently, if the copyright holder fails to + notify you of the violation by some reasonable means prior to 60 days + after the cessation. + + Moreover, your license from a particular copyright holder is reinstated + permanently if the copyright holder notifies you of the violation by + some reasonable means, this is the first time you have received notice + of violation of this License (for any work) from that copyright holder, + and you cure the violation prior to 30 days after your receipt of the + notice. + + Termination of your rights under this section does not terminate the + licenses of parties who have received copies or rights from you under + this License. If your rights have been terminated and not permanently + reinstated, receipt of a copy of some or all of the same material does + not give you any rights to use it. + + `10. FUTURE REVISIONS OF THIS LICENSE' + + The Free Software Foundation may publish new, revised versions of the + GNU Free Documentation License from time to time. Such new versions + will be similar in spirit to the present version, but may differ in + detail to address new problems or concerns. See + ‘https://www.gnu.org/copyleft/’. + + Each version of the License is given a distinguishing version number. + If the Document specifies that a particular numbered version of this + License “or any later version” applies to it, you have the option of + following the terms and conditions either of that specified version or + of any later version that has been published (not as a draft) by the + Free Software Foundation. If the Document does not specify a version + number of this License, you may choose any version ever published (not + as a draft) by the Free Software Foundation. If the Document specifies + that a proxy can decide which future versions of this License can be + used, that proxy’s public statement of acceptance of a version + permanently authorizes you to choose that version for the Document. + + `11. RELICENSING' + + “Massive Multiauthor Collaboration Site” (or “MMC Site”) means any World + Wide Web server that publishes copyrightable works and also provides + prominent facilities for anybody to edit those works. A public wiki + that anybody can edit is an example of such a server. A “Massive + Multiauthor Collaboration” (or “MMC”) contained in the site means any + set of copyrightable works thus published on the MMC site. + + “CC-BY-SA” means the Creative Commons Attribution-Share Alike 3.0 + license published by Creative Commons Corporation, a not-for-profit + corporation with a principal place of business in San Francisco, + California, as well as future copyleft versions of that license + published by that same organization. + + “Incorporate” means to publish or republish a Document, in whole or in + part, as part of another Document. + + An MMC is “eligible for relicensing” if it is licensed under this + License, and if all works that were first published under this License + somewhere other than this MMC, and subsequently incorporated in whole or + in part into the MMC, (1) had no cover texts or invariant sections, and + (2) were thus incorporated prior to November 1, 2008. + + The operator of an MMC Site may republish an MMC contained in the site + under CC-BY-SA on the same site at any time before August 1, 2009, + provided the MMC is eligible for relicensing. + + `ADDENDUM: How to use this License for your documents' + + To use this License in a document you have written, include a copy of + the License in the document and put the following copyright and license + notices just after the title page: + + Copyright © YEAR YOUR NAME. Permission is granted to copy, + distribute and/or modify this document under the terms of the GNU + Free Documentation License, Version 1.3 or any later version + published by the Free Software Foundation; with no Invariant + Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of + the license is included in the section entitled “GNU Free + Documentation License”. + + If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, + replace the “with … Texts.” line with this: + + with the Invariant Sections being LIST THEIR TITLES, with the + Front-Cover Texts being LIST, and with the Back-Cover Texts being + LIST. + + If you have Invariant Sections without Cover Texts, or some other + combination of the three, merge those two alternatives to suit the + situation. + + If your document contains nontrivial examples of program code, we + recommend releasing these examples in parallel under your choice of free + software license, such as the GNU General Public License, to permit + their use in free software. + +  + File: gnat_ugn.info, Node: Index, Prev: GNU Free Documentation License, Up: Top + + Index + ***** + + [index] + * Menu: + + * -a (gnatbind): Switches for gnatbind. + (line 19) + * -A (gnatbind): Switches for gnatbind. + (line 34) + * -a (gnatdll): Using gnatdll. (line 23) + * -a (gnatls): Switches for gnatls. + (line 18) + * -a (gnatmake): Switches for gnatmake. + (line 110) + * -A (gnatmake): Switches for gnatmake. + (line 462) + * -aI (gnatbind): Switches for gnatbind. + (line 30) + * -aI (gnatbind) <1>: Search Paths for gnatbind. + (line 38) + * -aI (gnatls): Switches for gnatls. + (line 50) + * -aI (gnatmake): Switches for gnatmake. + (line 437) + * -aL (gnatmake): Switches for gnatmake. + (line 443) + * -aO (gnatbind): Switches for gnatbind. + (line 26) + * -aO (gnatbind) <1>: Search Paths for gnatbind. + (line 38) + * -aO (gnatclean): Switches for gnatclean. + (line 97) + * -aO (gnatls): Switches for gnatls. + (line 50) + * -aO (gnatmake): Switches for gnatmake. + (line 456) + * -aP (gnatls): Switches for gnatls. + (line 55) + * –as (dlltool): Using gnatdll. (line 227) + * -b (gcc): Alphabetical List of All Switches. + (line 6) + * -B (gcc): Alphabetical List of All Switches. + (line 12) + * -b (gnatbind): Switches for gnatbind. + (line 38) + * -b (gnatbind) <1>: Binder Error Message Control. + (line 17) + * -b (gnatdll): Using gnatdll. (line 30) + * -B (gnatlink): Switches for gnatlink. + (line 61) + * -b (gnatmake): Switches for gnatmake. + (line 130) + * -b (gnatprep): Switches for gnatprep. + (line 16) + * -bargs (gnatdll): Using gnatdll. (line 35) + * -bargs (gnatmake): Mode Switches for gnatmake. + (line 19) + * –base-file (dlltool): Using gnatdll. (line 189) + * -C (gcc): Switches. (line 21) + * -c (gcc): Alphabetical List of All Switches. + (line 21) + * -c (gnatbind): Switches for gnatbind. + (line 42) + * -c (gnatbind) <1>: Output Control. (line 9) + * -c (gnatchop): Switches for gnatchop. + (line 18) + * -c (gnatclean): Switches for gnatclean. + (line 30) + * -c (gnatmake): Switches for gnatmake. + (line 140) + * -C (gnatmake): Switches for gnatmake. + (line 149) + * -c (gnatname): Switches for gnatname. + (line 33) + * -c (gnatprep): Switches for gnatprep. + (line 22) + * -C (gnatprep): Switches for gnatprep. + (line 29) + * -C= (gnatmake): Switches for gnatmake. + (line 164) + * -cargs (gnatmake): Mode Switches for gnatmake. + (line 13) + * –create-missing-dirs (gnatmake): Switches for gnatmake. + (line 66) + * -D (gnatbind): Switches for gnatbind. + (line 58) + * -D (gnatclean): Switches for gnatclean. + (line 37) + * -d (gnatdll): Using gnatdll. (line 39) + * -d (gnatls): Switches for gnatls. + (line 23) + * -d (gnatmake): Switches for gnatmake. + (line 173) + * -D (gnatmake): Switches for gnatmake. + (line 184) + * -d (gnatname): Switches for gnatname. + (line 42) + * -D (gnatname): Switches for gnatname. + (line 59) + * -D (gnatprep): Switches for gnatprep. + (line 40) + * –def (dlltool): Using gnatdll. (line 194) + * –demangle (gprof): Running gprof. (line 24) + * –dllname (dlltool): Using gnatdll. (line 198) + * -dnn[k|m] (gnatbind): Switches for gnatbind. + (line 46) + * -e (gnatbind): Switches for gnatbind. + (line 83) + * -E (gnatbind): Switches for gnatbind. + (line 102) + * -e (gnatbind) <1>: Output Control. (line 15) + * -e (gnatdll): Using gnatdll. (line 50) + * -e (gprof): Running gprof. (line 34) + * -E (gprof): Running gprof. (line 43) + * -Ea (gnatbind): Switches for gnatbind. + (line 87) + * -eI (gnatmake): Switches for gnatmake. + (line 192) + * -eL (gnatmake): Switches for gnatmake. + (line 199) + * -Es (gnatbind): Switches for gnatbind. + (line 97) + * -eS (gnatmake): Switches for gnatmake. + (line 215) + * -f (gnatbind): Switches for gnatbind. + (line 106) + * -F (gnatbind): Switches for gnatbind. + (line 111) + * -f (gnatbind) <1>: Elaboration Control. + (line 10) + * -F (gnatclean): Switches for gnatclean. + (line 42) + * -f (gnatlink): Switches for gnatlink. + (line 18) + * -f (gnatmake): Switches for gnatmake. + (line 220) + * -F (gnatmake): Switches for gnatmake. + (line 227) + * -f (gnatname): Switches for gnatname. + (line 72) + * -f (gprof): Running gprof. (line 52) + * -F (gprof): Running gprof. (line 59) + * -fada-spec-parent (gcc): Switches. (line 16) + * -fcallgraph-info (gcc): Alphabetical List of All Switches. + (line 31) + * -fdata-sections (gcc): Compilation options. + (line 9) + * -fdiagnostics-format (gcc): Alphabetical List of All Switches. + (line 42) + * -fdump-ada-spec (gcc): Switches. (line 6) + * -fdump-ada-spec-slim (gcc): Switches. (line 11) + * -fdump-scos (gcc): Alphabetical List of All Switches. + (line 48) + * -ffunction-sections (gcc): Compilation options. + (line 9) + * -fgnat-encodings (gcc): Alphabetical List of All Switches. + (line 55) + * -fgnat-encodings (gcc) <1>: Debugging Control. (line 251) + * -files (gnatls): Switches for gnatls. + (line 43) + * -flto (gcc): Alphabetical List of All Switches. + (line 60) + * -fno-inline (gcc): Alphabetical List of All Switches. + (line 81) + * -fno-inline (gcc) <1>: Inlining of Subprograms. + (line 72) + * -fno-inline-functions (gcc): Alphabetical List of All Switches. + (line 88) + * -fno-inline-functions (gcc) <1>: Inlining of Subprograms. + (line 78) + * -fno-inline-functions-called-once (gcc): Alphabetical List of All Switches. + (line 98) + * -fno-inline-functions-called-once (gcc) <1>: Inlining of Subprograms. + (line 84) + * -fno-inline-small-functions (gcc): Alphabetical List of All Switches. + (line 93) + * -fno-inline-small-functions (gcc) <1>: Inlining of Subprograms. + (line 81) + * -fno-ivopts (gcc): Alphabetical List of All Switches. + (line 103) + * -fno-strict-aliasing (gcc): Alphabetical List of All Switches. + (line 112) + * -fno-strict-overflow (gcc): Alphabetical List of All Switches. + (line 118) + * -fstack-check (gcc): Alphabetical List of All Switches. + (line 128) + * -fstack-check (gcc) <1>: Run-Time Checks. (line 137) + * -fstack-check (gcc) <2>: Stack Overflow Checking. + (line 6) + * -fstack-usage: Static Stack Usage Analysis. + (line 6) + * -fstack-usage (gcc): Alphabetical List of All Switches. + (line 133) + * -fuse-ld=name: Linker Switches. (line 8) + * -fverbose-asm (gcc): Alphabetical List of All Switches. + (line 903) + * -g (gcc): Alphabetical List of All Switches. + (line 139) + * -g (gcc) <1>: Debugging Optimized Code. + (line 14) + * -g (gnatdll): Using gnatdll. (line 54) + * -g (gnatlink): Switches for gnatlink. + (line 27) + * -g (gnatmake): Switches for gnatmake. + (line 234) + * –GCC= (gnatchop): Switches for gnatchop. + (line 98) + * –GCC=compiler_name (gnatlink): Switches for gnatlink. + (line 80) + * –GCC=compiler_name (gnatmake): Switches for gnatmake. + (line 18) + * -gnat-p (gcc): Alphabetical List of All Switches. + (line 748) + * -gnat-p (gcc) <1>: Run-Time Checks. (line 60) + * -gnat05 (gcc): Alphabetical List of All Switches. + (line 146) + * -gnat05 (gcc) <1>: Compiling Different Versions of Ada. + (line 49) + * -gnat12 (gcc): Alphabetical List of All Switches. + (line 150) + * -gnat12 (gcc) <1>: Compiling Different Versions of Ada. + (line 58) + * -gnat2005 (gcc): Alphabetical List of All Switches. + (line 154) + * -gnat2005 (gcc) <1>: Compiling Different Versions of Ada. + (line 49) + * -gnat2012 (gcc): Alphabetical List of All Switches. + (line 158) + * -gnat2012 (gcc) <1>: Compiling Different Versions of Ada. + (line 58) + * -gnat2022 (gcc): Alphabetical List of All Switches. + (line 162) + * -gnat2022 (gcc) <1>: Compiling Different Versions of Ada. + (line 67) + * -gnat83 (gcc): Alphabetical List of All Switches. + (line 154) + * -gnat83 (gcc) <1>: Compiling Different Versions of Ada. + (line 11) + * -gnat95 (gcc): Alphabetical List of All Switches. + (line 170) + * -gnat95 (gcc) <1>: Compiling Different Versions of Ada. + (line 35) + * -gnata (gcc): Alphabetical List of All Switches. + (line 182) + * -gnatA (gcc): Alphabetical List of All Switches. + (line 199) + * -gnata (gcc) <1>: Debugging and Assertion Control. + (line 6) + * -gnata switch: Debugging - A Special Case. + (line 45) + * -gnatb (gcc): Alphabetical List of All Switches. + (line 204) + * -gnatB (gcc): Alphabetical List of All Switches. + (line 208) + * -gnatb (gcc) <1>: Output and Error Message Control. + (line 101) + * –GNATBIND=binder_name (gnatmake): Switches for gnatmake. + (line 34) + * -gnatc (gcc): Alphabetical List of All Switches. + (line 213) + * -gnatC (gcc): Alphabetical List of All Switches. + (line 225) + * -gnatc (gcc) <1>: Using gcc for Semantic Checking. + (line 6) + * -gnatd (gcc): Alphabetical List of All Switches. + (line 234) + * -gnatd (gcc) <1>: Debugging Control. (line 6) + * -gnatD (gcc): Debugging Control. (line 142) + * -gnatdc switch: GNAT Abnormal Termination or Failure to Terminate. + (line 33) + * -gnatD[nn] (gcc): Alphabetical List of All Switches. + (line 244) + * -gnatE (gcc): Alphabetical List of All Switches. + (line 554) + * -gnatE (gcc) <1>: Run-Time Checks. (line 129) + * -gnatE (gnat): Elaboration-related Compiler Switches. + (line 9) + * -gnateA (gcc): Alphabetical List of All Switches. + (line 252) + * -gnateb (gcc): Alphabetical List of All Switches. + (line 286) + * -gnatec (gcc): Alphabetical List of All Switches. + (line 293) + * -gnateC (gcc): Alphabetical List of All Switches. + (line 298) + * -gnateD (gcc): Integrated Preprocessing. + (line 162) + * -gnated (gcc): Alphabetical List of All Switches. + (line 304) + * -gnateD (gcc) <1>: Alphabetical List of All Switches. + (line 308) + * -gnateE (gcc): Alphabetical List of All Switches. + (line 313) + * -gnatef (gcc): Alphabetical List of All Switches. + (line 322) + * -gnateF (gcc): Alphabetical List of All Switches. + (line 326) + * -gnateg (gcc): Alphabetical List of All Switches. + (line 332) + * -gnateG (gcc): Alphabetical List of All Switches. + (line 339) + * -gnatei (gcc): Alphabetical List of All Switches. + (line 343) + * -gnateI (gcc): Alphabetical List of All Switches. + (line 350) + * -gnatel (gcc): Alphabetical List of All Switches. + (line 356) + * -gnatel (gcc) <1>: Alphabetical List of All Switches. + (line 367) + * -gnatel (gnat): Elaboration-related Compiler Switches. + (line 15) + * -gnatem (gcc): Alphabetical List of All Switches. + (line 372) + * -gnatem (gcc) <1>: Units to Sources Mapping Files. + (line 6) + * -gnatep (gcc): Integrated Preprocessing. + (line 46) + * -gnatep (gcc) <1>: Alphabetical List of All Switches. + (line 377) + * -gnateP (gcc): Alphabetical List of All Switches. + (line 382) + * -gnateS (gcc): Alphabetical List of All Switches. + (line 392) + * -gnateT (gcc): Alphabetical List of All Switches. + (line 401) + * -gnatet=file (gcc): Alphabetical List of All Switches. + (line 396) + * -gnateu (gcc): Alphabetical List of All Switches. + (line 533) + * -gnateV (gcc): Alphabetical List of All Switches. + (line 541) + * -gnateY (gcc): Alphabetical List of All Switches. + (line 547) + * -gnatf (gcc): Alphabetical List of All Switches. + (line 559) + * -gnatF (gcc): Alphabetical List of All Switches. + (line 564) + * -gnatf (gcc) <1>: Output and Error Message Control. + (line 129) + * -gnatg (gcc): Alphabetical List of All Switches. + (line 568) + * -gnatG (gcc): Debugging Control. (line 15) + * -gnatG[nn] (gcc): Alphabetical List of All Switches. + (line 577) + * -gnath (gcc): Alphabetical List of All Switches. + (line 581) + * -gnatH (gcc): Alphabetical List of All Switches. + (line 585) + * -gnatH (gnat): Elaboration-related Compiler Switches. + (line 54) + * -gnati (gcc): Alphabetical List of All Switches. + (line 592) + * -gnatI (gcc): Alphabetical List of All Switches. + (line 598) + * -gnati (gcc) <1>: Character Set Control. + (line 6) + * -gnatJ (gcc): Alphabetical List of All Switches. + (line 617) + * -gnatJ (gnat): Elaboration-related Compiler Switches. + (line 61) + * -gnatjnn (gcc): Alphabetical List of All Switches. + (line 613) + * -gnatjnn (gcc) <1>: Output and Error Message Control. + (line 159) + * -gnatk (gcc): Alphabetical List of All Switches. + (line 648) + * -gnatk (gcc) <1>: File Naming Control. + (line 6) + * -gnatl (gcc): Alphabetical List of All Switches. + (line 652) + * -gnatL (gcc): Alphabetical List of All Switches. + (line 656) + * -gnatl (gcc) <1>: Output and Error Message Control. + (line 36) + * -gnatL (gcc) <1>: Debugging Control. (line 44) + * -gnatL (gcc) <2>: Debugging Control. (line 163) + * -gnatl=fname (gcc): Output and Error Message Control. + (line 84) + * –GNATLINK=linker_name (gnatmake): Switches for gnatmake. + (line 45) + * -gnatm (gcc): Alphabetical List of All Switches. + (line 662) + * -gnatm (gcc) <1>: Output and Error Message Control. + (line 108) + * -gnatn (gcc): Alphabetical List of All Switches. + (line 673) + * -gnatN (gcc): Alphabetical List of All Switches. + (line 682) + * -gnatn (gcc) <1>: Subprogram Inlining Control. + (line 6) + * -gnatN (gcc) <1>: Subprogram Inlining Control. + (line 35) + * -gnatn switch: Source Dependencies. + (line 27) + * -gnatN switch: Source Dependencies. + (line 34) + * -gnato (gcc): Controlling Run-Time Checks. + (line 11) + * -gnato (gcc) <1>: Default Settings. (line 17) + * -gnato0 (gcc): Alphabetical List of All Switches. + (line 693) + * -gnato? (gcc): Specifying the Desired Mode. + (line 52) + * -gnato?? (gcc): Alphabetical List of All Switches. + (line 700) + * -gnato?? (gcc) <1>: Run-Time Checks. (line 64) + * -gnato?? (gcc) <2>: Specifying the Desired Mode. + (line 52) + * -gnatp (gcc): Alphabetical List of All Switches. + (line 742) + * -gnatp (gcc) <1>: Run-Time Checks. (line 12) + * -gnatp (gcc) <2>: Controlling Run-Time Checks. + (line 11) + * -gnatq (gcc): Alphabetical List of All Switches. + (line 752) + * -gnatQ (gcc): Alphabetical List of All Switches. + (line 756) + * -gnatq (gcc) <1>: Output and Error Message Control. + (line 174) + * -gnatQ (gcc) <1>: Output and Error Message Control. + (line 186) + * -gnatr (gcc): Alphabetical List of All Switches. + (line 762) + * -gnatR (gcc): Alphabetical List of All Switches. + (line 766) + * -gnatr (gcc) <1>: Debugging Control. (line 172) + * -gnatR (gcc) <1>: Debugging Control. (line 182) + * -gnats (gcc): Alphabetical List of All Switches. + (line 773) + * -gnatS (gcc): Alphabetical List of All Switches. + (line 777) + * -gnats (gcc) <1>: Using gcc for Syntax Checking. + (line 6) + * -gnatS (gcc) <1>: Debugging Control. (line 232) + * -gnatT (gcc): Alphabetical List of All Switches. + (line 781) + * -gnatu (gcc): Alphabetical List of All Switches. + (line 785) + * -gnatU (gcc): Alphabetical List of All Switches. + (line 789) + * -gnatU (gcc) <1>: Output and Error Message Control. + (line 94) + * -gnatu (gcc) <1>: Auxiliary Output Control. + (line 6) + * -gnatv (gcc): Alphabetical List of All Switches. + (line 793) + * -gnatV (gcc): Alphabetical List of All Switches. + (line 797) + * -gnatv (gcc) <1>: Output and Error Message Control. + (line 19) + * -gnatVa (gcc): Validity Checking. (line 50) + * -gnatVc (gcc): Validity Checking. (line 57) + * -gnatVd (gcc): Validity Checking. (line 64) + * -gnatVe (gcc): Validity Checking. (line 82) + * -gnatVf (gcc): Validity Checking. (line 96) + * -gnatVi (gcc): Validity Checking. (line 110) + * -gnatVm (gcc): Validity Checking. (line 117) + * -gnatVn (gcc): Validity Checking. (line 129) + * -gnatVo (gcc): Validity Checking. (line 139) + * -gnatVp (gcc): Validity Checking. (line 152) + * -gnatVr (gcc): Validity Checking. (line 166) + * -gnatVs (gcc): Validity Checking. (line 173) + * -gnatVt (gcc): Validity Checking. (line 181) + * -gnatw (gcc): Alphabetical List of All Switches. + (line 801) + * -gnatW (gcc): Alphabetical List of All Switches. + (line 807) + * -gnatW (gcc) <1>: Character Set Control. + (line 51) + * -gnatw.a (gcc): Warning Message Control. + (line 197) + * -gnatw.A (gcc): Warning Message Control. + (line 206) + * -gnatw.b (gcc): Warning Message Control. + (line 249) + * -gnatw.c (gcc): Warning Message Control. + (line 300) + * -gnatw.C (gcc): Warning Message Control. + (line 309) + * -gnatw.d (gcc): Warning Message Control. + (line 351) + * -gnatw.d (gcc) <1>: Warning Message Control. + (line 382) + * -gnatw.e (gcc): Warning Message Control. + (line 402) + * -gnatw.f (gnat): Elaboration-related Compiler Switches. + (line 69) + * -gnatw.g (gcc): Warning Message Control. + (line 456) + * -gnatw.h (gcc): Warning Message Control. + (line 481) + * -gnatw.H (gcc): Warning Message Control. + (line 491) + * -gnatw.i (gcc): Warning Message Control. + (line 518) + * -gnatw.I (gcc): Warning Message Control. + (line 527) + * -gnatw.j (gcc): Warning Message Control. + (line 565) + * -gnatw.J (gcc): Warning Message Control. + (line 572) + * -gnatw.k (gcc): Warning Message Control. + (line 594) + * -gnatw.l (gcc): Warning Message Control. + (line 629) + * -gnatw.L (gcc): Warning Message Control. + (line 638) + * -gnatw.m (gcc): Warning Message Control. + (line 662) + * -gnatw.M (gcc): Warning Message Control. + (line 677) + * -gnatw.n (gcc): Warning Message Control. + (line 694) + * -gnatw.N (gcc): Warning Message Control. + (line 702) + * -gnatw.o (gcc): Warning Message Control. + (line 726) + * -gnatw.O (gcc): Warning Message Control. + (line 740) + * -gnatw.p (gcc): Warning Message Control. + (line 768) + * -gnatw.P (gcc): Warning Message Control. + (line 780) + * -gnatw.q (gcc): Warning Message Control. + (line 825) + * -gnatw.Q (gcc): Warning Message Control. + (line 866) + * -gnatw.r (gcc): Warning Message Control. + (line 910) + * -gnatw.R (gcc): Warning Message Control. + (line 919) + * -gnatw.s (gcc): Warning Message Control. + (line 954) + * -gnatw.S (gcc): Warning Message Control. + (line 965) + * -gnatw.t (gcc): Warning Message Control. + (line 990) + * -gnatw.T (gcc): Warning Message Control. + (line 1008) + * -gnatw.u (gcc): Warning Message Control. + (line 1041) + * -gnatw.U (gcc): Warning Message Control. + (line 1056) + * -gnatw.v (gcc): Warning Message Control. + (line 1084) + * -gnatw.V (gcc): Warning Message Control. + (line 1096) + * -gnatw.w (gcc): Warning Message Control. + (line 1128) + * -gnatw.W (gcc): Warning Message Control. + (line 1141) + * -gnatw.y (gcc): Warning Message Control. + (line 1206) + * -gnatw.Y (gcc): Warning Message Control. + (line 1218) + * -gnatw.z (gcc): Warning Message Control. + (line 1242) + * -gnatw.Z (gcc): Warning Message Control. + (line 1252) + * -gnatwa (gcc): Warning Message Control. + (line 134) + * -gnatwA (gcc): Warning Message Control. + (line 181) + * -gnatwb (gcc): Warning Message Control. + (line 229) + * -gnatwB (gcc): Warning Message Control. + (line 242) + * -gnatwB (gcc) <1>: Warning Message Control. + (line 259) + * -gnatwc (gcc): Warning Message Control. + (line 266) + * -gnatwC (gcc): Warning Message Control. + (line 293) + * -gnatwd (gcc): Warning Message Control. + (line 332) + * -gnatwD (gcc): Warning Message Control. + (line 344) + * -gnatwe (gcc): Warning Message Control. + (line 390) + * -gnatwE (gcc): Warning Message Control. + (line 415) + * -gnatwf (gcc): Warning Message Control. + (line 422) + * -gnatwF (gcc): Warning Message Control. + (line 431) + * -gnatwg (gcc): Warning Message Control. + (line 440) + * -gnatwG (gcc): Warning Message Control. + (line 450) + * -gnatwh (gcc): Warning Message Control. + (line 465) + * -gnatwH (gcc): Warning Message Control. + (line 475) + * -gnatwi (gcc): Warning Message Control. + (line 499) + * -gnatwI (gcc): Warning Message Control. + (line 511) + * -gnatwj (gcc): Warning Message Control. + (line 533) + * -gnatwJ (gcc): Warning Message Control. + (line 559) + * -gnatwk (gcc): Warning Message Control. + (line 579) + * -gnatwK (gcc): Warning Message Control. + (line 587) + * -gnatwK (gcc) <1>: Warning Message Control. + (line 605) + * -gnatwl (gcc): Warning Message Control. + (line 612) + * -gnatwL (gcc): Warning Message Control. + (line 623) + * -gnatwl (gnat): Elaboration-related Compiler Switches. + (line 99) + * -gnatwm (gcc): Warning Message Control. + (line 644) + * -gnatwM (gcc): Warning Message Control. + (line 655) + * -gnatwm (gcc) <1>: Warning Message Control. + (line 1168) + * -gnatwn (gcc): Warning Message Control. + (line 683) + * -gnatwo (gcc): Warning Message Control. + (line 709) + * -gnatwO (gcc): Warning Message Control. + (line 718) + * -gnatwp (gcc): Warning Message Control. + (line 748) + * -gnatwP (gcc): Warning Message Control. + (line 760) + * -gnatwq (gcc): Warning Message Control. + (line 804) + * -gnatwQ (gcc): Warning Message Control. + (line 818) + * -gnatwr (gcc): Warning Message Control. + (line 873) + * -gnatwR (gcc): Warning Message Control. + (line 904) + * -gnatws (gcc): Warning Message Control. + (line 938) + * -gnatwt (gcc): Warning Message Control. + (line 973) + * -gnatwT (gcc): Warning Message Control. + (line 983) + * -gnatwu (gcc): Warning Message Control. + (line 1014) + * -gnatwU (gcc): Warning Message Control. + (line 1033) + * -gnatwv (gcc): Warning Message Control. + (line 1064) + * -gnatwV (gcc): Warning Message Control. + (line 1077) + * -gnatww (gcc): Warning Message Control. + (line 1104) + * -gnatwW (gcc): Warning Message Control. + (line 1114) + * -gnatwx (gcc): Warning Message Control. + (line 1148) + * -gnatwX (gcc): Warning Message Control. + (line 1159) + * -gnatwy (gcc): Warning Message Control. + (line 1186) + * -gnatwY (gcc): Warning Message Control. + (line 1199) + * -gnatwz (gcc): Warning Message Control. + (line 1225) + * -gnatwZ (gcc): Warning Message Control. + (line 1234) + * -gnatw_a: Warning Message Control. + (line 213) + * -gnatw_A: Warning Message Control. + (line 222) + * -gnatw_c (gcc): Warning Message Control. + (line 316) + * -gnatw_C (gcc): Warning Message Control. + (line 324) + * -gnatw_p (gcc): Warning Message Control. + (line 787) + * -gnatw_P (gcc): Warning Message Control. + (line 798) + * -gnatw_r (gcc): Warning Message Control. + (line 925) + * -gnatw_R (gcc): Warning Message Control. + (line 934) + * -gnatx (gcc): Alphabetical List of All Switches. + (line 811) + * -gnatX (gcc): Alphabetical List of All Switches. + (line 815) + * -gnatX (gcc) <1>: Compiling Different Versions of Ada. + (line 72) + * -gnatx (gcc) <1>: Debugging Control. (line 242) + * -gnaty (gcc): Alphabetical List of All Switches. + (line 819) + * -gnaty (gcc) <1>: Style Checking. (line 6) + * -gnaty+ (gcc): Style Checking. (line 459) + * -gnaty- (gcc): Style Checking. (line 447) + * -gnatya (gcc): Style Checking. (line 51) + * -gnatyA (gcc): Style Checking. (line 60) + * -gnatyb (gcc): Style Checking. (line 68) + * -gnatyB (gcc): Style Checking. (line 77) + * -gnatyc (gcc): Style Checking. (line 86) + * -gnatyC (gcc): Style Checking. (line 129) + * -gnatyd (gcc): Style Checking. (line 136) + * -gnatyD (gcc): Style Checking. (line 143) + * -gnatye (gcc): Style Checking. (line 151) + * -gnatyf (gcc): Style Checking. (line 158) + * -gnatyg (gcc): Style Checking. (line 165) + * -gnatyh (gcc): Style Checking. (line 175) + * -gnatyi (gcc): Style Checking. (line 183) + * -gnatyI (gcc): Style Checking. (line 191) + * -gnatyk (gcc): Style Checking. (line 198) + * -gnatyl (gcc): Style Checking. (line 207) + * -gnatyLnnn (gcc): Style Checking. (line 272) + * -gnatym (gcc): Style Checking. (line 280) + * -gnatyMnnn (gcc): Style Checking. (line 293) + * -gnatyn (gcc): Style Checking. (line 303) + * -gnatyN (gcc): Style Checking. (line 311) + * -gnatyo (gcc): Style Checking. (line 317) + * -gnatyO (gcc): Style Checking. (line 327) + * -gnatyp (gcc): Style Checking. (line 339) + * -gnatyr (gcc): Style Checking. (line 348) + * -gnatys (gcc): Style Checking. (line 357) + * -gnatyS (gcc): Style Checking. (line 367) + * -gnatyt (gcc): Style Checking. (line 376) + * -gnatyu (gcc): Style Checking. (line 422) + * -gnatyx (gcc): Style Checking. (line 430) + * -gnatyy (gcc): Style Checking. (line 438) + * -gnaty[0-9] (gcc): Style Checking. (line 25) + * -gnatz (gcc): Alphabetical List of All Switches. + (line 823) + * -h (gnatbind): Switches for gnatbind. + (line 122) + * -H (gnatbind): Switches for gnatbind. + (line 126) + * -h (gnatbind) <1>: Output Control. (line 22) + * -h (gnatclean): Switches for gnatclean. + (line 49) + * -h (gnatdll): Using gnatdll. (line 62) + * -h (gnatls): Switches for gnatls. + (line 27) + * -h (gnatname): Switches for gnatname. + (line 84) + * -H32 (gnatbind): Switches for gnatbind. + (line 131) + * -H64 (gnatbind): Switches for gnatbind. + (line 137) + * –help (dlltool): Using gnatdll. (line 209) + * –help (gnatbind): Switches for gnatbind. + (line 14) + * –help (gnatchop): Switches for gnatchop. + (line 13) + * –help (gnatclean): Switches for gnatclean. + (line 13) + * –help (gnatlink): Switches for gnatlink. + (line 13) + * –help (gnatls): Switches for gnatls. + (line 13) + * –help (gnatmake): Switches for gnatmake. + (line 13) + * –help (gnatname): Switches for gnatname. + (line 15) + * –help (gnatprep): Switches for gnatprep. + (line 11) + * -I (gcc): Alphabetical List of All Switches. + (line 828) + * -I (gnatbind): Switches for gnatbind. + (line 143) + * -I (gnatbind) <1>: Search Paths for gnatbind. + (line 38) + * -I (gnatclean): Switches for gnatclean. + (line 101) + * -I (gnatdll): Using gnatdll. (line 66) + * -I (gnatls): Switches for gnatls. + (line 50) + * -i (gnatmake): Switches for gnatmake. + (line 239) + * -I (gnatmake): Switches for gnatmake. + (line 466) + * -I- (gcc): Alphabetical List of All Switches. + (line 834) + * -I- (gnatbind): Switches for gnatbind. + (line 147) + * -I- (gnatclean): Switches for gnatclean. + (line 105) + * -I- (gnatls): Switches for gnatls. + (line 50) + * -I- (gnatmake): Switches for gnatmake. + (line 470) + * -j (gnatmake): Switches for gnatmake. + (line 258) + * -k (dlltool): Using gnatdll. (line 204) + * -K (gnatbind): Output Control. (line 26) + * -k (gnatchop): Switches for gnatchop. + (line 36) + * -k (gnatdll): Using gnatdll. (line 72) + * -k (gnatmake): Switches for gnatmake. + (line 269) + * -l (gnatbind): Switches for gnatbind. + (line 153) + * -L (gnatbind): Switches for gnatbind. + (line 157) + * -l (gnatbind) <1>: Output Control. (line 32) + * -l (gnatdll): Using gnatdll. (line 81) + * -l (gnatmake): Switches for gnatmake. + (line 281) + * -L (gnatmake): Switches for gnatmake. + (line 476) + * -largs (gnatdll): Using gnatdll. (line 99) + * -largs (gnatmake): Mode Switches for gnatmake. + (line 25) + * –LINK= (gnatlink): Switches for gnatlink. + (line 101) + * -M (gnatbind): Switches for gnatbind. + (line 164) + * -m (gnatbind): Switches for gnatbind. + (line 169) + * -m (gnatbind) <1>: Binder Error Message Control. + (line 22) + * -M (gnatbind) <1>: Binder Error Message Control. + (line 28) + * -M (gnatlink): Switches for gnatlink. + (line 70) + * -m (gnatmake): Switches for gnatmake. + (line 292) + * -M (gnatmake): Switches for gnatmake. + (line 307) + * -M= (gnatlink): Switches for gnatlink. + (line 75) + * -margs (gnatmake): Mode Switches for gnatmake. + (line 31) + * -minimal (gnatbind): Switches for gnatbind. + (line 179) + * -mwindows: CONSOLE and WINDOWS subsystems. + (line 6) + * -n (gnatbind): Switches for gnatbind. + (line 194) + * -n (gnatbind) <1>: Binding with Non-Ada Main Programs. + (line 14) + * -n (gnatbind) <2>: Binding with Non-Ada Main Programs. + (line 45) + * -n (gnatclean): Switches for gnatclean. + (line 53) + * -n (gnatdll): Using gnatdll. (line 87) + * -n (gnatlink): Switches for gnatlink. + (line 35) + * -n (gnatmake): Switches for gnatmake. + (line 323) + * -nostdinc (gcc): Alphabetical List of All Switches. + (line 848) + * -nostdinc (gnatbind): Switches for gnatbind. + (line 198) + * -nostdinc (gnatmake): Switches for gnatmake. + (line 483) + * -nostdlib (gcc): Alphabetical List of All Switches. + (line 853) + * -nostdlib (gnatbind): Switches for gnatbind. + (line 202) + * -nostdlib (gnatmake): Switches for gnatmake. + (line 487) + * -o (gcc): Alphabetical List of All Switches. + (line 841) + * -O (gcc): Alphabetical List of All Switches. + (line 858) + * -O (gcc) <1>: Optimization Levels. + (line 6) + * -o (gnatbind): Switches for gnatbind. + (line 212) + * -O (gnatbind): Switches for gnatbind. + (line 218) + * -O (gnatbind) <1>: Output Control. (line 37) + * -o (gnatbind) <1>: Output Control. (line 47) + * -o (gnatbind) <2>: Binding with Non-Ada Main Programs. + (line 56) + * -o (gnatlink): Switches for gnatlink. + (line 54) + * -o (gnatls): Switches for gnatls. + (line 31) + * -o (gnatmake): Switches for gnatmake. + (line 331) + * –output-exp (dlltool): Using gnatdll. (line 213) + * –output-lib (dlltool): Using gnatdll. (line 219) + * -p (gnatbind): Switches for gnatbind. + (line 222) + * -P (gnatbind): Switches for gnatbind. + (line 226) + * -p (gnatbind) <1>: Elaboration Control. + (line 49) + * -p (gnatchop): Switches for gnatchop. + (line 47) + * -P (gnatclean): Switches for gnatclean. + (line 59) + * -p (gnatmake): Switches for gnatmake. + (line 341) + * -P (gnatmake): Switches for gnatmake. + (line 345) + * -P (gnatname): Switches for gnatname. + (line 89) + * -pass-exit-codes (gcc): Alphabetical List of All Switches. + (line 885) + * -pass-exit-codes (gcc) <1>: Auxiliary Output Control. + (line 12) + * -pg (gcc): Compilation for profiling. + (line 6) + * -pg (gnatlink): Compilation for profiling. + (line 6) + * -q (gnatchop): Switches for gnatchop. + (line 55) + * -q (gnatclean): Switches for gnatclean. + (line 67) + * -q (gnatdll): Using gnatdll. (line 91) + * -q (gnatmake): Switches for gnatmake. + (line 349) + * -R (gnatbind): Switches for gnatbind. + (line 230) + * -r (gnatbind): Output Control. (line 55) + * -r (gnatchop): Switches for gnatchop. + (line 61) + * -r (gnatclean): Switches for gnatclean. + (line 73) + * -r (gnatprep): Switches for gnatprep. + (line 46) + * -Ra (gnatbind): Switches for gnatbind. + (line 235) + * –RTS (gcc): Alphabetical List of All Switches. + (line 890) + * –RTS (gnatbind): Switches for gnatbind. + (line 206) + * –RTS (gnatls): Switches for gnatls. + (line 59) + * –RTS (gnatmake): Switches for gnatmake. + (line 491) + * –RTS option: Specifying a Run-Time Library. + (line 53) + * –RTS=sjlj (gnatmake): Exception Handling Control. + (line 29) + * –RTS=zcx (gnatmake): Exception Handling Control. + (line 40) + * -S (gcc): Alphabetical List of All Switches. + (line 896) + * -s (gnatbind): Switches for gnatbind. + (line 239) + * -S (gnatbind): Switches for gnatbind. + (line 243) + * -s (gnatbind) <1>: Consistency-Checking Modes. + (line 10) + * -s (gnatls): Switches for gnatls. + (line 35) + * -s (gnatmake): Switches for gnatmake. + (line 354) + * -s (gnatprep): Switches for gnatprep. + (line 61) + * -shared (gnatbind): Switches for gnatbind. + (line 299) + * -static (gnatbind): Switches for gnatbind. + (line 295) + * -t (gnatbind): Switches for gnatbind. + (line 303) + * -T (gnatbind): Switches for gnatbind. + (line 307) + * -t (gnatbind) <1>: Binder Error Message Control. + (line 43) + * -T (gnatprep): Switches for gnatprep. + (line 66) + * -T0 option: Choosing the Scheduling Policy. + (line 12) + * -u (gnatbind): Switches for gnatbind. + (line 322) + * -u (gnatls): Switches for gnatls. + (line 39) + * -u (gnatmake): Switches for gnatmake. + (line 365) + * -U (gnatmake): Switches for gnatmake. + (line 372) + * -u (gnatprep): Switches for gnatprep. + (line 72) + * -v (dlltool): Using gnatdll. (line 223) + * -v (gcc): Alphabetical List of All Switches. + (line 909) + * -V (gcc): Alphabetical List of All Switches. + (line 915) + * -v (gnatbind): Switches for gnatbind. + (line 331) + * -V (gnatbind): Switches for gnatbind. + (line 336) + * -v (gnatbind) <1>: Binder Error Message Control. + (line 9) + * -v (gnatchop): Switches for gnatchop. + (line 83) + * -v (gnatclean): Switches for gnatclean. + (line 81) + * -v (gnatdll): Using gnatdll. (line 95) + * -v (gnatlink): Switches for gnatlink. + (line 41) + * -v (gnatls): Switches for gnatls. + (line 65) + * -v (gnatmake): Switches for gnatmake. + (line 380) + * -v (gnatname): Switches for gnatname. + (line 101) + * -v (gnatprep): Switches for gnatprep. + (line 79) + * -v -v (gnatlink): Switches for gnatlink. + (line 48) + * -v -v (gnatname): Switches for gnatname. + (line 109) + * –version (gnatbind): Switches for gnatbind. + (line 9) + * –version (gnatchop): Switches for gnatchop. + (line 8) + * –version (gnatclean): Switches for gnatclean. + (line 8) + * –version (gnatlink): Switches for gnatlink. + (line 8) + * –version (gnatls): Switches for gnatls. + (line 8) + * –version (gnatmake): Switches for gnatmake. + (line 8) + * –version (gnatname): Switches for gnatname. + (line 10) + * –version (gnatprep): Switches for gnatprep. + (line 6) + * -vl (gnatmake): Switches for gnatmake. + (line 385) + * -vm (gnatmake): Switches for gnatmake. + (line 389) + * -vm (gnatmake) <1>: Switches for gnatmake. + (line 394) + * -vP (gnatclean): Switches for gnatclean. + (line 85) + * -w (gcc): Alphabetical List of All Switches. + (line 920) + * -w (gcc) <1>: Warning Message Control. + (line 1290) + * -w (gnatbind): Switches for gnatbind. + (line 342) + * -w (gnatchop): Switches for gnatchop. + (line 89) + * -Wall (gcc): Warning Message Control. + (line 1281) + * -we (gnatbind): Binder Error Message Control. + (line 39) + * -Werror (gcc): Warning Message Control. + (line 1296) + * -ws (gnatbind): Binder Error Message Control. + (line 35) + * -Wstack-usage (gcc): Warning Message Control. + (line 1276) + * -Wuninitialized (gcc): Warning Message Control. + (line 1270) + * -Wunused (gcc): Warning Message Control. + (line 1262) + * -Wx (gnatbind): Switches for gnatbind. + (line 346) + * -Wx (gnatbind) <1>: Consistency-Checking Modes. + (line 18) + * -x (gnatbind): Switches for gnatbind. + (line 351) + * -x (gnatbind) <1>: Consistency-Checking Modes. + (line 28) + * -X (gnatclean): Switches for gnatclean. + (line 90) + * -x (gnatmake): Switches for gnatmake. + (line 403) + * -x (gnatname): Switches for gnatname. + (line 116) + * -xdr (gnatbind): Switches for gnatbind. + (line 355) + * -Xnnn (gnatbind): Switches for gnatbind. + (line 364) + * -y (gnatbind): Switches for gnatbind. + (line 368) + * -z (gnatbind): Switches for gnatbind. + (line 372) + * -z (gnatbind) <1>: Binding Programs with No Main Subprogram. + (line 12) + * -z (gnatmake): Switches for gnatmake. + (line 421) + * __gnat_malloc: Switches for gnatbind. + (line 137) + * Abnormal Termination or Failure to Terminate: Remote Debugging with gdbserver. + (line 46) + * Access before elaboration: Run-Time Checks. (line 6) + * access before elaboration: Run-Time Checks. (line 6) + * activate every optional warning: Warning Message Control. + (line 406) + * ACVC: Compiling Different Versions of Ada. + (line 11) + * Ada: Search Paths for gnatbind. + (line 45) + * Ada 2005 Language Reference Manual: What You Should Know before Reading This Guide. + (line 6) + * Ada 2005 mode: Compiling Different Versions of Ada. + (line 49) + * Ada 2012 mode: Compiling Different Versions of Ada. + (line 58) + * Ada 2022 mode: Compiling Different Versions of Ada. + (line 67) + * Ada 83 mode: Compiling Different Versions of Ada. + (line 11) + * Ada 83 tests: Compiling Different Versions of Ada. + (line 11) + * Ada 95 Language Reference Manual: What You Should Know before Reading This Guide. + (line 6) + * Ada 95 mode: Compiling Different Versions of Ada. + (line 35) + * Ada compatibility issues warnings: Warning Message Control. + (line 1186) + * Ada compatibility issues warnings <1>: Warning Message Control. + (line 1199) + * Ada expressions (in gdb): Using Ada Expressions. + (line 6) + * Ada language extensions: Compiling Different Versions of Ada. + (line 72) + * Ada Library Information files: The Ada Library Information Files. + (line 6) + * Ada.Characters.Latin_1: Latin-1. (line 13) + * adafinal: Binding with Non-Ada Main Programs. + (line 38) + * adainit: Binding with Non-Ada Main Programs. + (line 22) + * ADA_INCLUDE_PATH: Using a library. (line 54) + * ADA_INCLUDE_PATH <1>: Search Paths and the Run-Time Library RTL. + (line 28) + * ADA_INCLUDE_PATH <2>: Search Paths and the Run-Time Library RTL. + (line 28) + * ADA_OBJECTS_PATH: Using a library. (line 58) + * ADA_OBJECTS_PATH <1>: Search Paths for gnatbind. + (line 27) + * ADA_OBJECTS_PATH <2>: Search Paths for gnatbind. + (line 27) + * ADA_PRJ_INCLUDE_FILE: Search Paths and the Run-Time Library RTL. + (line 22) + * ADA_PRJ_INCLUDE_FILE <1>: Search Paths and the Run-Time Library RTL. + (line 23) + * ADA_PRJ_INCLUDE_FILE <2>: Search Paths and the Run-Time Library RTL. + (line 23) + * ADA_PRJ_OBJECTS_FILE: Search Paths for gnatbind. + (line 20) + * ADA_PRJ_OBJECTS_FILE <1>: Search Paths for gnatbind. + (line 21) + * ADA_PRJ_OBJECTS_FILE <2>: Search Paths for gnatbind. + (line 23) + * ADA_PROJECT_PATH: Installing a library. + (line 6) + * Address Clauses: Warning Message Control. + (line 709) + * ALI files: The Ada Library Information Files. + (line 6) + * Aliasing: Optimization and Strict Aliasing. + (line 6) + * Aliasing <1>: Aliased Variables and Optimization. + (line 6) + * alternative: Alternative File Naming Schemes. + (line 6) + * Annex A (in Ada Reference Manual): Naming Conventions for GNAT Source Files. + (line 45) + * Annex B (in Ada reference Manual): Naming Conventions for GNAT Source Files. + (line 48) + * Anonymous allocators: Warning Message Control. + (line 217) + * Anonymous allocators <1>: Warning Message Control. + (line 226) + * APIENTRY: Windows Calling Conventions. + (line 6) + * Asm: Calling Conventions. + (line 48) + * Assert: Debugging and Assertion Control. + (line 8) + * Assert failures: Warning Message Control. + (line 201) + * Assert failures <1>: Warning Message Control. + (line 210) + * Assertions: Debugging and Assertion Control. + (line 8) + * Atomic: Atomic Variables and Optimization. + (line 6) + * Atomic Synchronization: Warning Message Control. + (line 694) + * Atomic Synchronization <1>: Warning Message Control. + (line 706) + * attach to process: Program Built with Foreign Tools and DLL Built with GCC/GNAT. + (line 71) + * Bad fixed values: Warning Message Control. + (line 233) + * Biased representation: Warning Message Control. + (line 253) + * Binder: Binding with Non-Ada Main Programs. + (line 45) + * Binder consistency checks: Binder Error Message Control. + (line 43) + * Binder output (example): Example of Binder Output File. + (line 6) + * Binder output file: Interfacing to C. (line 83) + * Binding generation (for Ada specs): Generating C Headers for Ada Specifications. + (line 6) + * Binding generation (for C and C++ headers): Generating Ada Bindings for C and C++ headers. + (line 6) + * BINUTILS_ROOT: Linking a Mixed C++ & Ada Program. + (line 29) + * bit order warnings: Warning Message Control. + (line 1084) + * Breakpoints and tasks: Ada Tasks. (line 26) + * building: Building DLLs with GNAT Project files. + (line 6) + * building <1>: Building DLLs with GNAT. + (line 6) + * building <2>: Building DLLs with gnatdll. + (line 6) + * building <3>: Building Resources. (line 6) + * Building the GNAT Run-Time Library: Rebuilding the GNAT Run-Time Library. + (line 6) + * C: Calling Conventions. + (line 57) + * C headers (binding generation): Generating Ada Bindings for C and C++ headers. + (line 6) + * C headers (binding generation) <1>: Generating C Headers for Ada Specifications. + (line 6) + * C varargs function: Calling Conventions. + (line 64) + * C++: Calling Conventions. + (line 89) + * C++ headers (binding generation): Generating Ada Bindings for C and C++ headers. + (line 6) + * Calling Conventions: Calling Conventions. + (line 6) + * cannot generate code: Compiling Programs. (line 29) + * Check: Run-Time Checks. (line 64) + * Check <1>: Run-Time Checks. (line 129) + * Checks: Run-Time Checks. (line 6) + * Checks <1>: Run-Time Checks. (line 6) + * Checks <2>: Run-Time Checks. (line 6) + * Checks <3>: Run-Time Checks. (line 14) + * Checks <4>: Run-Time Checks. (line 60) + * Checks <5>: Run-Time Checks. (line 137) + * Checks <6>: Controlling Run-Time Checks. + (line 31) + * Checks (overflow): Example of unused subprogram/data elimination. + (line 56) + * COBOL: Calling Conventions. + (line 52) + * code page 437 (IBM PC): Other 8-Bit Codes. (line 33) + * code page 850 (IBM PC): Other 8-Bit Codes. (line 42) + * Combining GNAT switches: Alphabetical List of All Switches. + (line 927) + * Command Line Argument Expansion: Disabling Command Line Argument Expansion. + (line 6) + * Command line length: Switches for gnatlink. + (line 18) + * Compatibility with Ada 83: Compiling Different Versions of Ada. + (line 11) + * compilation (definition): Source Representation. + (line 43) + * Compilation model: The GNAT Compilation Model. + (line 6) + * Compile_Time_Error: Warning Message Control. + (line 320) + * Compile_Time_Warning: Warning Message Control. + (line 320) + * compiling: Compiling Resources. + (line 6) + * Component clause: Warning Message Control. + (line 304) + * Conditional compilation: Rebuilding the GNAT Run-Time Library. + (line 22) + * Conditional compilation <1>: Conditional Compilation. + (line 9) + * Conditionals: Warning Message Control. + (line 270) + * configuration: Configuration Pragmas. + (line 6) + * Configuration pragmas: Configuration Pragmas. + (line 6) + * Consistency checks: Binder Error Message Control. + (line 43) + * CONSOLE Subsystem: CONSOLE and WINDOWS subsystems. + (line 6) + * constant: Warning Message Control. + (line 270) + * Convention Ada: Calling Conventions. + (line 10) + * Convention Asm: Calling Conventions. + (line 48) + * Convention Assembler: Calling Conventions. + (line 42) + * Convention C: Calling Conventions. + (line 57) + * Convention C++: Calling Conventions. + (line 89) + * Convention COBOL: Calling Conventions. + (line 52) + * Convention Default: Calling Conventions. + (line 81) + * Convention DLL: Calling Conventions. + (line 159) + * Convention External: Calling Conventions. + (line 85) + * Convention Fortran: Calling Conventions. + (line 95) + * Convention Stdcall: Calling Conventions. + (line 151) + * Convention Stubbed: Calling Conventions. + (line 167) + * Convention Win32: Calling Conventions. + (line 163) + * Conventions: Conventions. (line 6) + * CR: Source Representation. + (line 6) + * Cyrillic: Other 8-Bit Codes. (line 23) + * C_INCLUDE_PATH: Linking a Mixed C++ & Ada Program. + (line 28) + * Deactivated code: Warning Message Control. + (line 973) + * Debug: Debugging and Assertion Control. + (line 8) + * Debug Pool: The GNAT Debug Pool Facility. + (line 6) + * Debugger: Running and Debugging Ada Programs. + (line 24) + * Debugging: Running and Debugging Ada Programs. + (line 6) + * Debugging Generic Units: Ada Tasks. (line 57) + * Debugging information: Switches for gnatlink. + (line 27) + * Debugging optimized code: Debugging Optimized Code. + (line 6) + * Debugging options: Debugging Control. (line 6) + * Default: Calling Conventions. + (line 81) + * Definition file: Creating an Import Library. + (line 12) + * Deleted code: Warning Message Control. + (line 973) + * Dependencies: Switches for gnatmake. + (line 307) + * Dependency rules (compilation): Building with gnatmake. + (line 19) + * Dereferencing: Warning Message Control. + (line 348) + * Dimension aspect: Performing Dimensionality Analysis in GNAT. + (line 13) + * Dimension aspect <1>: Performing Dimensionality Analysis in GNAT. + (line 153) + * Dimension Vector (for a dimensioned subtype): Performing Dimensionality Analysis in GNAT. + (line 153) + * Dimensionable type: Performing Dimensionality Analysis in GNAT. + (line 148) + * Dimensionality analysis: Performing Dimensionality Analysis in GNAT. + (line 6) + * Dimensioned subtype: Performing Dimensionality Analysis in GNAT. + (line 148) + * Dimension_System aspect: Performing Dimensionality Analysis in GNAT. + (line 13) + * Dimension_System aspect <1>: Performing Dimensionality Analysis in GNAT. + (line 153) + * Division by zero: Run-Time Checks. (line 6) + * division by zero: Run-Time Checks. (line 6) + * DLL: Calling Conventions. + (line 159) + * DLL <1>: Introduction to Dynamic Link Libraries DLLs. + (line 6) + * DLL debugging: Debugging a DLL. (line 6) + * DLL debugging <1>: Program Built with Foreign Tools and DLL Built with GCC/GNAT. + (line 71) + * DLLs: Building DLLs with GNAT Project files. + (line 6) + * DLLs <1>: Building DLLs with GNAT. + (line 6) + * DLLs <2>: Building DLLs with gnatdll. + (line 6) + * DLLs and elaboration: Ada DLLs and Elaboration. + (line 6) + * DLLs and finalization: Ada DLLs and Finalization. + (line 6) + * Dynamic elaboration model: Controlling the Elaboration Order in GNAT. + (line 10) + * Elaboration: Warning Message Control. + (line 616) + * elaboration: Run-Time Checks. (line 129) + * Elaboration checks: Run-Time Checks. (line 129) + * Elaboration control: Elaboration Order Handling in GNAT. + (line 6) + * Elaboration order control: Comparison between GNAT and C/C++ Compilation Models. + (line 24) + * End of source file; Source file, end: Source Representation. + (line 37) + * environment variable; ADA_INCLUDE_PATH: Using a library. (line 54) + * environment variable; ADA_INCLUDE_PATH <1>: Search Paths and the Run-Time Library RTL. + (line 28) + * environment variable; ADA_OBJECTS_PATH: Using a library. (line 58) + * environment variable; ADA_OBJECTS_PATH <1>: Search Paths for gnatbind. + (line 27) + * environment variable; ADA_PRJ_INCLUDE_FILE: Search Paths and the Run-Time Library RTL. + (line 23) + * environment variable; ADA_PRJ_INCLUDE_FILE <1>: Search Paths and the Run-Time Library RTL. + (line 23) + * environment variable; ADA_PRJ_OBJECTS_FILE: Search Paths for gnatbind. + (line 21) + * environment variable; ADA_PRJ_OBJECTS_FILE <1>: Search Paths for gnatbind. + (line 23) + * environment variable; BINUTILS_ROOT: Linking a Mixed C++ & Ada Program. + (line 29) + * environment variable; C_INCLUDE_PATH: Linking a Mixed C++ & Ada Program. + (line 28) + * environment variable; GCC_EXEC_PREFIX: Linking a Mixed C++ & Ada Program. + (line 29) + * environment variable; GCC_ROOT: Linking a Mixed C++ & Ada Program. + (line 29) + * environment variable; PATH: Search Paths and the Run-Time Library RTL. + (line 30) + * environment variable; PATH <1>: Search Paths for gnatbind. + (line 29) + * environment variable; TMP: Temporary Files. (line 7) + * environment variable; TMP <1>: Temporary Files. (line 9) + * environment variable; TMP <2>: Temporary Files. (line 12) + * Error messages: Output and Error Message Control. + (line 131) + * EUC Coding: Wide_Character Encodings. + (line 42) + * Exceptions (in gdb): Stopping When Ada Exceptions Are Raised. + (line 6) + * Export table: Exporting Ada Entities. + (line 6) + * Export/Import pragma warnings: Warning Message Control. + (line 1148) + * External: Calling Conventions. + (line 85) + * Features: Warning Message Control. + (line 537) + * FF: Source Representation. + (line 6) + * File cleanup tool: The File Cleanup Utility gnatclean. + (line 6) + * File names: Using Other File Names. + (line 6) + * File names <1>: Alternative File Naming Schemes. + (line 6) + * File Naming Conventions: Handling Arbitrary File Naming Conventions with gnatname. + (line 6) + * File naming schemes: Alternative File Naming Schemes. + (line 6) + * Fixed-point Small value: Warning Message Control. + (line 233) + * Floating-Point Operations: Floating Point Operations. + (line 6) + * for gnatmake: Switches for gnatmake. + (line 462) + * for profiling: Compilation for profiling. + (line 6) + * for profiling <1>: Compilation for profiling. + (line 6) + * Foreign Languages: Calling Conventions. + (line 6) + * Formals: Warning Message Control. + (line 426) + * Fortran: Calling Conventions. + (line 95) + * GCC_EXEC_PREFIX: Linking a Mixed C++ & Ada Program. + (line 29) + * GCC_ROOT: Linking a Mixed C++ & Ada Program. + (line 29) + * gdb: Running and Debugging Ada Programs. + (line 24) + * Generic formal parameters: Compiling Different Versions of Ada. + (line 25) + * Generics: Generating Object Files. + (line 32) + * Generics <1>: Ada Tasks. (line 56) + * GNAT: Search Paths for gnatbind. + (line 45) + * GNAT (package): Naming Conventions for GNAT Source Files. + (line 54) + * GNAT compilation model: The GNAT Compilation Model. + (line 6) + * GNAT extensions: Compiling Different Versions of Ada. + (line 72) + * GNAT library: Comparison between GNAT and Conventional Ada Library Models. + (line 10) + * GNAT Run-Time Library: Rebuilding the GNAT Run-Time Library. + (line 6) + * gnat.adc: Using Other File Names. + (line 35) + * gnat.adc <1>: The Configuration Pragmas Files. + (line 6) + * gnat1: Compiling Programs. (line 66) + * gnatbind: Binding with gnatbind. + (line 6) + * gnatchop: Renaming Files with gnatchop. + (line 6) + * gnatclean: The File Cleanup Utility gnatclean. + (line 6) + * gnatdll: Using gnatdll. (line 6) + * gnatkr: File Name Krunching with gnatkr. + (line 6) + * gnatlink: Linking with gnatlink. + (line 6) + * gnatls: The GNAT Library Browser gnatls. + (line 6) + * gnatmake: Building with gnatmake. + (line 6) + * gnatname: Alternative File Naming Schemes. + (line 117) + * gnatprep: Preprocessing. (line 17) + * gnatprep <1>: Preprocessing with gnatprep. + (line 6) + * gnat_argc: Command-Line Access. + (line 13) + * gnat_argv: Command-Line Access. + (line 13) + * GNAT_INIT_SCALARS: Switches for gnatbind. + (line 288) + * GNU make: Using the GNU make Utility. + (line 6) + * GNU/Linux: Choosing the Scheduling Policy. + (line 38) + * gprof: Profiling. (line 9) + * GPR_PROJECT_PATH: Installing a library. + (line 6) + * Hiding of Declarations: Warning Message Control. + (line 469) + * HT: Source Representation. + (line 6) + * implicit: Warning Message Control. + (line 348) + * Implicit dereferencing: Warning Message Control. + (line 348) + * Import library: Creating an Import Library. + (line 6) + * Improving performance: Improving Performance. + (line 6) + * in binder: Binder Error Message Control. + (line 43) + * in binder <1>: Binder Error Message Control. + (line 43) + * including: Switches for gnatlink. + (line 27) + * Inline: Source Dependencies. + (line 27) + * Inline <1>: Inlining of Subprograms. + (line 15) + * Inline Assembler: Inline Assembler. (line 6) + * Inlining: Comparison between GNAT and Conventional Ada Library Models. + (line 35) + * Inlining <1>: Warning Message Control. + (line 748) + * Interfaces: Search Paths for gnatbind. + (line 45) + * Interfacing to Ada: Calling Conventions. + (line 10) + * Interfacing to Assembly: Calling Conventions. + (line 42) + * Interfacing to C: Calling Conventions. + (line 57) + * Interfacing to C varargs function: Calling Conventions. + (line 64) + * Interfacing to C++: Calling Conventions. + (line 89) + * Interfacing to COBOL: Calling Conventions. + (line 52) + * Interfacing to Fortran: Calling Conventions. + (line 95) + * ISO 8859-15: Other 8-Bit Codes. (line 28) + * ISO 8859-2: Other 8-Bit Codes. (line 8) + * ISO 8859-3: Other 8-Bit Codes. (line 13) + * ISO 8859-4: Other 8-Bit Codes. (line 18) + * ISO 8859-5: Other 8-Bit Codes. (line 23) + * Latin-1: Source Representation. + (line 6) + * Latin-1 <1>: Latin-1. (line 6) + * Latin-2: Other 8-Bit Codes. (line 8) + * Latin-3: Other 8-Bit Codes. (line 13) + * Latin-4: Other 8-Bit Codes. (line 18) + * Latin-9: Other 8-Bit Codes. (line 28) + * Layout: Warning Message Control. + (line 825) + * Legacy elaboration models: Controlling the Elaboration Order in GNAT. + (line 74) + * LF: Source Representation. + (line 6) + * Library browser: The GNAT Library Browser gnatls. + (line 6) + * Library building and using: GNAT and Libraries. (line 6) + * Linker libraries: Switches for gnatmake. + (line 476) + * Linux: Choosing the Scheduling Policy. + (line 39) + * Machine_Overflows: Run-Time Checks. (line 109) + * make (GNU): Using the GNU make Utility. + (line 6) + * memory corruption: The GNAT Debug Pool Facility. + (line 6) + * Memory Pool: Some Useful Memory Pools. + (line 6) + * Microsoft Visual Studio: Using GNAT DLLs from Microsoft Visual Studio Applications. + (line 6) + * missing: Warning Message Control. + (line 304) + * Mixed Language Programming: Mixed Language Programming. + (line 6) + * MKS_Type type: Performing Dimensionality Analysis in GNAT. + (line 26) + * multiple input files: Binding with Non-Ada Main Programs. + (line 45) + * Multiple units: Using gcc for Syntax Checking. + (line 37) + * naming scheme: Switches for gnatmake. + (line 205) + * No information messages for why package spec needs body: Warning Message Control. + (line 1218) + * non-symbolic: Stack Traceback. (line 21) + * No_Strict_Aliasing: Optimization and Strict Aliasing. + (line 6) + * obsolescent: Warning Message Control. + (line 537) + * Obsolescent features: Warning Message Control. + (line 537) + * Optimization and debugging: Debugging Optimized Code. + (line 6) + * Optimization Switches: Vectorization of loops. + (line 6) + * Optimization Switches <1>: Other Optimization Switches. + (line 6) + * Order of elaboration: Elaboration Order Handling in GNAT. + (line 6) + * OS X: Mac OS Topics. (line 6) + * Other Ada compilers: Calling Conventions. + (line 10) + * overflow: Run-Time Checks. (line 64) + * overflow <1>: Controlling Run-Time Checks. + (line 31) + * Overflow checks: Run-Time Checks. (line 64) + * Overflow checks <1>: Controlling Run-Time Checks. + (line 31) + * Overflow checks <2>: Example of unused subprogram/data elimination. + (line 57) + * Overflow mode: Run-Time Checks. (line 64) + * Package spec needing body: Warning Message Control. + (line 1206) + * Parallel make: Switches for gnatmake. + (line 258) + * Parameter order: Warning Message Control. + (line 768) + * Parentheses: Warning Message Control. + (line 804) + * Passive Task: Passive Task Optimization. + (line 6) + * PATH: Search Paths and the Run-Time Library RTL. + (line 30) + * PATH <1>: Search Paths for gnatbind. + (line 29) + * pool: Some Useful Memory Pools. + (line 6) + * pool <1>: The GNAT Debug Pool Facility. + (line 6) + * Postcondition: Debugging and Assertion Control. + (line 8) + * pragma Assert: Debugging - A Special Case. + (line 22) + * pragma Assertion_Policy: Debugging - A Special Case. + (line 42) + * pragma Debug: Debugging - A Special Case. + (line 49) + * pragma Debug_Policy: Debugging - A Special Case. + (line 65) + * pragma Elaborate (Unit): Controlling the Elaboration Order in Ada. + (line 96) + * pragma Elaborate_All (Unit): Controlling the Elaboration Order in Ada. + (line 138) + * pragma Elaborate_Body: Controlling the Elaboration Order in Ada. + (line 39) + * pragma Export: The External Symbol Naming Scheme of GNAT. + (line 20) + * pragma Inline: Inlining of Subprograms. + (line 15) + * pragma Overflow_Mode: Specifying the Desired Mode. + (line 6) + * pragma Preelaborate: Controlling the Elaboration Order in Ada. + (line 33) + * pragma Pure: Controlling the Elaboration Order in Ada. + (line 28) + * pragma Restrictions: Debugging Control. (line 172) + * pragma Suppress: Controlling Run-Time Checks. + (line 31) + * pragma Task_Dispatching_Policy: Choosing the Scheduling Policy. + (line 12) + * pragma Time_Slice: Choosing the Scheduling Policy. + (line 12) + * pragma Unsuppress: Controlling Run-Time Checks. + (line 31) + * Pragmas: Configuration Pragmas. + (line 6) + * Pragmas <1>: Warning Message Control. + (line 444) + * Precondition: Debugging and Assertion Control. + (line 8) + * Preprocessing: Preprocessing. (line 6) + * Preprocessing (gnatprep): Preprocessing with gnatprep. + (line 6) + * Preprocessors (contrasted with conditional compilation): Use of Boolean Constants. + (line 23) + * producing list: Switches for gnatmake. + (line 307) + * Profiling: Pretty-Printers for the GNAT runtime. + (line 80) + * Profiling <1>: Profiling. (line 9) + * rc: Compiling Resources. + (line 6) + * rebuilding: Rebuilding the GNAT Run-Time Library. + (line 6) + * rebuilding <1>: Rebuilding the GNAT Run-Time Library. + (line 6) + * Rebuilding the GNAT Run-Time Library: Rebuilding the GNAT Run-Time Library. + (line 6) + * Recompilation (by gnatmake): Notes on the Command Line. + (line 9) + * Record Representation (component sizes): Warning Message Control. + (line 954) + * Record Representation (gaps): Warning Message Control. + (line 485) + * Relaxed elaboration mode: Controlling the Elaboration Order in GNAT. + (line 87) + * Remote Debugging with gdbserver: Debugging Generic Units. + (line 47) + * Resources: GNAT and Windows Resources. + (line 6) + * Resources <1>: Building Resources. (line 6) + * Resources <2>: Compiling Resources. + (line 6) + * Resources <3>: Using Resources. (line 6) + * RTL: Alphabetical List of All Switches. + (line 830) + * RTL <1>: Alphabetical List of All Switches. + (line 836) + * Run-time libraries (platform-specific information): Run-Time Libraries. + (line 6) + * Run-Time Library: Rebuilding the GNAT Run-Time Library. + (line 6) + * s-digemk.ads file: Performing Dimensionality Analysis in GNAT. + (line 34) + * SCHED_FIFO scheduling policy: Specifying a Run-Time Library. + (line 54) + * SCHED_OTHER scheduling policy: Specifying a Run-Time Library. + (line 56) + * SCHED_RR scheduling policy: Specifying a Run-Time Library. + (line 56) + * Search paths: Switches for gnatmake. + (line 462) + * setjmp/longjmp Exception Model: Run-Time Libraries. (line 16) + * Shift JIS Coding: Wide_Character Encodings. + (line 33) + * Size/Alignment warnings: Warning Message Control. + (line 1242) + * Size/Alignment warnings <1>: Warning Message Control. + (line 1252) + * SJLJ (setjmp/longjmp Exception Model): Run-Time Libraries. (line 16) + * Small value: Warning Message Control. + (line 233) + * Source files: Switches for gnatmake. + (line 470) + * Source files <1>: Running gnatbind. (line 29) + * Source files <2>: Switches for gnatclean. + (line 105) + * Source_File_Name pragma: Using Other File Names. + (line 12) + * Source_File_Name pragma <1>: Alternative File Naming Schemes. + (line 12) + * Source_Reference pragmas: Switches for gnatchop. + (line 61) + * SPARK elaboration model: Controlling the Elaboration Order in GNAT. + (line 64) + * spec (definition): Source Representation. + (line 43) + * stack overflow checking: Run-Time Checks. (line 6) + * Stack Overflow Checking: Run-Time Checks. (line 137) + * stack overflow checking <1>: Run-Time Checks. (line 137) + * Stack Overflow Checking <1>: Stack Overflow Checking. + (line 6) + * stack traceback: Getting Internal Debugging Information. + (line 22) + * stack unwinding: Getting Internal Debugging Information. + (line 21) + * Stand-alone libraries: Stand-alone Ada Libraries. + (line 6) + * Static elaboration model: Controlling the Elaboration Order in GNAT. + (line 38) + * Static Stack Usage Analysis: Static Stack Usage Analysis. + (line 6) + * Stdcall: Calling Conventions. + (line 151) + * Stdcall <1>: Windows Calling Conventions. + (line 6) + * stderr: Output and Error Message Control. + (line 6) + * storage: Some Useful Memory Pools. + (line 6) + * storage <1>: The GNAT Debug Pool Facility. + (line 6) + * Strict Aliasing: Optimization and Strict Aliasing. + (line 6) + * String indexing warnings: Warning Message Control. + (line 1104) + * Stubbed: Calling Conventions. + (line 167) + * Style checking: Style Checking. (line 6) + * SUB (control character): Source Representation. + (line 37) + * Subtype predicates: Debugging and Assertion Control. + (line 8) + * Subunits: Generating Object Files. + (line 24) + * Subunits (and conditional compilation): Use of Alternative Implementations. + (line 21) + * Suppress: Run-Time Checks. (line 60) + * Suppress <1>: Controlling Run-Time Checks. + (line 31) + * suppressing: Output and Error Message Control. + (line 131) + * suppressing <1>: Run-Time Checks. (line 14) + * suppressing <2>: Run-Time Checks. (line 60) + * Suppressing checks: Run-Time Checks. (line 14) + * Suppressing checks <1>: Run-Time Checks. (line 60) + * suppressing search: Switches for gnatmake. + (line 470) + * suppressing search <1>: Switches for gnatclean. + (line 105) + * symbolic: Non-Symbolic Traceback. + (line 224) + * symbolic links: Switches for gnatmake. + (line 199) + * syntax checking: Using gcc for Syntax Checking. + (line 37) + * System: Search Paths for gnatbind. + (line 45) + * System (package in Ada Reference Manual): Naming Conventions for GNAT Source Files. + (line 51) + * System.Dim.Mks package (GNAT library): Performing Dimensionality Analysis in GNAT. + (line 26) + * System.IO: Search Paths and the Run-Time Library RTL. + (line 53) + * Task switching (in gdb): Ada Tasks. (line 46) + * Tasking and threads libraries: Run-Time Libraries. (line 6) + * Tasks (in gdb): Stopping When Ada Exceptions Are Raised. + (line 35) + * Temporary files: Temporary Files. (line 6) + * Text_IO and performance: Text_IO Suggestions. + (line 6) + * Threads libraries and tasking: Run-Time Libraries. (line 6) + * Time stamp checks: Binder Error Message Control. + (line 43) + * TMP: Temporary Files. (line 7) + * TMP <1>: Temporary Files. (line 9) + * TMP <2>: Temporary Files. (line 12) + * traceback: Getting Internal Debugging Information. + (line 22) + * traceback <1>: Stack Traceback. (line 21) + * traceback <2>: Non-Symbolic Traceback. + (line 225) + * treat as error: Warning Message Control. + (line 390) + * treat as error <1>: Warning Message Control. + (line 415) + * Type invariants: Debugging and Assertion Control. + (line 8) + * typographical: Conventions. (line 6) + * Typographical conventions: Conventions. (line 6) + * Unassigned variable warnings: Warning Message Control. + (line 1064) + * Unchecked_Conversion warnings: Warning Message Control. + (line 1225) + * unrecognized: Warning Message Control. + (line 444) + * unreferenced: Warning Message Control. + (line 426) + * Unsuppress: Run-Time Checks. (line 142) + * Unsuppress <1>: Controlling Run-Time Checks. + (line 31) + * Upper-Half Coding: Wide_Character Encodings. + (line 24) + * use by binder: Running gnatbind. (line 29) + * use with GNAT DLLs: Using GNAT DLLs from Microsoft Visual Studio Applications. + (line 6) + * using: Using Resources. (line 6) + * Uunused subprogram/data elimination: Reducing Size of Executables with Unused Subprogram/Data Elimination. + (line 6) + * Validity Checking: Validity Checking. (line 6) + * varargs function interfaces: Calling Conventions. + (line 64) + * Version skew (avoided by ‘‘gnatmake‘‘): Running a Simple Ada Program. + (line 58) + * Volatile parameter: The Volatile Parameter. + (line 6) + * VT: Source Representation. + (line 6) + * Warning messages: Warning Message Control. + (line 6) + * Warnings: Warning Message Control. + (line 390) + * Warnings <1>: Warning Message Control. + (line 406) + * Warnings <2>: Warning Message Control. + (line 415) + * warnings: Warning Message Control. + (line 616) + * warnings <1>: Warning Message Control. + (line 694) + * warnings <2>: Warning Message Control. + (line 706) + * warnings <3>: Warning Message Control. + (line 709) + * warnings <4>: Warning Message Control. + (line 748) + * warnings <5>: Warning Message Control. + (line 768) + * warnings <6>: Warning Message Control. + (line 804) + * warnings <7>: Warning Message Control. + (line 825) + * warnings <8>: Warning Message Control. + (line 973) + * warnings <9>: Warning Message Control. + (line 973) + * Warnings <3>: Binder Error Message Control. + (line 35) + * Warnings Off control: Warning Message Control. + (line 1128) + * Win32: Calling Conventions. + (line 163) + * Windows: A GNU/Linux Debug Quirk. + (line 18) + * windows: GNAT and Windows Resources. + (line 6) + * WINDOWS Subsystem: CONSOLE and WINDOWS subsystems. + (line 6) + * windres: Compiling Resources. + (line 6) + * ZCX (Zero-Cost Exceptions): Run-Time Libraries. (line 13) + * Zero Cost Exceptions: Exception Handling Control. + (line 40) + * Zero-Cost Exceptions: Run-Time Libraries. (line 13) + + + + +  + Tag Table: + Node: Top350 + Ref: gnat_ugn doc634 + Ref: 0634 + Node: About This Guide12140 + Ref: gnat_ugn/about_this_guide doc12244 + Ref: 212244 + Ref: gnat_ugn/about_this_guide about-this-guide12244 + Ref: 312244 + Ref: gnat_ugn/about_this_guide gnat-user-s-guide-for-native-platforms12244 + Ref: 412244 + Ref: gnat_ugn/about_this_guide id112244 + Ref: 512244 + Node: What This Guide Contains13069 + Ref: gnat_ugn/about_this_guide what-this-guide-contains13203 + Ref: 713203 + Node: What You Should Know before Reading This Guide14639 + Ref: gnat_ugn/about_this_guide what-you-should-know-before-reading-this-guide14801 + Ref: 1114801 + Node: Related Information15153 + Ref: gnat_ugn/about_this_guide related-information15302 + Ref: 1215302 + Node: Conventions16188 + Ref: gnat_ugn/about_this_guide conventions16282 + Ref: 1316282 + Node: Getting Started with GNAT17102 + Ref: gnat_ugn/getting_started_with_gnat doc17229 + Ref: 1417229 + Ref: gnat_ugn/getting_started_with_gnat getting-started-with-gnat17229 + Ref: 817229 + Ref: gnat_ugn/getting_started_with_gnat id117229 + Ref: 1517229 + Node: System Requirements17875 + Ref: gnat_ugn/getting_started_with_gnat id217979 + Ref: 1617979 + Ref: gnat_ugn/getting_started_with_gnat system-requirements17979 + Ref: 1717979 + Node: Running GNAT19426 + Ref: gnat_ugn/getting_started_with_gnat id319567 + Ref: 1819567 + Ref: gnat_ugn/getting_started_with_gnat running-gnat19567 + Ref: 1919567 + Node: Running a Simple Ada Program20065 + Ref: gnat_ugn/getting_started_with_gnat id420224 + Ref: 1a20224 + Ref: gnat_ugn/getting_started_with_gnat running-a-simple-ada-program20224 + Ref: 1b20224 + Node: Running a Program with Multiple Units23201 + Ref: gnat_ugn/getting_started_with_gnat id523339 + Ref: 1e23339 + Ref: gnat_ugn/getting_started_with_gnat running-a-program-with-multiple-units23339 + Ref: 1f23339 + Node: The GNAT Compilation Model24936 + Ref: gnat_ugn/the_gnat_compilation_model doc25085 + Ref: 2025085 + Ref: gnat_ugn/the_gnat_compilation_model id125085 + Ref: 2125085 + Ref: gnat_ugn/the_gnat_compilation_model the-gnat-compilation-model25085 + Ref: 925085 + Node: Source Representation26503 + Ref: gnat_ugn/the_gnat_compilation_model id226629 + Ref: 2f26629 + Ref: gnat_ugn/the_gnat_compilation_model source-representation26629 + Ref: 2226629 + Node: Foreign Language Representation29085 + Ref: gnat_ugn/the_gnat_compilation_model foreign-language-representation29252 + Ref: 2329252 + Ref: gnat_ugn/the_gnat_compilation_model id329252 + Ref: 3029252 + Node: Latin-129625 + Ref: gnat_ugn/the_gnat_compilation_model id429728 + Ref: 3229728 + Ref: gnat_ugn/the_gnat_compilation_model latin-129728 + Ref: 3329728 + Node: Other 8-Bit Codes30516 + Ref: gnat_ugn/the_gnat_compilation_model id530652 + Ref: 3430652 + Ref: gnat_ugn/the_gnat_compilation_model other-8-bit-codes30652 + Ref: 3530652 + Node: Wide_Character Encodings32839 + Ref: gnat_ugn/the_gnat_compilation_model id632997 + Ref: 3632997 + Ref: gnat_ugn/the_gnat_compilation_model wide-character-encodings32997 + Ref: 3732997 + Node: Wide_Wide_Character Encodings36813 + Ref: gnat_ugn/the_gnat_compilation_model id736945 + Ref: 3836945 + Ref: gnat_ugn/the_gnat_compilation_model wide-wide-character-encodings36945 + Ref: 3936945 + Node: File Naming Topics and Utilities38665 + Ref: gnat_ugn/the_gnat_compilation_model file-naming-topics-and-utilities38832 + Ref: 2438832 + Ref: gnat_ugn/the_gnat_compilation_model id838832 + Ref: 3a38832 + Node: File Naming Rules39341 + Ref: gnat_ugn/the_gnat_compilation_model file-naming-rules39460 + Ref: 3b39460 + Ref: gnat_ugn/the_gnat_compilation_model id939460 + Ref: 3c39460 + Node: Using Other File Names42991 + Ref: gnat_ugn/the_gnat_compilation_model id1043150 + Ref: 3e43150 + Ref: gnat_ugn/the_gnat_compilation_model using-other-file-names43150 + Ref: 1c43150 + Node: Alternative File Naming Schemes45398 + Ref: gnat_ugn/the_gnat_compilation_model alternative-file-naming-schemes45596 + Ref: 4045596 + Ref: gnat_ugn/the_gnat_compilation_model id1145596 + Ref: 4145596 + Node: Handling Arbitrary File Naming Conventions with gnatname50738 + Ref: gnat_ugn/the_gnat_compilation_model handling-arbitrary-file-naming-conventions-with-gnatname50945 + Ref: 4250945 + Ref: gnat_ugn/the_gnat_compilation_model id1250945 + Ref: 4350945 + Node: Arbitrary File Naming Conventions51206 + Ref: gnat_ugn/the_gnat_compilation_model arbitrary-file-naming-conventions51359 + Ref: 4451359 + Ref: gnat_ugn/the_gnat_compilation_model id1351359 + Ref: 4551359 + Node: Running gnatname52499 + Ref: gnat_ugn/the_gnat_compilation_model id1452682 + Ref: 4652682 + Ref: gnat_ugn/the_gnat_compilation_model running-gnatname52682 + Ref: 4752682 + Node: Switches for gnatname54548 + Ref: gnat_ugn/the_gnat_compilation_model id1554724 + Ref: 4854724 + Ref: gnat_ugn/the_gnat_compilation_model switches-for-gnatname54724 + Ref: 4954724 + Node: Examples of gnatname Usage59522 + Ref: gnat_ugn/the_gnat_compilation_model examples-of-gnatname-usage59673 + Ref: 4a59673 + Ref: gnat_ugn/the_gnat_compilation_model id1659673 + Ref: 4b59673 + Node: File Name Krunching with gnatkr60368 + Ref: gnat_ugn/the_gnat_compilation_model file-name-krunching-with-gnatkr60572 + Ref: 4c60572 + Ref: gnat_ugn/the_gnat_compilation_model id1760572 + Ref: 4d60572 + Node: About gnatkr61033 + Ref: gnat_ugn/the_gnat_compilation_model about-gnatkr61136 + Ref: 4e61136 + Ref: gnat_ugn/the_gnat_compilation_model id1861136 + Ref: 4f61136 + Node: Using gnatkr62117 + Ref: gnat_ugn/the_gnat_compilation_model id1962245 + Ref: 5062245 + Ref: gnat_ugn/the_gnat_compilation_model using-gnatkr62245 + Ref: 3d62245 + Node: Krunching Method63769 + Ref: gnat_ugn/the_gnat_compilation_model id2063909 + Ref: 5163909 + Ref: gnat_ugn/the_gnat_compilation_model krunching-method63909 + Ref: 5263909 + Node: Examples of gnatkr Usage67397 + Ref: gnat_ugn/the_gnat_compilation_model examples-of-gnatkr-usage67516 + Ref: 5367516 + Ref: gnat_ugn/the_gnat_compilation_model id2167516 + Ref: 5467516 + Node: Renaming Files with gnatchop67963 + Ref: gnat_ugn/the_gnat_compilation_model id2268102 + Ref: 5568102 + Ref: gnat_ugn/the_gnat_compilation_model renaming-files-with-gnatchop68102 + Ref: 1d68102 + Node: Handling Files with Multiple Units68567 + Ref: gnat_ugn/the_gnat_compilation_model handling-files-with-multiple-units68715 + Ref: 5668715 + Ref: gnat_ugn/the_gnat_compilation_model id2368715 + Ref: 5768715 + Node: Operating gnatchop in Compilation Mode69951 + Ref: gnat_ugn/the_gnat_compilation_model id2470133 + Ref: 5870133 + Ref: gnat_ugn/the_gnat_compilation_model operating-gnatchop-in-compilation-mode70133 + Ref: 5970133 + Node: Command Line for gnatchop73281 + Ref: gnat_ugn/the_gnat_compilation_model command-line-for-gnatchop73450 + Ref: 5a73450 + Ref: gnat_ugn/the_gnat_compilation_model id2573450 + Ref: 5b73450 + Node: Switches for gnatchop75271 + Ref: gnat_ugn/the_gnat_compilation_model id2675428 + Ref: 5c75428 + Ref: gnat_ugn/the_gnat_compilation_model switches-for-gnatchop75428 + Ref: 5d75428 + Node: Examples of gnatchop Usage79447 + Ref: gnat_ugn/the_gnat_compilation_model examples-of-gnatchop-usage79570 + Ref: 5e79570 + Ref: gnat_ugn/the_gnat_compilation_model id2779570 + Ref: 5f79570 + Node: Configuration Pragmas80810 + Ref: gnat_ugn/the_gnat_compilation_model configuration-pragmas80969 + Ref: 2580969 + Ref: gnat_ugn/the_gnat_compilation_model id2880969 + Ref: 6080969 + Node: Handling of Configuration Pragmas83165 + Ref: gnat_ugn/the_gnat_compilation_model handling-of-configuration-pragmas83298 + Ref: 3f83298 + Ref: gnat_ugn/the_gnat_compilation_model id2983298 + Ref: 6183298 + Node: The Configuration Pragmas Files85263 + Ref: gnat_ugn/the_gnat_compilation_model id3085396 + Ref: 6285396 + Ref: gnat_ugn/the_gnat_compilation_model the-configuration-pragmas-files85396 + Ref: 6385396 + Node: Generating Object Files87592 + Ref: gnat_ugn/the_gnat_compilation_model generating-object-files87738 + Ref: 2687738 + Ref: gnat_ugn/the_gnat_compilation_model id3187738 + Ref: 6487738 + Node: Source Dependencies90312 + Ref: gnat_ugn/the_gnat_compilation_model id3290470 + Ref: 6590470 + Ref: gnat_ugn/the_gnat_compilation_model source-dependencies90470 + Ref: 2790470 + Node: The Ada Library Information Files94150 + Ref: gnat_ugn/the_gnat_compilation_model id3394307 + Ref: 6694307 + Ref: gnat_ugn/the_gnat_compilation_model the-ada-library-information-files94307 + Ref: 2894307 + Node: Binding an Ada Program96358 + Ref: gnat_ugn/the_gnat_compilation_model binding-an-ada-program96514 + Ref: 2996514 + Ref: gnat_ugn/the_gnat_compilation_model id3496514 + Ref: 6796514 + Node: GNAT and Libraries98216 + Ref: gnat_ugn/the_gnat_compilation_model gnat-and-libraries98362 + Ref: 2a98362 + Ref: gnat_ugn/the_gnat_compilation_model id3598362 + Ref: 6898362 + Node: Introduction to Libraries in GNAT98840 + Ref: gnat_ugn/the_gnat_compilation_model id3698960 + Ref: 6998960 + Ref: gnat_ugn/the_gnat_compilation_model introduction-to-libraries-in-gnat98960 + Ref: 6a98960 + Node: General Ada Libraries101093 + Ref: gnat_ugn/the_gnat_compilation_model general-ada-libraries101247 + Ref: 6c101247 + Ref: gnat_ugn/the_gnat_compilation_model id37101247 + Ref: 6d101247 + Node: Building a library101382 + Ref: gnat_ugn/the_gnat_compilation_model building-a-library101489 + Ref: 6e101489 + Ref: gnat_ugn/the_gnat_compilation_model id38101489 + Ref: 6f101489 + Node: Installing a library105357 + Ref: gnat_ugn/the_gnat_compilation_model id39105488 + Ref: 71105488 + Ref: gnat_ugn/the_gnat_compilation_model installing-a-library105488 + Ref: 72105488 + Node: Using a library107999 + Ref: gnat_ugn/the_gnat_compilation_model id40108103 + Ref: 74108103 + Ref: gnat_ugn/the_gnat_compilation_model using-a-library108103 + Ref: 75108103 + Node: Stand-alone Ada Libraries110673 + Ref: gnat_ugn/the_gnat_compilation_model id41110830 + Ref: 77110830 + Ref: gnat_ugn/the_gnat_compilation_model stand-alone-ada-libraries110830 + Ref: 6b110830 + Node: Introduction to Stand-alone Libraries111091 + Ref: gnat_ugn/the_gnat_compilation_model id42111231 + Ref: 78111231 + Ref: gnat_ugn/the_gnat_compilation_model introduction-to-stand-alone-libraries111231 + Ref: 79111231 + Node: Building a Stand-alone Library112853 + Ref: gnat_ugn/the_gnat_compilation_model building-a-stand-alone-library113064 + Ref: 7a113064 + Ref: gnat_ugn/the_gnat_compilation_model id43113064 + Ref: 7b113064 + Node: Creating a Stand-alone Library to be used in a non-Ada context117898 + Ref: gnat_ugn/the_gnat_compilation_model creating-a-stand-alone-library-to-be-used-in-a-non-ada-context118109 + Ref: 7c118109 + Ref: gnat_ugn/the_gnat_compilation_model id44118109 + Ref: 7d118109 + Node: Restrictions in Stand-alone Libraries120890 + Ref: gnat_ugn/the_gnat_compilation_model id45121062 + Ref: 7e121062 + Ref: gnat_ugn/the_gnat_compilation_model restrictions-in-stand-alone-libraries121062 + Ref: 7f121062 + Node: Rebuilding the GNAT Run-Time Library122385 + Ref: gnat_ugn/the_gnat_compilation_model id46122512 + Ref: 80122512 + Ref: gnat_ugn/the_gnat_compilation_model rebuilding-the-gnat-run-time-library122512 + Ref: 81122512 + Node: Conditional Compilation123354 + Ref: gnat_ugn/the_gnat_compilation_model conditional-compilation123504 + Ref: 2b123504 + Ref: gnat_ugn/the_gnat_compilation_model id47123504 + Ref: 82123504 + Node: Modeling Conditional Compilation in Ada123810 + Ref: gnat_ugn/the_gnat_compilation_model id48123947 + Ref: 83123947 + Ref: gnat_ugn/the_gnat_compilation_model modeling-conditional-compilation-in-ada123947 + Ref: 84123947 + Node: Use of Boolean Constants125507 + Ref: gnat_ugn/the_gnat_compilation_model id49125644 + Ref: 85125644 + Ref: gnat_ugn/the_gnat_compilation_model use-of-boolean-constants125644 + Ref: 86125644 + Node: Debugging - A Special Case126953 + Ref: gnat_ugn/the_gnat_compilation_model debugging-a-special-case127128 + Ref: 87127128 + Ref: gnat_ugn/the_gnat_compilation_model id50127128 + Ref: 88127128 + Node: Conditionalizing Declarations130635 + Ref: gnat_ugn/the_gnat_compilation_model conditionalizing-declarations130820 + Ref: 89130820 + Ref: gnat_ugn/the_gnat_compilation_model id51130820 + Ref: 8a130820 + Node: Use of Alternative Implementations132548 + Ref: gnat_ugn/the_gnat_compilation_model id52132720 + Ref: 8b132720 + Ref: gnat_ugn/the_gnat_compilation_model use-of-alternative-implementations132720 + Ref: 8c132720 + Node: Preprocessing136916 + Ref: gnat_ugn/the_gnat_compilation_model id53137050 + Ref: 8d137050 + Ref: gnat_ugn/the_gnat_compilation_model preprocessing137050 + Ref: 8e137050 + Node: Preprocessing with gnatprep138732 + Ref: gnat_ugn/the_gnat_compilation_model id54138902 + Ref: 91138902 + Ref: gnat_ugn/the_gnat_compilation_model preprocessing-with-gnatprep138902 + Ref: 8f138902 + Node: Preprocessing Symbols139421 + Ref: gnat_ugn/the_gnat_compilation_model id55139531 + Ref: 92139531 + Ref: gnat_ugn/the_gnat_compilation_model preprocessing-symbols139531 + Ref: 93139531 + Node: Using gnatprep139897 + Ref: gnat_ugn/the_gnat_compilation_model id56140037 + Ref: 94140037 + Ref: gnat_ugn/the_gnat_compilation_model using-gnatprep140037 + Ref: 95140037 + Node: Switches for gnatprep140935 + Ref: gnat_ugn/the_gnat_compilation_model id57141078 + Ref: 96141078 + Ref: gnat_ugn/the_gnat_compilation_model switches-for-gnatprep141078 + Ref: 97141078 + Node: Form of Definitions File144193 + Ref: gnat_ugn/the_gnat_compilation_model form-of-definitions-file144353 + Ref: 98144353 + Ref: gnat_ugn/the_gnat_compilation_model id58144353 + Ref: 99144353 + Node: Form of Input Text for gnatprep144915 + Ref: gnat_ugn/the_gnat_compilation_model form-of-input-text-for-gnatprep145045 + Ref: 9a145045 + Ref: gnat_ugn/the_gnat_compilation_model id59145045 + Ref: 9b145045 + Node: Integrated Preprocessing149608 + Ref: gnat_ugn/the_gnat_compilation_model id60149730 + Ref: 9c149730 + Ref: gnat_ugn/the_gnat_compilation_model integrated-preprocessing149730 + Ref: 90149730 + Node: Mixed Language Programming158102 + Ref: gnat_ugn/the_gnat_compilation_model id61158267 + Ref: 9d158267 + Ref: gnat_ugn/the_gnat_compilation_model mixed-language-programming158267 + Ref: 2c158267 + Node: Interfacing to C158635 + Ref: gnat_ugn/the_gnat_compilation_model id62158744 + Ref: 9e158744 + Ref: gnat_ugn/the_gnat_compilation_model interfacing-to-c158744 + Ref: 9f158744 + Node: Calling Conventions163954 + Ref: gnat_ugn/the_gnat_compilation_model calling-conventions164107 + Ref: a1164107 + Ref: gnat_ugn/the_gnat_compilation_model id63164107 + Ref: a2164107 + Node: Building Mixed Ada and C++ Programs171929 + Ref: gnat_ugn/the_gnat_compilation_model building-mixed-ada-and-c-programs172111 + Ref: a3172111 + Ref: gnat_ugn/the_gnat_compilation_model id64172111 + Ref: a4172111 + Node: Interfacing to C++172590 + Ref: gnat_ugn/the_gnat_compilation_model id65172724 + Ref: a5172724 + Ref: gnat_ugn/the_gnat_compilation_model id66172724 + Ref: a6172724 + Node: Linking a Mixed C++ & Ada Program173832 + Ref: gnat_ugn/the_gnat_compilation_model linking-a-mixed-c-ada-program173991 + Ref: a8173991 + Ref: gnat_ugn/the_gnat_compilation_model linking-a-mixed-c-and-ada-program173991 + Ref: a9173991 + Node: A Simple Example178029 + Ref: gnat_ugn/the_gnat_compilation_model a-simple-example178203 + Ref: aa178203 + Ref: gnat_ugn/the_gnat_compilation_model id67178203 + Ref: ab178203 + Node: Interfacing with C++ constructors180922 + Ref: gnat_ugn/the_gnat_compilation_model id68181102 + Ref: ac181102 + Ref: gnat_ugn/the_gnat_compilation_model interfacing-with-c-constructors181102 + Ref: ad181102 + Node: Interfacing with C++ at the Class Level187841 + Ref: gnat_ugn/the_gnat_compilation_model id69187996 + Ref: af187996 + Ref: gnat_ugn/the_gnat_compilation_model interfacing-with-c-at-the-class-level187996 + Ref: ae187996 + Node: Generating Ada Bindings for C and C++ headers196693 + Ref: gnat_ugn/the_gnat_compilation_model generating-ada-bindings-for-c-and-c-headers196899 + Ref: a7196899 + Ref: gnat_ugn/the_gnat_compilation_model id70196899 + Ref: b0196899 + Node: Running the Binding Generator198186 + Ref: gnat_ugn/the_gnat_compilation_model id71198343 + Ref: b1198343 + Ref: gnat_ugn/the_gnat_compilation_model running-the-binding-generator198343 + Ref: b2198343 + Node: Generating Bindings for C++ Headers200924 + Ref: gnat_ugn/the_gnat_compilation_model generating-bindings-for-c-headers201098 + Ref: b3201098 + Ref: gnat_ugn/the_gnat_compilation_model id72201098 + Ref: b4201098 + Node: Switches204019 + Ref: gnat_ugn/the_gnat_compilation_model switches204155 + Ref: b5204155 + Ref: gnat_ugn/the_gnat_compilation_model switches-for-ada-binding-generation204155 + Ref: b6204155 + Node: Generating C Headers for Ada Specifications204726 + Ref: gnat_ugn/the_gnat_compilation_model generating-c-headers-for-ada-specifications204888 + Ref: b7204888 + Ref: gnat_ugn/the_gnat_compilation_model id73204888 + Ref: b8204888 + Node: Running the C Header Generator205391 + Ref: gnat_ugn/the_gnat_compilation_model running-the-c-header-generator205503 + Ref: b9205503 + Node: GNAT and Other Compilation Models207283 + Ref: gnat_ugn/the_gnat_compilation_model gnat-and-other-compilation-models207461 + Ref: 2d207461 + Ref: gnat_ugn/the_gnat_compilation_model id74207461 + Ref: ba207461 + Node: Comparison between GNAT and C/C++ Compilation Models207895 + Ref: gnat_ugn/the_gnat_compilation_model comparison-between-gnat-and-c-c-compilation-models208087 + Ref: bb208087 + Ref: gnat_ugn/the_gnat_compilation_model id75208087 + Ref: bc208087 + Node: Comparison between GNAT and Conventional Ada Library Models209608 + Ref: gnat_ugn/the_gnat_compilation_model comparison-between-gnat-and-conventional-ada-library-models209800 + Ref: bd209800 + Ref: gnat_ugn/the_gnat_compilation_model id76209800 + Ref: be209800 + Node: Using GNAT Files with External Tools212179 + Ref: gnat_ugn/the_gnat_compilation_model id77212322 + Ref: bf212322 + Ref: gnat_ugn/the_gnat_compilation_model using-gnat-files-with-external-tools212322 + Ref: 2e212322 + Node: Using Other Utility Programs with GNAT212618 + Ref: gnat_ugn/the_gnat_compilation_model id78212781 + Ref: c0212781 + Ref: gnat_ugn/the_gnat_compilation_model using-other-utility-programs-with-gnat212781 + Ref: c1212781 + Node: The External Symbol Naming Scheme of GNAT213340 + Ref: gnat_ugn/the_gnat_compilation_model id79213503 + Ref: c2213503 + Ref: gnat_ugn/the_gnat_compilation_model the-external-symbol-naming-scheme-of-gnat213503 + Ref: c3213503 + Node: Building Executable Programs with GNAT215413 + Ref: gnat_ugn/building_executable_programs_with_gnat doc215558 + Ref: c4215558 + Ref: gnat_ugn/building_executable_programs_with_gnat building-executable-programs-with-gnat215558 + Ref: a215558 + Ref: gnat_ugn/building_executable_programs_with_gnat id1215558 + Ref: c5215558 + Node: Building with gnatmake216473 + Ref: gnat_ugn/building_executable_programs_with_gnat building-with-gnatmake216599 + Ref: ca216599 + Ref: gnat_ugn/building_executable_programs_with_gnat the-gnat-make-program-gnatmake216599 + Ref: c6216599 + Node: Running gnatmake218220 + Ref: gnat_ugn/building_executable_programs_with_gnat id2218327 + Ref: cb218327 + Ref: gnat_ugn/building_executable_programs_with_gnat running-gnatmake218327 + Ref: cc218327 + Node: Switches for gnatmake219801 + Ref: gnat_ugn/building_executable_programs_with_gnat id3219943 + Ref: cd219943 + Ref: gnat_ugn/building_executable_programs_with_gnat switches-for-gnatmake219943 + Ref: ce219943 + Node: Mode Switches for gnatmake241156 + Ref: gnat_ugn/building_executable_programs_with_gnat id4241307 + Ref: d0241307 + Ref: gnat_ugn/building_executable_programs_with_gnat mode-switches-for-gnatmake241307 + Ref: d1241307 + Node: Notes on the Command Line242602 + Ref: gnat_ugn/building_executable_programs_with_gnat id5242750 + Ref: d2242750 + Ref: gnat_ugn/building_executable_programs_with_gnat notes-on-the-command-line242750 + Ref: d3242750 + Node: How gnatmake Works245227 + Ref: gnat_ugn/building_executable_programs_with_gnat how-gnatmake-works245375 + Ref: d4245375 + Ref: gnat_ugn/building_executable_programs_with_gnat id6245375 + Ref: d5245375 + Node: Examples of gnatmake Usage247726 + Ref: gnat_ugn/building_executable_programs_with_gnat examples-of-gnatmake-usage247840 + Ref: d6247840 + Ref: gnat_ugn/building_executable_programs_with_gnat id7247840 + Ref: d7247840 + Node: Compiling with gcc248923 + Ref: gnat_ugn/building_executable_programs_with_gnat compiling-with-gcc249075 + Ref: c7249075 + Ref: gnat_ugn/building_executable_programs_with_gnat id8249075 + Ref: d8249075 + Node: Compiling Programs249476 + Ref: gnat_ugn/building_executable_programs_with_gnat compiling-programs249601 + Ref: d9249601 + Ref: gnat_ugn/building_executable_programs_with_gnat id9249601 + Ref: da249601 + Node: Search Paths and the Run-Time Library RTL253044 + Ref: gnat_ugn/building_executable_programs_with_gnat id10253205 + Ref: dc253205 + Ref: gnat_ugn/building_executable_programs_with_gnat search-paths-and-the-run-time-library-rtl253205 + Ref: 73253205 + Node: Order of Compilation Issues256638 + Ref: gnat_ugn/building_executable_programs_with_gnat id11256789 + Ref: dd256789 + Ref: gnat_ugn/building_executable_programs_with_gnat order-of-compilation-issues256789 + Ref: de256789 + Node: Examples258358 + Ref: gnat_ugn/building_executable_programs_with_gnat examples258459 + Ref: df258459 + Ref: gnat_ugn/building_executable_programs_with_gnat id12258459 + Ref: e0258459 + Node: Compiler Switches258941 + Ref: gnat_ugn/building_executable_programs_with_gnat compiler-switches259086 + Ref: e1259086 + Ref: gnat_ugn/building_executable_programs_with_gnat switches-for-gcc259086 + Ref: db259086 + Node: Alphabetical List of All Switches260240 + Ref: gnat_ugn/building_executable_programs_with_gnat alphabetical-list-of-all-switches260370 + Ref: e2260370 + Ref: gnat_ugn/building_executable_programs_with_gnat id13260370 + Ref: e3260370 + Node: Output and Error Message Control296559 + Ref: gnat_ugn/building_executable_programs_with_gnat id14296721 + Ref: ee296721 + Ref: gnat_ugn/building_executable_programs_with_gnat output-and-error-message-control296721 + Ref: ef296721 + Node: Warning Message Control304796 + Ref: gnat_ugn/building_executable_programs_with_gnat id15304956 + Ref: f0304956 + Ref: gnat_ugn/building_executable_programs_with_gnat warning-message-control304956 + Ref: eb304956 + Node: Debugging and Assertion Control354680 + Ref: gnat_ugn/building_executable_programs_with_gnat debugging-and-assertion-control354825 + Ref: f1354825 + Ref: gnat_ugn/building_executable_programs_with_gnat id16354825 + Ref: f2354825 + Node: Validity Checking357456 + Ref: gnat_ugn/building_executable_programs_with_gnat id17357592 + Ref: f3357592 + Ref: gnat_ugn/building_executable_programs_with_gnat validity-checking357592 + Ref: e7357592 + Node: Style Checking367034 + Ref: gnat_ugn/building_executable_programs_with_gnat id18367154 + Ref: f4367154 + Ref: gnat_ugn/building_executable_programs_with_gnat style-checking367154 + Ref: ec367154 + Node: Run-Time Checks384751 + Ref: gnat_ugn/building_executable_programs_with_gnat id19384883 + Ref: f5384883 + Ref: gnat_ugn/building_executable_programs_with_gnat run-time-checks384883 + Ref: ea384883 + Node: Using gcc for Syntax Checking391580 + Ref: gnat_ugn/building_executable_programs_with_gnat id20391729 + Ref: f6391729 + Ref: gnat_ugn/building_executable_programs_with_gnat using-gcc-for-syntax-checking391729 + Ref: f7391729 + Node: Using gcc for Semantic Checking393415 + Ref: gnat_ugn/building_executable_programs_with_gnat id21393584 + Ref: f8393584 + Ref: gnat_ugn/building_executable_programs_with_gnat using-gcc-for-semantic-checking393584 + Ref: f9393584 + Node: Compiling Different Versions of Ada394942 + Ref: gnat_ugn/building_executable_programs_with_gnat compiling-different-versions-of-ada395103 + Ref: 6395103 + Ref: gnat_ugn/building_executable_programs_with_gnat id22395103 + Ref: fa395103 + Node: Character Set Control398974 + Ref: gnat_ugn/building_executable_programs_with_gnat character-set-control399123 + Ref: 31399123 + Ref: gnat_ugn/building_executable_programs_with_gnat id23399123 + Ref: fb399123 + Node: File Naming Control404441 + Ref: gnat_ugn/building_executable_programs_with_gnat file-naming-control404582 + Ref: fc404582 + Ref: gnat_ugn/building_executable_programs_with_gnat id24404582 + Ref: fd404582 + Node: Subprogram Inlining Control404990 + Ref: gnat_ugn/building_executable_programs_with_gnat id25405134 + Ref: fe405134 + Ref: gnat_ugn/building_executable_programs_with_gnat subprogram-inlining-control405134 + Ref: ff405134 + Node: Auxiliary Output Control407011 + Ref: gnat_ugn/building_executable_programs_with_gnat auxiliary-output-control407153 + Ref: 101407153 + Ref: gnat_ugn/building_executable_programs_with_gnat id26407153 + Ref: 102407153 + Node: Debugging Control408314 + Ref: gnat_ugn/building_executable_programs_with_gnat debugging-control408455 + Ref: 103408455 + Ref: gnat_ugn/building_executable_programs_with_gnat id27408455 + Ref: 104408455 + Node: Exception Handling Control420416 + Ref: gnat_ugn/building_executable_programs_with_gnat exception-handling-control420563 + Ref: 105420563 + Ref: gnat_ugn/building_executable_programs_with_gnat id28420563 + Ref: 106420563 + Node: Units to Sources Mapping Files423240 + Ref: gnat_ugn/building_executable_programs_with_gnat id29423393 + Ref: 107423393 + Ref: gnat_ugn/building_executable_programs_with_gnat units-to-sources-mapping-files423393 + Ref: e8423393 + Node: Code Generation Control425332 + Ref: gnat_ugn/building_executable_programs_with_gnat code-generation-control425450 + Ref: 108425450 + Ref: gnat_ugn/building_executable_programs_with_gnat id30425450 + Ref: 109425450 + Node: Linker Switches426622 + Ref: gnat_ugn/building_executable_programs_with_gnat id31426770 + Ref: 10a426770 + Ref: gnat_ugn/building_executable_programs_with_gnat linker-switches426770 + Ref: 10b426770 + Node: Binding with gnatbind427124 + Ref: gnat_ugn/building_executable_programs_with_gnat binding-with-gnatbind427276 + Ref: c8427276 + Ref: gnat_ugn/building_executable_programs_with_gnat id32427276 + Ref: 10c427276 + Node: Running gnatbind428800 + Ref: gnat_ugn/building_executable_programs_with_gnat id33428906 + Ref: 10d428906 + Ref: gnat_ugn/building_executable_programs_with_gnat running-gnatbind428906 + Ref: 10e428906 + Node: Switches for gnatbind431938 + Ref: gnat_ugn/building_executable_programs_with_gnat id34432072 + Ref: 10f432072 + Ref: gnat_ugn/building_executable_programs_with_gnat switches-for-gnatbind432072 + Ref: 110432072 + Node: Consistency-Checking Modes445045 + Ref: gnat_ugn/building_executable_programs_with_gnat consistency-checking-modes445168 + Ref: 114445168 + Ref: gnat_ugn/building_executable_programs_with_gnat id35445168 + Ref: 115445168 + Node: Binder Error Message Control446987 + Ref: gnat_ugn/building_executable_programs_with_gnat binder-error-message-control447138 + Ref: 116447138 + Ref: gnat_ugn/building_executable_programs_with_gnat id36447138 + Ref: 117447138 + Node: Elaboration Control449382 + Ref: gnat_ugn/building_executable_programs_with_gnat elaboration-control449521 + Ref: 111449521 + Ref: gnat_ugn/building_executable_programs_with_gnat id37449521 + Ref: 118449521 + Node: Output Control452823 + Ref: gnat_ugn/building_executable_programs_with_gnat id38452960 + Ref: 119452960 + Ref: gnat_ugn/building_executable_programs_with_gnat output-control452960 + Ref: 11a452960 + Node: Dynamic Allocation Control454957 + Ref: gnat_ugn/building_executable_programs_with_gnat dynamic-allocation-control455109 + Ref: 112455109 + Ref: gnat_ugn/building_executable_programs_with_gnat id39455109 + Ref: 11b455109 + Node: Binding with Non-Ada Main Programs455730 + Ref: gnat_ugn/building_executable_programs_with_gnat binding-with-non-ada-main-programs455908 + Ref: a0455908 + Ref: gnat_ugn/building_executable_programs_with_gnat id40455908 + Ref: 11c455908 + Node: Binding Programs with No Main Subprogram458918 + Ref: gnat_ugn/building_executable_programs_with_gnat binding-programs-with-no-main-subprogram459061 + Ref: 11d459061 + Ref: gnat_ugn/building_executable_programs_with_gnat id41459061 + Ref: 11e459061 + Node: Command-Line Access459929 + Ref: gnat_ugn/building_executable_programs_with_gnat command-line-access460072 + Ref: 11f460072 + Ref: gnat_ugn/building_executable_programs_with_gnat id42460072 + Ref: 120460072 + Node: Search Paths for gnatbind460982 + Ref: gnat_ugn/building_executable_programs_with_gnat id43461130 + Ref: 121461130 + Ref: gnat_ugn/building_executable_programs_with_gnat search-paths-for-gnatbind461130 + Ref: 76461130 + Node: Examples of gnatbind Usage463947 + Ref: gnat_ugn/building_executable_programs_with_gnat examples-of-gnatbind-usage464067 + Ref: 122464067 + Ref: gnat_ugn/building_executable_programs_with_gnat id44464067 + Ref: 123464067 + Node: Linking with gnatlink464915 + Ref: gnat_ugn/building_executable_programs_with_gnat id45465078 + Ref: 124465078 + Ref: gnat_ugn/building_executable_programs_with_gnat linking-with-gnatlink465078 + Ref: c9465078 + Node: Running gnatlink465614 + Ref: gnat_ugn/building_executable_programs_with_gnat id46465720 + Ref: 125465720 + Ref: gnat_ugn/building_executable_programs_with_gnat running-gnatlink465720 + Ref: 126465720 + Node: Switches for gnatlink468192 + Ref: gnat_ugn/building_executable_programs_with_gnat id47468298 + Ref: 129468298 + Ref: gnat_ugn/building_executable_programs_with_gnat switches-for-gnatlink468298 + Ref: 12a468298 + Node: Using the GNU make Utility473008 + Ref: gnat_ugn/building_executable_programs_with_gnat id48473141 + Ref: 12b473141 + Ref: gnat_ugn/building_executable_programs_with_gnat using-the-gnu-make-utility473141 + Ref: 70473141 + Node: Using gnatmake in a Makefile473829 + Ref: gnat_ugn/building_executable_programs_with_gnat id49473975 + Ref: 12c473975 + Ref: gnat_ugn/building_executable_programs_with_gnat using-gnatmake-in-a-makefile473975 + Ref: 12d473975 + Node: Automatically Creating a List of Directories478001 + Ref: gnat_ugn/building_executable_programs_with_gnat automatically-creating-a-list-of-directories478192 + Ref: 12e478192 + Ref: gnat_ugn/building_executable_programs_with_gnat id50478192 + Ref: 12f478192 + Node: Generating the Command Line Switches481147 + Ref: gnat_ugn/building_executable_programs_with_gnat generating-the-command-line-switches481347 + Ref: 130481347 + Ref: gnat_ugn/building_executable_programs_with_gnat id51481347 + Ref: 131481347 + Node: Overcoming Command Line Length Limits482125 + Ref: gnat_ugn/building_executable_programs_with_gnat id52482272 + Ref: 132482272 + Ref: gnat_ugn/building_executable_programs_with_gnat overcoming-command-line-length-limits482272 + Ref: 133482272 + Node: GNAT Utility Programs484577 + Ref: gnat_ugn/gnat_utility_programs doc484722 + Ref: 134484722 + Ref: gnat_ugn/gnat_utility_programs gnat-utility-programs484722 + Ref: b484722 + Ref: gnat_ugn/gnat_utility_programs id1484722 + Ref: 135484722 + Node: The File Cleanup Utility gnatclean485289 + Ref: gnat_ugn/gnat_utility_programs id2485423 + Ref: 138485423 + Ref: gnat_ugn/gnat_utility_programs the-file-cleanup-utility-gnatclean485423 + Ref: 136485423 + Node: Running gnatclean485834 + Ref: gnat_ugn/gnat_utility_programs id3485955 + Ref: 139485955 + Ref: gnat_ugn/gnat_utility_programs running-gnatclean485955 + Ref: 13a485955 + Node: Switches for gnatclean486604 + Ref: gnat_ugn/gnat_utility_programs id4486725 + Ref: 13b486725 + Ref: gnat_ugn/gnat_utility_programs switches-for-gnatclean486725 + Ref: 13c486725 + Node: The GNAT Library Browser gnatls489865 + Ref: gnat_ugn/gnat_utility_programs id5489999 + Ref: 13d489999 + Ref: gnat_ugn/gnat_utility_programs the-gnat-library-browser-gnatls489999 + Ref: 137489999 + Node: Running gnatls490405 + Ref: gnat_ugn/gnat_utility_programs id6490517 + Ref: 13e490517 + Ref: gnat_ugn/gnat_utility_programs running-gnatls490517 + Ref: 13f490517 + Node: Switches for gnatls493006 + Ref: gnat_ugn/gnat_utility_programs id7493150 + Ref: 140493150 + Ref: gnat_ugn/gnat_utility_programs switches-for-gnatls493150 + Ref: 141493150 + Node: Example of gnatls Usage495576 + Ref: gnat_ugn/gnat_utility_programs example-of-gnatls-usage495697 + Ref: 142495697 + Ref: gnat_ugn/gnat_utility_programs id8495697 + Ref: 143495697 + Node: GNAT and Program Execution498100 + Ref: gnat_ugn/gnat_and_program_execution doc498236 + Ref: 144498236 + Ref: gnat_ugn/gnat_and_program_execution gnat-and-program-execution498236 + Ref: c498236 + Ref: gnat_ugn/gnat_and_program_execution id1498236 + Ref: 145498236 + Node: Running and Debugging Ada Programs498880 + Ref: gnat_ugn/gnat_and_program_execution id2498997 + Ref: 146498997 + Ref: gnat_ugn/gnat_and_program_execution running-and-debugging-ada-programs498997 + Ref: 14d498997 + Node: The GNAT Debugger GDB500367 + Ref: gnat_ugn/gnat_and_program_execution id3500481 + Ref: 14e500481 + Ref: gnat_ugn/gnat_and_program_execution the-gnat-debugger-gdb500481 + Ref: 14f500481 + Node: Running GDB503546 + Ref: gnat_ugn/gnat_and_program_execution id4503697 + Ref: 150503697 + Ref: gnat_ugn/gnat_and_program_execution running-gdb503697 + Ref: 151503697 + Node: Introduction to GDB Commands504490 + Ref: gnat_ugn/gnat_and_program_execution id5504641 + Ref: 152504641 + Ref: gnat_ugn/gnat_and_program_execution introduction-to-gdb-commands504641 + Ref: 153504641 + Node: Using Ada Expressions510595 + Ref: gnat_ugn/gnat_and_program_execution id6510767 + Ref: 154510767 + Ref: gnat_ugn/gnat_and_program_execution using-ada-expressions510767 + Ref: 155510767 + Node: Calling User-Defined Subprograms511882 + Ref: gnat_ugn/gnat_and_program_execution calling-user-defined-subprograms512062 + Ref: 156512062 + Ref: gnat_ugn/gnat_and_program_execution id7512062 + Ref: 157512062 + Node: Using the next Command in a Function514829 + Ref: gnat_ugn/gnat_and_program_execution id8515027 + Ref: 158515027 + Ref: gnat_ugn/gnat_and_program_execution using-the-next-command-in-a-function515027 + Ref: 159515027 + Node: Stopping When Ada Exceptions Are Raised516051 + Ref: gnat_ugn/gnat_and_program_execution id9516226 + Ref: 15a516226 + Ref: gnat_ugn/gnat_and_program_execution stopping-when-ada-exceptions-are-raised516226 + Ref: 15b516226 + Node: Ada Tasks517261 + Ref: gnat_ugn/gnat_and_program_execution ada-tasks517423 + Ref: 15c517423 + Ref: gnat_ugn/gnat_and_program_execution id10517423 + Ref: 15d517423 + Node: Debugging Generic Units519650 + Ref: gnat_ugn/gnat_and_program_execution debugging-generic-units519804 + Ref: 15e519804 + Ref: gnat_ugn/gnat_and_program_execution id11519804 + Ref: 15f519804 + Node: Remote Debugging with gdbserver521122 + Ref: gnat_ugn/gnat_and_program_execution id12521316 + Ref: 160521316 + Ref: gnat_ugn/gnat_and_program_execution remote-debugging-with-gdbserver521316 + Ref: 161521316 + Node: GNAT Abnormal Termination or Failure to Terminate523248 + Ref: gnat_ugn/gnat_and_program_execution gnat-abnormal-termination-or-failure-to-terminate523459 + Ref: 162523459 + Ref: gnat_ugn/gnat_and_program_execution id13523459 + Ref: 163523459 + Node: Naming Conventions for GNAT Source Files525938 + Ref: gnat_ugn/gnat_and_program_execution id14526156 + Ref: 164526156 + Ref: gnat_ugn/gnat_and_program_execution naming-conventions-for-gnat-source-files526156 + Ref: 165526156 + Node: Getting Internal Debugging Information528631 + Ref: gnat_ugn/gnat_and_program_execution getting-internal-debugging-information528815 + Ref: 166528815 + Ref: gnat_ugn/gnat_and_program_execution id15528815 + Ref: 167528815 + Node: Stack Traceback529849 + Ref: gnat_ugn/gnat_and_program_execution id16530029 + Ref: 168530029 + Ref: gnat_ugn/gnat_and_program_execution stack-traceback530029 + Ref: 169530029 + Node: Non-Symbolic Traceback530946 + Ref: gnat_ugn/gnat_and_program_execution id17531049 + Ref: 16a531049 + Ref: gnat_ugn/gnat_and_program_execution non-symbolic-traceback531049 + Ref: 16b531049 + Node: Symbolic Traceback538711 + Ref: gnat_ugn/gnat_and_program_execution id18538814 + Ref: 16c538814 + Ref: gnat_ugn/gnat_and_program_execution symbolic-traceback538814 + Ref: 16d538814 + Node: Pretty-Printers for the GNAT runtime542345 + Ref: gnat_ugn/gnat_and_program_execution id19542478 + Ref: 16e542478 + Ref: gnat_ugn/gnat_and_program_execution pretty-printers-for-the-gnat-runtime542478 + Ref: 16f542478 + Ref: Pretty-Printers for the GNAT runtime-Footnote-1545119 + Ref: Pretty-Printers for the GNAT runtime-Footnote-2545207 + Node: Profiling545291 + Ref: gnat_ugn/gnat_and_program_execution id20545438 + Ref: 170545438 + Ref: gnat_ugn/gnat_and_program_execution profiling545438 + Ref: 147545438 + Node: Profiling an Ada Program with gprof545599 + Ref: gnat_ugn/gnat_and_program_execution id21545682 + Ref: 171545682 + Ref: gnat_ugn/gnat_and_program_execution profiling-an-ada-program-with-gprof545682 + Ref: 172545682 + Node: Compilation for profiling546870 + Ref: gnat_ugn/gnat_and_program_execution compilation-for-profiling546995 + Ref: 173546995 + Ref: gnat_ugn/gnat_and_program_execution id22546995 + Ref: 174546995 + Node: Program execution547642 + Ref: gnat_ugn/gnat_and_program_execution id23547789 + Ref: 175547789 + Ref: gnat_ugn/gnat_and_program_execution program-execution547789 + Ref: 176547789 + Node: Running gprof548281 + Ref: gnat_ugn/gnat_and_program_execution id24548438 + Ref: 177548438 + Ref: gnat_ugn/gnat_and_program_execution running-gprof548438 + Ref: 178548438 + Node: Interpretation of profiling results551170 + Ref: gnat_ugn/gnat_and_program_execution id25551301 + Ref: 179551301 + Ref: gnat_ugn/gnat_and_program_execution interpretation-of-profiling-results551301 + Ref: 17a551301 + Node: Improving Performance551976 + Ref: gnat_ugn/gnat_and_program_execution id26552120 + Ref: 148552120 + Ref: gnat_ugn/gnat_and_program_execution improving-performance552120 + Ref: 17b552120 + Node: Performance Considerations552630 + Ref: gnat_ugn/gnat_and_program_execution id27552744 + Ref: 17c552744 + Ref: gnat_ugn/gnat_and_program_execution performance-considerations552744 + Ref: 17d552744 + Node: Controlling Run-Time Checks553913 + Ref: gnat_ugn/gnat_and_program_execution controlling-run-time-checks554033 + Ref: 17e554033 + Ref: gnat_ugn/gnat_and_program_execution id28554033 + Ref: 17f554033 + Node: Use of Restrictions555591 + Ref: gnat_ugn/gnat_and_program_execution id29555739 + Ref: 180555739 + Ref: gnat_ugn/gnat_and_program_execution use-of-restrictions555739 + Ref: 181555739 + Node: Optimization Levels557096 + Ref: gnat_ugn/gnat_and_program_execution id30557241 + Ref: 182557241 + Ref: gnat_ugn/gnat_and_program_execution optimization-levels557241 + Ref: ed557241 + Node: Debugging Optimized Code561100 + Ref: gnat_ugn/gnat_and_program_execution debugging-optimized-code561249 + Ref: 183561249 + Ref: gnat_ugn/gnat_and_program_execution id31561249 + Ref: 184561249 + Node: Inlining of Subprograms566165 + Ref: gnat_ugn/gnat_and_program_execution id32566320 + Ref: 185566320 + Ref: gnat_ugn/gnat_and_program_execution inlining-of-subprograms566320 + Ref: 100566320 + Node: Floating Point Operations571000 + Ref: gnat_ugn/gnat_and_program_execution floating-point-operations571153 + Ref: 186571153 + Ref: gnat_ugn/gnat_and_program_execution id33571153 + Ref: 187571153 + Node: Vectorization of loops573336 + Ref: gnat_ugn/gnat_and_program_execution id34573493 + Ref: 188573493 + Ref: gnat_ugn/gnat_and_program_execution vectorization-of-loops573493 + Ref: 189573493 + Node: Other Optimization Switches578121 + Ref: gnat_ugn/gnat_and_program_execution id35578285 + Ref: 18a578285 + Ref: gnat_ugn/gnat_and_program_execution other-optimization-switches578285 + Ref: 18b578285 + Node: Optimization and Strict Aliasing578982 + Ref: gnat_ugn/gnat_and_program_execution id36579158 + Ref: 18c579158 + Ref: gnat_ugn/gnat_and_program_execution optimization-and-strict-aliasing579158 + Ref: e4579158 + Node: Aliased Variables and Optimization588177 + Ref: gnat_ugn/gnat_and_program_execution aliased-variables-and-optimization588359 + Ref: 18d588359 + Ref: gnat_ugn/gnat_and_program_execution id37588359 + Ref: 18e588359 + Node: Atomic Variables and Optimization590352 + Ref: gnat_ugn/gnat_and_program_execution atomic-variables-and-optimization590527 + Ref: 18f590527 + Ref: gnat_ugn/gnat_and_program_execution id38590527 + Ref: 190590527 + Node: Passive Task Optimization593127 + Ref: gnat_ugn/gnat_and_program_execution id39593259 + Ref: 191593259 + Ref: gnat_ugn/gnat_and_program_execution passive-task-optimization593259 + Ref: 192593259 + Node: Text_IO Suggestions595234 + Ref: gnat_ugn/gnat_and_program_execution id40595425 + Ref: 193595425 + Ref: gnat_ugn/gnat_and_program_execution text-io-suggestions595425 + Ref: 194595425 + Node: Reducing Size of Executables with Unused Subprogram/Data Elimination596360 + Ref: gnat_ugn/gnat_and_program_execution id41596516 + Ref: 195596516 + Ref: gnat_ugn/gnat_and_program_execution reducing-size-of-executables-with-unused-subprogram-data-elimination596516 + Ref: 196596516 + Node: About unused subprogram/data elimination596936 + Ref: gnat_ugn/gnat_and_program_execution about-unused-subprogram-data-elimination597111 + Ref: 197597111 + Ref: gnat_ugn/gnat_and_program_execution id42597111 + Ref: 198597111 + Node: Compilation options597752 + Ref: gnat_ugn/gnat_and_program_execution compilation-options597981 + Ref: 199597981 + Ref: gnat_ugn/gnat_and_program_execution id43597981 + Ref: 19a597981 + Node: Example of unused subprogram/data elimination599370 + Ref: gnat_ugn/gnat_and_program_execution example-of-unused-subprogram-data-elimination599550 + Ref: 19b599550 + Ref: gnat_ugn/gnat_and_program_execution id44599550 + Ref: 19c599550 + Node: Overflow Check Handling in GNAT601022 + Ref: gnat_ugn/gnat_and_program_execution id45601199 + Ref: 149601199 + Ref: gnat_ugn/gnat_and_program_execution overflow-check-handling-in-gnat601199 + Ref: 19d601199 + Node: Background601482 + Ref: gnat_ugn/gnat_and_program_execution background601602 + Ref: 19e601602 + Ref: gnat_ugn/gnat_and_program_execution id46601602 + Ref: 19f601602 + Node: Management of Overflows in GNAT605275 + Ref: gnat_ugn/gnat_and_program_execution id47605431 + Ref: 1a0605431 + Ref: gnat_ugn/gnat_and_program_execution management-of-overflows-in-gnat605431 + Ref: 1a1605431 + Node: Specifying the Desired Mode610430 + Ref: gnat_ugn/gnat_and_program_execution id48610592 + Ref: 1a2610592 + Ref: gnat_ugn/gnat_and_program_execution specifying-the-desired-mode610592 + Ref: e9610592 + Node: Default Settings613706 + Ref: gnat_ugn/gnat_and_program_execution default-settings613857 + Ref: 1a3613857 + Ref: gnat_ugn/gnat_and_program_execution id49613857 + Ref: 1a4613857 + Node: Implementation Notes614751 + Ref: gnat_ugn/gnat_and_program_execution id50614866 + Ref: 1a5614866 + Ref: gnat_ugn/gnat_and_program_execution implementation-notes614866 + Ref: 1a6614866 + Node: Performing Dimensionality Analysis in GNAT617008 + Ref: gnat_ugn/gnat_and_program_execution id51617188 + Ref: 14a617188 + Ref: gnat_ugn/gnat_and_program_execution performing-dimensionality-analysis-in-gnat617188 + Ref: 1a7617188 + Node: Stack Related Facilities628274 + Ref: gnat_ugn/gnat_and_program_execution id52628447 + Ref: 14b628447 + Ref: gnat_ugn/gnat_and_program_execution stack-related-facilities628447 + Ref: 1a8628447 + Node: Stack Overflow Checking628771 + Ref: gnat_ugn/gnat_and_program_execution id53628893 + Ref: 1a9628893 + Ref: gnat_ugn/gnat_and_program_execution stack-overflow-checking628893 + Ref: e5628893 + Node: Static Stack Usage Analysis630533 + Ref: gnat_ugn/gnat_and_program_execution id54630692 + Ref: 1aa630692 + Ref: gnat_ugn/gnat_and_program_execution static-stack-usage-analysis630692 + Ref: e6630692 + Node: Dynamic Stack Usage Analysis632091 + Ref: gnat_ugn/gnat_and_program_execution dynamic-stack-usage-analysis632218 + Ref: 113632218 + Ref: gnat_ugn/gnat_and_program_execution id55632218 + Ref: 1ab632218 + Node: Memory Management Issues634147 + Ref: gnat_ugn/gnat_and_program_execution id56634269 + Ref: 14c634269 + Ref: gnat_ugn/gnat_and_program_execution memory-management-issues634269 + Ref: 1ac634269 + Node: Some Useful Memory Pools634625 + Ref: gnat_ugn/gnat_and_program_execution id57634749 + Ref: 1ad634749 + Ref: gnat_ugn/gnat_and_program_execution some-useful-memory-pools634749 + Ref: 1ae634749 + Node: The GNAT Debug Pool Facility637406 + Ref: gnat_ugn/gnat_and_program_execution id58637530 + Ref: 1af637530 + Ref: gnat_ugn/gnat_and_program_execution the-gnat-debug-pool-facility637530 + Ref: 1b0637530 + Node: Platform-Specific Information642531 + Ref: gnat_ugn/platform_specific_information doc642675 + Ref: 1b1642675 + Ref: gnat_ugn/platform_specific_information id1642675 + Ref: 1b2642675 + Ref: gnat_ugn/platform_specific_information platform-specific-information642675 + Ref: d642675 + Node: Run-Time Libraries643066 + Ref: gnat_ugn/platform_specific_information id2643190 + Ref: 1b3643190 + Ref: gnat_ugn/platform_specific_information run-time-libraries643190 + Ref: 1b4643190 + Node: Summary of Run-Time Configurations644474 + Ref: gnat_ugn/platform_specific_information id3644565 + Ref: 1b5644565 + Ref: gnat_ugn/platform_specific_information summary-of-run-time-configurations644565 + Ref: 1b6644565 + Node: Specifying a Run-Time Library645878 + Ref: gnat_ugn/platform_specific_information id4646027 + Ref: 1b7646027 + Ref: gnat_ugn/platform_specific_information specifying-a-run-time-library646027 + Ref: 1b8646027 + Ref: gnat_ugn/platform_specific_information choosing-the-scheduling-policy648323 + Ref: 1b9648323 + Node: Choosing the Scheduling Policy648370 + Ref: gnat_ugn/platform_specific_information id5648468 + Ref: 1ba648468 + Node: GNU/Linux Topics649952 + Ref: gnat_ugn/platform_specific_information gnu-linux-topics650107 + Ref: 1bb650107 + Ref: gnat_ugn/platform_specific_information id6650107 + Ref: 1bc650107 + Ref: gnat_ugn/platform_specific_information required-packages-on-gnu-linux650221 + Ref: 1bd650221 + Node: Required Packages on GNU/Linux650295 + Ref: gnat_ugn/platform_specific_information a-gnu-linux-debug-quirk650412 + Ref: 1be650412 + Ref: gnat_ugn/platform_specific_information id7650412 + Ref: 1bf650412 + Node: A GNU/Linux Debug Quirk651120 + Ref: gnat_ugn/platform_specific_information id8651237 + Ref: 1c0651237 + Node: Microsoft Windows Topics651988 + Ref: gnat_ugn/platform_specific_information id9652127 + Ref: 1c1652127 + Ref: gnat_ugn/platform_specific_information microsoft-windows-topics652127 + Ref: 1c2652127 + Node: Using GNAT on Windows652548 + Ref: gnat_ugn/platform_specific_information id10652677 + Ref: 1c3652677 + Ref: gnat_ugn/platform_specific_information using-gnat-on-windows652677 + Ref: 1c4652677 + Node: Using a network installation of GNAT655496 + Ref: gnat_ugn/platform_specific_information id11655664 + Ref: 1c5655664 + Ref: gnat_ugn/platform_specific_information using-a-network-installation-of-gnat655664 + Ref: 1c6655664 + Node: CONSOLE and WINDOWS subsystems656565 + Ref: gnat_ugn/platform_specific_information console-and-windows-subsystems656727 + Ref: 1c7656727 + Ref: gnat_ugn/platform_specific_information id12656727 + Ref: 1c8656727 + Node: Temporary Files657240 + Ref: gnat_ugn/platform_specific_information id13657407 + Ref: 1c9657407 + Ref: gnat_ugn/platform_specific_information temporary-files657407 + Ref: 1ca657407 + Node: Disabling Command Line Argument Expansion658083 + Ref: gnat_ugn/platform_specific_information disabling-command-line-argument-expansion658243 + Ref: 1cb658243 + Node: Windows Socket Timeouts659865 + Ref: gnat_ugn/platform_specific_information windows-socket-timeouts660047 + Ref: 1cc660047 + Node: Mixed-Language Programming on Windows662273 + Ref: gnat_ugn/platform_specific_information id14662438 + Ref: 1cd662438 + Ref: gnat_ugn/platform_specific_information mixed-language-programming-on-windows662438 + Ref: 1ce662438 + Node: Windows Calling Conventions664985 + Ref: gnat_ugn/platform_specific_information id15665140 + Ref: 1d1665140 + Ref: gnat_ugn/platform_specific_information windows-calling-conventions665140 + Ref: 1d2665140 + Node: C Calling Convention666070 + Ref: gnat_ugn/platform_specific_information c-calling-convention666191 + Ref: 1d3666191 + Ref: gnat_ugn/platform_specific_information id16666191 + Ref: 1d4666191 + Node: Stdcall Calling Convention667671 + Ref: gnat_ugn/platform_specific_information id17667825 + Ref: 1d6667825 + Ref: gnat_ugn/platform_specific_information stdcall-calling-convention667825 + Ref: 1d5667825 + Node: Win32 Calling Convention670622 + Ref: gnat_ugn/platform_specific_information id18670778 + Ref: 1d7670778 + Ref: gnat_ugn/platform_specific_information win32-calling-convention670778 + Ref: 1d8670778 + Node: DLL Calling Convention670971 + Ref: gnat_ugn/platform_specific_information dll-calling-convention671092 + Ref: 1d9671092 + Ref: gnat_ugn/platform_specific_information id19671092 + Ref: 1da671092 + Node: Introduction to Dynamic Link Libraries DLLs671281 + Ref: gnat_ugn/platform_specific_information id20671465 + Ref: 1db671465 + Ref: gnat_ugn/platform_specific_information introduction-to-dynamic-link-libraries-dlls671465 + Ref: 1dc671465 + Node: Using DLLs with GNAT674862 + Ref: gnat_ugn/platform_specific_information id21675056 + Ref: 1de675056 + Ref: gnat_ugn/platform_specific_information using-dlls-with-gnat675056 + Ref: 1cf675056 + Node: Creating an Ada Spec for the DLL Services677046 + Ref: gnat_ugn/platform_specific_information creating-an-ada-spec-for-the-dll-services677181 + Ref: 1df677181 + Ref: gnat_ugn/platform_specific_information id22677181 + Ref: 1e0677181 + Node: Creating an Import Library678145 + Ref: gnat_ugn/platform_specific_information creating-an-import-library678280 + Ref: 1e1678280 + Ref: gnat_ugn/platform_specific_information id23678280 + Ref: 1e2678280 + Ref: gnat_ugn/platform_specific_information the-definition-file678706 + Ref: 1dd678706 + Ref: gnat_ugn/platform_specific_information create-def-file-automatically680005 + Ref: 1e3680005 + Ref: gnat_ugn/platform_specific_information gnat-style-import-library681163 + Ref: 1e4681163 + Ref: gnat_ugn/platform_specific_information msvs-style-import-library682093 + Ref: 1e6682093 + Node: Building DLLs with GNAT Project files682814 + Ref: gnat_ugn/platform_specific_information building-dlls-with-gnat-project-files682988 + Ref: 1d0682988 + Ref: gnat_ugn/platform_specific_information id24682988 + Ref: 1e7682988 + Node: Building DLLs with GNAT683487 + Ref: gnat_ugn/platform_specific_information building-dlls-with-gnat683667 + Ref: 1e8683667 + Ref: gnat_ugn/platform_specific_information id25683667 + Ref: 1e9683667 + Node: Building DLLs with gnatdll685575 + Ref: gnat_ugn/platform_specific_information building-dlls-with-gnatdll685743 + Ref: 1ea685743 + Ref: gnat_ugn/platform_specific_information id26685743 + Ref: 1eb685743 + Node: Limitations When Using Ada DLLs from Ada688228 + Ref: gnat_ugn/platform_specific_information limitations-when-using-ada-dlls-from-ada688364 + Ref: 1ef688364 + Node: Exporting Ada Entities689275 + Ref: gnat_ugn/platform_specific_information exporting-ada-entities689444 + Ref: 1ec689444 + Ref: gnat_ugn/platform_specific_information id27689444 + Ref: 1f0689444 + Node: Ada DLLs and Elaboration692333 + Ref: gnat_ugn/platform_specific_information ada-dlls-and-elaboration692453 + Ref: 1ed692453 + Ref: gnat_ugn/platform_specific_information id28692453 + Ref: 1f2692453 + Node: Ada DLLs and Finalization693891 + Ref: gnat_ugn/platform_specific_information ada-dlls-and-finalization694064 + Ref: 1ee694064 + Ref: gnat_ugn/platform_specific_information id29694064 + Ref: 1f3694064 + Node: Creating a Spec for Ada DLLs694735 + Ref: gnat_ugn/platform_specific_information creating-a-spec-for-ada-dlls694908 + Ref: 1f4694908 + Ref: gnat_ugn/platform_specific_information id30694908 + Ref: 1f5694908 + Node: Creating the Definition File696317 + Ref: gnat_ugn/platform_specific_information creating-the-definition-file696434 + Ref: 1f1696434 + Ref: gnat_ugn/platform_specific_information id31696434 + Ref: 1f6696434 + Node: Using gnatdll697192 + Ref: gnat_ugn/platform_specific_information id32697309 + Ref: 1f7697309 + Ref: gnat_ugn/platform_specific_information using-gnatdll697309 + Ref: 1e5697309 + Ref: gnat_ugn/platform_specific_information using-dlltool703849 + Ref: 1f8703849 + Node: GNAT and Windows Resources705217 + Ref: gnat_ugn/platform_specific_information gnat-and-windows-resources705422 + Ref: 1f9705422 + Ref: gnat_ugn/platform_specific_information id33705422 + Ref: 1fa705422 + Node: Building Resources707318 + Ref: gnat_ugn/platform_specific_information building-resources707429 + Ref: 1fb707429 + Ref: gnat_ugn/platform_specific_information id34707429 + Ref: 1fc707429 + Node: Compiling Resources708007 + Ref: gnat_ugn/platform_specific_information compiling-resources708142 + Ref: 1fd708142 + Ref: gnat_ugn/platform_specific_information id35708142 + Ref: 1fe708142 + Node: Using Resources709082 + Ref: gnat_ugn/platform_specific_information id36709190 + Ref: 1ff709190 + Ref: gnat_ugn/platform_specific_information using-resources709190 + Ref: 200709190 + Node: Using GNAT DLLs from Microsoft Visual Studio Applications709484 + Ref: gnat_ugn/platform_specific_information using-gnat-dll-from-msvs709676 + Ref: 201709676 + Ref: gnat_ugn/platform_specific_information using-gnat-dlls-from-microsoft-visual-studio-applications709676 + Ref: 202709676 + Node: Debugging a DLL711238 + Ref: gnat_ugn/platform_specific_information debugging-a-dll711436 + Ref: 203711436 + Ref: gnat_ugn/platform_specific_information id37711436 + Ref: 204711436 + Node: Program and DLL Both Built with GCC/GNAT712300 + Ref: gnat_ugn/platform_specific_information id38712463 + Ref: 205712463 + Ref: gnat_ugn/platform_specific_information program-and-dll-both-built-with-gcc-gnat712463 + Ref: 206712463 + Node: Program Built with Foreign Tools and DLL Built with GCC/GNAT713791 + Ref: gnat_ugn/platform_specific_information id39713954 + Ref: 207713954 + Ref: gnat_ugn/platform_specific_information program-built-with-foreign-tools-and-dll-built-with-gcc-gnat713954 + Ref: 208713954 + Node: Setting Stack Size from gnatlink717356 + Ref: gnat_ugn/platform_specific_information id40717528 + Ref: 209717528 + Ref: gnat_ugn/platform_specific_information setting-stack-size-from-gnatlink717528 + Ref: 127717528 + Node: Setting Heap Size from gnatlink718741 + Ref: gnat_ugn/platform_specific_information id41718889 + Ref: 20a718889 + Ref: gnat_ugn/platform_specific_information setting-heap-size-from-gnatlink718889 + Ref: 128718889 + Node: Windows Specific Add-Ons719576 + Ref: gnat_ugn/platform_specific_information win32-specific-addons719709 + Ref: 20b719709 + Ref: gnat_ugn/platform_specific_information windows-specific-add-ons719709 + Ref: 20c719709 + Node: Win32Ada719860 + Ref: gnat_ugn/platform_specific_information id42719946 + Ref: 20d719946 + Ref: gnat_ugn/platform_specific_information win32ada719946 + Ref: 20e719946 + Node: wPOSIX720543 + Ref: gnat_ugn/platform_specific_information id43720629 + Ref: 20f720629 + Ref: gnat_ugn/platform_specific_information wposix720629 + Ref: 210720629 + Node: Mac OS Topics721313 + Ref: gnat_ugn/platform_specific_information id44721427 + Ref: 211721427 + Ref: gnat_ugn/platform_specific_information mac-os-topics721427 + Ref: 212721427 + Node: Codesigning the Debugger721580 + Ref: gnat_ugn/platform_specific_information codesigning-the-debugger721656 + Ref: 213721656 + Node: Example of Binder Output File723639 + Ref: gnat_ugn/example_of_binder_output doc723791 + Ref: 214723791 + Ref: gnat_ugn/example_of_binder_output example-of-binder-output-file723791 + Ref: e723791 + Ref: gnat_ugn/example_of_binder_output id1723791 + Ref: 215723791 + Node: Elaboration Order Handling in GNAT754874 + Ref: gnat_ugn/elaboration_order_handling_in_gnat doc755013 + Ref: 216755013 + Ref: gnat_ugn/elaboration_order_handling_in_gnat elaboration-order-handling-in-gnat755013 + Ref: f755013 + Ref: gnat_ugn/elaboration_order_handling_in_gnat id1755013 + Ref: 217755013 + Node: Elaboration Code755767 + Ref: gnat_ugn/elaboration_order_handling_in_gnat elaboration-code755882 + Ref: 218755882 + Ref: gnat_ugn/elaboration_order_handling_in_gnat id2755882 + Ref: 219755882 + Node: Elaboration Order759715 + Ref: gnat_ugn/elaboration_order_handling_in_gnat elaboration-order759869 + Ref: 21a759869 + Ref: gnat_ugn/elaboration_order_handling_in_gnat id3759869 + Ref: 21b759869 + Node: Checking the Elaboration Order763511 + Ref: gnat_ugn/elaboration_order_handling_in_gnat checking-the-elaboration-order763689 + Ref: 21c763689 + Ref: gnat_ugn/elaboration_order_handling_in_gnat id4763689 + Ref: 21d763689 + Node: Controlling the Elaboration Order in Ada765365 + Ref: gnat_ugn/elaboration_order_handling_in_gnat controlling-the-elaboration-order-in-ada765567 + Ref: 21e765567 + Ref: gnat_ugn/elaboration_order_handling_in_gnat id5765567 + Ref: 21f765567 + Node: Controlling the Elaboration Order in GNAT774129 + Ref: gnat_ugn/elaboration_order_handling_in_gnat controlling-the-elaboration-order-in-gnat774326 + Ref: 220774326 + Ref: gnat_ugn/elaboration_order_handling_in_gnat id6774326 + Ref: 221774326 + Node: Mixing Elaboration Models778157 + Ref: gnat_ugn/elaboration_order_handling_in_gnat id7778329 + Ref: 222778329 + Ref: gnat_ugn/elaboration_order_handling_in_gnat mixing-elaboration-models778329 + Ref: 223778329 + Node: ABE Diagnostics779342 + Ref: gnat_ugn/elaboration_order_handling_in_gnat abe-diagnostics779490 + Ref: 224779490 + Ref: gnat_ugn/elaboration_order_handling_in_gnat id8779490 + Ref: 225779490 + Node: SPARK Diagnostics783008 + Ref: gnat_ugn/elaboration_order_handling_in_gnat id9783156 + Ref: 226783156 + Ref: gnat_ugn/elaboration_order_handling_in_gnat spark-diagnostics783156 + Ref: 227783156 + Node: Elaboration Circularities783927 + Ref: gnat_ugn/elaboration_order_handling_in_gnat elaboration-circularities784095 + Ref: 228784095 + Ref: gnat_ugn/elaboration_order_handling_in_gnat id10784095 + Ref: 229784095 + Node: Resolving Elaboration Circularities786342 + Ref: gnat_ugn/elaboration_order_handling_in_gnat id11786530 + Ref: 22a786530 + Ref: gnat_ugn/elaboration_order_handling_in_gnat resolving-elaboration-circularities786530 + Ref: 22b786530 + Node: Elaboration-related Compiler Switches794054 + Ref: gnat_ugn/elaboration_order_handling_in_gnat elaboration-related-compiler-switches794262 + Ref: 22c794262 + Ref: gnat_ugn/elaboration_order_handling_in_gnat id12794262 + Ref: 22d794262 + Node: Summary of Procedures for Elaboration Control799091 + Ref: gnat_ugn/elaboration_order_handling_in_gnat id13799303 + Ref: 22e799303 + Ref: gnat_ugn/elaboration_order_handling_in_gnat summary-of-procedures-for-elaboration-control799303 + Ref: 22f799303 + Node: Inspecting the Chosen Elaboration Order801153 + Ref: gnat_ugn/elaboration_order_handling_in_gnat id14801319 + Ref: 230801319 + Ref: gnat_ugn/elaboration_order_handling_in_gnat inspecting-the-chosen-elaboration-order801319 + Ref: 231801319 + Node: Inline Assembler805934 + Ref: gnat_ugn/inline_assembler doc806074 + Ref: 232806074 + Ref: gnat_ugn/inline_assembler id1806074 + Ref: 233806074 + Ref: gnat_ugn/inline_assembler inline-assembler806074 + Ref: 10806074 + Node: Basic Assembler Syntax807617 + Ref: gnat_ugn/inline_assembler basic-assembler-syntax807739 + Ref: 234807739 + Ref: gnat_ugn/inline_assembler id2807739 + Ref: 235807739 + Node: A Simple Example of Inline Assembler809754 + Ref: gnat_ugn/inline_assembler a-simple-example-of-inline-assembler809921 + Ref: 236809921 + Ref: gnat_ugn/inline_assembler id3809921 + Ref: 237809921 + Node: Output Variables in Inline Assembler813227 + Ref: gnat_ugn/inline_assembler id4813407 + Ref: 238813407 + Ref: gnat_ugn/inline_assembler output-variables-in-inline-assembler813407 + Ref: 239813407 + Node: Input Variables in Inline Assembler821494 + Ref: gnat_ugn/inline_assembler id5821668 + Ref: 23a821668 + Ref: gnat_ugn/inline_assembler input-variables-in-inline-assembler821668 + Ref: 23b821668 + Node: Inlining Inline Assembler Code824056 + Ref: gnat_ugn/inline_assembler id6824217 + Ref: 23c824217 + Ref: gnat_ugn/inline_assembler inlining-inline-assembler-code824217 + Ref: 23d824217 + Node: Other Asm Functionality826116 + Ref: gnat_ugn/inline_assembler id7826233 + Ref: 23e826233 + Ref: gnat_ugn/inline_assembler other-asm-functionality826233 + Ref: 23f826233 + Node: The Clobber Parameter826547 + Ref: gnat_ugn/inline_assembler id8826661 + Ref: 240826661 + Ref: gnat_ugn/inline_assembler the-clobber-parameter826661 + Ref: 241826661 + Node: The Volatile Parameter828632 + Ref: gnat_ugn/inline_assembler id9828746 + Ref: 242828746 + Ref: gnat_ugn/inline_assembler the-volatile-parameter828746 + Ref: 243828746 + Node: GNU Free Documentation License829902 + Ref: share/gnu_free_documentation_license doc830013 + Ref: 244830013 + Ref: share/gnu_free_documentation_license gnu-fdl830013 + Ref: 1830013 + Ref: share/gnu_free_documentation_license gnu-free-documentation-license830013 + Ref: 245830013 + Node: Index853355 + Ref: cf991873 + Ref: gnat_ugn/gnat_utility_programs switches-related-to-project-files991903 +  + End Tag Table + +  + Local Variables: + coding: utf-8 + End: diff -Nrcpad gcc-12.4.0/gcc/doc/gpl.7 gcc-12.5.0-RC-20250704/gcc/doc/gpl.7 *** gcc-12.4.0/gcc/doc/gpl.7 Thu Jun 20 08:11:52 2024 --- gcc-12.5.0-RC-20250704/gcc/doc/gpl.7 Fri Jul 4 07:26:03 2025 *************** *** 1,4 **** ! .\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.43) .\" .\" Standard preamble: .\" ======================================================================== --- 1,4 ---- ! .\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35) .\" .\" Standard preamble: .\" ======================================================================== *************** *** 54,73 **** .\" Avoid warning from groff about undefined register 'F'. .de IX .. ! .nr rF 0 ! .if \n(.g .if rF .nr rF 1 ! .if (\n(rF:(\n(.g==0)) \{\ ! . if \nF \{\ ! . de IX ! . tm Index:\\$1\t\\n%\t"\\$2" .. ! . if !\nF==2 \{\ ! . nr % 0 ! . nr F 2 ! . \} . \} .\} - .rr rF .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. --- 54,69 ---- .\" Avoid warning from groff about undefined register 'F'. .de IX .. ! .if !\nF .nr F 0 ! .if \nF>0 \{\ ! . de IX ! . tm Index:\\$1\t\\n%\t"\\$2" .. ! . if !\nF==2 \{\ ! . nr % 0 ! . nr F 2 . \} .\} .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. *************** *** 133,139 **** .\" ======================================================================== .\" .IX Title "GPL 7" ! .TH GPL 7 "2024-06-20" "gcc-12.4.0" "GNU" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l --- 129,135 ---- .\" ======================================================================== .\" .IX Title "GPL 7" ! .TH GPL 7 "2025-07-04" "gcc-12.4.1" "GNU" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l *************** the \s-1GNU\s0 Lesser General Public Lic *** 841,847 **** first, please read <\fBhttps://www.gnu.org/licenses/why\-not\-lgpl.html\fR>. .SH "SEE ALSO" .IX Header "SEE ALSO" ! \&\fBgfdl\fR\|(7), \fBfsf\-funding\fR\|(7). .SH "COPYRIGHT" .IX Header "COPYRIGHT" Copyright (c) 2007 Free Software Foundation, Inc. --- 837,843 ---- first, please read <\fBhttps://www.gnu.org/licenses/why\-not\-lgpl.html\fR>. .SH "SEE ALSO" .IX Header "SEE ALSO" ! \&\fIgfdl\fR\|(7), \fIfsf\-funding\fR\|(7). .SH "COPYRIGHT" .IX Header "COPYRIGHT" Copyright (c) 2007 Free Software Foundation, Inc. diff -Nrcpad gcc-12.4.0/gcc/doc/invoke.texi gcc-12.5.0-RC-20250704/gcc/doc/invoke.texi *** gcc-12.4.0/gcc/doc/invoke.texi Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/doc/invoke.texi Fri Jul 4 07:24:42 2025 *************** performance of the code. Permissible va *** 19203,19210 **** @samp{cortex-a78}, @samp{cortex-a78ae}, @samp{cortex-a78c}, @samp{ares}, @samp{exynos-m1}, @samp{emag}, @samp{falkor}, @samp{neoverse-512tvb}, @samp{neoverse-e1}, @samp{neoverse-n1}, ! @samp{neoverse-n2}, @samp{neoverse-v1}, @samp{neoverse-v2}, @samp{qdf24xx}, ! @samp{saphira}, @samp{phecda}, @samp{xgene1}, @samp{vulcan}, @samp{octeontx}, @samp{octeontx81}, @samp{octeontx83}, @samp{octeontx2}, @samp{octeontx2t98}, @samp{octeontx2t96} @samp{octeontx2t93}, @samp{octeontx2f95}, @samp{octeontx2f95n}, --- 19203,19210 ---- @samp{cortex-a78}, @samp{cortex-a78ae}, @samp{cortex-a78c}, @samp{ares}, @samp{exynos-m1}, @samp{emag}, @samp{falkor}, @samp{neoverse-512tvb}, @samp{neoverse-e1}, @samp{neoverse-n1}, ! @samp{neoverse-n2}, @samp{neoverse-v1}, @samp{neoverse-v2}, @samp{grace}, ! @samp{qdf24xx}, @samp{saphira}, @samp{phecda}, @samp{xgene1}, @samp{vulcan}, @samp{octeontx}, @samp{octeontx81}, @samp{octeontx83}, @samp{octeontx2}, @samp{octeontx2t98}, @samp{octeontx2t96} @samp{octeontx2t93}, @samp{octeontx2f95}, @samp{octeontx2f95n}, *************** Intel Core 2 CPU with 64-bit extensions, *** 31449,31454 **** --- 31449,31455 ---- SAHF and FXSR instruction set support. @item nehalem + @itemx corei7 Intel Nehalem CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF and FXSR instruction set support. *************** Intel Westmere CPU with 64-bit extension *** 31457,31473 **** SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR and PCLMUL instruction set support. @item sandybridge Intel Sandy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE and PCLMUL instruction set support. @item ivybridge Intel Ivy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND and F16C instruction set support. @item haswell ! Intel Haswell CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE and HLE instruction set support. --- 31458,31477 ---- SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR and PCLMUL instruction set support. @item sandybridge + @itemx corei7-avx Intel Sandy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE and PCLMUL instruction set support. @item ivybridge + @itemx core-avx-i Intel Ivy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND and F16C instruction set support. @item haswell ! @itemx core-avx2 ! Intel Haswell CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE and HLE instruction set support. *************** SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR *** 31483,31529 **** F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, CLFLUSHOPT, XSAVEC, XSAVES and SGX instruction set support. - @item bonnell - Intel Bonnell CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3 and SSSE3 - instruction set support. - - @item silvermont - Intel Silvermont CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, - SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW and RDRND - instruction set support. - - @item goldmont - Intel Goldmont CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, - SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW, RDRND, AES, SHA, - RDSEED, XSAVE, XSAVEC, XSAVES, XSAVEOPT, CLFLUSHOPT and FSGSBASE instruction - set support. - - @item goldmont-plus - Intel Goldmont Plus CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, - SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW, RDRND, AES, - SHA, RDSEED, XSAVE, XSAVEC, XSAVES, XSAVEOPT, CLFLUSHOPT, FSGSBASE, PTWRITE, - RDPID and SGX instruction set support. - - @item tremont - Intel Tremont CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, - SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW, RDRND, AES, SHA, - RDSEED, XSAVE, XSAVEC, XSAVES, XSAVEOPT, CLFLUSHOPT, FSGSBASE, PTWRITE, RDPID, - SGX, CLWB, GFNI-SSE, MOVDIRI, MOVDIR64B, CLDEMOTE and WAITPKG instruction set - support. - - @item knl - Intel Knight's Landing CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, - SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, - RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, - AVX512PF, AVX512ER, AVX512F, AVX512CD and PREFETCHWT1 instruction set support. - - @item knm - Intel Knights Mill CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, - SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, - RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, - AVX512PF, AVX512ER, AVX512F, AVX512CD and PREFETCHWT1, AVX5124VNNIW, - AVX5124FMAPS and AVX512VPOPCNTDQ instruction set support. - @item skylake-avx512 Intel Skylake Server CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, --- 31487,31492 ---- *************** RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA *** 31531,31546 **** AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL, AVX512BW, AVX512DQ and AVX512CD instruction set support. @item cannonlake ! Intel Cannonlake Server CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA and SHA instruction set support. @item icelake-client ! Intel Icelake Client CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ, --- 31494,31523 ---- AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL, AVX512BW, AVX512DQ and AVX512CD instruction set support. + @item cascadelake + Intel Cascade Lake CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3, + SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, + F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, + CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL, AVX512BW, AVX512DQ, + AVX512CD and AVX512VNNI instruction set support. + @item cannonlake ! Intel Cannon Lake Server CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA and SHA instruction set support. + @item cooperlake + Intel Cooper Lake CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3, + SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, + F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, + CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL, AVX512BW, AVX512DQ, + AVX512CD, AVX512VNNI and AVX512BF16 instruction set support. + @item icelake-client ! Intel Ice Lake Client CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ, *************** AVX512CD, PKU, AVX512VBMI, AVX512IFMA, S *** 31548,31554 **** , VPCLMULQDQ, AVX512BITALG, RDPID and AVX512VPOPCNTDQ instruction set support. @item icelake-server ! Intel Icelake Server CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ, --- 31525,31531 ---- , VPCLMULQDQ, AVX512BITALG, RDPID and AVX512VPOPCNTDQ instruction set support. @item icelake-server ! Intel Ice Lake Server CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ, *************** AVX512CD, PKU, AVX512VBMI, AVX512IFMA, S *** 31556,31610 **** , VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, PCONFIG, WBNOINVD and CLWB instruction set support. ! @item cascadelake ! Intel Cascadelake CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, ! SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, ! F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, ! CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL, AVX512BW, AVX512DQ, ! AVX512CD and AVX512VNNI instruction set support. ! ! @item cooperlake ! Intel cooperlake CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, ! CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, CLWB, AVX512VL, AVX512BW, AVX512DQ, ! AVX512CD, AVX512VNNI and AVX512BF16 instruction set support. ! @item tigerlake ! Intel Tigerlake CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, ! CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2, ! VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, MOVDIRI, MOVDIR64B, CLWB, ! AVX512VP2INTERSECT and KEYLOCKER instruction set support. @item sapphirerapids ! Intel sapphirerapids CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, ! SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, ! RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, ! AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2, VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, PCONFIG, WBNOINVD, CLWB, MOVDIRI, MOVDIR64B, ENQCMD, CLDEMOTE, PTWRITE, WAITPKG, SERIALIZE, TSXLDTRK, UINTR, AMX-BF16, AMX-TILE, AMX-INT8, AVX-VNNI, AVX512-FP16 and AVX512BF16 instruction set support. ! @item alderlake ! Intel Alderlake CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, ! SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC, XSAVES, ! XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX, GFNI-SSE, CLWB, MOVDIRI, MOVDIR64B, ! CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT, PCONFIG, PKU, ! VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL and AVX-VNNI instruction set support. ! @item rocketlake ! Intel Rocketlake CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3 ! , SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, ! F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, ! CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD ! PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2, ! VPCLMULQDQ, AVX512BITALG, RDPID and AVX512VPOPCNTDQ instruction set support. @item k6 AMD K6 CPU with MMX instruction set support. --- 31533,31615 ---- , VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, PCONFIG, WBNOINVD and CLWB instruction set support. ! @item tigerlake ! Intel Tiger Lake CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, ! CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ, ! AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2, ! VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, MOVDIRI, MOVDIR64B, CLWB, ! AVX512VP2INTERSECT and KEYLOCKER instruction set support. ! @item rocketlake ! Intel Rocket Lake CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, ! CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2, ! VPCLMULQDQ, AVX512BITALG, RDPID and AVX512VPOPCNTDQ instruction set support. ! ! @item alderlake ! Intel Alder Lake CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, ! SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC, XSAVES, ! XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX, GFNI-SSE, CLWB, MOVDIRI, MOVDIR64B, ! WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT, PCONFIG, PKU, VAES, ! VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL and AVX-VNNI instruction set support. @item sapphirerapids ! Intel Sapphire Rapids CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3, ! SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, ! F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, ! CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2, VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, PCONFIG, WBNOINVD, CLWB, MOVDIRI, MOVDIR64B, ENQCMD, CLDEMOTE, PTWRITE, WAITPKG, SERIALIZE, TSXLDTRK, UINTR, AMX-BF16, AMX-TILE, AMX-INT8, AVX-VNNI, AVX512-FP16 and AVX512BF16 instruction set support. ! @item bonnell ! @itemx atom ! Intel Bonnell CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3 and SSSE3 ! instruction set support. ! ! @item silvermont ! @itemx slm ! Intel Silvermont CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, ! SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW and RDRND ! instruction set support. ! ! @item goldmont ! Intel Goldmont CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, ! SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW, RDRND, AES, SHA, ! RDSEED, XSAVE, XSAVEC, XSAVES, XSAVEOPT, CLFLUSHOPT and FSGSBASE instruction ! set support. ! ! @item goldmont-plus ! Intel Goldmont Plus CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, ! SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW, RDRND, AES, ! SHA, RDSEED, XSAVE, XSAVEC, XSAVES, XSAVEOPT, CLFLUSHOPT, FSGSBASE, PTWRITE, ! RDPID and SGX instruction set support. ! ! @item tremont ! Intel Tremont CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, ! SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, PCLMUL, PREFETCHW, RDRND, AES, SHA, ! RDSEED, XSAVE, XSAVEC, XSAVES, XSAVEOPT, CLFLUSHOPT, FSGSBASE, PTWRITE, RDPID, ! SGX, CLWB, GFNI-SSE, MOVDIRI, MOVDIR64B, CLDEMOTE and WAITPKG instruction set support. ! @item knl ! Intel Knights Landing CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, ! SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, ! RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, ! AVX512PF, AVX512ER, AVX512F, AVX512CD and PREFETCHWT1 instruction set support. ! ! @item knm ! Intel Knights Mill CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, ! SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, ! RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, ! AVX512PF, AVX512ER, AVX512F, AVX512CD and PREFETCHWT1, AVX5124VNNIW, ! AVX5124FMAPS and AVX512VPOPCNTDQ instruction set support. @item k6 AMD K6 CPU with MMX instruction set support. *************** WBNOINVD, PKU, VPCLMULQDQ, VAES, AVX512F *** 31697,31702 **** --- 31702,31717 ---- AVX512BW, AVX512VL, AVX512BF16, AVX512VBMI, AVX512VBMI2, AVX512VNNI, AVX512BITALG, AVX512VPOPCNTDQ, GFNI and 64-bit instruction set extensions.) + @item znver5 + AMD Family 1ah core based CPUs with x86-64 instruction set support. (This + supersets BMI, BMI2, CLWB, F16C, FMA, FSGSBASE, AVX, AVX2, ADCX, RDSEED, + MWAITX, SHA, CLZERO, AES, PCLMUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, + SSSE3, SSE4.1, SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT, RDPID, + WBNOINVD, PKU, VPCLMULQDQ, VAES, AVX512F, AVX512DQ, AVX512IFMA, AVX512CD, + AVX512BW, AVX512VL, AVX512BF16, AVX512VBMI, AVX512VBMI2, AVX512VNNI, + AVX512BITALG, AVX512VPOPCNTDQ, GFNI, AVXVNNI, MOVDIRI, MOVDIR64B, + AVX512VP2INTERSECT, PREFETCHI and 64-bit instruction set extensions.) + @item btver1 CPUs based on AMD Family 14h cores with x86-64 instruction set support. (This supersets MMX, SSE, SSE2, SSE3, SSSE3, SSE4A, CX16, ABM and 64-bit diff -Nrcpad gcc-12.4.0/gcc/doc/lto-dump.1 gcc-12.5.0-RC-20250704/gcc/doc/lto-dump.1 *** gcc-12.4.0/gcc/doc/lto-dump.1 Thu Jun 20 08:11:52 2024 --- gcc-12.5.0-RC-20250704/gcc/doc/lto-dump.1 Fri Jul 4 07:26:03 2025 *************** *** 1,4 **** ! .\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.43) .\" .\" Standard preamble: .\" ======================================================================== --- 1,4 ---- ! .\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35) .\" .\" Standard preamble: .\" ======================================================================== *************** *** 54,73 **** .\" Avoid warning from groff about undefined register 'F'. .de IX .. ! .nr rF 0 ! .if \n(.g .if rF .nr rF 1 ! .if (\n(rF:(\n(.g==0)) \{\ ! . if \nF \{\ ! . de IX ! . tm Index:\\$1\t\\n%\t"\\$2" .. ! . if !\nF==2 \{\ ! . nr % 0 ! . nr F 2 ! . \} . \} .\} - .rr rF .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. --- 54,69 ---- .\" Avoid warning from groff about undefined register 'F'. .de IX .. ! .if !\nF .nr F 0 ! .if \nF>0 \{\ ! . de IX ! . tm Index:\\$1\t\\n%\t"\\$2" .. ! . if !\nF==2 \{\ ! . nr % 0 ! . nr F 2 . \} .\} .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. *************** *** 133,139 **** .\" ======================================================================== .\" .IX Title "LTO-DUMP 1" ! .TH LTO-DUMP 1 "2024-06-20" "gcc-12.4.0" "GNU" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l --- 129,135 ---- .\" ======================================================================== .\" .IX Title "LTO-DUMP 1" ! .TH LTO-DUMP 1 "2025-07-04" "gcc-12.4.1" "GNU" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l *************** any later version published by the Free *** 222,228 **** Invariant Sections being \*(L"\s-1GNU\s0 General Public License\*(R" and \*(L"Funding Free Software\*(R", the Front-Cover texts being (a) (see below), and with the Back-Cover Texts being (b) (see below). A copy of the license is ! included in the \fBgfdl\fR\|(7) man page. .PP (a) The \s-1FSF\s0's Front-Cover Text is: .PP --- 218,224 ---- Invariant Sections being \*(L"\s-1GNU\s0 General Public License\*(R" and \*(L"Funding Free Software\*(R", the Front-Cover texts being (a) (see below), and with the Back-Cover Texts being (b) (see below). A copy of the license is ! included in the \fIgfdl\fR\|(7) man page. .PP (a) The \s-1FSF\s0's Front-Cover Text is: .PP diff -Nrcpad gcc-12.4.0/gcc/except.cc gcc-12.5.0-RC-20250704/gcc/except.cc *** gcc-12.4.0/gcc/except.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/except.cc Fri Jul 4 07:24:42 2025 *************** duplicate_eh_regions_1 (struct duplicate *** 541,547 **** eh_region new_r; new_r = gen_eh_region (old_r->type, outer); ! gcc_assert (!data->eh_map->put (old_r, new_r)); switch (old_r->type) { --- 541,548 ---- eh_region new_r; new_r = gen_eh_region (old_r->type, outer); ! bool existed = data->eh_map->put (old_r, new_r); ! gcc_assert (!existed); switch (old_r->type) { *************** duplicate_eh_regions_1 (struct duplicate *** 586,592 **** continue; new_lp = gen_eh_landing_pad (new_r); ! gcc_assert (!data->eh_map->put (old_lp, new_lp)); new_lp->post_landing_pad = data->label_map (old_lp->post_landing_pad, data->label_map_data); --- 587,594 ---- continue; new_lp = gen_eh_landing_pad (new_r); ! bool existed = data->eh_map->put (old_lp, new_lp); ! gcc_assert (!existed); new_lp->post_landing_pad = data->label_map (old_lp->post_landing_pad, data->label_map_data); diff -Nrcpad gcc-12.4.0/gcc/expmed.cc gcc-12.5.0-RC-20250704/gcc/expmed.cc *** gcc-12.4.0/gcc/expmed.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/expmed.cc Fri Jul 4 07:24:42 2025 *************** init_expmed (void) *** 284,290 **** for (speed = 0; speed < 2; speed++) { crtl->maybe_hot_insn_p = speed; ! set_zero_cost (speed, set_src_cost (const0_rtx, mode, speed)); for (mode = MIN_MODE_INT; mode <= MAX_MODE_INT; mode = (machine_mode)(mode + 1)) --- 284,290 ---- for (speed = 0; speed < 2; speed++) { crtl->maybe_hot_insn_p = speed; ! set_zero_cost (speed, set_src_cost (const0_rtx, QImode, speed)); for (mode = MIN_MODE_INT; mode <= MAX_MODE_INT; mode = (machine_mode)(mode + 1)) *************** emit_store_flag_1 (rtx target, enum rtx_ *** 5601,5611 **** enum insn_code icode; machine_mode compare_mode; enum mode_class mclass; - enum rtx_code scode; if (unsignedp) code = unsigned_condition (code); - scode = swap_condition (code); /* If one operand is constant, make it the second one. Only do this if the other operand is not constant as well. */ --- 5601,5609 ---- *************** emit_store_flag_1 (rtx target, enum rtx_ *** 5773,5778 **** --- 5771,5778 ---- if (GET_MODE_CLASS (mode) == MODE_FLOAT) { + enum rtx_code scode = swap_condition (code); + tem = emit_cstore (target, icode, scode, mode, compare_mode, unsignedp, op1, op0, normalizep, target_mode); if (tem) diff -Nrcpad gcc-12.4.0/gcc/final.cc gcc-12.5.0-RC-20250704/gcc/final.cc *** gcc-12.4.0/gcc/final.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/final.cc Fri Jul 4 07:24:42 2025 *************** get_attr_length_1 (rtx_insn *insn, int ( *** 378,384 **** case CALL_INSN: case JUMP_INSN: ! length = fallback_fn (insn); break; case INSN: --- 378,388 ---- case CALL_INSN: case JUMP_INSN: ! body = PATTERN (insn); ! if (GET_CODE (body) == ASM_INPUT || asm_noperands (body) >= 0) ! length = asm_insn_count (body) * fallback_fn (insn); ! else ! length = fallback_fn (insn); break; case INSN: diff -Nrcpad gcc-12.4.0/gcc/fold-const.cc gcc-12.5.0-RC-20250704/gcc/fold-const.cc *** gcc-12.4.0/gcc/fold-const.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/fold-const.cc Fri Jul 4 07:24:42 2025 *************** const_unop (enum tree_code code, tree ty *** 1802,1808 **** if (TREE_CODE (arg0) == INTEGER_CST) return fold_not_const (arg0, type); else if (POLY_INT_CST_P (arg0)) ! return wide_int_to_tree (type, -poly_int_cst_value (arg0)); /* Perform BIT_NOT_EXPR on each element individually. */ else if (TREE_CODE (arg0) == VECTOR_CST) { --- 1802,1808 ---- if (TREE_CODE (arg0) == INTEGER_CST) return fold_not_const (arg0, type); else if (POLY_INT_CST_P (arg0)) ! return wide_int_to_tree (type, ~poly_int_cst_value (arg0)); /* Perform BIT_NOT_EXPR on each element individually. */ else if (TREE_CODE (arg0) == VECTOR_CST) { *************** decode_field_reference (location_t loc, *** 4767,4772 **** --- 4767,4775 ---- || *pbitsize < 0 || offset != 0 || TREE_CODE (inner) == PLACEHOLDER_EXPR + /* We eventually want to build a larger reference and need to take + the address of this. */ + || (!REFERENCE_CLASS_P (inner) && !DECL_P (inner)) /* Reject out-of-bound accesses (PR79731). */ || (! AGGREGATE_TYPE_P (TREE_TYPE (inner)) && compare_tree_int (TYPE_SIZE (TREE_TYPE (inner)), diff -Nrcpad gcc-12.4.0/gcc/fortran/ChangeLog gcc-12.5.0-RC-20250704/gcc/fortran/ChangeLog *** gcc-12.4.0/gcc/fortran/ChangeLog Thu Jun 20 08:09:01 2024 --- gcc-12.5.0-RC-20250704/gcc/fortran/ChangeLog Fri Jul 4 07:24:42 2025 *************** *** 1,3 **** --- 1,133 ---- + 2025-06-13 Jakub Jelinek + + Backported from master: + 2025-05-13 Jakub Jelinek + Daniil Kochergin + Tobias Burnus + + PR fortran/120191 + * trans-intrinsic.cc (strip_kind_from_actual): Remove. + (gfc_conv_intrinsic_minmaxloc): Don't call strip_kind_from_actual. + Free and clear kind_arg->expr if non-NULL. Set back_arg->name to + "%VAL" instead of a loop looking for last argument. Remove actual + variable, use array_arg instead. Free and clear dim_arg->expr if + non-NULL for BT_CHARACTER cases instead of using a loop. + + 2025-04-22 Harald Anlauf + + Backported from master: + 2025-04-09 Harald Anlauf + + PR fortran/119656 + * interface.cc (gfc_compare_actual_formal): Fix front-end memleak + when searching for matching interfaces. + * trans-expr.cc (gfc_conv_procedure_call): If there is a formal + dummy corresponding to an absent argument, use its type, and only + fall back to inferred type otherwise. + + 2025-01-13 Harald Anlauf + + Backported from master: + 2025-01-03 Harald Anlauf + + PR fortran/106692 + * trans-expr.cc (gfc_conv_expr_op): Inhibit excessive optimization + of Cray pointers by treating them as volatile in comparisons. + + 2024-11-30 Paul Thomas + + Backported from master: + 2024-11-13 Paul Thomas + + PR fortran/105054 + * resolve.cc (get_temp_from_expr): If the pointer function has + a deferred character length, generate a new deferred charlen + for the temporary. + + 2024-11-27 Paul Thomas + + Backported from master: + 2024-11-26 Paul Thomas + + PR fortran/117763 + * trans-array.cc (gfc_get_array_span): Guard against derefences + of 'expr'. Clean up some typos. Use 'gfc_get_vptr_from_expr' + for clarity and apply a functional reversion of last section + that deals with class dummies. + + 2024-11-23 Paul Thomas + + Backported from master: + 2024-11-11 Paul Thomas + + PR fortran/109345 + * trans-array.cc (gfc_get_array_span): Unlimited polymorphic + expressions are now treated separately since the span need not + be the same as the element size. + + 2024-11-01 Paul Thomas + + Backported from master: + 2024-10-25 Paul Thomas + + PR fortran/79685 + * decl.cc (match_data_constant): Find the symtree instead of + the symbol so the use renamed symbols are found. Pass this and + the derived type to gfc_match_structure_constructor. + * match.h: Update prototype of gfc_match_structure_contructor. + * primary.cc (gfc_match_structure_constructor): Remove call to + gfc_get_ha_sym_tree and use caller supplied symtree instead. + + 2024-10-25 Paul Thomas + + Backported from master: + 2024-07-16 Paul Thomas + + PR fortran/84868 + * simplify.cc (gfc_simplify_len_trim): If the argument is an + element of a parameter array, simplify all the elements and + build a new parameter array to hold the result, after checking + that it doesn't already exist. + * trans-expr.cc (gfc_get_interface_mapping_array) if a string + length is available, use it for the typespec. + (gfc_add_interface_mapping): Supply the se string length. + + 2024-09-20 Harald Anlauf + + Backported from master: + 2024-09-05 Harald Anlauf + + PR fortran/100273 + * trans-decl.cc (gfc_create_module_variable): Handle module + variable also when it is needed for the result specification + of a contained function. + + 2024-08-05 Paul Thomas + + Backported from master: + 2024-07-18 Paul Thomas + + PR fortran/108889 + * gfortran.h: Add bit field 'allocated_in_scope' to gfc_symbol. + * trans-array.cc (gfc_array_allocate): Set 'allocated_in_scope' + after allocation if not a component reference. + (gfc_alloc_allocatable_for_assignment): If 'allocated_in_scope' + not set, not a component ref and not allocated, set the array + bounds and offset to give zero length in all dimensions. Then + set allocated_in_scope. + + 2024-07-21 Harald Anlauf + + Backported from master: + 2024-07-19 Harald Anlauf + + PR fortran/103115 + * trans-array.cc (gfc_trans_array_constructor_value): If the first + element of an array constructor is deferred-length character and + therefore does not have an element size known at compile time, do + not try to collect subsequent constant elements into a constructor + for optimization. + 2024-06-20 Release Manager * GCC 12.4.0 released. diff -Nrcpad gcc-12.4.0/gcc/fortran/decl.cc gcc-12.5.0-RC-20250704/gcc/fortran/decl.cc *** gcc-12.4.0/gcc/fortran/decl.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/fortran/decl.cc Fri Jul 4 07:24:42 2025 *************** match_data_constant (gfc_expr **result) *** 376,381 **** --- 376,382 ---- gfc_expr *expr; match m; locus old_loc; + gfc_symtree *symtree; m = gfc_match_literal_constant (&expr, 1); if (m == MATCH_YES) *************** match_data_constant (gfc_expr **result) *** 435,443 **** if (m != MATCH_YES) return m; ! if (gfc_find_symbol (name, NULL, 1, &sym)) return MATCH_ERROR; if (sym && sym->attr.generic) dt_sym = gfc_find_dt_in_generic (sym); --- 436,446 ---- if (m != MATCH_YES) return m; ! if (gfc_find_sym_tree (name, NULL, 1, &symtree)) return MATCH_ERROR; + sym = symtree->n.sym; + if (sym && sym->attr.generic) dt_sym = gfc_find_dt_in_generic (sym); *************** match_data_constant (gfc_expr **result) *** 451,457 **** return MATCH_ERROR; } else if (dt_sym && gfc_fl_struct (dt_sym->attr.flavor)) ! return gfc_match_structure_constructor (dt_sym, result); /* Check to see if the value is an initialization array expression. */ if (sym->value->expr_type == EXPR_ARRAY) --- 454,460 ---- return MATCH_ERROR; } else if (dt_sym && gfc_fl_struct (dt_sym->attr.flavor)) ! return gfc_match_structure_constructor (dt_sym, symtree, result); /* Check to see if the value is an initialization array expression. */ if (sym->value->expr_type == EXPR_ARRAY) diff -Nrcpad gcc-12.4.0/gcc/fortran/gfortran.h gcc-12.5.0-RC-20250704/gcc/fortran/gfortran.h *** gcc-12.4.0/gcc/fortran/gfortran.h Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/fortran/gfortran.h Fri Jul 4 07:24:42 2025 *************** typedef struct gfc_symbol *** 1887,1892 **** --- 1887,1896 ---- /* Set if this should be passed by value, but is not a VALUE argument according to the Fortran standard. */ unsigned pass_as_value:1; + /* Set if an allocatable array variable has been allocated in the current + scope. Used in the suppression of uninitialized warnings in reallocation + on assignment. */ + unsigned allocated_in_scope:1; int refs; struct gfc_namespace *ns; /* namespace containing this symbol */ diff -Nrcpad gcc-12.4.0/gcc/fortran/gfortran.info gcc-12.5.0-RC-20250704/gcc/fortran/gfortran.info *** gcc-12.4.0/gcc/fortran/gfortran.info Thu Jun 20 08:26:18 2024 --- gcc-12.5.0-RC-20250704/gcc/fortran/gfortran.info Fri Jul 4 07:45:02 2025 *************** *** 1,4 **** ! This is gfortran.info, produced by makeinfo version 6.8 from gfortran.texi. Copyright (C) 1999-2022 Free Software Foundation, Inc. --- 1,4 ---- ! This is gfortran.info, produced by makeinfo version 6.5 from gfortran.texi. Copyright (C) 1999-2022 Free Software Foundation, Inc. *************** the other form by either removing 'no-' *** 1597,1603 **** Use of '-fno-underscoring' is not recommended unless you are experimenting with issues such as integration of GNU Fortran into ! existing system environments (vis-à-vis existing libraries, tools, and so on). For example, with '-funderscoring', and assuming that 'j()' and --- 1597,1603 ---- Use of '-fno-underscoring' is not recommended unless you are experimenting with issues such as integration of GNU Fortran into ! existing system environments (vis-a`-vis existing libraries, tools, and so on). For example, with '-funderscoring', and assuming that 'j()' and *************** significant help to the GNU Fortran proj *** 19616,19622 **** - Steven Bosscher - Paul Brook - Tobias Burnus ! - François-Xavier Coudert - Bud Davis - Jerry DeLisle - Erik Edelmann --- 19616,19622 ---- - Steven Bosscher - Paul Brook - Tobias Burnus ! - Franc,ois-Xavier Coudert - Bud Davis - Jerry DeLisle - Erik Edelmann *************** significant help to the GNU Fortran proj *** 19638,19644 **** - Tim Prince - Christopher D. Rickett - Richard Sandiford ! - Tobias Schlüter - Roger Sayle - Paul Thomas - Andy Vaught --- 19638,19644 ---- - Tim Prince - Christopher D. Rickett - Richard Sandiford ! - Tobias Schlu"ter - Roger Sayle - Paul Thomas - Andy Vaught *************** patches, and much needed feedback and en *** 19651,19657 **** project: - Bill Clodius ! - Dominique d'Humières - Kate Hedstrom - Erik Schnetter - Gerhard Steinmetz --- 19651,19657 ---- project: - Bill Clodius ! - Dominique d'Humie`res - Kate Hedstrom - Erik Schnetter - Gerhard Steinmetz *************** Node: Option Index767842 *** 23171,23178 **** Node: Keyword Index786903  End Tag Table - -  - Local Variables: - coding: utf-8 - End: --- 23171,23173 ---- diff -Nrcpad gcc-12.4.0/gcc/fortran/interface.cc gcc-12.5.0-RC-20250704/gcc/fortran/interface.cc *** gcc-12.4.0/gcc/fortran/interface.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/fortran/interface.cc Fri Jul 4 07:24:42 2025 *************** gfc_compare_actual_formal (gfc_actual_ar *** 3226,3232 **** return false; } else ! a->associated_dummy = get_nonintrinsic_dummy_arg (f); if (a->expr == NULL) { --- 3226,3236 ---- return false; } else ! { ! if (a->associated_dummy) ! free (a->associated_dummy); ! a->associated_dummy = get_nonintrinsic_dummy_arg (f); ! } if (a->expr == NULL) { diff -Nrcpad gcc-12.4.0/gcc/fortran/match.h gcc-12.5.0-RC-20250704/gcc/fortran/match.h *** gcc-12.4.0/gcc/fortran/match.h Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/fortran/match.h Fri Jul 4 07:24:42 2025 *************** match gfc_match_bind_c_stmt (void); *** 296,302 **** match gfc_match_bind_c (gfc_symbol *, bool); /* primary.cc. */ ! match gfc_match_structure_constructor (gfc_symbol *, gfc_expr **); match gfc_match_variable (gfc_expr **, int); match gfc_match_equiv_variable (gfc_expr **); match gfc_match_actual_arglist (int, gfc_actual_arglist **, bool = false); --- 296,302 ---- match gfc_match_bind_c (gfc_symbol *, bool); /* primary.cc. */ ! match gfc_match_structure_constructor (gfc_symbol *, gfc_symtree *, gfc_expr **); match gfc_match_variable (gfc_expr **, int); match gfc_match_equiv_variable (gfc_expr **); match gfc_match_actual_arglist (int, gfc_actual_arglist **, bool = false); diff -Nrcpad gcc-12.4.0/gcc/fortran/primary.cc gcc-12.5.0-RC-20250704/gcc/fortran/primary.cc *** gcc-12.4.0/gcc/fortran/primary.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/fortran/primary.cc Fri Jul 4 07:24:42 2025 *************** gfc_convert_to_structure_constructor (gf *** 3380,3397 **** match ! gfc_match_structure_constructor (gfc_symbol *sym, gfc_expr **result) { match m; gfc_expr *e; - gfc_symtree *symtree; bool t = true; - gfc_get_ha_sym_tree (sym->name, &symtree); - e = gfc_get_expr (); - e->symtree = symtree; e->expr_type = EXPR_FUNCTION; e->where = gfc_current_locus; gcc_assert (gfc_fl_struct (sym->attr.flavor) --- 3380,3395 ---- match ! gfc_match_structure_constructor (gfc_symbol *sym, gfc_symtree *symtree, ! gfc_expr **result) { match m; gfc_expr *e; bool t = true; e = gfc_get_expr (); e->expr_type = EXPR_FUNCTION; + e->symtree = symtree; e->where = gfc_current_locus; gcc_assert (gfc_fl_struct (sym->attr.flavor) diff -Nrcpad gcc-12.4.0/gcc/fortran/resolve.cc gcc-12.5.0-RC-20250704/gcc/fortran/resolve.cc *** gcc-12.4.0/gcc/fortran/resolve.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/fortran/resolve.cc Fri Jul 4 07:24:42 2025 *************** resolve_ptr_fcn_assign (gfc_code **code, *** 11800,11805 **** --- 11800,11816 ---- tmp_ptr_expr->symtree->n.sym->attr.allocatable = 0; tmp_ptr_expr->where = (*code)->loc; + /* A new charlen is required to ensure that the variable string length + is different to that of the original lhs for deferred results. */ + if (s->result->ts.deferred && tmp_ptr_expr->ts.type == BT_CHARACTER) + { + tmp_ptr_expr->ts.u.cl = gfc_get_charlen(); + tmp_ptr_expr->ts.deferred = 1; + tmp_ptr_expr->ts.u.cl->next = gfc_current_ns->cl_list; + gfc_current_ns->cl_list = tmp_ptr_expr->ts.u.cl; + tmp_ptr_expr->symtree->n.sym->ts.u.cl = tmp_ptr_expr->ts.u.cl; + } + this_code = build_assignment (EXEC_ASSIGN, tmp_ptr_expr, (*code)->expr2, NULL, NULL, (*code)->loc); diff -Nrcpad gcc-12.4.0/gcc/fortran/simplify.cc gcc-12.5.0-RC-20250704/gcc/fortran/simplify.cc *** gcc-12.4.0/gcc/fortran/simplify.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/fortran/simplify.cc Fri Jul 4 07:24:42 2025 *************** gfc_simplify_len_trim (gfc_expr *e, gfc_ *** 4582,4587 **** --- 4582,4662 ---- if (k == -1) return &gfc_bad_expr; + /* If the expression is either an array element or section, an array + parameter must be built so that the reference can be applied. Constant + references should have already been simplified away. All other cases + can proceed to translation, where kind conversion will occur silently. */ + if (e->expr_type == EXPR_VARIABLE + && e->ts.type == BT_CHARACTER + && e->symtree->n.sym->attr.flavor == FL_PARAMETER + && e->ref && e->ref->type == REF_ARRAY + && e->ref->u.ar.type != AR_FULL + && e->symtree->n.sym->value) + { + char name[2*GFC_MAX_SYMBOL_LEN + 12]; + gfc_namespace *ns = e->symtree->n.sym->ns; + gfc_symtree *st; + gfc_expr *expr; + gfc_expr *p; + gfc_constructor *c; + int cnt = 0; + + sprintf (name, "_len_trim_%s_%s", e->symtree->n.sym->name, + ns->proc_name->name); + st = gfc_find_symtree (ns->sym_root, name); + if (st) + goto already_built; + + /* Recursively call this fcn to simplify the constructor elements. */ + expr = gfc_copy_expr (e->symtree->n.sym->value); + expr->ts.type = BT_INTEGER; + expr->ts.kind = k; + expr->ts.u.cl = NULL; + c = gfc_constructor_first (expr->value.constructor); + for (; c; c = gfc_constructor_next (c)) + { + if (c->iterator) + continue; + + if (c->expr && c->expr->ts.type == BT_CHARACTER) + { + p = gfc_simplify_len_trim (c->expr, kind); + if (p == NULL) + goto clean_up; + gfc_replace_expr (c->expr, p); + cnt++; + } + } + + if (cnt) + { + /* Build a new parameter to take the result. */ + st = gfc_new_symtree (&ns->sym_root, name); + st->n.sym = gfc_new_symbol (st->name, ns); + st->n.sym->value = expr; + st->n.sym->ts = expr->ts; + st->n.sym->attr.dimension = 1; + st->n.sym->attr.save = SAVE_IMPLICIT; + st->n.sym->attr.flavor = FL_PARAMETER; + st->n.sym->as = gfc_copy_array_spec (e->symtree->n.sym->as); + gfc_set_sym_referenced (st->n.sym); + st->n.sym->refs++; + gfc_commit_symbol (st->n.sym); + + already_built: + /* Build a return expression. */ + expr = gfc_copy_expr (e); + expr->ts = st->n.sym->ts; + expr->symtree = st; + gfc_expression_rank (expr); + return expr; + } + + clean_up: + gfc_free_expr (expr); + return NULL; + } + if (e->expr_type != EXPR_CONSTANT) return NULL; diff -Nrcpad gcc-12.4.0/gcc/fortran/trans-array.cc gcc-12.5.0-RC-20250704/gcc/fortran/trans-array.cc *** gcc-12.4.0/gcc/fortran/trans-array.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/fortran/trans-array.cc Fri Jul 4 07:24:42 2025 *************** tree *** 943,948 **** --- 943,950 ---- gfc_get_array_span (tree desc, gfc_expr *expr) { tree tmp; + gfc_symbol *sym = (expr && expr->expr_type == EXPR_VARIABLE) ? + expr->symtree->n.sym : NULL; if (is_pointer_array (desc) || (get_CFI_desc (NULL, expr, &desc, NULL) *************** gfc_get_array_span (tree desc, gfc_expr *** 964,988 **** desc = build_fold_indirect_ref_loc (input_location, desc); tmp = gfc_conv_descriptor_span_get (desc); } else if (TREE_CODE (desc) == COMPONENT_REF && GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (desc)) && GFC_CLASS_TYPE_P (TREE_TYPE (TREE_OPERAND (desc, 0)))) { ! /* The descriptor is a class _data field and so use the vtable ! size for the receiving span field. */ tmp = gfc_get_vptr_from_expr (desc); tmp = gfc_vptr_size_get (tmp); } ! else if (expr && expr->expr_type == EXPR_VARIABLE ! && expr->symtree->n.sym->ts.type == BT_CLASS && expr->ref->type == REF_COMPONENT && expr->ref->next->type == REF_ARRAY && expr->ref->next->next == NULL ! && CLASS_DATA (expr->symtree->n.sym)->attr.dimension) { ! /* Dummys come in sometimes with the descriptor detached from ! the class field or declaration. */ ! tmp = gfc_class_vptr_get (expr->symtree->n.sym->backend_decl); tmp = gfc_vptr_size_get (tmp); } else --- 966,1012 ---- desc = build_fold_indirect_ref_loc (input_location, desc); tmp = gfc_conv_descriptor_span_get (desc); } + else if (UNLIMITED_POLY (expr) + || (sym && UNLIMITED_POLY (sym))) + { + /* Treat unlimited polymorphic expressions separately because + the element size need not be the same as the span. Obtain + the class container, which is simplified here by there being + no component references. */ + if (sym && sym->attr.dummy) + { + tmp = gfc_get_symbol_decl (sym); + tmp = GFC_DECL_SAVED_DESCRIPTOR (tmp); + if (INDIRECT_REF_P (tmp)) + tmp = TREE_OPERAND (tmp, 0); + } + else + { + gcc_assert (GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (desc))); + tmp = TREE_OPERAND (desc, 0); + } + tmp = gfc_class_data_get (tmp); + tmp = gfc_conv_descriptor_span_get (tmp); + } else if (TREE_CODE (desc) == COMPONENT_REF && GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (desc)) && GFC_CLASS_TYPE_P (TREE_TYPE (TREE_OPERAND (desc, 0)))) { ! /* The descriptor is a class _data field. Use the vtable size ! since it is guaranteed to have been set and is always OK for ! class array descriptors that are not unlimited. */ tmp = gfc_get_vptr_from_expr (desc); tmp = gfc_vptr_size_get (tmp); } ! else if (sym && sym->ts.type == BT_CLASS && expr->ref->type == REF_COMPONENT && expr->ref->next->type == REF_ARRAY && expr->ref->next->next == NULL ! && CLASS_DATA (sym)->attr.dimension) { ! /* Class dummys usually require extraction from the saved ! descriptor, which gfc_class_vptr_get does for us. */ ! tmp = gfc_class_vptr_get (sym->backend_decl); tmp = gfc_vptr_size_get (tmp); } else *************** gfc_trans_array_constructor_value (stmtb *** 2114,2120 **** p = gfc_constructor_next (p); n++; } ! if (n < 4) { /* Scalar values. */ gfc_init_se (&se, NULL); --- 2138,2146 ---- p = gfc_constructor_next (p); n++; } ! /* Constructor with few constant elements, or element size not ! known at compile time (e.g. deferred-length character). */ ! if (n < 4 || !INTEGER_CST_P (TYPE_SIZE_UNIT (type))) { /* Scalar values. */ gfc_init_se (&se, NULL); *************** gfc_array_allocate (gfc_se * se, gfc_exp *** 6283,6288 **** --- 6309,6316 ---- else gfc_add_expr_to_block (&se->pre, set_descriptor); + expr->symtree->n.sym->allocated_in_scope = 1; + return true; } *************** gfc_alloc_allocatable_for_assignment (gf *** 10507,10512 **** --- 10535,10542 ---- stmtblock_t realloc_block; stmtblock_t alloc_block; stmtblock_t fblock; + stmtblock_t loop_pre_block; + gfc_ref *ref; gfc_ss *rss; gfc_ss *lss; gfc_array_info *linfo; *************** gfc_alloc_allocatable_for_assignment (gf *** 10715,10720 **** --- 10745,10789 ---- else cond_null= gfc_evaluate_now (cond_null, &fblock); + /* If the data is null, set the descriptor bounds and offset. This suppresses + the maybe used uninitialized warning and forces the use of malloc because + the size is zero in all dimensions. Note that this block is only executed + if the lhs is unallocated and is only applied once in any namespace. + Component references are not subject to the warnings. */ + for (ref = expr1->ref; ref; ref = ref->next) + if (ref->type == REF_COMPONENT) + break; + + if (!expr1->symtree->n.sym->allocated_in_scope && !ref) + { + gfc_start_block (&loop_pre_block); + for (n = 0; n < expr1->rank; n++) + { + gfc_conv_descriptor_lbound_set (&loop_pre_block, desc, + gfc_rank_cst[n], + gfc_index_one_node); + gfc_conv_descriptor_ubound_set (&loop_pre_block, desc, + gfc_rank_cst[n], + gfc_index_zero_node); + gfc_conv_descriptor_stride_set (&loop_pre_block, desc, + gfc_rank_cst[n], + gfc_index_zero_node); + } + + tmp = gfc_conv_descriptor_offset (desc); + gfc_add_modify (&loop_pre_block, tmp, gfc_index_zero_node); + + tmp = fold_build2_loc (input_location, EQ_EXPR, + logical_type_node, array1, + build_int_cst (TREE_TYPE (array1), 0)); + tmp = build3_v (COND_EXPR, tmp, + gfc_finish_block (&loop_pre_block), + build_empty_stmt (input_location)); + gfc_prepend_expr_to_block (&loop->pre, tmp); + + expr1->symtree->n.sym->allocated_in_scope = 1; + } + tmp = build3_v (COND_EXPR, cond_null, build1_v (GOTO_EXPR, jump_label1), build_empty_stmt (input_location)); diff -Nrcpad gcc-12.4.0/gcc/fortran/trans-decl.cc gcc-12.5.0-RC-20250704/gcc/fortran/trans-decl.cc *** gcc-12.4.0/gcc/fortran/trans-decl.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/fortran/trans-decl.cc Fri Jul 4 07:24:42 2025 *************** gfc_create_module_variable (gfc_symbol * *** 5251,5257 **** /* Create the variable. */ pushdecl (decl); gcc_assert (sym->ns->proc_name->attr.flavor == FL_MODULE ! || (sym->ns->parent->proc_name->attr.flavor == FL_MODULE && sym->fn_result_spec)); DECL_CONTEXT (decl) = sym->ns->proc_name->backend_decl; rest_of_decl_compilation (decl, 1, 0); --- 5251,5258 ---- /* Create the variable. */ pushdecl (decl); gcc_assert (sym->ns->proc_name->attr.flavor == FL_MODULE ! || ((sym->ns->parent->proc_name->attr.flavor == FL_MODULE ! || sym->ns->parent->proc_name->attr.flavor == FL_PROCEDURE) && sym->fn_result_spec)); DECL_CONTEXT (decl) = sym->ns->proc_name->backend_decl; rest_of_decl_compilation (decl, 1, 0); diff -Nrcpad gcc-12.4.0/gcc/fortran/trans-expr.cc gcc-12.5.0-RC-20250704/gcc/fortran/trans-expr.cc *** gcc-12.4.0/gcc/fortran/trans-expr.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/fortran/trans-expr.cc Fri Jul 4 07:24:42 2025 *************** gfc_conv_expr_op (gfc_se * se, gfc_expr *** 3923,3928 **** --- 3923,3941 ---- if (lop) { + // Inhibit overeager optimization of Cray pointer comparisons (PR106692). + if (expr->value.op.op1->expr_type == EXPR_VARIABLE + && expr->value.op.op1->ts.type == BT_INTEGER + && expr->value.op.op1->symtree + && expr->value.op.op1->symtree->n.sym->attr.cray_pointer) + TREE_THIS_VOLATILE (lse.expr) = 1; + + if (expr->value.op.op2->expr_type == EXPR_VARIABLE + && expr->value.op.op2->ts.type == BT_INTEGER + && expr->value.op.op2->symtree + && expr->value.op.op2->symtree->n.sym->attr.cray_pointer) + TREE_THIS_VOLATILE (rse.expr) = 1; + /* The result of logical ops is always logical_type_node. */ tmp = fold_build2_loc (input_location, code, logical_type_node, lse.expr, rse.expr); *************** gfc_get_interface_mapping_charlen (gfc_i *** 4326,4337 **** static tree gfc_get_interface_mapping_array (stmtblock_t * block, gfc_symbol * sym, ! gfc_packed packed, tree data) { tree type; tree var; ! type = gfc_typenode_for_spec (&sym->ts); type = gfc_get_nodesc_array_type (type, sym->as, packed, !sym->attr.target && !sym->attr.pointer && !sym->attr.proc_pointer); --- 4339,4353 ---- static tree gfc_get_interface_mapping_array (stmtblock_t * block, gfc_symbol * sym, ! gfc_packed packed, tree data, tree len) { tree type; tree var; ! if (len != NULL_TREE && (TREE_CONSTANT (len) || VAR_P (len))) ! type = gfc_get_character_type_len (sym->ts.kind, len); ! else ! type = gfc_typenode_for_spec (&sym->ts); type = gfc_get_nodesc_array_type (type, sym->as, packed, !sym->attr.target && !sym->attr.pointer && !sym->attr.proc_pointer); *************** gfc_add_interface_mapping (gfc_interface *** 4478,4484 **** convert it to a boundless character type. */ else if (!sym->attr.dimension && sym->ts.type == BT_CHARACTER) { ! tmp = gfc_get_character_type_len (sym->ts.kind, NULL); tmp = build_pointer_type (tmp); if (sym->attr.pointer) value = build_fold_indirect_ref_loc (input_location, --- 4494,4501 ---- convert it to a boundless character type. */ else if (!sym->attr.dimension && sym->ts.type == BT_CHARACTER) { ! se->string_length = gfc_evaluate_now (se->string_length, &se->pre); ! tmp = gfc_get_character_type_len (sym->ts.kind, se->string_length); tmp = build_pointer_type (tmp); if (sym->attr.pointer) value = build_fold_indirect_ref_loc (input_location, *************** gfc_add_interface_mapping (gfc_interface *** 4497,4503 **** /* For character(*), use the actual argument's descriptor. */ else if (sym->ts.type == BT_CHARACTER && !new_sym->ts.u.cl->length) value = build_fold_indirect_ref_loc (input_location, ! se->expr); /* If the argument is an array descriptor, use it to determine information about the actual argument's shape. */ --- 4514,4520 ---- /* For character(*), use the actual argument's descriptor. */ else if (sym->ts.type == BT_CHARACTER && !new_sym->ts.u.cl->length) value = build_fold_indirect_ref_loc (input_location, ! se->expr); /* If the argument is an array descriptor, use it to determine information about the actual argument's shape. */ *************** gfc_add_interface_mapping (gfc_interface *** 4511,4517 **** /* Create the replacement variable. */ tmp = gfc_conv_descriptor_data_get (desc); value = gfc_get_interface_mapping_array (&se->pre, sym, ! PACKED_NO, tmp); /* Use DESC to work out the upper bounds, strides and offset. */ gfc_set_interface_mapping_bounds (&se->pre, TREE_TYPE (value), desc); --- 4528,4535 ---- /* Create the replacement variable. */ tmp = gfc_conv_descriptor_data_get (desc); value = gfc_get_interface_mapping_array (&se->pre, sym, ! PACKED_NO, tmp, ! se->string_length); /* Use DESC to work out the upper bounds, strides and offset. */ gfc_set_interface_mapping_bounds (&se->pre, TREE_TYPE (value), desc); *************** gfc_add_interface_mapping (gfc_interface *** 4519,4525 **** else /* Otherwise we have a packed array. */ value = gfc_get_interface_mapping_array (&se->pre, sym, ! PACKED_FULL, se->expr); new_sym->backend_decl = value; } --- 4537,4544 ---- else /* Otherwise we have a packed array. */ value = gfc_get_interface_mapping_array (&se->pre, sym, ! PACKED_FULL, se->expr, ! se->string_length); new_sym->backend_decl = value; } *************** gfc_conv_procedure_call (gfc_se * se, gf *** 6176,6185 **** { /* Pass a NULL pointer for an absent arg. */ parmse.expr = null_pointer_node; gfc_dummy_arg * const dummy_arg = arg->associated_dummy; ! if (dummy_arg ! && gfc_dummy_arg_get_typespec (*dummy_arg).type ! == BT_CHARACTER) parmse.string_length = build_int_cst (gfc_charlen_type_node, 0); } --- 6195,6212 ---- { /* Pass a NULL pointer for an absent arg. */ parmse.expr = null_pointer_node; + + /* Is it an absent character dummy? */ + bool absent_char = false; gfc_dummy_arg * const dummy_arg = arg->associated_dummy; ! ! /* Fall back to inferred type only if no formal. */ ! if (fsym) ! absent_char = (fsym->ts.type == BT_CHARACTER); ! else if (dummy_arg) ! absent_char = (gfc_dummy_arg_get_typespec (*dummy_arg).type ! == BT_CHARACTER); ! if (absent_char) parmse.string_length = build_int_cst (gfc_charlen_type_node, 0); } *************** gfc_conv_procedure_call (gfc_se * se, gf *** 6196,6204 **** || !CLASS_DATA (fsym)->attr.allocatable)); gfc_init_se (&parmse, NULL); parmse.expr = null_pointer_node; ! if (arg->associated_dummy ! && gfc_dummy_arg_get_typespec (*arg->associated_dummy).type ! == BT_CHARACTER) parmse.string_length = build_int_cst (gfc_charlen_type_node, 0); } else if (fsym && fsym->ts.type == BT_CLASS --- 6223,6229 ---- || !CLASS_DATA (fsym)->attr.allocatable)); gfc_init_se (&parmse, NULL); parmse.expr = null_pointer_node; ! if (fsym->ts.type == BT_CHARACTER) parmse.string_length = build_int_cst (gfc_charlen_type_node, 0); } else if (fsym && fsym->ts.type == BT_CLASS diff -Nrcpad gcc-12.4.0/gcc/fortran/trans-intrinsic.cc gcc-12.5.0-RC-20250704/gcc/fortran/trans-intrinsic.cc *** gcc-12.4.0/gcc/fortran/trans-intrinsic.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/fortran/trans-intrinsic.cc Fri Jul 4 07:24:42 2025 *************** gfc_conv_intrinsic_dot_product (gfc_se * *** 5201,5222 **** } - /* Remove unneeded kind= argument from actual argument list when the - result conversion is dealt with in a different place. */ - - static void - strip_kind_from_actual (gfc_actual_arglist * actual) - { - for (gfc_actual_arglist *a = actual; a; a = a->next) - { - if (a && a->name && strcmp (a->name, "kind") == 0) - { - gfc_free_expr (a->expr); - a->expr = NULL; - } - } - } - /* Emit code for minloc or maxloc intrinsic. There are many different cases we need to handle. For performance reasons we sometimes create two loops instead of one, where the second one is much simpler. --- 5201,5206 ---- *************** gfc_conv_intrinsic_minmaxloc (gfc_se * s *** 5314,5320 **** tree lab1, lab2; tree b_if, b_else; gfc_loopinfo loop; ! gfc_actual_arglist *actual; gfc_ss *arrayss; gfc_ss *maskss; gfc_se arrayse; --- 5298,5305 ---- tree lab1, lab2; tree b_if, b_else; gfc_loopinfo loop; ! gfc_actual_arglist *array_arg, *dim_arg, *mask_arg, *kind_arg; ! gfc_actual_arglist *back_arg; gfc_ss *arrayss; gfc_ss *maskss; gfc_se arrayse; *************** gfc_conv_intrinsic_minmaxloc (gfc_se * s *** 5327,5366 **** int n; bool optional_mask; ! actual = expr->value.function.actual; ! /* The last argument, BACK, is passed by value. Ensure that ! by setting its name to %VAL. */ ! for (gfc_actual_arglist *a = actual; a; a = a->next) { ! if (a->next == NULL) ! a->name = "%VAL"; } if (se->ss) { gfc_conv_intrinsic_funcall (se, expr); return; } ! arrayexpr = actual->expr; ! /* Special case for character maxloc. Remove unneeded actual ! arguments, then call a library function. */ if (arrayexpr->ts.type == BT_CHARACTER) { ! gfc_actual_arglist *a; ! a = actual; ! strip_kind_from_actual (a); ! while (a) { ! if (a->name && strcmp (a->name, "dim") == 0) ! { ! gfc_free_expr (a->expr); ! a->expr = NULL; ! } ! a = a->next; } gfc_conv_intrinsic_funcall (se, expr); return; --- 5312,5350 ---- int n; bool optional_mask; ! array_arg = expr->value.function.actual; ! dim_arg = array_arg->next; ! mask_arg = dim_arg->next; ! kind_arg = mask_arg->next; ! back_arg = kind_arg->next; ! /* Remove kind. */ ! if (kind_arg->expr) { ! gfc_free_expr (kind_arg->expr); ! kind_arg->expr = NULL; } + /* Pass BACK argument by value. */ + back_arg->name = "%VAL"; + if (se->ss) { gfc_conv_intrinsic_funcall (se, expr); return; } ! arrayexpr = array_arg->expr; ! /* Special case for character maxloc. Remove unneeded "dim" actual ! argument, then call a library function. */ if (arrayexpr->ts.type == BT_CHARACTER) { ! if (dim_arg->expr) { ! gfc_free_expr (dim_arg->expr); ! dim_arg->expr = NULL; } gfc_conv_intrinsic_funcall (se, expr); return; *************** gfc_conv_intrinsic_minmaxloc (gfc_se * s *** 5375,5387 **** arrayss = gfc_walk_expr (arrayexpr); gcc_assert (arrayss != gfc_ss_terminator); ! actual = actual->next->next; ! gcc_assert (actual); ! maskexpr = actual->expr; optional_mask = maskexpr && maskexpr->expr_type == EXPR_VARIABLE && maskexpr->symtree->n.sym->attr.dummy && maskexpr->symtree->n.sym->attr.optional; ! backexpr = actual->next->next->expr; nonempty = NULL; if (maskexpr && maskexpr->rank != 0) { --- 5359,5369 ---- arrayss = gfc_walk_expr (arrayexpr); gcc_assert (arrayss != gfc_ss_terminator); ! maskexpr = mask_arg->expr; optional_mask = maskexpr && maskexpr->expr_type == EXPR_VARIABLE && maskexpr->symtree->n.sym->attr.dummy && maskexpr->symtree->n.sym->attr.optional; ! backexpr = back_arg->expr; nonempty = NULL; if (maskexpr && maskexpr->rank != 0) { diff -Nrcpad gcc-12.4.0/gcc/function.cc gcc-12.5.0-RC-20250704/gcc/function.cc *** gcc-12.4.0/gcc/function.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/function.cc Fri Jul 4 07:24:42 2025 *************** assign_parms (tree fndecl) *** 3724,3729 **** --- 3724,3731 ---- now that all parameters have been copied out of hard registers. */ emit_insn (all.first_conversion_insn); + do_pending_stack_adjust (); + /* Estimate reload stack alignment from scalar return mode. */ if (SUPPORTS_STACK_ALIGNMENT) { diff -Nrcpad gcc-12.4.0/gcc/gcc.cc gcc-12.5.0-RC-20250704/gcc/gcc.cc *** gcc-12.4.0/gcc/gcc.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/gcc.cc Fri Jul 4 07:24:42 2025 *************** compilation is specified by a string cal *** 30,35 **** --- 30,38 ---- #define INCLUDE_STRING #include "config.h" #include "system.h" + #ifdef HOST_HAS_PERSONALITY_ADDR_NO_RANDOMIZE + #include + #endif #include "coretypes.h" #include "multilib.h" /* before tm.h */ #include "tm.h" *************** print_configuration (FILE *file) *** 7591,7645 **** #define RETRY_ICE_ATTEMPTS 3 ! /* Returns true if FILE1 and FILE2 contain equivalent data, 0 otherwise. */ static bool files_equal_p (char *file1, char *file2) { ! struct stat st1, st2; ! off_t n, len; ! int fd1, fd2; ! const int bufsize = 8192; ! char *buf = XNEWVEC (char, bufsize); ! ! fd1 = open (file1, O_RDONLY); ! fd2 = open (file2, O_RDONLY); ! ! if (fd1 < 0 || fd2 < 0) ! goto error; ! ! if (fstat (fd1, &st1) < 0 || fstat (fd2, &st2) < 0) ! goto error; ! ! if (st1.st_size != st2.st_size) ! goto error; ! for (n = st1.st_size; n; n -= len) { ! len = n; ! if ((int) len > bufsize / 2) ! len = bufsize / 2; ! ! if (read (fd1, buf, len) != (int) len ! || read (fd2, buf + bufsize / 2, len) != (int) len) { ! goto error; } ! ! if (memcmp (buf, buf + bufsize / 2, len) != 0) goto error; } ! free (buf); ! close (fd1); ! close (fd2); ! return 1; error: ! free (buf); ! close (fd1); ! close (fd2); return 0; } --- 7594,7651 ---- #define RETRY_ICE_ATTEMPTS 3 ! /* Returns true if FILE1 and FILE2 contain equivalent data, 0 otherwise. ! If lines start with 0x followed by 1-16 lowercase hexadecimal digits ! followed by a space, ignore anything before that space. These are ! typically function addresses from libbacktrace and those can differ ! due to ASLR. */ static bool files_equal_p (char *file1, char *file2) { ! FILE *f1 = fopen (file1, "rb"); ! FILE *f2 = fopen (file2, "rb"); ! char line1[256], line2[256]; ! bool line_start = true; ! while (fgets (line1, sizeof (line1), f1)) { ! if (!fgets (line2, sizeof (line2), f2)) ! goto error; ! char *p1 = line1, *p2 = line2; ! if (line_start ! && line1[0] == '0' ! && line1[1] == 'x' ! && line2[0] == '0' ! && line2[1] == 'x') { ! int i, j; ! for (i = 0; i < 16; ++i) ! if (!ISXDIGIT (line1[2 + i]) || ISUPPER (line1[2 + i])) ! break; ! for (j = 0; j < 16; ++j) ! if (!ISXDIGIT (line2[2 + j]) || ISUPPER (line2[2 + j])) ! break; ! if (i && line1[2 + i] == ' ' && j && line2[2 + j] == ' ') ! { ! p1 = line1 + i + 3; ! p2 = line2 + j + 3; ! } } ! if (strcmp (p1, p2) != 0) goto error; + line_start = strchr (line1, '\n') != NULL; } + if (fgets (line2, sizeof (line2), f2)) + goto error; ! fclose (f1); ! fclose (f2); return 1; error: ! fclose (f1); ! fclose (f2); return 0; } *************** try_generate_repro (const char **argv) *** 7847,7852 **** --- 7853,7862 ---- else new_argv[out_arg] = "-o-"; + #ifdef HOST_HAS_PERSONALITY_ADDR_NO_RANDOMIZE + personality (personality (0xffffffffU) | ADDR_NO_RANDOMIZE); + #endif + int status; for (attempt = 0; attempt < RETRY_ICE_ATTEMPTS; ++attempt) { diff -Nrcpad gcc-12.4.0/gcc/genautomata.cc gcc-12.5.0-RC-20250704/gcc/genautomata.cc *** gcc-12.4.0/gcc/genautomata.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/genautomata.cc Fri Jul 4 07:24:42 2025 *************** output_default_latencies (void) *** 8351,8357 **** if ((col = (col+1) % 8) == 0) fputs ("\n ", output_file); decl = description->decls[i]; ! gcc_assert (j++ == DECL_INSN_RESERV (decl)->insn_num); fprintf (output_file, "% 4d,", DECL_INSN_RESERV (decl)->default_latency); } --- 8351,8358 ---- if ((col = (col+1) % 8) == 0) fputs ("\n ", output_file); decl = description->decls[i]; ! gcc_assert (j == DECL_INSN_RESERV (decl)->insn_num); ! ++j; fprintf (output_file, "% 4d,", DECL_INSN_RESERV (decl)->default_latency); } diff -Nrcpad gcc-12.4.0/gcc/gengtype-lex.cc gcc-12.5.0-RC-20250704/gcc/gengtype-lex.cc *** gcc-12.4.0/gcc/gengtype-lex.cc Thu Jun 20 08:11:52 2024 --- gcc-12.5.0-RC-20250704/gcc/gengtype-lex.cc Fri Jul 4 07:26:03 2025 *************** int yy_flex_debug = 0; *** 1188,1194 **** #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET char *yytext; ! #line 1 "/d/gcc-12.4.0/gcc-12.4.0/gcc/gengtype-lex.l" /* -*- indented-text -*- */ /* Process source files and output type information. Copyright (C) 2002-2022 Free Software Foundation, Inc. --- 1188,1194 ---- #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET char *yytext; ! #line 1 "/home/rguenther/src/releases/gcc-12.5.0-RC-20250704/gcc-12.5.0-RC-20250704/gcc/gengtype-lex.l" /* -*- indented-text -*- */ /* Process source files and output type information. Copyright (C) 2002-2022 Free Software Foundation, Inc. *************** You should have received a copy of the G *** 1209,1215 **** along with GCC; see the file COPYING3. If not see . */ #define YY_NO_INPUT 1 ! #line 24 "/d/gcc-12.4.0/gcc-12.4.0/gcc/gengtype-lex.l" #ifdef HOST_GENERATOR_FILE #include "config.h" #define GENERATOR_FILE 1 --- 1209,1215 ---- along with GCC; see the file COPYING3. If not see . */ #define YY_NO_INPUT 1 ! #line 24 "/home/rguenther/src/releases/gcc-12.5.0-RC-20250704/gcc-12.5.0-RC-20250704/gcc/gengtype-lex.l" #ifdef HOST_GENERATOR_FILE #include "config.h" #define GENERATOR_FILE 1 *************** update_lineno (const char *l, size_t len *** 1238,1244 **** } #line 1235 "gengtype-lex.cc" ! #line 59 "/d/gcc-12.4.0/gcc-12.4.0/gcc/gengtype-lex.l" /* Include '::' in identifiers to capture C++ scope qualifiers. */ #line 1239 "gengtype-lex.cc" --- 1238,1244 ---- } #line 1235 "gengtype-lex.cc" ! #line 59 "/home/rguenther/src/releases/gcc-12.5.0-RC-20250704/gcc-12.5.0-RC-20250704/gcc/gengtype-lex.l" /* Include '::' in identifiers to capture C++ scope qualifiers. */ #line 1239 "gengtype-lex.cc" *************** YY_DECL *** 1462,1468 **** } { ! #line 67 "/d/gcc-12.4.0/gcc-12.4.0/gcc/gengtype-lex.l" /* Do this on entry to yylex(): */ *yylval = 0; --- 1462,1468 ---- } { ! #line 67 "/home/rguenther/src/releases/gcc-12.5.0-RC-20250704/gcc-12.5.0-RC-20250704/gcc/gengtype-lex.l" /* Do this on entry to yylex(): */ *yylval = 0; *************** YY_LINENO_REWIND_TO(yy_cp - 1); *** 1534,1540 **** (yy_c_buf_p) = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP ! #line 78 "/d/gcc-12.4.0/gcc-12.4.0/gcc/gengtype-lex.l" { BEGIN(in_struct); return TYPEDEF; --- 1534,1540 ---- (yy_c_buf_p) = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP ! #line 78 "/home/rguenther/src/releases/gcc-12.5.0-RC-20250704/gcc-12.5.0-RC-20250704/gcc/gengtype-lex.l" { BEGIN(in_struct); return TYPEDEF; *************** YY_LINENO_REWIND_TO(yy_cp - 1); *** 1547,1553 **** (yy_c_buf_p) = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP ! #line 82 "/d/gcc-12.4.0/gcc-12.4.0/gcc/gengtype-lex.l" { BEGIN(in_struct); return STRUCT; --- 1547,1553 ---- (yy_c_buf_p) = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP ! #line 82 "/home/rguenther/src/releases/gcc-12.5.0-RC-20250704/gcc-12.5.0-RC-20250704/gcc/gengtype-lex.l" { BEGIN(in_struct); return STRUCT; *************** YY_LINENO_REWIND_TO(yy_cp - 1); *** 1560,1566 **** (yy_c_buf_p) = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP ! #line 86 "/d/gcc-12.4.0/gcc-12.4.0/gcc/gengtype-lex.l" { BEGIN(in_struct); return UNION; --- 1560,1566 ---- (yy_c_buf_p) = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP ! #line 86 "/home/rguenther/src/releases/gcc-12.5.0-RC-20250704/gcc-12.5.0-RC-20250704/gcc/gengtype-lex.l" { BEGIN(in_struct); return UNION; *************** YY_LINENO_REWIND_TO(yy_cp - 1); *** 1573,1579 **** (yy_c_buf_p) = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP ! #line 90 "/d/gcc-12.4.0/gcc-12.4.0/gcc/gengtype-lex.l" { BEGIN(in_struct); return STRUCT; --- 1573,1579 ---- (yy_c_buf_p) = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP ! #line 90 "/home/rguenther/src/releases/gcc-12.5.0-RC-20250704/gcc-12.5.0-RC-20250704/gcc/gengtype-lex.l" { BEGIN(in_struct); return STRUCT; *************** YY_LINENO_REWIND_TO(yy_cp - 1); *** 1586,1592 **** (yy_c_buf_p) = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP ! #line 94 "/d/gcc-12.4.0/gcc-12.4.0/gcc/gengtype-lex.l" { BEGIN(in_struct); return EXTERN; --- 1586,1592 ---- (yy_c_buf_p) = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP ! #line 94 "/home/rguenther/src/releases/gcc-12.5.0-RC-20250704/gcc-12.5.0-RC-20250704/gcc/gengtype-lex.l" { BEGIN(in_struct); return EXTERN; *************** YY_LINENO_REWIND_TO(yy_cp - 1); *** 1599,1605 **** (yy_c_buf_p) = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP ! #line 98 "/d/gcc-12.4.0/gcc-12.4.0/gcc/gengtype-lex.l" { BEGIN(in_struct); return STATIC; --- 1599,1605 ---- (yy_c_buf_p) = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP ! #line 98 "/home/rguenther/src/releases/gcc-12.5.0-RC-20250704/gcc-12.5.0-RC-20250704/gcc/gengtype-lex.l" { BEGIN(in_struct); return STATIC; *************** YY_RULE_SETUP *** 1610,1634 **** case 7: YY_RULE_SETUP ! #line 106 "/d/gcc-12.4.0/gcc-12.4.0/gcc/gengtype-lex.l" { BEGIN(in_struct_comment); } YY_BREAK case 8: /* rule 8 can match eol */ YY_RULE_SETUP ! #line 107 "/d/gcc-12.4.0/gcc-12.4.0/gcc/gengtype-lex.l" { lexer_line.line++; } YY_BREAK case 9: /* rule 9 can match eol */ YY_RULE_SETUP ! #line 109 "/d/gcc-12.4.0/gcc-12.4.0/gcc/gengtype-lex.l" { update_lineno (yytext, yyleng); } YY_BREAK case 10: /* rule 10 can match eol */ YY_RULE_SETUP ! #line 110 "/d/gcc-12.4.0/gcc-12.4.0/gcc/gengtype-lex.l" { lexer_line.line++; } YY_BREAK case 11: --- 1610,1634 ---- case 7: YY_RULE_SETUP ! #line 106 "/home/rguenther/src/releases/gcc-12.5.0-RC-20250704/gcc-12.5.0-RC-20250704/gcc/gengtype-lex.l" { BEGIN(in_struct_comment); } YY_BREAK case 8: /* rule 8 can match eol */ YY_RULE_SETUP ! #line 107 "/home/rguenther/src/releases/gcc-12.5.0-RC-20250704/gcc-12.5.0-RC-20250704/gcc/gengtype-lex.l" { lexer_line.line++; } YY_BREAK case 9: /* rule 9 can match eol */ YY_RULE_SETUP ! #line 109 "/home/rguenther/src/releases/gcc-12.5.0-RC-20250704/gcc-12.5.0-RC-20250704/gcc/gengtype-lex.l" { update_lineno (yytext, yyleng); } YY_BREAK case 10: /* rule 10 can match eol */ YY_RULE_SETUP ! #line 110 "/home/rguenther/src/releases/gcc-12.5.0-RC-20250704/gcc-12.5.0-RC-20250704/gcc/gengtype-lex.l" { lexer_line.line++; } YY_BREAK case 11: *************** YY_LINENO_REWIND_TO(yy_bp + 5); *** 1638,1644 **** (yy_c_buf_p) = yy_cp = yy_bp + 5; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP ! #line 112 "/d/gcc-12.4.0/gcc-12.4.0/gcc/gengtype-lex.l" /* don't care */ YY_BREAK case 12: --- 1638,1644 ---- (yy_c_buf_p) = yy_cp = yy_bp + 5; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP ! #line 112 "/home/rguenther/src/releases/gcc-12.5.0-RC-20250704/gcc-12.5.0-RC-20250704/gcc/gengtype-lex.l" /* don't care */ YY_BREAK case 12: *************** case 12: *** 1647,1663 **** YY_LINENO_REWIND_TO(yy_cp - 1); (yy_c_buf_p) = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ ! #line 114 "/d/gcc-12.4.0/gcc-12.4.0/gcc/gengtype-lex.l" case 13: /* rule 13 can match eol */ ! #line 115 "/d/gcc-12.4.0/gcc-12.4.0/gcc/gengtype-lex.l" case 14: /* rule 14 can match eol */ ! #line 116 "/d/gcc-12.4.0/gcc-12.4.0/gcc/gengtype-lex.l" case 15: /* rule 15 can match eol */ YY_RULE_SETUP ! #line 116 "/d/gcc-12.4.0/gcc-12.4.0/gcc/gengtype-lex.l" { *yylval = XDUPVAR (const char, yytext, yyleng, yyleng + 1); return IGNORABLE_CXX_KEYWORD; --- 1647,1663 ---- YY_LINENO_REWIND_TO(yy_cp - 1); (yy_c_buf_p) = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ ! #line 114 "/home/rguenther/src/releases/gcc-12.5.0-RC-20250704/gcc-12.5.0-RC-20250704/gcc/gengtype-lex.l" case 13: /* rule 13 can match eol */ ! #line 115 "/home/rguenther/src/releases/gcc-12.5.0-RC-20250704/gcc-12.5.0-RC-20250704/gcc/gengtype-lex.l" case 14: /* rule 14 can match eol */ ! #line 116 "/home/rguenther/src/releases/gcc-12.5.0-RC-20250704/gcc-12.5.0-RC-20250704/gcc/gengtype-lex.l" case 15: /* rule 15 can match eol */ YY_RULE_SETUP ! #line 116 "/home/rguenther/src/releases/gcc-12.5.0-RC-20250704/gcc-12.5.0-RC-20250704/gcc/gengtype-lex.l" { *yylval = XDUPVAR (const char, yytext, yyleng, yyleng + 1); return IGNORABLE_CXX_KEYWORD; *************** YY_LINENO_REWIND_TO(yy_bp + 3); *** 1670,1676 **** (yy_c_buf_p) = yy_cp = yy_bp + 3; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP ! #line 120 "/d/gcc-12.4.0/gcc-12.4.0/gcc/gengtype-lex.l" { return GTY_TOKEN; } YY_BREAK case 17: --- 1670,1676 ---- (yy_c_buf_p) = yy_cp = yy_bp + 3; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP ! #line 120 "/home/rguenther/src/releases/gcc-12.5.0-RC-20250704/gcc-12.5.0-RC-20250704/gcc/gengtype-lex.l" { return GTY_TOKEN; } YY_BREAK case 17: *************** YY_LINENO_REWIND_TO(yy_bp + 5); *** 1680,1686 **** (yy_c_buf_p) = yy_cp = yy_bp + 5; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP ! #line 121 "/d/gcc-12.4.0/gcc-12.4.0/gcc/gengtype-lex.l" { return UNION; } YY_BREAK case 18: --- 1680,1686 ---- (yy_c_buf_p) = yy_cp = yy_bp + 5; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP ! #line 121 "/home/rguenther/src/releases/gcc-12.5.0-RC-20250704/gcc-12.5.0-RC-20250704/gcc/gengtype-lex.l" { return UNION; } YY_BREAK case 18: *************** YY_LINENO_REWIND_TO(yy_bp + 6); *** 1690,1696 **** (yy_c_buf_p) = yy_cp = yy_bp + 6; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP ! #line 122 "/d/gcc-12.4.0/gcc-12.4.0/gcc/gengtype-lex.l" { return STRUCT; } YY_BREAK case 19: --- 1690,1696 ---- (yy_c_buf_p) = yy_cp = yy_bp + 6; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP ! #line 122 "/home/rguenther/src/releases/gcc-12.5.0-RC-20250704/gcc-12.5.0-RC-20250704/gcc/gengtype-lex.l" { return STRUCT; } YY_BREAK case 19: *************** YY_LINENO_REWIND_TO(yy_bp + 5); *** 1700,1706 **** (yy_c_buf_p) = yy_cp = yy_bp + 5; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP ! #line 123 "/d/gcc-12.4.0/gcc-12.4.0/gcc/gengtype-lex.l" { return STRUCT; } YY_BREAK case 20: --- 1700,1706 ---- (yy_c_buf_p) = yy_cp = yy_bp + 5; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP ! #line 123 "/home/rguenther/src/releases/gcc-12.5.0-RC-20250704/gcc-12.5.0-RC-20250704/gcc/gengtype-lex.l" { return STRUCT; } YY_BREAK case 20: *************** YY_LINENO_REWIND_TO(yy_bp + 7); *** 1710,1716 **** (yy_c_buf_p) = yy_cp = yy_bp + 7; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP ! #line 124 "/d/gcc-12.4.0/gcc-12.4.0/gcc/gengtype-lex.l" { return TYPEDEF; } YY_BREAK case 21: --- 1710,1716 ---- (yy_c_buf_p) = yy_cp = yy_bp + 7; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP ! #line 124 "/home/rguenther/src/releases/gcc-12.5.0-RC-20250704/gcc-12.5.0-RC-20250704/gcc/gengtype-lex.l" { return TYPEDEF; } YY_BREAK case 21: *************** YY_LINENO_REWIND_TO(yy_bp + 4); *** 1720,1726 **** (yy_c_buf_p) = yy_cp = yy_bp + 4; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP ! #line 125 "/d/gcc-12.4.0/gcc-12.4.0/gcc/gengtype-lex.l" { return ENUM; } YY_BREAK case 22: --- 1720,1726 ---- (yy_c_buf_p) = yy_cp = yy_bp + 4; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP ! #line 125 "/home/rguenther/src/releases/gcc-12.5.0-RC-20250704/gcc-12.5.0-RC-20250704/gcc/gengtype-lex.l" { return ENUM; } YY_BREAK case 22: *************** YY_LINENO_REWIND_TO(yy_bp + 9); *** 1730,1736 **** (yy_c_buf_p) = yy_cp = yy_bp + 9; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP ! #line 126 "/d/gcc-12.4.0/gcc-12.4.0/gcc/gengtype-lex.l" { return PTR_ALIAS; } YY_BREAK case 23: --- 1730,1736 ---- (yy_c_buf_p) = yy_cp = yy_bp + 9; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP ! #line 126 "/home/rguenther/src/releases/gcc-12.5.0-RC-20250704/gcc-12.5.0-RC-20250704/gcc/gengtype-lex.l" { return PTR_ALIAS; } YY_BREAK case 23: *************** YY_LINENO_REWIND_TO(yy_bp + 10); *** 1740,1746 **** (yy_c_buf_p) = yy_cp = yy_bp + 10; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP ! #line 127 "/d/gcc-12.4.0/gcc-12.4.0/gcc/gengtype-lex.l" { return NESTED_PTR; } YY_BREAK case 24: --- 1740,1746 ---- (yy_c_buf_p) = yy_cp = yy_bp + 10; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP ! #line 127 "/home/rguenther/src/releases/gcc-12.5.0-RC-20250704/gcc-12.5.0-RC-20250704/gcc/gengtype-lex.l" { return NESTED_PTR; } YY_BREAK case 24: *************** YY_LINENO_REWIND_TO(yy_bp + 4); *** 1750,1761 **** (yy_c_buf_p) = yy_cp = yy_bp + 4; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP ! #line 128 "/d/gcc-12.4.0/gcc-12.4.0/gcc/gengtype-lex.l" { return USER_GTY; } YY_BREAK case 25: YY_RULE_SETUP ! #line 129 "/d/gcc-12.4.0/gcc-12.4.0/gcc/gengtype-lex.l" { *yylval = XDUPVAR (const char, yytext, yyleng, yyleng+1); return NUM; --- 1750,1761 ---- (yy_c_buf_p) = yy_cp = yy_bp + 4; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP ! #line 128 "/home/rguenther/src/releases/gcc-12.5.0-RC-20250704/gcc-12.5.0-RC-20250704/gcc/gengtype-lex.l" { return USER_GTY; } YY_BREAK case 25: YY_RULE_SETUP ! #line 129 "/home/rguenther/src/releases/gcc-12.5.0-RC-20250704/gcc-12.5.0-RC-20250704/gcc/gengtype-lex.l" { *yylval = XDUPVAR (const char, yytext, yyleng, yyleng+1); return NUM; *************** case 26: *** 1767,1777 **** YY_LINENO_REWIND_TO(yy_cp - 1); (yy_c_buf_p) = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ ! #line 135 "/d/gcc-12.4.0/gcc-12.4.0/gcc/gengtype-lex.l" case 27: /* rule 27 can match eol */ YY_RULE_SETUP ! #line 135 "/d/gcc-12.4.0/gcc-12.4.0/gcc/gengtype-lex.l" { size_t len; --- 1767,1777 ---- YY_LINENO_REWIND_TO(yy_cp - 1); (yy_c_buf_p) = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ ! #line 135 "/home/rguenther/src/releases/gcc-12.5.0-RC-20250704/gcc-12.5.0-RC-20250704/gcc/gengtype-lex.l" case 27: /* rule 27 can match eol */ YY_RULE_SETUP ! #line 135 "/home/rguenther/src/releases/gcc-12.5.0-RC-20250704/gcc-12.5.0-RC-20250704/gcc/gengtype-lex.l" { size_t len; *************** YY_LINENO_REWIND_TO(yy_cp - 1); *** 1790,1796 **** (yy_c_buf_p) = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP ! #line 146 "/d/gcc-12.4.0/gcc-12.4.0/gcc/gengtype-lex.l" { *yylval = XDUPVAR (const char, yytext, yyleng, yyleng+1); return ID; --- 1790,1796 ---- (yy_c_buf_p) = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP ! #line 146 "/home/rguenther/src/releases/gcc-12.5.0-RC-20250704/gcc-12.5.0-RC-20250704/gcc/gengtype-lex.l" { *yylval = XDUPVAR (const char, yytext, yyleng, yyleng+1); return ID; *************** YY_RULE_SETUP *** 1799,1805 **** case 29: /* rule 29 can match eol */ YY_RULE_SETUP ! #line 151 "/d/gcc-12.4.0/gcc-12.4.0/gcc/gengtype-lex.l" { *yylval = XDUPVAR (const char, yytext+1, yyleng-2, yyleng-1); return STRING; --- 1799,1805 ---- case 29: /* rule 29 can match eol */ YY_RULE_SETUP ! #line 151 "/home/rguenther/src/releases/gcc-12.5.0-RC-20250704/gcc-12.5.0-RC-20250704/gcc/gengtype-lex.l" { *yylval = XDUPVAR (const char, yytext+1, yyleng-2, yyleng-1); return STRING; *************** YY_RULE_SETUP *** 1809,1815 **** case 30: /* rule 30 can match eol */ YY_RULE_SETUP ! #line 156 "/d/gcc-12.4.0/gcc-12.4.0/gcc/gengtype-lex.l" { *yylval = XDUPVAR (const char, yytext+1, yyleng-2, yyleng-1); return ARRAY; --- 1809,1815 ---- case 30: /* rule 30 can match eol */ YY_RULE_SETUP ! #line 156 "/home/rguenther/src/releases/gcc-12.5.0-RC-20250704/gcc-12.5.0-RC-20250704/gcc/gengtype-lex.l" { *yylval = XDUPVAR (const char, yytext+1, yyleng-2, yyleng-1); return ARRAY; *************** YY_RULE_SETUP *** 1818,1824 **** case 31: /* rule 31 can match eol */ YY_RULE_SETUP ! #line 160 "/d/gcc-12.4.0/gcc-12.4.0/gcc/gengtype-lex.l" { *yylval = XDUPVAR (const char, yytext+1, yyleng-2, yyleng); return CHAR; --- 1818,1824 ---- case 31: /* rule 31 can match eol */ YY_RULE_SETUP ! #line 160 "/home/rguenther/src/releases/gcc-12.5.0-RC-20250704/gcc-12.5.0-RC-20250704/gcc/gengtype-lex.l" { *yylval = XDUPVAR (const char, yytext+1, yyleng-2, yyleng); return CHAR; *************** YY_RULE_SETUP *** 1826,1849 **** YY_BREAK case 32: YY_RULE_SETUP ! #line 165 "/d/gcc-12.4.0/gcc-12.4.0/gcc/gengtype-lex.l" { return ELLIPSIS; } YY_BREAK case 33: YY_RULE_SETUP ! #line 166 "/d/gcc-12.4.0/gcc-12.4.0/gcc/gengtype-lex.l" { return yytext[0]; } YY_BREAK /* ignore pp-directives */ case 34: /* rule 34 can match eol */ YY_RULE_SETUP ! #line 169 "/d/gcc-12.4.0/gcc-12.4.0/gcc/gengtype-lex.l" {lexer_line.line++;} YY_BREAK case 35: YY_RULE_SETUP ! #line 171 "/d/gcc-12.4.0/gcc-12.4.0/gcc/gengtype-lex.l" { error_at_line (&lexer_line, "unexpected character `%s'", yytext); } --- 1826,1849 ---- YY_BREAK case 32: YY_RULE_SETUP ! #line 165 "/home/rguenther/src/releases/gcc-12.5.0-RC-20250704/gcc-12.5.0-RC-20250704/gcc/gengtype-lex.l" { return ELLIPSIS; } YY_BREAK case 33: YY_RULE_SETUP ! #line 166 "/home/rguenther/src/releases/gcc-12.5.0-RC-20250704/gcc-12.5.0-RC-20250704/gcc/gengtype-lex.l" { return yytext[0]; } YY_BREAK /* ignore pp-directives */ case 34: /* rule 34 can match eol */ YY_RULE_SETUP ! #line 169 "/home/rguenther/src/releases/gcc-12.5.0-RC-20250704/gcc-12.5.0-RC-20250704/gcc/gengtype-lex.l" {lexer_line.line++;} YY_BREAK case 35: YY_RULE_SETUP ! #line 171 "/home/rguenther/src/releases/gcc-12.5.0-RC-20250704/gcc-12.5.0-RC-20250704/gcc/gengtype-lex.l" { error_at_line (&lexer_line, "unexpected character `%s'", yytext); } *************** YY_RULE_SETUP *** 1851,1886 **** case 36: YY_RULE_SETUP ! #line 176 "/d/gcc-12.4.0/gcc-12.4.0/gcc/gengtype-lex.l" { BEGIN(in_comment); } YY_BREAK case 37: /* rule 37 can match eol */ YY_RULE_SETUP ! #line 177 "/d/gcc-12.4.0/gcc-12.4.0/gcc/gengtype-lex.l" { lexer_line.line++; } YY_BREAK case 38: /* rule 38 can match eol */ YY_RULE_SETUP ! #line 178 "/d/gcc-12.4.0/gcc-12.4.0/gcc/gengtype-lex.l" { lexer_line.line++; } YY_BREAK case 39: ! #line 180 "/d/gcc-12.4.0/gcc-12.4.0/gcc/gengtype-lex.l" case 40: /* rule 40 can match eol */ ! #line 181 "/d/gcc-12.4.0/gcc-12.4.0/gcc/gengtype-lex.l" case 41: /* rule 41 can match eol */ YY_RULE_SETUP ! #line 181 "/d/gcc-12.4.0/gcc-12.4.0/gcc/gengtype-lex.l" /* do nothing */ YY_BREAK case 42: /* rule 42 can match eol */ YY_RULE_SETUP ! #line 182 "/d/gcc-12.4.0/gcc-12.4.0/gcc/gengtype-lex.l" { update_lineno (yytext, yyleng); } YY_BREAK case 43: --- 1851,1886 ---- case 36: YY_RULE_SETUP ! #line 176 "/home/rguenther/src/releases/gcc-12.5.0-RC-20250704/gcc-12.5.0-RC-20250704/gcc/gengtype-lex.l" { BEGIN(in_comment); } YY_BREAK case 37: /* rule 37 can match eol */ YY_RULE_SETUP ! #line 177 "/home/rguenther/src/releases/gcc-12.5.0-RC-20250704/gcc-12.5.0-RC-20250704/gcc/gengtype-lex.l" { lexer_line.line++; } YY_BREAK case 38: /* rule 38 can match eol */ YY_RULE_SETUP ! #line 178 "/home/rguenther/src/releases/gcc-12.5.0-RC-20250704/gcc-12.5.0-RC-20250704/gcc/gengtype-lex.l" { lexer_line.line++; } YY_BREAK case 39: ! #line 180 "/home/rguenther/src/releases/gcc-12.5.0-RC-20250704/gcc-12.5.0-RC-20250704/gcc/gengtype-lex.l" case 40: /* rule 40 can match eol */ ! #line 181 "/home/rguenther/src/releases/gcc-12.5.0-RC-20250704/gcc-12.5.0-RC-20250704/gcc/gengtype-lex.l" case 41: /* rule 41 can match eol */ YY_RULE_SETUP ! #line 181 "/home/rguenther/src/releases/gcc-12.5.0-RC-20250704/gcc-12.5.0-RC-20250704/gcc/gengtype-lex.l" /* do nothing */ YY_BREAK case 42: /* rule 42 can match eol */ YY_RULE_SETUP ! #line 182 "/home/rguenther/src/releases/gcc-12.5.0-RC-20250704/gcc-12.5.0-RC-20250704/gcc/gengtype-lex.l" { update_lineno (yytext, yyleng); } YY_BREAK case 43: *************** YY_LINENO_REWIND_TO(yy_bp + 1); *** 1890,1910 **** (yy_c_buf_p) = yy_cp = yy_bp + 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP ! #line 183 "/d/gcc-12.4.0/gcc-12.4.0/gcc/gengtype-lex.l" /* do nothing */ YY_BREAK case 44: /* rule 44 can match eol */ YY_RULE_SETUP ! #line 186 "/d/gcc-12.4.0/gcc-12.4.0/gcc/gengtype-lex.l" { lexer_line.line++; } YY_BREAK case 45: ! #line 188 "/d/gcc-12.4.0/gcc-12.4.0/gcc/gengtype-lex.l" case 46: YY_RULE_SETUP ! #line 188 "/d/gcc-12.4.0/gcc-12.4.0/gcc/gengtype-lex.l" /* do nothing */ YY_BREAK case 47: --- 1890,1910 ---- (yy_c_buf_p) = yy_cp = yy_bp + 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP ! #line 183 "/home/rguenther/src/releases/gcc-12.5.0-RC-20250704/gcc-12.5.0-RC-20250704/gcc/gengtype-lex.l" /* do nothing */ YY_BREAK case 44: /* rule 44 can match eol */ YY_RULE_SETUP ! #line 186 "/home/rguenther/src/releases/gcc-12.5.0-RC-20250704/gcc-12.5.0-RC-20250704/gcc/gengtype-lex.l" { lexer_line.line++; } YY_BREAK case 45: ! #line 188 "/home/rguenther/src/releases/gcc-12.5.0-RC-20250704/gcc-12.5.0-RC-20250704/gcc/gengtype-lex.l" case 46: YY_RULE_SETUP ! #line 188 "/home/rguenther/src/releases/gcc-12.5.0-RC-20250704/gcc-12.5.0-RC-20250704/gcc/gengtype-lex.l" /* do nothing */ YY_BREAK case 47: *************** YY_LINENO_REWIND_TO(yy_bp + 1); *** 1914,1938 **** (yy_c_buf_p) = yy_cp = yy_bp + 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP ! #line 189 "/d/gcc-12.4.0/gcc-12.4.0/gcc/gengtype-lex.l" /* do nothing */ YY_BREAK case 48: YY_RULE_SETUP ! #line 192 "/d/gcc-12.4.0/gcc-12.4.0/gcc/gengtype-lex.l" { BEGIN(INITIAL); } YY_BREAK case 49: YY_RULE_SETUP ! #line 193 "/d/gcc-12.4.0/gcc-12.4.0/gcc/gengtype-lex.l" { BEGIN(in_struct); } YY_BREAK case 50: ! #line 196 "/d/gcc-12.4.0/gcc-12.4.0/gcc/gengtype-lex.l" case 51: YY_RULE_SETUP ! #line 196 "/d/gcc-12.4.0/gcc-12.4.0/gcc/gengtype-lex.l" { error_at_line (&lexer_line, "unterminated comment or string; unexpected EOF"); --- 1914,1938 ---- (yy_c_buf_p) = yy_cp = yy_bp + 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP ! #line 189 "/home/rguenther/src/releases/gcc-12.5.0-RC-20250704/gcc-12.5.0-RC-20250704/gcc/gengtype-lex.l" /* do nothing */ YY_BREAK case 48: YY_RULE_SETUP ! #line 192 "/home/rguenther/src/releases/gcc-12.5.0-RC-20250704/gcc-12.5.0-RC-20250704/gcc/gengtype-lex.l" { BEGIN(INITIAL); } YY_BREAK case 49: YY_RULE_SETUP ! #line 193 "/home/rguenther/src/releases/gcc-12.5.0-RC-20250704/gcc-12.5.0-RC-20250704/gcc/gengtype-lex.l" { BEGIN(in_struct); } YY_BREAK case 50: ! #line 196 "/home/rguenther/src/releases/gcc-12.5.0-RC-20250704/gcc-12.5.0-RC-20250704/gcc/gengtype-lex.l" case 51: YY_RULE_SETUP ! #line 196 "/home/rguenther/src/releases/gcc-12.5.0-RC-20250704/gcc-12.5.0-RC-20250704/gcc/gengtype-lex.l" { error_at_line (&lexer_line, "unterminated comment or string; unexpected EOF"); *************** YY_RULE_SETUP *** 1941,1952 **** case 52: /* rule 52 can match eol */ YY_RULE_SETUP ! #line 201 "/d/gcc-12.4.0/gcc-12.4.0/gcc/gengtype-lex.l" /* do nothing */ YY_BREAK case 53: YY_RULE_SETUP ! #line 203 "/d/gcc-12.4.0/gcc-12.4.0/gcc/gengtype-lex.l" YY_FATAL_ERROR( "flex scanner jammed" ); YY_BREAK #line 1947 "gengtype-lex.cc" --- 1941,1952 ---- case 52: /* rule 52 can match eol */ YY_RULE_SETUP ! #line 201 "/home/rguenther/src/releases/gcc-12.5.0-RC-20250704/gcc-12.5.0-RC-20250704/gcc/gengtype-lex.l" /* do nothing */ YY_BREAK case 53: YY_RULE_SETUP ! #line 203 "/home/rguenther/src/releases/gcc-12.5.0-RC-20250704/gcc-12.5.0-RC-20250704/gcc/gengtype-lex.l" YY_FATAL_ERROR( "flex scanner jammed" ); YY_BREAK #line 1947 "gengtype-lex.cc" *************** void yyfree (void * ptr ) *** 2924,2930 **** #define YYTABLES_NAME "yytables" ! #line 203 "/d/gcc-12.4.0/gcc-12.4.0/gcc/gengtype-lex.l" void --- 2924,2930 ---- #define YYTABLES_NAME "yytables" ! #line 203 "/home/rguenther/src/releases/gcc-12.5.0-RC-20250704/gcc-12.5.0-RC-20250704/gcc/gengtype-lex.l" void diff -Nrcpad gcc-12.4.0/gcc/gimple-expr.cc gcc-12.5.0-RC-20250704/gcc/gimple-expr.cc *** gcc-12.4.0/gcc/gimple-expr.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/gimple-expr.cc Fri Jul 4 07:24:42 2025 *************** bool *** 843,849 **** is_gimple_mem_ref_addr (tree t) { return (is_gimple_reg (t) ! || TREE_CODE (t) == INTEGER_CST || (TREE_CODE (t) == ADDR_EXPR && (CONSTANT_CLASS_P (TREE_OPERAND (t, 0)) || decl_address_invariant_p (TREE_OPERAND (t, 0))))); --- 843,849 ---- is_gimple_mem_ref_addr (tree t) { return (is_gimple_reg (t) ! || poly_int_tree_p (t) || (TREE_CODE (t) == ADDR_EXPR && (CONSTANT_CLASS_P (TREE_OPERAND (t, 0)) || decl_address_invariant_p (TREE_OPERAND (t, 0))))); diff -Nrcpad gcc-12.4.0/gcc/gimple-fold.cc gcc-12.5.0-RC-20250704/gcc/gimple-fold.cc *** gcc-12.4.0/gcc/gimple-fold.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/gimple-fold.cc Fri Jul 4 07:24:42 2025 *************** gimple_fold_builtin_strlen (gimple_stmt_ *** 4022,4027 **** --- 4022,4032 ---- maxlen = wi::to_wide (max_object_size (), prec) - 2; } + /* For -fsanitize=address, don't optimize the upper bound of the + length to be able to diagnose UB on non-zero terminated arrays. */ + if (sanitize_flags_p (SANITIZE_ADDRESS)) + maxlen = wi::max_value (TYPE_PRECISION (sizetype), UNSIGNED); + if (minlen == maxlen) { /* Fold the strlen call to a constant. */ *************** clear_padding_flush (clear_padding_struc *** 4237,4243 **** i -= wordsize; continue; } ! for (size_t j = i; j < i + wordsize && j < end; j++) { if (buf->buf[j]) { --- 4242,4249 ---- i -= wordsize; continue; } ! size_t endsize = end - i > wordsize ? wordsize : end - i; ! for (size_t j = i; j < i + endsize; j++) { if (buf->buf[j]) { *************** clear_padding_flush (clear_padding_struc *** 4266,4277 **** if (padding_bytes) { if (nonzero_first == 0 ! && nonzero_last == wordsize && all_ones) { /* All bits are padding and we had some padding before too. Just extend it. */ ! padding_bytes += wordsize; continue; } if (all_ones && nonzero_first == 0) --- 4272,4283 ---- if (padding_bytes) { if (nonzero_first == 0 ! && nonzero_last == endsize && all_ones) { /* All bits are padding and we had some padding before too. Just extend it. */ ! padding_bytes += endsize; continue; } if (all_ones && nonzero_first == 0) *************** clear_padding_flush (clear_padding_struc *** 4311,4317 **** if (nonzero_first == wordsize) /* All bits in a word are 0, there are no padding bits. */ continue; ! if (all_ones && nonzero_last == wordsize) { /* All bits between nonzero_first and end of word are padding bits, start counting padding_bytes. */ --- 4317,4323 ---- if (nonzero_first == wordsize) /* All bits in a word are 0, there are no padding bits. */ continue; ! if (all_ones && nonzero_last == endsize) { /* All bits between nonzero_first and end of word are padding bits, start counting padding_bytes. */ *************** clear_padding_flush (clear_padding_struc *** 4353,4359 **** j = k; } } ! if (nonzero_last == wordsize) padding_bytes = nonzero_last - zero_last; continue; } --- 4359,4365 ---- j = k; } } ! if (nonzero_last == endsize) padding_bytes = nonzero_last - zero_last; continue; } *************** clear_padding_type (clear_padding_struct *** 4804,4809 **** --- 4810,4816 ---- buf->off = 0; buf->size = 0; clear_padding_emit_loop (buf, elttype, end, for_auto_init); + off += sz; buf->base = base; buf->sz = prev_sz; buf->align = prev_align; diff -Nrcpad gcc-12.4.0/gcc/gimple-loop-jam.cc gcc-12.5.0-RC-20250704/gcc/gimple-loop-jam.cc *** gcc-12.4.0/gcc/gimple-loop-jam.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/gimple-loop-jam.cc Fri Jul 4 07:24:42 2025 *************** unroll_jam_possible_p (class loop *outer *** 278,290 **** body would be the after-iter value of the first body) if it's over an associative and commutative operation. We wouldn't be able to handle unknown cycles. */ for (psi = gsi_start_phis (loop->header); !gsi_end_p (psi); gsi_next (&psi)) { affine_iv iv; tree op = gimple_phi_result (psi.phi ()); if (virtual_operand_p (op)) ! continue; if (!simple_iv (loop, loop, op, &iv, true)) return false; /* The inductions must be regular, loop invariant step and initial --- 278,294 ---- body would be the after-iter value of the first body) if it's over an associative and commutative operation. We wouldn't be able to handle unknown cycles. */ + bool inner_vdef = false; for (psi = gsi_start_phis (loop->header); !gsi_end_p (psi); gsi_next (&psi)) { affine_iv iv; tree op = gimple_phi_result (psi.phi ()); if (virtual_operand_p (op)) ! { ! inner_vdef = true; ! continue; ! } if (!simple_iv (loop, loop, op, &iv, true)) return false; /* The inductions must be regular, loop invariant step and initial *************** unroll_jam_possible_p (class loop *outer *** 300,305 **** --- 304,315 ---- copy, _not_ the next value of the second body. */ } + /* When there's no inner loop virtual PHI IV we cannot handle the update + required to the inner loop if that doesn't already have one. See + PR117113. */ + if (!inner_vdef && get_virtual_phi (outer->header)) + return false; + return true; } diff -Nrcpad gcc-12.4.0/gcc/gimple-match-head.cc gcc-12.5.0-RC-20250704/gcc/gimple-match-head.cc *** gcc-12.4.0/gcc/gimple-match-head.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/gimple-match-head.cc Fri Jul 4 07:24:42 2025 *************** gimple_extract (gimple *stmt, gimple_mat *** 943,948 **** --- 943,951 ---- || code == VIEW_CONVERT_EXPR) { tree op0 = TREE_OPERAND (gimple_assign_rhs1 (stmt), 0); + /* op0 needs to be a SSA name or an min invariant. */ + if (TREE_CODE (op0) != SSA_NAME && !is_gimple_min_invariant (op0)) + return false; res_op->set_op (code, type, valueize_op (op0)); return true; } *************** gimple_extract (gimple *stmt, gimple_mat *** 950,955 **** --- 953,961 ---- { tree rhs1 = gimple_assign_rhs1 (stmt); tree op0 = valueize_op (TREE_OPERAND (rhs1, 0)); + /* op0 needs to be a SSA name or an min invariant. */ + if (TREE_CODE (op0) != SSA_NAME && !is_gimple_min_invariant (op0)) + return false; res_op->set_op (code, type, op0, TREE_OPERAND (rhs1, 1), TREE_OPERAND (rhs1, 2), diff -Nrcpad gcc-12.4.0/gcc/gimple-range-edge.cc gcc-12.5.0-RC-20250704/gcc/gimple-range-edge.cc *** gcc-12.4.0/gcc/gimple-range-edge.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/gimple-range-edge.cc Fri Jul 4 07:24:42 2025 *************** gimple_outgoing_range::calc_switch_range *** 145,152 **** // Remove the case range from the default case. int_range_max def_range (low, high); range_cast (def_range, type); ! def_range.invert (); ! default_range.intersect (def_range); // Create/union this case with anything on else on the edge. int_range_max case_range (low, high); --- 145,158 ---- // Remove the case range from the default case. int_range_max def_range (low, high); range_cast (def_range, type); ! // If all possible values are taken, set default_range to UNDEFINED. ! if (def_range.varying_p ()) ! default_range.set_undefined (); ! else ! { ! def_range.invert (); ! default_range.intersect (def_range); ! } // Create/union this case with anything on else on the edge. int_range_max case_range (low, high); diff -Nrcpad gcc-12.4.0/gcc/gimple-ssa-backprop.cc gcc-12.5.0-RC-20250704/gcc/gimple-ssa-backprop.cc *** gcc-12.4.0/gcc/gimple-ssa-backprop.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/gimple-ssa-backprop.cc Fri Jul 4 07:24:42 2025 *************** remove_unused_var (tree var) *** 657,664 **** print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM); } gimple_stmt_iterator gsi = gsi_for_stmt (stmt); ! gsi_remove (&gsi, true); ! release_defs (stmt); } /* Note that we're replacing OLD_RHS with NEW_RHS in STMT. */ --- 657,670 ---- print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM); } gimple_stmt_iterator gsi = gsi_for_stmt (stmt); ! if (gimple_code (stmt) == GIMPLE_PHI) ! remove_phi_node (&gsi, true); ! else ! { ! unlink_stmt_vdef (stmt); ! gsi_remove (&gsi, true); ! release_defs (stmt); ! } } /* Note that we're replacing OLD_RHS with NEW_RHS in STMT. */ diff -Nrcpad gcc-12.4.0/gcc/gimple-ssa-isolate-paths.cc gcc-12.5.0-RC-20250704/gcc/gimple-ssa-isolate-paths.cc *** gcc-12.4.0/gcc/gimple-ssa-isolate-paths.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/gimple-ssa-isolate-paths.cc Fri Jul 4 07:24:42 2025 *************** check_loadstore (gimple *stmt, tree op, *** 62,67 **** --- 62,69 ---- return false; } + static vec *bb_split_points; + /* Insert a trap after SI and split the block after the trap. */ static void *************** insert_trap (gimple_stmt_iterator *si_p, *** 104,117 **** gsi_insert_after (si_p, seq, GSI_NEW_STMT); if (stmt_ends_bb_p (stmt)) { ! split_block (gimple_bb (stmt), stmt); return; } } else gsi_insert_before (si_p, seq, GSI_NEW_STMT); ! split_block (gimple_bb (new_stmt), new_stmt); *si_p = gsi_for_stmt (stmt); } --- 106,125 ---- gsi_insert_after (si_p, seq, GSI_NEW_STMT); if (stmt_ends_bb_p (stmt)) { ! if (dom_info_available_p (CDI_POST_DOMINATORS)) ! bb_split_points->safe_push (stmt); ! else ! split_block (gimple_bb (stmt), stmt); return; } } else gsi_insert_before (si_p, seq, GSI_NEW_STMT); ! if (dom_info_available_p (CDI_POST_DOMINATORS)) ! bb_split_points->safe_push (new_stmt); ! else ! split_block (gimple_bb (new_stmt), new_stmt); *si_p = gsi_for_stmt (stmt); } *************** static void *** 840,845 **** --- 848,855 ---- find_explicit_erroneous_behavior (void) { basic_block bb; + auto_vec local_bb_split_points; + bb_split_points = &local_bb_split_points; FOR_EACH_BB_FN (bb, cfun) { *************** find_explicit_erroneous_behavior (void) *** 881,886 **** --- 891,904 ---- warn_return_addr_local (bb, return_stmt); } } + + free_dominance_info (CDI_POST_DOMINATORS); + + /* Perform delayed splitting of blocks. */ + for (gimple *stmt : local_bb_split_points) + split_block (gimple_bb (stmt), stmt); + + bb_split_points = NULL; } /* Search the function for statements which, if executed, would cause *************** gimple_ssa_isolate_erroneous_paths (void *** 937,943 **** /* We scramble the CFG and loop structures a bit, clean up appropriately. We really should incrementally update the loop structures, in theory it shouldn't be that hard. */ - free_dominance_info (CDI_POST_DOMINATORS); if (cfg_altered) { free_dominance_info (CDI_DOMINATORS); --- 955,960 ---- diff -Nrcpad gcc-12.4.0/gcc/gimple-ssa-store-merging.cc gcc-12.5.0-RC-20250704/gcc/gimple-ssa-store-merging.cc *** gcc-12.4.0/gcc/gimple-ssa-store-merging.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/gimple-ssa-store-merging.cc Fri Jul 4 07:24:42 2025 *************** encode_tree_to_bitpos (tree expr, unsign *** 1849,1862 **** unsigned int total_bytes) { unsigned int first_byte = bitpos / BITS_PER_UNIT; - bool sub_byte_op_p = ((bitlen % BITS_PER_UNIT) - || (bitpos % BITS_PER_UNIT) - || !int_mode_for_size (bitlen, 0).exists ()); bool empty_ctor_p = (TREE_CODE (expr) == CONSTRUCTOR && CONSTRUCTOR_NELTS (expr) == 0 && TYPE_SIZE_UNIT (TREE_TYPE (expr)) ! && tree_fits_uhwi_p (TYPE_SIZE_UNIT (TREE_TYPE (expr)))); if (!sub_byte_op_p) { --- 1849,1863 ---- unsigned int total_bytes) { unsigned int first_byte = bitpos / BITS_PER_UNIT; bool empty_ctor_p = (TREE_CODE (expr) == CONSTRUCTOR && CONSTRUCTOR_NELTS (expr) == 0 && TYPE_SIZE_UNIT (TREE_TYPE (expr)) ! && tree_fits_uhwi_p (TYPE_SIZE_UNIT (TREE_TYPE (expr)))); ! bool sub_byte_op_p = ((bitlen % BITS_PER_UNIT) ! || (bitpos % BITS_PER_UNIT) ! || (!int_mode_for_size (bitlen, 0).exists () ! && !empty_ctor_p)); if (!sub_byte_op_p) { diff -Nrcpad gcc-12.4.0/gcc/gimple-ssa-strength-reduction.cc gcc-12.5.0-RC-20250704/gcc/gimple-ssa-strength-reduction.cc *** gcc-12.4.0/gcc/gimple-ssa-strength-reduction.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/gimple-ssa-strength-reduction.cc Fri Jul 4 07:24:42 2025 *************** get_alternative_base (tree base) *** 473,479 **** aff.offset = 0; expr = aff_combination_to_tree (&aff); ! gcc_assert (!alt_base_map->put (base, base == expr ? NULL : expr)); return expr == base ? NULL : expr; } --- 473,480 ---- aff.offset = 0; expr = aff_combination_to_tree (&aff); ! bool existed = alt_base_map->put (base, base == expr ? NULL : expr); ! gcc_assert (!existed); return expr == base ? NULL : expr; } *************** base_cand_from_table (tree base_in) *** 791,797 **** static void add_cand_for_stmt (gimple *gs, slsr_cand_t c) { ! gcc_assert (!stmt_cand_map->put (gs, c)); } /* Given PHI which contains a phi statement, determine whether it --- 792,799 ---- static void add_cand_for_stmt (gimple *gs, slsr_cand_t c) { ! bool existed = stmt_cand_map->put (gs, c); ! gcc_assert (!existed); } /* Given PHI which contains a phi statement, determine whether it diff -Nrcpad gcc-12.4.0/gcc/gimple-ssa-warn-access.cc gcc-12.5.0-RC-20250704/gcc/gimple-ssa-warn-access.cc *** gcc-12.4.0/gcc/gimple-ssa-warn-access.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/gimple-ssa-warn-access.cc Fri Jul 4 07:24:42 2025 *************** maybe_warn_nonstring_arg (tree fndecl, G *** 604,610 **** { if (tree arrbnd = TYPE_DOMAIN (type)) { ! if ((arrbnd = TYPE_MAX_VALUE (arrbnd))) { asize = wi::to_offset (arrbnd) + 1; known_size = true; --- 604,611 ---- { if (tree arrbnd = TYPE_DOMAIN (type)) { ! if ((arrbnd = TYPE_MAX_VALUE (arrbnd)) ! && TREE_CODE (arrbnd) == INTEGER_CST) { asize = wi::to_offset (arrbnd) + 1; known_size = true; *************** matching_alloc_calls_p (tree alloc_decl, *** 1907,1958 **** headers. With AMATS set to the Allocator's Malloc ATtributes, and RMATS set to Reallocator's Malloc ATtributes... */ ! for (tree amats = DECL_ATTRIBUTES (alloc_decl), ! rmats = DECL_ATTRIBUTES (dealloc_decl); ! (amats = lookup_attribute ("malloc", amats)) ! || (rmats = lookup_attribute ("malloc", rmats)); ! amats = amats ? TREE_CHAIN (amats) : NULL_TREE, ! rmats = rmats ? TREE_CHAIN (rmats) : NULL_TREE) ! { ! if (tree args = amats ? TREE_VALUE (amats) : NULL_TREE) ! if (tree adealloc = TREE_VALUE (args)) ! { ! if (DECL_P (adealloc) ! && fndecl_built_in_p (adealloc, BUILT_IN_NORMAL)) ! { ! built_in_function fncode = DECL_FUNCTION_CODE (adealloc); ! if (fncode == BUILT_IN_FREE || fncode == BUILT_IN_REALLOC) ! { ! if (realloc_kind == alloc_kind_t::builtin) ! return true; ! alloc_dealloc_kind = alloc_kind_t::builtin; ! } ! continue; ! } ! ! common_deallocs.add (adealloc); ! } ! if (tree args = rmats ? TREE_VALUE (rmats) : NULL_TREE) ! if (tree ddealloc = TREE_VALUE (args)) ! { ! if (DECL_P (ddealloc) ! && fndecl_built_in_p (ddealloc, BUILT_IN_NORMAL)) ! { ! built_in_function fncode = DECL_FUNCTION_CODE (ddealloc); ! if (fncode == BUILT_IN_FREE || fncode == BUILT_IN_REALLOC) ! { ! if (alloc_dealloc_kind == alloc_kind_t::builtin) ! return true; ! realloc_dealloc_kind = alloc_kind_t::builtin; ! } ! continue; ! } ! if (common_deallocs.add (ddealloc)) ! return true; ! } ! } /* Succeed only if ALLOC_DECL and the reallocator DEALLOC_DECL share a built-in deallocator. */ --- 1908,1956 ---- headers. With AMATS set to the Allocator's Malloc ATtributes, and RMATS set to Reallocator's Malloc ATtributes... */ ! for (tree amats = DECL_ATTRIBUTES (alloc_decl); ! (amats = lookup_attribute ("malloc", amats)); ! amats = amats ? TREE_CHAIN (amats) : NULL_TREE) ! if (tree args = amats ? TREE_VALUE (amats) : NULL_TREE) ! if (tree adealloc = TREE_VALUE (args)) ! { ! if (DECL_P (adealloc) ! && fndecl_built_in_p (adealloc, BUILT_IN_NORMAL)) ! { ! built_in_function fncode = DECL_FUNCTION_CODE (adealloc); ! if (fncode == BUILT_IN_FREE || fncode == BUILT_IN_REALLOC) ! { ! if (realloc_kind == alloc_kind_t::builtin) ! return true; ! alloc_dealloc_kind = alloc_kind_t::builtin; ! } ! continue; ! } ! common_deallocs.add (adealloc); ! } ! for (tree rmats = DECL_ATTRIBUTES (dealloc_decl); ! (rmats = lookup_attribute ("malloc", rmats)); ! rmats = rmats ? TREE_CHAIN (rmats) : NULL_TREE) ! if (tree args = rmats ? TREE_VALUE (rmats) : NULL_TREE) ! if (tree ddealloc = TREE_VALUE (args)) ! { ! if (DECL_P (ddealloc) ! && fndecl_built_in_p (ddealloc, BUILT_IN_NORMAL)) ! { ! built_in_function fncode = DECL_FUNCTION_CODE (ddealloc); ! if (fncode == BUILT_IN_FREE || fncode == BUILT_IN_REALLOC) ! { ! if (alloc_dealloc_kind == alloc_kind_t::builtin) ! return true; ! realloc_dealloc_kind = alloc_kind_t::builtin; ! } ! continue; ! } ! if (common_deallocs.contains (ddealloc)) ! return true; ! } /* Succeed only if ALLOC_DECL and the reallocator DEALLOC_DECL share a built-in deallocator. */ diff -Nrcpad gcc-12.4.0/gcc/gimplify.cc gcc-12.5.0-RC-20250704/gcc/gimplify.cc *** gcc-12.4.0/gcc/gimplify.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/gimplify.cc Fri Jul 4 07:24:42 2025 *************** is_gimple_mem_rhs_or_call (tree t) *** 556,562 **** else return (is_gimple_val (t) || is_gimple_lvalue (t) ! || TREE_CLOBBER_P (t) || TREE_CODE (t) == CALL_EXPR); } --- 556,562 ---- else return (is_gimple_val (t) || is_gimple_lvalue (t) ! || (TREE_CODE (t) == CONSTRUCTOR && CONSTRUCTOR_NELTS (t) == 0) || TREE_CODE (t) == CALL_EXPR); } *************** warn_switch_unreachable_and_auto_init_r *** 2129,2135 **** const char *var_name_str = TREE_STRING_POINTER (var_name); warning_at (gimple_location (stmt), OPT_Wtrivial_auto_var_init, ! "%qs cannot be initialized with" "%<-ftrivial-auto-var_init%>", var_name_str); break; --- 2129,2135 ---- const char *var_name_str = TREE_STRING_POINTER (var_name); warning_at (gimple_location (stmt), OPT_Wtrivial_auto_var_init, ! "%qs cannot be initialized with " "%<-ftrivial-auto-var_init%>", var_name_str); break; *************** gimplify_addr_expr (tree *expr_p, gimple *** 6518,6524 **** *expr_p = build_fold_addr_expr (op0); /* Make sure TREE_CONSTANT and TREE_SIDE_EFFECTS are set properly. */ ! recompute_tree_invariant_for_addr_expr (*expr_p); /* If we re-built the ADDR_EXPR add a conversion to the original type if required. */ --- 6518,6525 ---- *expr_p = build_fold_addr_expr (op0); /* Make sure TREE_CONSTANT and TREE_SIDE_EFFECTS are set properly. */ ! if (TREE_CODE (*expr_p) == ADDR_EXPR) ! recompute_tree_invariant_for_addr_expr (*expr_p); /* If we re-built the ADDR_EXPR add a conversion to the original type if required. */ *************** gimplify_asm_expr (tree *expr_p, gimple_ *** 6658,6663 **** --- 6659,6665 ---- /* Turn the in/out constraint into an output constraint. */ char *p = xstrdup (constraint); p[0] = '='; + TREE_PURPOSE (link) = unshare_expr (TREE_PURPOSE (link)); TREE_VALUE (TREE_PURPOSE (link)) = build_string (constraint_len, p); /* And add a matching input constraint. */ diff -Nrcpad gcc-12.4.0/gcc/ipa-fnsummary.cc gcc-12.5.0-RC-20250704/gcc/ipa-fnsummary.cc *** gcc-12.4.0/gcc/ipa-fnsummary.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/ipa-fnsummary.cc Fri Jul 4 07:24:42 2025 *************** points_to_local_or_readonly_memory_p (tr *** 2589,2595 **** return true; return !ptr_deref_may_alias_global_p (t, false); } ! if (TREE_CODE (t) == ADDR_EXPR) return refs_local_or_readonly_memory_p (TREE_OPERAND (t, 0)); return false; } --- 2589,2597 ---- return true; return !ptr_deref_may_alias_global_p (t, false); } ! if (TREE_CODE (t) == ADDR_EXPR ! && (TREE_CODE (TREE_OPERAND (t, 0)) != TARGET_MEM_REF ! || TREE_CODE (TREE_OPERAND (TREE_OPERAND (t, 0), 0)) != INTEGER_CST)) return refs_local_or_readonly_memory_p (TREE_OPERAND (t, 0)); return false; } diff -Nrcpad gcc-12.4.0/gcc/ipa-free-lang-data.cc gcc-12.5.0-RC-20250704/gcc/ipa-free-lang-data.cc *** gcc-12.4.0/gcc/ipa-free-lang-data.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/ipa-free-lang-data.cc Fri Jul 4 07:24:42 2025 *************** free_lang_data_in_type (tree type, class *** 436,444 **** different front ends. */ for (tree p = TYPE_ARG_TYPES (type); p; p = TREE_CHAIN (p)) { - TREE_VALUE (p) = fld_simplified_type (TREE_VALUE (p), fld); tree arg_type = TREE_VALUE (p); - if (TYPE_READONLY (arg_type) || TYPE_VOLATILE (arg_type)) { int quals = TYPE_QUALS (arg_type) --- 436,442 ---- *************** free_lang_data_in_type (tree type, class *** 448,453 **** --- 446,452 ---- if (!fld->pset.add (TREE_VALUE (p))) free_lang_data_in_type (TREE_VALUE (p), fld); } + TREE_VALUE (p) = fld_simplified_type (TREE_VALUE (p), fld); /* C++ FE uses TREE_PURPOSE to store initial values. */ TREE_PURPOSE (p) = NULL; } *************** find_decls_types_r (tree *tp, int *ws, v *** 842,847 **** --- 841,860 ---- fld_worklist_push (tem, fld); fld_worklist_push (BLOCK_ABSTRACT_ORIGIN (t), fld); } + /* walk_tree does not visit ce->index which can be a FIELD_DECL, pulling + in otherwise unused structure fields so handle CTORs explicitly. */ + else if (TREE_CODE (t) == CONSTRUCTOR) + { + unsigned HOST_WIDE_INT idx; + constructor_elt *ce; + for (idx = 0; vec_safe_iterate (CONSTRUCTOR_ELTS (t), idx, &ce); idx++) + { + if (ce->index) + fld_worklist_push (ce->index, fld); + fld_worklist_push (ce->value, fld); + } + *ws = 0; + } if (TREE_CODE (t) != IDENTIFIER_NODE && CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_TYPED)) diff -Nrcpad gcc-12.4.0/gcc/ipa-icf-gimple.cc gcc-12.5.0-RC-20250704/gcc/ipa-icf-gimple.cc *** gcc-12.4.0/gcc/ipa-icf-gimple.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/ipa-icf-gimple.cc Fri Jul 4 07:24:42 2025 *************** func_checker::compare_asm_inputs_outputs *** 421,427 **** return false; if (!compare_operand (TREE_VALUE (t1), TREE_VALUE (t2), ! get_operand_access_type (map, t1))) return return_false (); tree p1 = TREE_PURPOSE (t1); --- 421,429 ---- return false; if (!compare_operand (TREE_VALUE (t1), TREE_VALUE (t2), ! get_operand_access_type (map, t1)) ! || !types_compatible_p (TREE_TYPE (TREE_VALUE (t1)), ! TREE_TYPE (TREE_VALUE (t2)))) return return_false (); tree p1 = TREE_PURPOSE (t1); *************** func_checker::compare_gimple_call (gcall *** 667,692 **** || gimple_call_alloca_for_var_p (s1) != gimple_call_alloca_for_var_p (s2)) return false; ! if (gimple_call_internal_p (s1) ! && gimple_call_internal_fn (s1) != gimple_call_internal_fn (s2)) ! return false; ! ! tree fntype1 = gimple_call_fntype (s1); ! tree fntype2 = gimple_call_fntype (s2); ! ! /* For direct calls we verify that types are compatible so if we matched ! callees, callers must match, too. For indirect calls however verify ! function type. */ ! if (!gimple_call_fndecl (s1)) { ! if ((fntype1 && !fntype2) ! || (!fntype1 && fntype2) ! || (fntype1 && !types_compatible_p (fntype1, fntype2))) ! return return_false_with_msg ("call function types are not compatible"); } ! if (fntype1 && fntype2 && comp_type_attributes (fntype1, fntype2) != 1) ! return return_false_with_msg ("different fntype attributes"); tree chain1 = gimple_call_chain (s1); tree chain2 = gimple_call_chain (s2); --- 669,705 ---- || gimple_call_alloca_for_var_p (s1) != gimple_call_alloca_for_var_p (s2)) return false; ! unsigned check_arg_types_from = 0; ! if (gimple_call_internal_p (s1)) { ! if (gimple_call_internal_fn (s1) != gimple_call_internal_fn (s2)) ! return false; } + else + { + tree fntype1 = gimple_call_fntype (s1); + tree fntype2 = gimple_call_fntype (s2); + if (!types_compatible_p (fntype1, fntype2)) + return return_false_with_msg ("call function types are not compatible"); ! if (comp_type_attributes (fntype1, fntype2) != 1) ! return return_false_with_msg ("different fntype attributes"); ! ! check_arg_types_from = gimple_call_num_args (s1); ! if (!prototype_p (fntype1) || !prototype_p (fntype2)) ! check_arg_types_from = 0; ! else if (stdarg_p (fntype1)) ! { ! check_arg_types_from = list_length (TYPE_ARG_TYPES (fntype1)); ! if (stdarg_p (fntype2)) ! { ! unsigned n = list_length (TYPE_ARG_TYPES (fntype2)); ! check_arg_types_from = MIN (check_arg_types_from, n); ! } ! } ! else if (stdarg_p (fntype2)) ! check_arg_types_from = list_length (TYPE_ARG_TYPES (fntype2)); ! } tree chain1 = gimple_call_chain (s1); tree chain2 = gimple_call_chain (s2); *************** func_checker::compare_gimple_call (gcall *** 704,709 **** --- 717,726 ---- if (!compare_operand (t1, t2, get_operand_access_type (&map, t1))) return return_false_with_msg ("GIMPLE call operands are different"); + if (i >= check_arg_types_from + && !types_compatible_p (TREE_TYPE (t1), TREE_TYPE (t2))) + return return_false_with_msg ("GIMPLE call operand types are " + "different"); } /* Return value checking. */ diff -Nrcpad gcc-12.4.0/gcc/ipa-modref.cc gcc-12.5.0-RC-20250704/gcc/ipa-modref.cc *** gcc-12.4.0/gcc/ipa-modref.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/ipa-modref.cc Fri Jul 4 07:24:42 2025 *************** modref_summary::useful_p (int ecf_flags, *** 332,338 **** if (check_flags && remove_useless_eaf_flags (static_chain_flags, ecf_flags, false)) return true; ! if (ecf_flags & (ECF_CONST | ECF_NOVOPS)) return ((!side_effects || !nondeterministic) && (ecf_flags & ECF_LOOPING_CONST_OR_PURE)); if (loads && !loads->every_base) --- 332,338 ---- if (check_flags && remove_useless_eaf_flags (static_chain_flags, ecf_flags, false)) return true; ! if (ecf_flags & ECF_CONST) return ((!side_effects || !nondeterministic) && (ecf_flags & ECF_LOOPING_CONST_OR_PURE)); if (loads && !loads->every_base) *************** modref_access_analysis::merge_call_side_ *** 1261,1267 **** int flags = gimple_call_flags (call); /* Nothing to do for non-looping cont functions. */ ! if ((flags & (ECF_CONST | ECF_NOVOPS)) && !(flags & ECF_LOOPING_CONST_OR_PURE)) return false; --- 1261,1267 ---- int flags = gimple_call_flags (call); /* Nothing to do for non-looping cont functions. */ ! if ((flags & ECF_CONST) && !(flags & ECF_LOOPING_CONST_OR_PURE)) return false; *************** modref_access_analysis::merge_call_side_ *** 1274,1280 **** /* Merge side effects and non-determinism. PURE/CONST flags makes functions deterministic and if there is no LOOPING_CONST_OR_PURE they also have no side effects. */ ! if (!(flags & (ECF_CONST | ECF_NOVOPS | ECF_PURE)) || (flags & ECF_LOOPING_CONST_OR_PURE)) { if (!m_summary->side_effects && callee_summary->side_effects) --- 1274,1280 ---- /* Merge side effects and non-determinism. PURE/CONST flags makes functions deterministic and if there is no LOOPING_CONST_OR_PURE they also have no side effects. */ ! if (!(flags & (ECF_CONST | ECF_PURE)) || (flags & ECF_LOOPING_CONST_OR_PURE)) { if (!m_summary->side_effects && callee_summary->side_effects) *************** modref_access_analysis::process_fnspec ( *** 1463,1469 **** /* PURE/CONST flags makes functions deterministic and if there is no LOOPING_CONST_OR_PURE they also have no side effects. */ ! if (!(flags & (ECF_CONST | ECF_NOVOPS | ECF_PURE)) || (flags & ECF_LOOPING_CONST_OR_PURE) || (cfun->can_throw_non_call_exceptions && stmt_could_throw_p (cfun, call))) --- 1463,1469 ---- /* PURE/CONST flags makes functions deterministic and if there is no LOOPING_CONST_OR_PURE they also have no side effects. */ ! if (!(flags & (ECF_CONST | ECF_PURE)) || (flags & ECF_LOOPING_CONST_OR_PURE) || (cfun->can_throw_non_call_exceptions && stmt_could_throw_p (cfun, call))) *************** modref_access_analysis::analyze_call (gc *** 1602,1613 **** print_gimple_stmt (dump_file, stmt, 0); } ! if ((flags & (ECF_CONST | ECF_NOVOPS)) && !(flags & ECF_LOOPING_CONST_OR_PURE)) { if (dump_file) fprintf (dump_file, ! " - ECF_CONST | ECF_NOVOPS, ignoring all stores and all loads " "except for args.\n"); return; } --- 1602,1613 ---- print_gimple_stmt (dump_file, stmt, 0); } ! if ((flags & ECF_CONST) && !(flags & ECF_LOOPING_CONST_OR_PURE)) { if (dump_file) fprintf (dump_file, ! " - ECF_CONST, ignoring all stores and all loads " "except for args.\n"); return; } *************** modref_access_analysis::analyze_call (gc *** 1622,1628 **** if (dump_file) fprintf (dump_file, gimple_call_internal_p (stmt) ? " - Internal call" : " - Indirect call.\n"); ! process_fnspec (stmt); return; } /* We only need to handle internal calls in IPA mode. */ --- 1622,1634 ---- if (dump_file) fprintf (dump_file, gimple_call_internal_p (stmt) ? " - Internal call" : " - Indirect call.\n"); ! if (flags & ECF_NOVOPS) ! { ! set_side_effects (); ! set_nondeterministic (); ! } ! else ! process_fnspec (stmt); return; } /* We only need to handle internal calls in IPA mode. */ *************** modref_access_analysis::analyze_store (g *** 1739,1746 **** t->record_access_lto (t->m_summary_lto->stores, &r, a); if (t->m_always_executed && a.useful_for_kill_p () ! && (!cfun->can_throw_non_call_exceptions ! || !stmt_could_throw_p (cfun, stmt))) { if (dump_file) fprintf (dump_file, " - Recording kill\n"); --- 1745,1751 ---- t->record_access_lto (t->m_summary_lto->stores, &r, a); if (t->m_always_executed && a.useful_for_kill_p () ! && !stmt_could_throw_p (cfun, stmt)) { if (dump_file) fprintf (dump_file, " - Recording kill\n"); *************** modref_eaf_analysis::analyze_ssa_name (t *** 2568,2575 **** int call_flags = deref_flags (gimple_call_arg_flags (call, i), ignore_stores); if (!ignore_retval && !(call_flags & EAF_UNUSED) ! && !(call_flags & EAF_NOT_RETURNED_DIRECTLY) ! && !(call_flags & EAF_NOT_RETURNED_INDIRECTLY)) merge_call_lhs_flags (call, i, name, false, true); if (ecf_flags & (ECF_CONST | ECF_NOVOPS)) m_lattice[index].merge_direct_load (); --- 2573,2582 ---- int call_flags = deref_flags (gimple_call_arg_flags (call, i), ignore_stores); if (!ignore_retval && !(call_flags & EAF_UNUSED) ! && (call_flags & (EAF_NOT_RETURNED_DIRECTLY ! | EAF_NOT_RETURNED_INDIRECTLY)) ! != (EAF_NOT_RETURNED_DIRECTLY ! | EAF_NOT_RETURNED_INDIRECTLY)) merge_call_lhs_flags (call, i, name, false, true); if (ecf_flags & (ECF_CONST | ECF_NOVOPS)) m_lattice[index].merge_direct_load (); *************** modref_eaf_analysis::analyze_ssa_name (t *** 2599,2606 **** is used arbitrarily. */ if (memory_access_to (gimple_assign_rhs1 (assign), name)) m_lattice[index].merge (deref_flags (0, false)); /* Handle *name = *exp. */ ! else if (memory_access_to (gimple_assign_lhs (assign), name)) m_lattice[index].merge_direct_store (); } /* Handle lhs = *name. */ --- 2606,2614 ---- is used arbitrarily. */ if (memory_access_to (gimple_assign_rhs1 (assign), name)) m_lattice[index].merge (deref_flags (0, false)); + /* Handle *name = *exp. */ ! if (memory_access_to (gimple_assign_lhs (assign), name)) m_lattice[index].merge_direct_store (); } /* Handle lhs = *name. */ *************** analyze_parms (modref_summary *summary, *** 2964,2970 **** summary->arg_flags.safe_grow_cleared (count, true); summary->arg_flags[parm_index] = EAF_UNUSED; } ! else if (summary_lto) { if (parm_index >= summary_lto->arg_flags.length ()) summary_lto->arg_flags.safe_grow_cleared (count, true); --- 2972,2978 ---- summary->arg_flags.safe_grow_cleared (count, true); summary->arg_flags[parm_index] = EAF_UNUSED; } ! if (summary_lto) { if (parm_index >= summary_lto->arg_flags.length ()) summary_lto->arg_flags.safe_grow_cleared (count, true); *************** analyze_parms (modref_summary *summary, *** 2999,3004 **** --- 3007,3015 ---- (past, ecf_flags, VOID_TYPE_P (TREE_TYPE (TREE_TYPE (current_function_decl)))); + /* Store merging can produce reads when combining together multiple + bitfields. See PR111613. */ + past &= ~(EAF_NO_DIRECT_READ | EAF_NO_INDIRECT_READ); if (dump_file && (flags | past) != flags && !(flags & EAF_UNUSED)) { fprintf (dump_file, *************** analyze_parms (modref_summary *summary, *** 3020,3026 **** summary->arg_flags.safe_grow_cleared (count, true); summary->arg_flags[parm_index] = flags; } ! else if (summary_lto) { if (parm_index >= summary_lto->arg_flags.length ()) summary_lto->arg_flags.safe_grow_cleared (count, true); --- 3031,3037 ---- summary->arg_flags.safe_grow_cleared (count, true); summary->arg_flags[parm_index] = flags; } ! if (summary_lto) { if (parm_index >= summary_lto->arg_flags.length ()) summary_lto->arg_flags.safe_grow_cleared (count, true); *************** analyze_function (bool ipa) *** 3283,3289 **** fprintf (dump_file, " Flags for param %i improved:", (int)i); else ! gcc_unreachable (); dump_eaf_flags (dump_file, old_flags, false); fprintf (dump_file, " -> "); dump_eaf_flags (dump_file, new_flags, true); --- 3294,3301 ---- fprintf (dump_file, " Flags for param %i improved:", (int)i); else ! fprintf (dump_file, " Flags for param %i changed:", ! (int)i); dump_eaf_flags (dump_file, old_flags, false); fprintf (dump_file, " -> "); dump_eaf_flags (dump_file, new_flags, true); *************** analyze_function (bool ipa) *** 3299,3305 **** || (summary->retslot_flags & EAF_UNUSED)) fprintf (dump_file, " Flags for retslot improved:"); else ! gcc_unreachable (); dump_eaf_flags (dump_file, past_retslot_flags, false); fprintf (dump_file, " -> "); dump_eaf_flags (dump_file, summary->retslot_flags, true); --- 3311,3317 ---- || (summary->retslot_flags & EAF_UNUSED)) fprintf (dump_file, " Flags for retslot improved:"); else ! fprintf (dump_file, " Flags for retslot changed:"); dump_eaf_flags (dump_file, past_retslot_flags, false); fprintf (dump_file, " -> "); dump_eaf_flags (dump_file, summary->retslot_flags, true); *************** analyze_function (bool ipa) *** 3314,3320 **** || (summary->static_chain_flags & EAF_UNUSED)) fprintf (dump_file, " Flags for static chain improved:"); else ! gcc_unreachable (); dump_eaf_flags (dump_file, past_static_chain_flags, false); fprintf (dump_file, " -> "); dump_eaf_flags (dump_file, summary->static_chain_flags, true); --- 3326,3332 ---- || (summary->static_chain_flags & EAF_UNUSED)) fprintf (dump_file, " Flags for static chain improved:"); else ! fprintf (dump_file, " Flags for static chain changed:"); dump_eaf_flags (dump_file, past_static_chain_flags, false); fprintf (dump_file, " -> "); dump_eaf_flags (dump_file, summary->static_chain_flags, true); *************** propagate_unknown_call (cgraph_node *nod *** 4507,4513 **** return changed; } ! if (!(ecf_flags & (ECF_CONST | ECF_NOVOPS | ECF_PURE)) || (ecf_flags & ECF_LOOPING_CONST_OR_PURE) || nontrivial_scc) { --- 4519,4525 ---- return changed; } ! if (!(ecf_flags & (ECF_CONST | ECF_PURE)) || (ecf_flags & ECF_LOOPING_CONST_OR_PURE) || nontrivial_scc) { *************** modref_propagate_in_scc (cgraph_node *co *** 4721,4727 **** struct cgraph_node *callee; if (!callee_edge->inline_failed ! || ((flags & (ECF_CONST | ECF_NOVOPS)) && !(flags & ECF_LOOPING_CONST_OR_PURE))) continue; --- 4733,4739 ---- struct cgraph_node *callee; if (!callee_edge->inline_failed ! || ((flags & ECF_CONST) && !(flags & ECF_LOOPING_CONST_OR_PURE))) continue; *************** modref_propagate_flags_in_scc (cgraph_no *** 5144,5151 **** { escape_summary *sum = escape_summaries->get (e); ! if (!sum || (e->indirect_info->ecf_flags ! & (ECF_CONST | ECF_NOVOPS))) continue; changed |= modref_merge_call_site_flags --- 5156,5163 ---- { escape_summary *sum = escape_summaries->get (e); ! if (!sum || ((e->indirect_info->ecf_flags & ECF_CONST) ! && !(e->indirect_info->ecf_flags & ECF_LOOPING_CONST_OR_PURE))) continue; changed |= modref_merge_call_site_flags *************** modref_propagate_flags_in_scc (cgraph_no *** 5170,5177 **** modref_summary_lto *callee_summary_lto = NULL; struct cgraph_node *callee; ! if (ecf_flags & (ECF_CONST | ECF_NOVOPS) ! || !callee_edge->inline_failed) continue; /* Get the callee and its summary. */ --- 5182,5189 ---- modref_summary_lto *callee_summary_lto = NULL; struct cgraph_node *callee; ! if ((ecf_flags & ECF_CONST) ! && !(ecf_flags & ECF_LOOPING_CONST_OR_PURE)) continue; /* Get the callee and its summary. */ *************** ipa_merge_modref_summary_after_inlining *** 5269,5275 **** if (!callee_info && to_info) { ! if (!(flags & (ECF_CONST | ECF_NOVOPS))) to_info->loads->collapse (); if (!ignore_stores) to_info->stores->collapse (); --- 5281,5287 ---- if (!callee_info && to_info) { ! if (!(flags & (ECF_CONST | ECF_PURE | ECF_NOVOPS))) to_info->loads->collapse (); if (!ignore_stores) to_info->stores->collapse (); *************** ipa_merge_modref_summary_after_inlining *** 5284,5290 **** /* Merge side effects and non-determinism. PURE/CONST flags makes functions deterministic and if there is no LOOPING_CONST_OR_PURE they also have no side effects. */ ! if (!(flags & (ECF_CONST | ECF_NOVOPS | ECF_PURE)) || (flags & ECF_LOOPING_CONST_OR_PURE)) { if (to_info) --- 5296,5302 ---- /* Merge side effects and non-determinism. PURE/CONST flags makes functions deterministic and if there is no LOOPING_CONST_OR_PURE they also have no side effects. */ ! if (!(flags & (ECF_CONST | ECF_PURE)) || (flags & ECF_LOOPING_CONST_OR_PURE)) { if (to_info) diff -Nrcpad gcc-12.4.0/gcc/ipa-prop.cc gcc-12.5.0-RC-20250704/gcc/ipa-prop.cc *** gcc-12.4.0/gcc/ipa-prop.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/ipa-prop.cc Fri Jul 4 07:24:42 2025 *************** unadjusted_ptr_and_unit_offset (tree op, *** 1263,1271 **** { if (TREE_CODE (op) == ADDR_EXPR) { ! poly_int64 extra_offset = 0; tree base = get_addr_base_and_unit_offset (TREE_OPERAND (op, 0), ! &offset); if (!base) { base = get_base_address (TREE_OPERAND (op, 0)); --- 1263,1271 ---- { if (TREE_CODE (op) == ADDR_EXPR) { ! poly_int64 extra_offset; tree base = get_addr_base_and_unit_offset (TREE_OPERAND (op, 0), ! &extra_offset); if (!base) { base = get_base_address (TREE_OPERAND (op, 0)); diff -Nrcpad gcc-12.4.0/gcc/loop-doloop.cc gcc-12.5.0-RC-20250704/gcc/loop-doloop.cc *** gcc-12.4.0/gcc/loop-doloop.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/loop-doloop.cc Fri Jul 4 07:24:42 2025 *************** along with GCC; see the file COPYING3. *** 36,41 **** --- 36,42 ---- #include "loop-unroll.h" #include "regs.h" #include "df.h" + #include "targhooks.h" /* This module is used to modify loops with a determinable number of iterations to use special low-overhead looping instructions. *************** doloop_optimize (class loop *loop) *** 770,775 **** --- 771,788 ---- basic_block loop_end = desc->out_edge->src; bool fail = bitmap_intersect_p (df_get_live_out (loop_end), modified); + /* iv_analysis_loop_init calls df_analyze_loop, which computes just + partial df for blocks of the loop only. The above will catch if + any of the modified registers are use inside of the loop body, but + it will most likely not have accurate info on registers used + at the destination of the out_edge. We call df_analyze on the + whole function at the start of the pass though and iterate only + on innermost loops or from innermost loops, so + live in on desc->out_edge->dest should be still unmodified from + the initial df_analyze. */ + if (!fail) + fail = bitmap_intersect_p (df_get_live_in (desc->out_edge->dest), + modified); BITMAP_FREE (modified); if (fail) *************** doloop_optimize_loops (void) *** 795,801 **** df_live_set_all_dirty (); } ! for (auto loop : loops_list (cfun, 0)) doloop_optimize (loop); if (optimize == 1) --- 808,819 ---- df_live_set_all_dirty (); } ! df_analyze (); ! ! for (auto loop : loops_list (cfun, ! targetm.can_use_doloop_p ! == can_use_doloop_if_innermost ! ? LI_ONLY_INNERMOST : LI_FROM_INNERMOST)) doloop_optimize (loop); if (optimize == 1) diff -Nrcpad gcc-12.4.0/gcc/lra-remat.cc gcc-12.5.0-RC-20250704/gcc/lra-remat.cc *** gcc-12.4.0/gcc/lra-remat.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/lra-remat.cc Fri Jul 4 07:24:42 2025 *************** create_cands (void) *** 459,465 **** if (insn2 != NULL && dst_regno >= FIRST_PSEUDO_REGISTER && reg_renumber[dst_regno] < 0 ! && BLOCK_FOR_INSN (insn2) == BLOCK_FOR_INSN (insn)) { create_cand (insn2, regno_potential_cand[src_regno].nop, dst_regno, insn); --- 459,466 ---- if (insn2 != NULL && dst_regno >= FIRST_PSEUDO_REGISTER && reg_renumber[dst_regno] < 0 ! && BLOCK_FOR_INSN (insn2) == BLOCK_FOR_INSN (insn) ! && insn2 == prev_nonnote_nondebug_insn (insn)) { create_cand (insn2, regno_potential_cand[src_regno].nop, dst_regno, insn); *************** create_cands (void) *** 473,481 **** gcc_assert (REG_P (*id->operand_loc[nop])); int regno = REGNO (*id->operand_loc[nop]); gcc_assert (regno >= FIRST_PSEUDO_REGISTER); ! /* If we're setting an unrenumbered pseudo, make a candidate immediately. ! If it's an output reload register, save it for later; the code above ! looks for output reload insns later on. */ if (reg_renumber[regno] < 0) create_cand (insn, nop, regno); else if (regno >= lra_constraint_new_regno_start) --- 474,483 ---- gcc_assert (REG_P (*id->operand_loc[nop])); int regno = REGNO (*id->operand_loc[nop]); gcc_assert (regno >= FIRST_PSEUDO_REGISTER); ! /* If we're setting an unrenumbered pseudo, make a candidate ! immediately. If it's a potential output reload register, save ! it for later; the code above looks for output reload insns later ! on. */ if (reg_renumber[regno] < 0) create_cand (insn, nop, regno); else if (regno >= lra_constraint_new_regno_start) diff -Nrcpad gcc-12.4.0/gcc/lto/ChangeLog gcc-12.5.0-RC-20250704/gcc/lto/ChangeLog *** gcc-12.4.0/gcc/lto/ChangeLog Thu Jun 20 08:09:01 2024 --- gcc-12.5.0-RC-20250704/gcc/lto/ChangeLog Fri Jul 4 07:24:42 2025 *************** *** 1,3 **** --- 1,12 ---- + 2025-06-24 Richard Biener + + Backported from master: + 2025-02-28 Richard Biener + + PR lto/91299 + * lto-symtab.cc (lto_symtab_merge_symbols): Set DECL_EXTERNAL + only after calling get_availability. + 2024-06-20 Release Manager * GCC 12.4.0 released. diff -Nrcpad gcc-12.4.0/gcc/lto/lto-symtab.cc gcc-12.5.0-RC-20250704/gcc/lto/lto-symtab.cc *** gcc-12.4.0/gcc/lto/lto-symtab.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/lto/lto-symtab.cc Fri Jul 4 07:24:42 2025 *************** lto_symtab_merge_symbols (void) *** 1016,1022 **** || node->resolution == LDPR_RESOLVED_EXEC || node->resolution == LDPR_RESOLVED_DYN)) { - DECL_EXTERNAL (node->decl) = 1; /* If alias to local symbol was preempted by external definition, we know it is not pointing to the local symbol. Remove it. */ if (node->alias --- 1016,1021 ---- *************** lto_symtab_merge_symbols (void) *** 1042,1047 **** --- 1041,1047 ---- node->remove_all_references (); } } + DECL_EXTERNAL (node->decl) = 1; } if (!(cnode = dyn_cast (node)) diff -Nrcpad gcc-12.4.0/gcc/lto-cgraph.cc gcc-12.5.0-RC-20250704/gcc/lto-cgraph.cc *** gcc-12.4.0/gcc/lto-cgraph.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/lto-cgraph.cc Fri Jul 4 07:24:42 2025 *************** lto_symtab_encoder_delete_node (lto_symt *** 153,159 **** last_node = encoder->nodes.pop (); if (last_node.node != node) { ! gcc_assert (encoder->map->put (last_node.node, index + 1)); /* Move the last element to the original spot of NODE. */ encoder->nodes[index] = last_node; --- 153,160 ---- last_node = encoder->nodes.pop (); if (last_node.node != node) { ! bool existed = encoder->map->put (last_node.node, index + 1); ! gcc_assert (existed); /* Move the last element to the original spot of NODE. */ encoder->nodes[index] = last_node; diff -Nrcpad gcc-12.4.0/gcc/lto-opts.cc gcc-12.5.0-RC-20250704/gcc/lto-opts.cc *** gcc-12.4.0/gcc/lto-opts.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/lto-opts.cc Fri Jul 4 07:24:42 2025 *************** lto_write_options (void) *** 82,112 **** subject of merging in lto-wrapper. */ if (!OPTION_SET_P (flag_pic) && !OPTION_SET_P (flag_pie)) { ! append_to_collect_gcc_options (&temporary_obstack, &first_p, ! global_options.x_flag_pic == 2 ! ? "-fPIC" ! : global_options.x_flag_pic == 1 ! ? "-fpic" ! : global_options.x_flag_pie == 2 ! ? "-fPIE" ! : global_options.x_flag_pie == 1 ! ? "-fpie" ! : "-fno-pie"); } if (!OPTION_SET_P (flag_cf_protection)) { ! append_to_collect_gcc_options ( ! &temporary_obstack, &first_p, ! global_options.x_flag_cf_protection == CF_NONE ! ? "-fcf-protection=none" ! : global_options.x_flag_cf_protection == CF_FULL ! ? "-fcf-protection=full" ! : global_options.x_flag_cf_protection == CF_BRANCH ! ? "-fcf-protection=branch" ! : global_options.x_flag_cf_protection == CF_RETURN ! ? "-fcf-protection=return" ! : ""); } /* If debug info is enabled append -g. */ --- 82,113 ---- subject of merging in lto-wrapper. */ if (!OPTION_SET_P (flag_pic) && !OPTION_SET_P (flag_pie)) { ! const char *pic = "-fno-pie"; ! if (global_options.x_flag_pie == 2) ! pic = "-fPIE"; ! else if (global_options.x_flag_pie == 1) ! pic = "-fpie"; ! else if (global_options.x_flag_pic == 2) ! pic = "-fPIC"; ! else if (global_options.x_flag_pic == 1) ! pic = "-fpic"; ! append_to_collect_gcc_options (&temporary_obstack, &first_p, pic); } if (!OPTION_SET_P (flag_cf_protection)) { ! const char *cf_protection = NULL; ! switch (global_options.x_flag_cf_protection) ! { ! case CF_NONE: cf_protection = "-fcf-protection=none"; break; ! case CF_FULL: cf_protection = "-fcf-protection=full"; break; ! case CF_BRANCH: cf_protection = "-fcf-protection=branch"; break; ! case CF_RETURN: cf_protection = "-fcf-protection=return"; break; ! default: break; ! } ! if (cf_protection) ! append_to_collect_gcc_options (&temporary_obstack, &first_p, ! cf_protection); } /* If debug info is enabled append -g. */ diff -Nrcpad gcc-12.4.0/gcc/match.pd gcc-12.5.0-RC-20250704/gcc/match.pd *** gcc-12.4.0/gcc/match.pd Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/match.pd Fri Jul 4 07:24:42 2025 *************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) *** 3255,3261 **** out (le gt ge lt ) (simplify (cmp:c (minmax:c @0 @1) @0) ! (if (ANY_INTEGRAL_TYPE_P (TREE_TYPE (@0))) (out @0 @1)))) /* MIN (X, 5) == 0 -> X == 0 MIN (X, 5) == 7 -> false */ --- 3255,3265 ---- out (le gt ge lt ) (simplify (cmp:c (minmax:c @0 @1) @0) ! (if (ANY_INTEGRAL_TYPE_P (TREE_TYPE (@0)) ! && (!VECTOR_TYPE_P (TREE_TYPE (@0)) ! || (VECTOR_TYPE_P (type) ! && (!expand_vec_cmp_expr_p (TREE_TYPE (@0), type, cmp) ! || expand_vec_cmp_expr_p (TREE_TYPE (@0), type, out))))) (out @0 @1)))) /* MIN (X, 5) == 0 -> X == 0 MIN (X, 5) == 7 -> false */ *************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) *** 7041,7047 **** (IFN_FNMS @0 @1 @2)) (simplify (negate (fmas@3 @0 @1 @2)) ! (if (single_use (@3)) (IFN_FNMS @0 @1 @2)))) (simplify --- 7045,7051 ---- (IFN_FNMS @0 @1 @2)) (simplify (negate (fmas@3 @0 @1 @2)) ! (if (!HONOR_SIGN_DEPENDENT_ROUNDING (type) && single_use (@3)) (IFN_FNMS @0 @1 @2)))) (simplify *************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) *** 7055,7061 **** (IFN_FNMA @0 @1 @2)) (simplify (negate (IFN_FMS@3 @0 @1 @2)) ! (if (single_use (@3)) (IFN_FNMA @0 @1 @2))) (simplify --- 7059,7065 ---- (IFN_FNMA @0 @1 @2)) (simplify (negate (IFN_FMS@3 @0 @1 @2)) ! (if (!HONOR_SIGN_DEPENDENT_ROUNDING (type) && single_use (@3)) (IFN_FNMA @0 @1 @2))) (simplify *************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) *** 7069,7075 **** (IFN_FMS @0 @1 @2)) (simplify (negate (IFN_FNMA@3 @0 @1 @2)) ! (if (single_use (@3)) (IFN_FMS @0 @1 @2))) (simplify --- 7073,7079 ---- (IFN_FMS @0 @1 @2)) (simplify (negate (IFN_FNMA@3 @0 @1 @2)) ! (if (!HONOR_SIGN_DEPENDENT_ROUNDING (type) && single_use (@3)) (IFN_FMS @0 @1 @2))) (simplify *************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) *** 7083,7089 **** (IFN_FMA @0 @1 @2)) (simplify (negate (IFN_FNMS@3 @0 @1 @2)) ! (if (single_use (@3)) (IFN_FMA @0 @1 @2)))) /* CLZ simplifications. */ --- 7087,7093 ---- (IFN_FMA @0 @1 @2)) (simplify (negate (IFN_FNMS@3 @0 @1 @2)) ! (if (!HONOR_SIGN_DEPENDENT_ROUNDING (type) && single_use (@3)) (IFN_FMA @0 @1 @2)))) /* CLZ simplifications. */ diff -Nrcpad gcc-12.4.0/gcc/opt-suggestions.cc gcc-12.5.0-RC-20250704/gcc/opt-suggestions.cc *** gcc-12.4.0/gcc/opt-suggestions.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/opt-suggestions.cc Fri Jul 4 07:24:42 2025 *************** option_proposer::build_option_suggestion *** 167,175 **** add_misspelling_candidates (m_option_suggestions, option, opt_text); for (int j = 0; sanitizer_opts[j].name != NULL; ++j) { - struct cl_option optb; /* -fsanitize=all is not valid, only -fno-sanitize=all. So don't register the positive misspelling candidates for it. */ --- 167,175 ---- add_misspelling_candidates (m_option_suggestions, option, opt_text); + struct cl_option optb; for (int j = 0; sanitizer_opts[j].name != NULL; ++j) { /* -fsanitize=all is not valid, only -fno-sanitize=all. So don't register the positive misspelling candidates for it. */ diff -Nrcpad gcc-12.4.0/gcc/optabs.cc gcc-12.5.0-RC-20250704/gcc/optabs.cc *** gcc-12.4.0/gcc/optabs.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/optabs.cc Fri Jul 4 07:24:42 2025 *************** avoid_expensive_constant (machine_mode m *** 1353,1360 **** static rtx expand_binop_directly (enum insn_code icode, machine_mode mode, optab binoptab, rtx op0, rtx op1, ! rtx target, int unsignedp, enum optab_methods methods, ! rtx_insn *last) { machine_mode xmode0 = insn_data[(int) icode].operand[1].mode; machine_mode xmode1 = insn_data[(int) icode].operand[2].mode; --- 1353,1359 ---- static rtx expand_binop_directly (enum insn_code icode, machine_mode mode, optab binoptab, rtx op0, rtx op1, ! rtx target, int unsignedp, enum optab_methods methods) { machine_mode xmode0 = insn_data[(int) icode].operand[1].mode; machine_mode xmode1 = insn_data[(int) icode].operand[2].mode; *************** expand_binop_directly (enum insn_code ic *** 1364,1369 **** --- 1363,1369 ---- rtx_insn *pat; rtx xop0 = op0, xop1 = op1; bool canonicalize_op1 = false; + rtx_insn *last = get_last_insn (); /* If it is a commutative operator and the modes would match if we would swap the operands, we can save the conversions. */ *************** expand_binop_directly (enum insn_code ic *** 1428,1437 **** tmp_mode = insn_data[(int) icode].operand[0].mode; if (VECTOR_MODE_P (mode) && maybe_ne (GET_MODE_NUNITS (tmp_mode), 2 * GET_MODE_NUNITS (mode))) ! { ! delete_insns_since (last); ! return NULL_RTX; ! } } else tmp_mode = mode; --- 1428,1434 ---- tmp_mode = insn_data[(int) icode].operand[0].mode; if (VECTOR_MODE_P (mode) && maybe_ne (GET_MODE_NUNITS (tmp_mode), 2 * GET_MODE_NUNITS (mode))) ! return NULL_RTX; } else tmp_mode = mode; *************** expand_binop_directly (enum insn_code ic *** 1451,1464 **** ops[1].value, ops[2].value, mode0)) { delete_insns_since (last); ! return expand_binop (mode, binoptab, op0, op1, NULL_RTX, ! unsignedp, methods); } emit_insn (pat); return ops[0].value; } ! delete_insns_since (last); return NULL_RTX; } --- 1448,1461 ---- ops[1].value, ops[2].value, mode0)) { delete_insns_since (last); ! return expand_binop_directly (icode, mode, binoptab, op0, op1, ! NULL_RTX, unsignedp, methods); } emit_insn (pat); return ops[0].value; } ! return NULL_RTX; } *************** expand_binop (machine_mode mode, optab b *** 1527,1535 **** if (icode != CODE_FOR_nothing) { temp = expand_binop_directly (icode, mode, binoptab, op0, op1, ! target, unsignedp, methods, last); if (temp) return temp; } } --- 1524,1533 ---- if (icode != CODE_FOR_nothing) { temp = expand_binop_directly (icode, mode, binoptab, op0, op1, ! target, unsignedp, methods); if (temp) return temp; + delete_insns_since (last); } } *************** expand_binop (machine_mode mode, optab b *** 1555,1563 **** NULL_RTX, unsignedp, OPTAB_DIRECT); temp = expand_binop_directly (icode, int_mode, otheroptab, op0, newop1, ! target, unsignedp, methods, last); if (temp) return temp; } /* If this is a multiply, see if we can do a widening operation that --- 1553,1562 ---- NULL_RTX, unsignedp, OPTAB_DIRECT); temp = expand_binop_directly (icode, int_mode, otheroptab, op0, newop1, ! target, unsignedp, methods); if (temp) return temp; + delete_insns_since (last); } /* If this is a multiply, see if we can do a widening operation that *************** expand_binop (machine_mode mode, optab b *** 1621,1629 **** if (vop1) { temp = expand_binop_directly (icode, mode, otheroptab, op0, vop1, ! target, unsignedp, methods, last); if (temp) return temp; } } } --- 1620,1629 ---- if (vop1) { temp = expand_binop_directly (icode, mode, otheroptab, op0, vop1, ! target, unsignedp, methods); if (temp) return temp; + delete_insns_since (last); } } } diff -Nrcpad gcc-12.4.0/gcc/optc-save-gen.awk gcc-12.5.0-RC-20250704/gcc/optc-save-gen.awk *** gcc-12.4.0/gcc/optc-save-gen.awk Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/optc-save-gen.awk Fri Jul 4 07:24:42 2025 *************** for (i = 0; i < n_opts; i++) { *** 1451,1456 **** --- 1451,1461 ---- if (name == "") continue; + # We do not want to compare warning-related options, since they + # might have been modified by a #pragma GCC diagnostic. + if (flag_set_p("Warning", flags[i])) + continue; + if (name in checked_options) continue; checked_options[name]++ diff -Nrcpad gcc-12.4.0/gcc/opts-common.cc gcc-12.5.0-RC-20250704/gcc/opts-common.cc *** gcc-12.4.0/gcc/opts-common.cc Thu Jun 20 08:08:06 2024 --- gcc-12.5.0-RC-20250704/gcc/opts-common.cc Fri Jul 4 07:24:42 2025 *************** add_misspelling_candidates (auto_vecsafe_push (alternative); } } --- 511,519 ---- if (strncmp (opt_text, new_prefix, new_prefix_len) == 0) { ! char *alternative ! = concat (opt0 + 1, opt1 ? " " : "", opt1 ? opt1 : "", ! opt_text + new_prefix_len, NULL); candidates->safe_push (alternative); } } diff -Nrcpad gcc-12.4.0/gcc/pointer-query.cc gcc-12.5.0-RC-20250704/gcc/pointer-query.cc *** gcc-12.4.0/gcc/pointer-query.cc Thu Jun 20 08:08:07 2024 --- gcc-12.5.0-RC-20250704/gcc/pointer-query.cc Fri Jul 4 07:24:42 2025 *************** array_elt_at_offset (tree artype, HOST_W *** 2574,2579 **** --- 2574,2590 ---- tree build_printable_array_type (tree eltype, unsigned HOST_WIDE_INT nelts) { + /* Cannot build an array type of functions or methods without + an error diagnostic. */ + if (FUNC_OR_METHOD_TYPE_P (eltype)) + { + tree arrtype = make_node (ARRAY_TYPE); + TREE_TYPE (arrtype) = eltype; + TYPE_SIZE (arrtype) = bitsize_zero_node; + TYPE_SIZE_UNIT (arrtype) = size_zero_node; + return arrtype; + } + if (TYPE_SIZE_UNIT (eltype) && TREE_CODE (TYPE_SIZE_UNIT (eltype)) == INTEGER_CST && !integer_zerop (TYPE_SIZE_UNIT (eltype)) diff -Nrcpad gcc-12.4.0/gcc/real.cc gcc-12.5.0-RC-20250704/gcc/real.cc *** gcc-12.4.0/gcc/real.cc Thu Jun 20 08:08:07 2024 --- gcc-12.5.0-RC-20250704/gcc/real.cc Fri Jul 4 07:24:42 2025 *************** void *** 5390,5395 **** --- 5390,5411 ---- get_max_float (const struct real_format *fmt, char *buf, size_t len, bool norm_max) { + if (fmt->b == 10) + { + char *p = buf; + for (int i = fmt->p; i; i--) + { + *p++ = '9'; + if (i == fmt->p) + *p++ = '.'; + } + /* fmt->p plus 1, to account for the decimal point and fmt->emax + minus 1 because the digits are nines, not 1.0. */ + sprintf (buf + fmt->p + 1, "E%d", fmt->emax - 1); + gcc_assert (strlen (buf) < len); + return; + } + int i, n; char *p; bool is_ibm_extended = fmt->pnan < fmt->p; diff -Nrcpad gcc-12.4.0/gcc/reorg.cc gcc-12.5.0-RC-20250704/gcc/reorg.cc *** gcc-12.4.0/gcc/reorg.cc Thu Jun 20 08:08:07 2024 --- gcc-12.5.0-RC-20250704/gcc/reorg.cc Fri Jul 4 07:24:42 2025 *************** insn_sets_resource_p (rtx insn, struct r *** 336,348 **** return resource_conflicts_p (&insn_sets, res); } ! /* Find a label at the end of the function or before a RETURN. If there ! is none, try to make one. If that fails, returns 0. ! The property of such a label is that it is placed just before the ! epilogue or a bare RETURN insn, so that another bare RETURN can be ! turned into a jump to the label unconditionally. In particular, the ! label cannot be placed before a RETURN insn with a filled delay slot. ??? There may be a problem with the current implementation. Suppose we start with a bare RETURN insn and call find_end_label. It may set --- 336,349 ---- return resource_conflicts_p (&insn_sets, res); } ! /* Find a label before a RETURN. If there is none, try to make one; if this ! fails, return 0. KIND is either ret_rtx or simple_return_rtx, indicating ! which type of RETURN we're looking for. ! The property of the label is that it is placed just before a bare RETURN ! insn, so that another bare RETURN can be turned into a jump to the label ! unconditionally. In particular, the label cannot be placed before a ! RETURN insn with a filled delay slot. ??? There may be a problem with the current implementation. Suppose we start with a bare RETURN insn and call find_end_label. It may set *************** insn_sets_resource_p (rtx insn, struct r *** 353,361 **** Note that this is probably mitigated by the following observation: once function_return_label is made, it is very likely the target of a jump, so filling the delay slot of the RETURN will be much more ! difficult. ! KIND is either simple_return_rtx or ret_rtx, indicating which type of ! return we're looking for. */ static rtx_code_label * find_end_label (rtx kind) --- 354,360 ---- Note that this is probably mitigated by the following observation: once function_return_label is made, it is very likely the target of a jump, so filling the delay slot of the RETURN will be much more ! difficult. */ static rtx_code_label * find_end_label (rtx kind) *************** find_end_label (rtx kind) *** 375,384 **** if (*plabel) return *plabel; ! /* Otherwise, see if there is a label at the end of the function. If there ! is, it must be that RETURN insns aren't needed, so that is our return ! label and we don't have to do anything else. */ ! insn = get_last_insn (); while (NOTE_P (insn) || (NONJUMP_INSN_P (insn) --- 374,380 ---- if (*plabel) return *plabel; ! /* Otherwise, scan the insns backward from the end of the function. */ insn = get_last_insn (); while (NOTE_P (insn) || (NONJUMP_INSN_P (insn) *************** find_end_label (rtx kind) *** 386,394 **** || GET_CODE (PATTERN (insn)) == CLOBBER))) insn = PREV_INSN (insn); ! /* When a target threads its epilogue we might already have a ! suitable return insn. If so put a label before it for the ! function_return_label. */ if (BARRIER_P (insn) && JUMP_P (PREV_INSN (insn)) && PATTERN (PREV_INSN (insn)) == kind) --- 382,389 ---- || GET_CODE (PATTERN (insn)) == CLOBBER))) insn = PREV_INSN (insn); ! /* First, see if there is a RETURN at the end of the function. If so, ! put the label before it. */ if (BARRIER_P (insn) && JUMP_P (PREV_INSN (insn)) && PATTERN (PREV_INSN (insn)) == kind) *************** find_end_label (rtx kind) *** 397,404 **** rtx_code_label *label = gen_label_rtx (); LABEL_NUSES (label) = 0; ! /* Put the label before any USE insns that may precede the RETURN ! insn. */ while (GET_CODE (temp) == USE) temp = PREV_INSN (temp); --- 392,399 ---- rtx_code_label *label = gen_label_rtx (); LABEL_NUSES (label) = 0; ! /* Put the label before any USE insns that may precede the ! RETURN insn. */ while (GET_CODE (temp) == USE) temp = PREV_INSN (temp); *************** find_end_label (rtx kind) *** 406,420 **** *plabel = label; } ! else if (LABEL_P (insn)) ! *plabel = as_a (insn); else { rtx_code_label *label = gen_label_rtx (); LABEL_NUSES (label) = 0; - /* If the basic block reorder pass moves the return insn to - some other place try to locate it again and put our - function_return_label there. */ while (insn && ! (JUMP_P (insn) && (PATTERN (insn) == kind))) insn = PREV_INSN (insn); if (insn) --- 401,412 ---- *plabel = label; } ! /* If the basic block reordering pass has moved the return insn to some ! other place, try to locate it again and put the label there. */ else { rtx_code_label *label = gen_label_rtx (); LABEL_NUSES (label) = 0; while (insn && ! (JUMP_P (insn) && (PATTERN (insn) == kind))) insn = PREV_INSN (insn); if (insn) diff -Nrcpad gcc-12.4.0/gcc/testsuite/ChangeLog gcc-12.5.0-RC-20250704/gcc/testsuite/ChangeLog *** gcc-12.4.0/gcc/testsuite/ChangeLog Thu Jun 20 08:09:01 2024 --- gcc-12.5.0-RC-20250704/gcc/testsuite/ChangeLog Fri Jul 4 07:24:42 2025 *************** *** 1,3 **** --- 1,1558 ---- + 2025-07-03 Jakub Jelinek + + Backported from master: + 2025-07-03 Jakub Jelinek + + PR c++/120940 + * g++.dg/parse/pr120940.C: New test. + * g++.dg/warn/Wduplicated-branches9.C: New test. + + 2025-07-03 Jakub Jelinek + + Backported from master: + 2025-07-01 Jakub Jelinek + + PR c++/120471 + * g++.dg/ubsan/pr120471.C: New test. + * g++.dg/parse/pr120471.C: New test. + + 2025-07-02 Richard Biener + + Backported from master: + 2025-02-28 Richard Biener + + PR middle-end/66279 + * g++.dg/pr66279.C: New testcase. + + 2025-06-24 Richard Biener + + Backported from master: + 2025-04-01 Richard Biener + + PR tree-optimization/119534 + * gcc.dg/vect/pr119534.c: New testcase. + + 2025-06-24 Richard Biener + + Backported from master: + 2025-03-06 Richard Biener + + PR middle-end/119119 + * g++.dg/torture/pr11911.C: New testcase. + + 2025-06-24 Richard Biener + + Backported from master: + 2025-03-03 Richard Biener + + PR tree-optimization/119057 + * gcc.dg/vect/pr119057.c: New testcase. + + 2025-06-24 Richard Biener + + Backported from master: + 2025-01-28 Richard Biener + + PR tree-optimization/117424 + * gcc.dg/tree-ssa/ssa-lim-25.c: New testcase. + + 2025-06-24 Richard Biener + + Backported from master: + 2025-02-04 Richard Biener + + PR tree-optimization/117113 + * gcc.dg/torture/pr117113.c: New testcase. + + 2025-06-24 Richard Biener + + Backported from master: + 2025-03-06 Richard Biener + + PR lto/114501 + * g++.dg/pr114501_0.C: New testcase. + + 2025-06-24 Richard Biener + + Backported from master: + 2025-02-04 Richard Biener + + PR lto/113207 + * gcc.dg/pr113207.c: New testcase. + + 2025-06-24 Richard Biener + + Backported from master: + 2025-01-27 Richard Biener + + PR tree-optimization/112859 + PR tree-optimization/115347 + * gcc.dg/torture/pr112859.c: New testcase. + * gcc.dg/torture/pr115347.c: Likewise. + * gcc.dg/tree-ssa/ldist-36.c: Adjust. + + 2025-06-24 Richard Biener + + Backported from master: + 2025-02-28 Richard Biener + + PR ipa/111245 + * g++.dg/torture/pr111245.C: New testcase. + + 2025-06-24 Sam James + + Backported from master: + 2024-10-28 Sam James + + PR tree-optimization/107467 + PR middle-end/115110 + * g++.dg/lto/pr107467_0.C: New test. + + 2025-06-24 Richard Biener + + Backported from master: + 2024-07-31 Richard Biener + + PR middle-end/101478 + * gcc.dg/pr101478.c: New testcase. + + 2025-06-24 Richard Biener + + Backported from master: + 2025-02-28 Richard Biener + + PR lto/91299 + * gcc.dg/lto/pr91299_0.c: New testcase. + * gcc.dg/lto/pr91299_1.c: Likewise. + + 2025-06-24 Richard Biener + + Backported from master: + 2025-02-28 Richard Biener + + PR tree-optimization/87984 + * gcc.target/i386/pr87984.c: New testcase. + + 2025-06-18 Patrick Palka + + Backported from master: + 2025-01-09 Patrick Palka + + PR c++/117792 + * g++.dg/cpp1z/nontype7.C: New test. + + 2025-06-18 Patrick Palka + + Backported from master: + 2024-08-15 Patrick Palka + + PR c++/116320 + * g++.dg/template/access42.C: New test. + + 2025-06-18 Patrick Palka + + Backported from master: + 2024-04-11 Patrick Palka + + PR c++/114303 + * g++.dg/cpp1z/constexpr-if-lambda6.C: New test. + + 2025-06-17 Patrick Palka + + Backported from master: + 2024-09-12 Patrick Palka + + PR c++/116418 + * g++.dg/eh/pr84968.C: No longer expect an ahead of time diagnostic + for the statement-expresssion. Instantiate the template and expect + an incomplete type error instead. + * g++.dg/ext/stmtexpr26.C: New test. + + 2025-06-17 Georg-Johann Lay + + Backported from master: + 2025-06-12 Georg-Johann Lay + + PR middle-end/117811 + PR testsuite/52641 + * gcc.dg/torture/pr117811.c: Fix for int < 32 bit. + + 2025-06-17 Richard Earnshaw + + Backported from master: + 2025-03-25 Richard Earnshaw + + PR middle-end/117811 + * gcc.dg/torture/pr117811.c: New test. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2025-05-30 Jakub Jelinek + + PR target/120480 + * gcc.dg/pr120480.c: New test. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2025-04-17 Jakub Jelinek + + PR target/119834 + * g++.target/s390/pr119834.C: New test. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2024-02-28 Jakub Jelinek + Patrick Palka + + PR c++/113976 + * g++.dg/cpp1y/var-templ87.C: New test. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2025-02-10 Jakub Jelinek + + PR target/118623 + * gcc.c-torture/execute/pr118623.c: New test. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2024-12-05 Jakub Jelinek + + PR rtl-optimization/113994 + PR rtl-optimization/116799 + * gcc.c-torture/execute/pr116799.c: New test. + * g++.dg/torture/pr113994.C: New test. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2024-09-12 Jakub Jelinek + + PR c++/116636 + * g++.dg/warn/deprecated-19.C: New test. + + 2025-06-13 Marek Polacek + + Backported from master: + 2024-09-05 Marek Polacek + + PR c++/116606 + * g++.dg/ext/attr-unavailable-13.C: New test. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2024-02-06 Jakub Jelinek + + PR sanitizer/110676 + * gcc.dg/asan/pr110676.c: New test. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2025-05-13 Jakub Jelinek + + PR libfortran/120196 + * gfortran.dg/pr120196.f90: New test. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2025-05-13 Jakub Jelinek + + PR fortran/120191 + * gfortran.dg/pr120191_3.f90: New test. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2025-05-13 Jakub Jelinek + + PR fortran/120191 + * gfortran.dg/pr120191_2.f90: New test. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2025-05-13 Jakub Jelinek + Daniil Kochergin + Tobias Burnus + + PR fortran/120191 + * gfortran.dg/pr120191_1.f90: New test. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2025-04-22 Jakub Jelinek + + PR target/119327 + * g++.dg/opt/pr119327.C: New test. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2025-04-02 Jakub Jelinek + + PR c/119582 + * gcc.dg/asan/pr119582.c: New test. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2025-04-01 Jakub Jelinek + + PR rtl-optimization/119291 + * gcc.c-torture/execute/pr119291.c: New test. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2025-03-11 Jakub Jelinek + + PR c/119183 + * gcc.dg/pr119183.c: New test. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2025-03-06 Jakub Jelinek + + PR c++/98533 + PR c++/119123 + * g++.dg/cpp0x/pr98533.C: New test. + * g++.dg/cpp0x/pr119123.C: New test. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2025-02-25 Jakub Jelinek + + PR c/119000 + * c-c++-common/gomp/pr119000.c: New test. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2025-02-24 Jakub Jelinek + + PR tree-optimization/118915 + * gcc.c-torture/execute/pr118915.c: New test. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2025-02-08 Jakub Jelinek + + PR target/118776 + * gcc.target/i386/pr118776.c: New test. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2025-02-07 Jakub Jelinek + + PR c++/118763 + * g++.dg/asan/pr118763.C: New test. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2025-02-07 Jakub Jelinek + + PR c++/118661 + * g++.dg/cpp0x/constexpr-volatile4.C: New test. + * g++.dg/cpp0x/constexpr-union9.C: New test. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2025-01-31 Jakub Jelinek + + PR ipa/117432 + * gcc.c-torture/execute/pr117432.c: New test. + * gcc.target/i386/pr117432.c: New test. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2025-01-25 Jakub Jelinek + + PR c++/117827 + * g++.dg/init/array66.C: New test. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2025-01-23 Jakub Jelinek + + PR middle-end/114877 + * gcc.dg/torture/builtin-frexp-1.c: Add -Wmaybe-uninitialized as + dg-additional-options. + (bar): New function. + (TESTIT_FREXP2): Rework the macro so that it doesn't test whether + nothing has been stored to what the second argument points to, but + instead that something has been stored there, whatever it is. + (main): Temporarily don't enable the nan tests for -O0. + + 2025-06-13 Jakub Jelinek + + PR c++/118509 + * g++.dg/expr/pmf-4.C: New test. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2025-01-08 Jakub Jelinek + + PR c++/117825 + * g++.dg/warn/pr117825.C: New test. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2024-12-17 Jakub Jelinek + + PR c++/116108 + * g++.dg/cpp1z/class-deduction117.C: New test. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2024-11-27 Jakub Jelinek + + PR c/117745 + * gcc.dg/pr117745.c: New test. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2024-11-26 Jakub Jelinek + + PR middle-end/102674 + * gcc.dg/dfp/pr102674.c: New test. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2024-11-26 Jakub Jelinek + + PR middle-end/43374 + * gcc.dg/dfp/pr43374.c: New test. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2024-11-08 Jakub Jelinek + + PR c++/117317 + * g++.dg/cpp2a/pr117317-1.C: New test. + * g++.dg/cpp2a/pr117317-2.C: New test. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2024-10-30 Jakub Jelinek + + PR target/117296 + * gcc.target/i386/pr117296.c: New test. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2024-10-24 Jakub Jelinek + + PR c++/117259 + * g++.dg/ubsan/pr117259.C: New test. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2024-10-22 Jakub Jelinek + + PR c/117230 + * c-c++-common/Wsizeof-pointer-memaccess5.c: New test. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2024-09-20 Uros Bizjak + Jakub Jelinek + + PR target/116738 + * gcc.target/i386/sse-pr116738.c: New test. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2024-09-13 Jakub Jelinek + + PR c++/116678 + * g++.dg/warn/deprecated-20.C: New test. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2024-07-18 Jakub Jelinek + + * c-c++-common/torture/builtin-clear-padding-3.c (main): Compare + s2.b.a against -1 rather than (char) -1. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2024-09-10 Jakub Jelinek + + PR c++/116449 + * g++.dg/ubsan/pr116449.C: New test. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2024-08-09 Jakub Jelinek + + PR target/116287 + * gcc.target/i386/bmi-pr116287.c: New test. + * gcc.target/i386/bmi2-pr116287.c: New test. + * gcc.target/i386/tbm-pr116287.c: New test. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2024-07-24 Jakub Jelinek + + PR tree-optimization/116034 + PR testsuite/116061 + * gcc.dg/pr116034.c (g): Change type from int to unsigned short. + (foo): Guard memmove call on __SIZEOF_SHORT__ == 2. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2024-07-23 Jakub Jelinek + Andrew Pinski + + PR tree-optimization/116034 + * gcc.dg/pr116034.c: New test. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2024-07-17 Jakub Jelinek + + PR middle-end/115527 + * c-c++-common/torture/builtin-clear-padding-1.c: Add dg-do run + directive. + * c-c++-common/torture/builtin-clear-padding-2.c: Likewise. + * c-c++-common/torture/builtin-clear-padding-3.c: Likewise. + * c-c++-common/torture/builtin-clear-padding-4.c: Likewise. + * c-c++-common/torture/builtin-clear-padding-5.c: Likewise. + * c-c++-common/torture/builtin-clear-padding-6.c: New test. + + 2025-06-10 Martin Jambor + + Backported from master: + 2025-05-14 Martin Jambor + + * gcc.dg/ipa/pr120044-1.c: New test. + * gcc.dg/ipa/pr120044-2.c: Likewise. + * gcc.dg/tree-ssa/pr114864.c: Likewise. + + 2025-06-02 Jason Merrill + + PR c++/120123 + * g++.dg/cpp2a/concepts-lambda24.C: New test. + + 2025-06-02 Paul Thomas + + PR fortran/109345 + * gfortran.dg/pr109345.f90: Comment out test of component refs. + + 2025-05-30 Richard Sandiford + + Backported from master: + 2025-04-24 Richard Sandiford + + PR target/119610 + * g++.dg/torture/pr119610.C: New test. + * g++.target/aarch64/sve/pr119610-sve.C: Likewise. + + 2025-05-28 Andreas Krebbel + + Backported from master: + 2024-04-23 Andreas Krebbel + + PR target/114676 + * gcc.target/s390/zvector/pr114676.c: New test. + + 2025-05-01 Alex Coplan + + Backported from master: + 2025-03-12 Alex Coplan + + PR rtl-optimization/116564 + * gcc.target/aarch64/torture/pr116564.c: New test. + + 2025-04-30 Martin Jambor + + PR tree-optimization/118924 + * g++.dg/tree-ssa/pr118924.C: New test. + + 2025-04-30 Georg-Johann Lay + + Backported from master: + 2025-04-30 Georg-Johann Lay + + * gcc.target/avr/torture/pr119989.h: New file. + * gcc.target/avr/torture/pr119989-memx-1.c: New test. + * gcc.target/avr/torture/pr119989-memx-2.c: New test. + * gcc.target/avr/torture/pr119989-memx-3.c: New test. + * gcc.target/avr/torture/pr119989-memx-4.c: New test. + + 2025-04-25 Richard Sandiford + + Backported from master: + 2025-04-10 Richard Sandiford + + PR tree-optimization/119399 + * gcc.dg/vect/pr119399.c: New test. + + 2025-04-25 Richard Sandiford + + Backported from master: + 2025-03-07 Richard Sandiford + + PR tree-optimization/116125 + * gcc.dg/vect/pr116125.c: New test. + + 2025-04-23 Jason Merrill + + Backported from master: + 2025-04-16 Jason Merrill + + PR c++/114772 + PR c++/101180 + * g++.dg/ext/pragma-target2.C: New test. + + 2025-04-22 Harald Anlauf + + Backported from master: + 2025-04-09 Harald Anlauf + + PR fortran/119656 + * gfortran.dg/optional_absent_13.f90: New test. + + 2025-04-20 Iain Buclaw + + Backported from master: + 2025-04-15 Iain Buclaw + + PR d/119817 + * gdc.dg/debug/imports/m119817/a.d: New test. + * gdc.dg/debug/imports/m119817/b.d: New test. + * gdc.dg/debug/imports/m119817/package.d: New test. + * gdc.dg/debug/pr119817.d: New test. + + 2025-04-16 Andrew Pinski + + Backported from master: + 2025-04-14 Andrew Pinski + + PR tree-optimization/118476 + * gcc.dg/torture/pr118476-1.c: New test. + + 2025-04-16 Andrew Pinski + + Backported from master: + 2024-08-20 Andrew Pinski + + PR tree-optimization/116412 + * gcc.dg/torture/pr116412-1.c: New test. + + 2025-04-16 Andrew Pinski + + Backported from master: + 2025-03-09 Andrew Pinski + + PR tree-optimization/118922 + * gcc.dg/torture/pr118922-1.c: New test. + + 2025-04-16 Andrew Pinski + + Backported from master: + 2024-10-28 Andrew Pinski + + PR middle-end/111285 + * g++.dg/torture/vect-absu-1.C: New test. + + 2025-04-16 Andrew Pinski + + Backported from master: + 2024-10-02 Andrew Pinski + + PR tree-optimization/116922 + * gcc.dg/torture/pr116922.c: New test. + + 2025-04-16 Andrew Pinski + + Backported from master: + 2024-12-04 Andrew Pinski + + PR tree-optimization/117243 + PR tree-optimization/116749 + * gcc.dg/torture/pr117243-1.c: New test. + * gcc.dg/torture/pr117243-2.c: New test. + + 2025-04-13 Richard Biener + + Backported from master: + 2025-04-09 Richard Biener + + PR rtl-optimization/119689 + PR rtl-optimization/115568 + * g++.target/i386/pr119689.C: New testcase. + + 2025-04-13 Vladimir N. Makarov + + Backported from master: + 2025-02-05 Vladimir N. Makarov + + PR rtl-optimization/115568 + * gcc.target/i386/pr115568.c: New. + + 2025-04-04 Richard Biener + + Backported from master: + 2024-03-06 Richard Biener + + PR tree-optimization/114246 + * gcc.dg/torture/pr114246.c: New testcase. + + 2025-04-04 Richard Biener + + Backported from master: + 2024-07-18 Richard Biener + + PR middle-end/115641 + * gcc.dg/torture/pr115641.c: New testcase. + + 2025-04-04 Richard Biener + + Backported from master: + 2024-10-13 Richard Biener + + PR tree-optimization/116481 + * gcc.dg/pr116481.c: New testcase. + + 2025-04-04 Richard Biener + + Backported from master: + 2024-09-30 Richard Biener + + PR tree-optimization/116850 + * gcc.dg/pr116850.c: New testcase. + + 2025-04-04 Richard Biener + + Backported from master: + 2025-01-13 Richard Biener + Stefan Schulze Frielinghaus + + PR tree-optimization/117119 + * gcc.dg/torture/pr117119.c: New testcase. + + 2025-04-04 Richard Biener + + Backported from master: + 2024-11-20 Richard Biener + + PR tree-optimization/117574 + * gcc.dg/torture/pr117574-1.c: New testcase. + + 2025-04-04 Richard Biener + + Backported from master: + 2024-12-10 Richard Biener + + PR tree-optimization/117912 + * c-c++-common/torture/pr117912-1.c: New testcase. + * c-c++-common/torture/pr117912-2.c: Likewise. + * c-c++-common/torture/pr117912-3.c: Likewise. + + 2025-04-04 Richard Biener + + Backported from master: + 2025-02-03 Richard Biener + + PR tree-optimization/118717 + * gcc.dg/torture/pr118717.c: New testcase. + + 2025-03-11 Iain Buclaw + + Backported from master: + 2025-03-11 Iain Buclaw + + PR d/119139 + * gdc.dg/pr119139.d: New test. + + 2025-03-11 Richard Sandiford + + Backported from master: + 2024-10-14 Richard Sandiford + + PR target/116999 + PR target/117045 + * gcc.target/aarch64/sve/acle/general/whilele_5.c: Fix bogus + expected result. + * gcc.target/aarch64/sve/acle/general/whilele_11.c: New test. + * gcc.target/aarch64/sve/acle/general/whilele_12.c: Likewise. + + 2025-03-11 Richard Sandiford + + Backported from master: + 2024-08-21 Richard Sandiford + + PR testsuite/116238 + * gcc.target/aarch64/sve/pr116238.c: New test. + + 2025-03-07 Christophe Lyon + + Backported from master: + 2025-03-07 Christophe Lyon + + PR target/115485 + * g++.target/arm/pr115485.C: New test. + + 2025-03-05 Jakub Jelinek + + Backported from master: + 2025-03-04 Jakub Jelinek + + PR rtl-optimization/119071 + * gcc.dg/pr119071.c: New test. + * gcc.c-torture/execute/pr119071.c: New test. + + 2025-03-05 Uros Bizjak + + Backported from master: + 2025-03-03 Uros Bizjak + + PR rtl-optimization/118739 + * gcc.target/i386/pr118739.c: New test. + + 2025-03-02 Iain Buclaw + + Backported from master: + 2025-02-28 Iain Buclaw + + PR d/116961 + * gdc.dg/pr116961.d: New test. + + 2025-02-26 Stefan Schulze Frielinghaus + + Backported from master: + 2025-02-13 Stefan Schulze Frielinghaus + + * gcc.target/s390/pr118835.c: New test. + + 2025-02-04 Lewis Hyatt + + PR middle-end/115913 + * c-c++-common/cpp/pr115913.c: New test. + + 2025-01-24 Peter Bergner + + Backported from master: + 2025-01-16 Peter Bergner + + * gcc.target/powerpc/mma-builtin-error.c: New test. + + 2025-01-21 Iain Buclaw + + Backported from master: + 2024-04-19 Iain Buclaw + + PR d/111650 + * gdc.dg/pr111650.d: New test. + + 2025-01-20 Iain Buclaw + + Backported from master: + 2025-01-20 Iain Buclaw + + PR d/114434 + * gdc.test/runnable/test23514.d: New test. + + 2025-01-20 Simon Martin + + Backported from master: + 2025-01-17 Simon Martin + + PR c++/118255 + * g++.dg/lookup/pr99116-1.C: Adjust test expectation. + * g++.dg/template/friend84.C: New test. + + 2025-01-17 Nathaniel Shead + + Backported from master: + 2025-01-17 Nathaniel Shead + + PR c++/118147 + * g++.dg/cpp0x/nsdmi-defer7.C: New test. + + 2025-01-17 Richard Biener + + Backported from master: + 2024-11-12 Richard Biener + + PR tree-optimization/117417 + * gcc.dg/torture/pr117417.c: New testcase. + + 2025-01-17 Richard Biener + + Backported from master: + 2024-10-28 Richard Biener + + PR tree-optimization/117307 + * gcc.dg/vect/pr117307.c: New testcase. + + 2025-01-17 Richard Biener + + Backported from master: + 2024-10-22 Richard Biener + + PR tree-optimization/117254 + * gcc.dg/pr117254.c: New testcase. + + 2025-01-17 Richard Biener + + Backported from master: + 2024-10-12 Richard Biener + + PR tree-optimization/117104 + * gcc.dg/pr117104.c: New testcase. + + 2025-01-17 Jakub Jelinek + + Backported from master: + 2024-10-15 Jakub Jelinek + + PR middle-end/116891 + * gcc.dg/pr116891.c: New test. + * gcc.target/i386/fma-pr116891.c: New test. + + 2025-01-17 Richard Biener + + Backported from master: + 2024-09-19 Richard Biener + + PR tree-optimization/116768 + * gcc.dg/torture/pr116768.c: New testcase. + + 2025-01-17 Richard Biener + + Backported from master: + 2024-10-14 Richard Biener + + PR tree-optimization/116290 + * gcc.dg/pr116290.c: New testcase. + + 2025-01-17 Richard Biener + + Backported from master: + 2023-01-09 Richard Biener + + PR middle-end/69482 + * gcc.target/i386/pr69482-1.c: New testcase. + * gcc.target/i386/pr69482-2.c: Likewise. + + 2025-01-13 Harald Anlauf + + Backported from master: + 2025-01-03 Harald Anlauf + + PR fortran/106692 + * gfortran.dg/cray_pointers_13.f90: New test. + + 2025-01-10 Richard Biener + + Backported from master: + 2024-07-24 Richard Biener + + PR tree-optimization/116057 + * gcc.dg/torture/pr116057.c: New testcase. + + 2025-01-10 Richard Biener + + Backported from master: + 2024-06-27 Richard Biener + + PR tree-optimization/115669 + * gcc.dg/vect/pr115669.c: New testcase. + + 2025-01-10 Richard Biener + + Backported from master: + 2024-06-26 Richard Biener + + PR tree-optimization/115646 + * gcc.dg/pr115646.c: New testcase. + + 2024-12-12 Eric Botcazou + + * gnat.dg/matrix1.adb: New test. + + 2024-12-05 Simon Martin + + Backported from master: + 2024-12-04 Simon Martin + + PR c++/117615 + * g++.dg/cpp2a/constexpr-virtual22.C: New test. + + 2024-11-30 Paul Thomas + + Backported from master: + 2024-11-13 Paul Thomas + + PR fortran/105054 + * gfortran.dg/ptr_func_assign_6.f08: New test. + + 2024-11-27 Martin Jambor + + Backported from master: + 2024-11-15 Martin Jambor + + * gcc.dg/tree-ssa/pr117142.c: New test. + + 2024-11-27 Paul Thomas + + Backported from master: + 2024-11-26 Paul Thomas + + PR fortran/117763 + * gfortran.dg/pr117763.f90: New test. + + 2024-11-23 Paul Thomas + + Backported from master: + 2024-11-11 Paul Thomas + + PR fortran/109345 + * gfortran.dg/character_workout_1.f90: Cut trailing whitespace. + * gfortran.dg/pr109345.f90: New test. + + 2024-11-19 Uros Bizjak + + Backported from master: + 2024-11-18 Uros Bizjak + + PR target/117357 + * gcc.target/i386/pr117357.c: New test. + + 2024-11-13 Hu, Lin1 + + Backported from master: + 2024-11-13 Hu, Lin1 + + PR target/117418 + * gcc.target/i386/pr117418-1.c: New test. + + 2024-11-05 Simon Martin + + Backported from master: + 2024-11-05 Simon Martin + + PR c++/117158 + * g++.dg/cpp1z/eval-order13.C: New test. + * g++.dg/parse/crash77.C: New test. + + 2024-11-04 Andrew MacLeod + + PR tree-optimization/117398 + * gcc.dg/pr117398.c: New. + + 2024-11-04 Eric Botcazou + + * gnat.dg/specs/array7.ads: New test. + + 2024-11-01 Paul Thomas + + Backported from master: + 2024-10-25 Paul Thomas + + PR fortran/79685 + * gfortran.dg/use_rename_13.f90: New test. + + 2024-10-30 liuhongt + + Backported from master: + 2024-10-30 liuhongt + + * gcc.target/i386/pr117318.c: New test. + + 2024-10-29 Eric Botcazou + + * gcc.c-torture/execute/20241029-1.c: New test. + + 2024-10-29 Peter Bergner + + Backported from master: + 2024-08-23 Peter Bergner + + PR target/116415 + * gcc.target/powerpc/pr116415.c: New test. + + 2024-10-25 Paul Thomas + + Backported from master: + 2024-07-16 Paul Thomas + + PR fortran/84868 + * gfortran.dg/pr84868.f90: New test. + + 2024-10-24 liuhongt + + Backported from master: + 2024-10-23 liuhongt + + * gcc.target/i386/pr117240_avx.c: New test. + * gcc.target/i386/pr117240_avx512f.c: New test. + + 2024-10-22 liuhongt + + Backported from master: + 2024-10-22 liuhongt + + * gcc.target/i386/avx512bw-pr103750-2.c: Add xfail for ia32. + + 2024-10-21 liuhongt + + Backported from master: + 2024-10-21 liuhongt + + * gcc.target/i386/pr117159.c: New test. + * gcc.target/i386/avx512bw-pr103750-1.c: Remove xfail. + * gcc.target/i386/avx512bw-pr103750-2.c: Remove xfail. + + 2024-10-16 Uros Bizjak + + Backported from master: + 2024-10-15 Uros Bizjak + + PR target/117116 + * gcc.target/i386/pr117116.c: New test. + + 2024-10-14 Sam James + + Backported from master: + 2024-07-29 Sam James + + PR ipa/111613 + * gcc.c-torture/pr111613.c: Rename to.. + * gcc.c-torture/execute/pr111613.c: ...this. + + 2024-10-14 Jan Hubicka + + Backported from master: + 2024-07-22 Jan Hubicka + + PR ipa/111613 + * gcc.c-torture/pr111613.c: New test. + + 2024-10-14 Jan Hubicka + + Backported from master: + 2024-05-16 Jan Hubicka + + * gcc.c-torture/execute/pr113787.c: New test. + + 2024-10-14 Jan Hubicka + + Backported from master: + 2024-07-22 Jan Hubicka + + PR ipa/115033 + * gcc.c-torture/execute/pr115033.c: New test. + + 2024-10-14 Jan Hubicka + + Backported from master: + 2024-07-22 Jan Hubicka + + PR ipa/114207 + * gcc.c-torture/execute/pr114207.c: New test. + + 2024-10-14 Aldy Hernandez + + Backported from master: + 2023-05-23 Aldy Hernandez + + PR tree-optimization/109934 + * gcc.dg/tree-ssa/pr109934.c: New test. + + 2024-10-14 Eric Botcazou + + PR ada/114593 + * gnat.dg/specs/generic_inst2-child2.ads: New test. + * gnat.dg/specs/generic_inst2.ads: New helper. + * gnat.dg/specs/generic_inst2-child1.ads: Likewise. + + 2024-10-04 H.J. Lu + + Backported from master: + 2024-10-04 H.J. Lu + + PR target/116962 + * gcc.target/i386/pr116962.c: New file. + + 2024-10-02 Richard Biener + + Backported from master: + 2024-09-18 Richard Biener + + PR tree-optimization/116585 + * gcc.dg/torture/pr116585.c: New testcase. + + 2024-09-28 Jan Hubicka + + Backported from master: + 2024-03-18 Jan Hubicka + Karthiban Anbazhagan + + * g++.target/i386/mv29.C: Handle znver5 arch. + * gcc.target/i386/funcspec-56.inc:Likewise. + + 2024-09-28 H.J. Lu + + Backported from master: + 2024-09-25 H.J. Lu + + PR target/116839 + * gcc.target/i386/pr116839.c: New file. + + 2024-09-27 Stefan Schulze Frielinghaus + + Backported from master: + 2024-09-13 Stefan Schulze Frielinghaus + + * gcc.target/s390/vector/long-double-asm-abi.c: Adapt + scan-assembler directive. + * gcc.target/s390/vector/long-double-to-i64.c: Adapt + scan-assembler directive. + * gcc.target/s390/pr115860-1.c: New test. + + 2024-09-20 Harald Anlauf + + Backported from master: + 2024-09-05 Harald Anlauf + + PR fortran/100273 + * gfortran.dg/pr100273.f90: New test. + + 2024-09-20 Eric Botcazou + + * gcc.dg/ipa/modref-4.c: New test. + + 2024-09-17 Marek Polacek + + Backported from master: + 2024-09-17 Marek Polacek + + PR c++/116676 + * g++.dg/cpp1z/constexpr-116676.C: New test. + + 2024-09-15 H.J. Lu + + Backported from master: + 2024-09-08 H.J. Lu + + PR target/116621 + * gcc.target/i386/pr116621.c: New test. + + 2024-09-03 Haochen Jiang + + * gcc.target/i386/avx512fp16-vfpclassph-1c.c: New test. + + 2024-09-02 liuhongt + + Backported from master: + 2024-08-30 liuhongt + + * gcc.target/i386/pr116512.c: New test. + + 2024-08-22 liuhongt + + Backported from master: + 2024-08-22 liuhongt + + * gcc.target/i386/pieces-memcpy-10.c: Use -mmove-max=256 and + -mstore-max=256. + * gcc.target/i386/pieces-memcpy-6.c: Ditto. + * gcc.target/i386/pieces-memset-38.c: Ditto. + * gcc.target/i386/pieces-memset-40.c: Ditto. + * gcc.target/i386/pieces-memset-41.c: Ditto. + * gcc.target/i386/pieces-memset-42.c: Ditto. + * gcc.target/i386/pieces-memset-43.c: Ditto. + * gcc.target/i386/pieces-strcpy-2.c: Ditto. + + 2024-08-22 liuhongt + + Backported from master: + 2024-08-22 liuhongt + + * gcc.target/i386/pieces-memcpy-10.c: Add -mprefer-vector-width=128. + * gcc.target/i386/pieces-memcpy-6.c: Ditto. + * gcc.target/i386/pieces-memset-38.c: Ditto. + * gcc.target/i386/pieces-memset-40.c: Ditto. + * gcc.target/i386/pieces-memset-41.c: Ditto. + * gcc.target/i386/pieces-memset-42.c: Ditto. + * gcc.target/i386/pieces-memset-43.c: Ditto. + * gcc.target/i386/pieces-strcpy-2.c: Ditto. + * gcc.target/i386/pieces-memcpy-22.c: New test. + * gcc.target/i386/pieces-memset-51.c: New test. + * gcc.target/i386/pieces-strcpy-3.c: New test. + + 2024-08-21 Alexandre Oliva + + Backported from master: + 2024-06-26 Alexandre Oliva + Richard Earnshaw + + PR tree-optimization/113281 + * gcc.target/arm/simd/mve-vshr.c: Add expected ranges. + + 2024-08-16 Richard Sandiford + + Backported from master: + 2024-04-05 Richard Sandiford + + PR target/114603 + * gcc.target/aarch64/sve/acle/general/cnot_1.c: New test. + + 2024-08-16 Richard Sandiford + + Backported from master: + 2024-04-08 Richard Sandiford + + PR target/114607 + * gcc.target/aarch64/sve/acle/asm/sudot_s32.c: New test. + + 2024-08-12 liuhongt + + Backported from master: + 2024-07-30 liuhongt + + * gcc.target/i386/pr116043.c: New test. + + 2024-08-06 Andrew Pinski + + Backported from master: + 2024-08-06 Andrew Pinski + + PR target/116189 + * c-c++-common/torture/pr116189-1.c: New test. + + 2024-08-05 Paul Thomas + + Backported from master: + 2024-07-18 Paul Thomas + + PR fortran/108889 + * gfortran.dg/pr108889.f90: New test. + + 2024-07-29 Haochen Jiang + + * gcc.target/i386/avx512bw-vpalignr-1b.c: New test. + * gcc.target/i386/avx512dq-vfpclasssd-1b.c: Ditto. + * gcc.target/i386/avx512dq-vfpclassss-1b.c: Ditto. + * gcc.target/i386/avx512dq-vreducesd-1b.c: Ditto. + * gcc.target/i386/avx512dq-vreducess-1b.c: Ditto. + * gcc.target/i386/avx512vl-valignq-1b.c: Ditto. + + 2024-07-24 Peter Bergner + + Backported from master: + 2024-07-19 Peter Bergner + + PR target/114759 + PR target/115988 + * gcc.target/powerpc/pr114759-3.c: Catch unsupported ABI errors. + + 2024-07-24 Peter Bergner + + Backported from master: + 2024-07-17 Peter Bergner + + PR target/114759 + * gcc.target/powerpc/pr114759-3.c: New test. + + 2024-07-24 Peter Bergner + + Backported from master: + 2024-07-17 Peter Bergner + + PR target/114759 + * gcc.target/powerpc/pr114759-2.c: New test. + * lib/target-supports.exp (rop_ok): Use + check_effective_target_has_arch_pwr8. + + 2024-07-24 Peter Bergner + + Backported from master: + 2024-06-17 Peter Bergner + + PR target/115389 + * gcc.target/powerpc/pr115389.c: New test. + + 2024-07-23 Alexandre Oliva + + Backported from master: + 2024-07-23 Alexandre Oliva + + PR target/106069 + * g++.target/powerpc/pr106069.C: Reorder dg directives. + + 2024-07-21 Harald Anlauf + + Backported from master: + 2024-07-19 Harald Anlauf + + PR fortran/103115 + * gfortran.dg/string_array_constructor_4.f90: New test. + + 2024-07-20 René Rebe + + Backported from master: + 2024-07-18 René Rebe + Peter Bergner + + PR target/97367 + * gcc.target/powerpc/pr97367.c: New test. + + 2024-07-18 Uros Bizjak + + Backported from master: + 2024-07-17 Uros Bizjak + + PR target/115526 + * gcc.target/alpha/pr115526.c: New test. + + 2024-07-15 liuhongt + + Backported from master: + 2024-07-15 liuhongt + + * gcc.target/i386/pr115872.c: New test. + + 2024-07-11 Andre Vieira + + Backported from master: + 2024-07-11 Andre Vieira + + * gcc.target/arm/mve/intrinsics/vsetq_lane_su64.c: New test. + + 2024-07-05 Georg-Johann Lay + + Backported from master: + 2024-07-05 Georg-Johann Lay + + PR target/87376 + * gcc.target/avr/torture/pr87376.c: New test. + + 2024-07-04 Kyrylo Tkachov + + Backported from master: + 2024-07-03 Kyrylo Tkachov + + PR target/115475 + * gcc.target/aarch64/acle/bf16_sve_feature.c: New test. + + 2024-07-04 Kyrylo Tkachov + + Backported from master: + 2024-07-03 Kyrylo Tkachov + + PR target/115457 + * gcc.target/aarch64/acle/bf16_feature.c: New test. + + 2024-07-03 Georg-Johann Lay + + Backported from master: + 2024-07-03 Georg-Johann Lay + + PR target/98762 + * gcc.target/avr/torture/pr98762.c: New test. + + 2024-07-03 Kewen Lin + + Backported from master: + 2024-06-26 Kewen Lin + Xionghu Luo + + PR target/106069 + PR target/115355 + * gcc.target/powerpc/pr106069-2.c: New test. + + 2024-07-03 Kewen Lin + + Backported from master: + 2024-06-26 Kewen Lin + Xionghu Luo + + PR target/106069 + PR target/115355 + * gcc.target/powerpc/pr106069-1.c: New test. + + 2024-07-01 Georg-Johann Lay + + Backported from master: + 2024-07-01 Georg-Johann Lay + + PR target/88236 + PR target/115726 + * gcc.target/avr/torture/pr88236-pr115726.c: New test. + + 2024-06-28 Kewen Lin + + Backported from master: + 2024-06-21 Kewen Lin + Xionghu Luo + + PR target/106069 + PR target/115355 + * g++.target/powerpc/pr106069.C: New test. + * gcc.target/powerpc/pr115355.c: New test. + + 2024-06-24 Kewen Lin + + Backported from master: + 2024-05-29 Kewen Lin + + PR target/114846 + * gcc.target/powerpc/pr114846.c: New test. + + 2024-06-20 Jakub Jelinek + + Backported from master: + 2024-06-17 Jakub Jelinek + + PR driver/115440 + * g++.dg/cpp1z/pr115440.C: New test. + + 2024-06-20 Jakub Jelinek + + Backported from master: + 2024-06-17 Jakub Jelinek + + PR c/115290 + * c-c++-common/Warray-compare-3.c: New test. + 2024-06-20 Release Manager * GCC 12.4.0 released. diff -Nrcpad gcc-12.4.0/gcc/testsuite/c-c++-common/Warray-compare-3.c gcc-12.5.0-RC-20250704/gcc/testsuite/c-c++-common/Warray-compare-3.c *** gcc-12.4.0/gcc/testsuite/c-c++-common/Warray-compare-3.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/c-c++-common/Warray-compare-3.c Fri Jul 4 07:24:42 2025 *************** *** 0 **** --- 1,13 ---- + /* PR c/115290 */ + /* { dg-do compile } */ + /* { dg-options "-Warray-compare" } */ + + int a[32][32], b[32][32]; + + int + foo (int x, int y) + { + return (x ? a : b) == (y ? a : b); /* { dg-warning "comparison between two arrays" } */ + /* { dg-message "use '&\\\(\[^\n\r]*\\\)\\\[0\\\] == &\\\(\[^\n\r]*\\\)\\\[0\\\]' to compare the addresses" "" { target c } .-1 } */ + /* { dg-message "use unary '\\\+' which decays operands to pointers or '&\\\(\[^\n\r]*\\\)\\\[0\\\] == &\\\(\[^\n\r]*\\\)\\\[0\\\]' to compare the addresses" "" { target c++ } .-2 } */ + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/c-c++-common/Wsizeof-pointer-memaccess5.c gcc-12.5.0-RC-20250704/gcc/testsuite/c-c++-common/Wsizeof-pointer-memaccess5.c *** gcc-12.4.0/gcc/testsuite/c-c++-common/Wsizeof-pointer-memaccess5.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/c-c++-common/Wsizeof-pointer-memaccess5.c Fri Jul 4 07:24:42 2025 *************** *** 0 **** --- 1,29 ---- + /* PR c/117230 */ + /* { dg-do compile } */ + /* { dg-options "-Wsizeof-pointer-memaccess" } */ + + typedef int V __attribute__((vector_size (sizeof (int)))); + + void + foo (V *a, char *b) + { + __builtin_memcpy (b, a, sizeof (a)); /* { dg-warning "argument to 'sizeof' in '\[^\n\r]*__builtin_memcpy\[^\n\r]*' call is the same expression as the source; did you mean to dereference it\\\?" } */ + } + + void + bar (V *a, char *b) + { + __builtin_memcpy (a, b, sizeof (a)); /* { dg-warning "argument to 'sizeof' in '\[^\n\r]*__builtin_memcpy\[^\n\r]*' call is the same expression as the destination; did you mean to dereference it\\\?" } */ + } + + int + baz (V *a, char *b) + { + return __builtin_memcmp (a, b, sizeof (a)); /* { dg-warning "argument to 'sizeof' in '\[^\n\r]*__builtin_memcmp\[^\n\r]*' call is the same expression as the first source; did you mean to dereference it\\\?" } */ + } + + int + qux (V *a, char *b) + { + return __builtin_memcmp (b, a, sizeof (a)); /* { dg-warning "argument to 'sizeof' in '\[^\n\r]*__builtin_memcmp\[^\n\r]*' call is the same expression as the second source; did you mean to dereference it\\\?" } */ + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/c-c++-common/cpp/pr115913.c gcc-12.5.0-RC-20250704/gcc/testsuite/c-c++-common/cpp/pr115913.c *** gcc-12.4.0/gcc/testsuite/c-c++-common/cpp/pr115913.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/c-c++-common/cpp/pr115913.c Fri Jul 4 07:24:42 2025 *************** *** 0 **** --- 1,7 ---- + /* { dg-do preprocess } */ + /* PR middle-end/115913 */ + #pragma GCC push_options + #pragma GCC diagnostic warning "-Wundef" + /* The call to cl_optimization_compare performed by pop_options should not + lead to a checking failure. */ + #pragma GCC pop_options diff -Nrcpad gcc-12.4.0/gcc/testsuite/c-c++-common/gomp/pr119000.c gcc-12.5.0-RC-20250704/gcc/testsuite/c-c++-common/gomp/pr119000.c *** gcc-12.4.0/gcc/testsuite/c-c++-common/gomp/pr119000.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/c-c++-common/gomp/pr119000.c Fri Jul 4 07:24:42 2025 *************** *** 0 **** --- 1,16 ---- + /* PR c/119000 */ + /* { dg-do compile } */ + /* { dg-options "-fopenmp -Wunused-but-set-variable" } */ + + int + foo (void) + { + int a = 1, b, c = 1, v; /* { dg-warning "variable 'b' set but not used" } */ + #pragma omp atomic write + v = a; + #pragma omp atomic read + b = v; + #pragma omp atomic update + v += c; + return v; + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/c-c++-common/torture/builtin-clear-padding-1.c gcc-12.5.0-RC-20250704/gcc/testsuite/c-c++-common/torture/builtin-clear-padding-1.c *** gcc-12.4.0/gcc/testsuite/c-c++-common/torture/builtin-clear-padding-1.c Thu Jun 20 08:08:07 2024 --- gcc-12.5.0-RC-20250704/gcc/testsuite/c-c++-common/torture/builtin-clear-padding-1.c Fri Jul 4 07:24:42 2025 *************** *** 1,4 **** --- 1,5 ---- /* PR libstdc++/88101 */ + /* { dg-do run } */ int i1, i2; long double l1, l2; diff -Nrcpad gcc-12.4.0/gcc/testsuite/c-c++-common/torture/builtin-clear-padding-2.c gcc-12.5.0-RC-20250704/gcc/testsuite/c-c++-common/torture/builtin-clear-padding-2.c *** gcc-12.4.0/gcc/testsuite/c-c++-common/torture/builtin-clear-padding-2.c Thu Jun 20 08:08:07 2024 --- gcc-12.5.0-RC-20250704/gcc/testsuite/c-c++-common/torture/builtin-clear-padding-2.c Fri Jul 4 07:24:42 2025 *************** *** 1,4 **** --- 1,5 ---- /* PR libstdc++/88101 */ + /* { dg-do run } */ typedef int T __attribute__((aligned (16384))); struct S { char a; short b; long double c; T d; T e; long long f; }; diff -Nrcpad gcc-12.4.0/gcc/testsuite/c-c++-common/torture/builtin-clear-padding-3.c gcc-12.5.0-RC-20250704/gcc/testsuite/c-c++-common/torture/builtin-clear-padding-3.c *** gcc-12.4.0/gcc/testsuite/c-c++-common/torture/builtin-clear-padding-3.c Thu Jun 20 08:08:07 2024 --- gcc-12.5.0-RC-20250704/gcc/testsuite/c-c++-common/torture/builtin-clear-padding-3.c Fri Jul 4 07:24:42 2025 *************** *** 1,4 **** --- 1,5 ---- /* PR libstdc++/88101 */ + /* { dg-do run } */ union V { char a; signed char b; unsigned char c; }; struct T { char a; int b; union V c; }; *************** main () *** 33,39 **** foo (&s1, 0); foo (&s2, 0); __builtin_clear_padding (&s2); ! if (s2.b.a != (char) -1) __builtin_abort (); __builtin_clear_padding (&s2.b.a); __builtin_memset (&s2.b.a + 1, 0, sizeof (union U) - sizeof (s2.b.a)); --- 34,40 ---- foo (&s1, 0); foo (&s2, 0); __builtin_clear_padding (&s2); ! if (s2.b.a != -1) __builtin_abort (); __builtin_clear_padding (&s2.b.a); __builtin_memset (&s2.b.a + 1, 0, sizeof (union U) - sizeof (s2.b.a)); diff -Nrcpad gcc-12.4.0/gcc/testsuite/c-c++-common/torture/builtin-clear-padding-4.c gcc-12.5.0-RC-20250704/gcc/testsuite/c-c++-common/torture/builtin-clear-padding-4.c *** gcc-12.4.0/gcc/testsuite/c-c++-common/torture/builtin-clear-padding-4.c Thu Jun 20 08:08:07 2024 --- gcc-12.5.0-RC-20250704/gcc/testsuite/c-c++-common/torture/builtin-clear-padding-4.c Fri Jul 4 07:24:42 2025 *************** *** 1,6 **** - /* { dg-require-effective-target alloca } */ - /* PR libstdc++/88101 */ struct S { char a; short b; char c; }; --- 1,6 ---- /* PR libstdc++/88101 */ + /* { dg-do run } */ + /* { dg-require-effective-target alloca } */ struct S { char a; short b; char c; }; diff -Nrcpad gcc-12.4.0/gcc/testsuite/c-c++-common/torture/builtin-clear-padding-5.c gcc-12.5.0-RC-20250704/gcc/testsuite/c-c++-common/torture/builtin-clear-padding-5.c *** gcc-12.4.0/gcc/testsuite/c-c++-common/torture/builtin-clear-padding-5.c Thu Jun 20 08:08:07 2024 --- gcc-12.5.0-RC-20250704/gcc/testsuite/c-c++-common/torture/builtin-clear-padding-5.c Fri Jul 4 07:24:42 2025 *************** *** 1,4 **** --- 1,5 ---- /* PR libstdc++/88101 */ + /* { dg-do run } */ struct S { char a; short b; char c; } s1[24], s2[24]; struct T { char a; long long b; char c; struct S d[3]; long long e; char f; } t1, t2; diff -Nrcpad gcc-12.4.0/gcc/testsuite/c-c++-common/torture/builtin-clear-padding-6.c gcc-12.5.0-RC-20250704/gcc/testsuite/c-c++-common/torture/builtin-clear-padding-6.c *** gcc-12.4.0/gcc/testsuite/c-c++-common/torture/builtin-clear-padding-6.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/c-c++-common/torture/builtin-clear-padding-6.c Fri Jul 4 07:24:42 2025 *************** *** 0 **** --- 1,28 ---- + /* PR middle-end/115527 */ + /* { dg-do run } */ + + struct T { struct S { double a; signed char b; long c; } d[3]; int e; } t1, t2; + + __attribute__((noipa)) void + foo (struct T *t) + { + for (int i = 0; i < 3; ++i) + { + t->d[i].a = 1. + 3 * i; + t->d[i].b = 2 + 3 * i; + t->d[i].c = 3 + 3 * i; + } + t->e = 10; + } + + int + main () + { + __builtin_memset (&t2, -1, sizeof (t2)); + foo (&t1); + foo (&t2); + __builtin_clear_padding (&t2); + if (__builtin_memcmp (&t1, &t2, sizeof (t1))) + __builtin_abort (); + return 0; + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/c-c++-common/torture/pr116189-1.c gcc-12.5.0-RC-20250704/gcc/testsuite/c-c++-common/torture/pr116189-1.c *** gcc-12.4.0/gcc/testsuite/c-c++-common/torture/pr116189-1.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/c-c++-common/torture/pr116189-1.c Fri Jul 4 07:24:42 2025 *************** *** 0 **** --- 1,30 ---- + /* { dg-additional-options "-fcompare-debug" } */ + + /* PR target/116189 */ + + /* In the sh backend, we used to create insn in the path of rtx_costs. + This means sometimes the max uid for insns would be different between + debugging and non debugging which then would cause gcse's hashtable + to have different number of slots which would cause a different walk + for that hash table. */ + + extern void ff(void); + extern short nn[8][4]; + typedef unsigned short move_table[4]; + extern signed long long ira_overall_cost; + extern signed long long ira_load_cost; + extern move_table *x_ira_register_move_cost[1]; + struct move { struct move *next; }; + unsigned short t; + void emit_move_list(struct move * list, int freq, unsigned char mode, int regno) { + int cost; + for (; list != 0; list = list->next) + { + ff(); + unsigned short aclass = t; + cost = (nn)[mode][aclass] ; + ira_load_cost = cost; + cost = x_ira_register_move_cost[mode][aclass][aclass] * freq ; + ira_overall_cost = cost; + } + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/c-c++-common/torture/pr117912-1.c gcc-12.5.0-RC-20250704/gcc/testsuite/c-c++-common/torture/pr117912-1.c *** gcc-12.4.0/gcc/testsuite/c-c++-common/torture/pr117912-1.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/c-c++-common/torture/pr117912-1.c Fri Jul 4 07:24:42 2025 *************** *** 0 **** --- 1,28 ---- + /* { dg-do run } */ + + struct S { int a; int b[24]; int c[24]; int d; }; + volatile int *p; + + void __attribute__((noipa)) + bar (int *q) + { + p = q; + } + + __SIZE_TYPE__ __attribute__((noipa)) + foo (struct S *p) + { + bar (&p->b[24]); + bar (&p->c[0]); + return __builtin_object_size (&p->c[0], 1); + } + + int + main() + { + struct S s; + __SIZE_TYPE__ x = foo (&s); + if (x < sizeof (int) * 24) + __builtin_abort (); + return 0; + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/c-c++-common/torture/pr117912-2.c gcc-12.5.0-RC-20250704/gcc/testsuite/c-c++-common/torture/pr117912-2.c *** gcc-12.4.0/gcc/testsuite/c-c++-common/torture/pr117912-2.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/c-c++-common/torture/pr117912-2.c Fri Jul 4 07:24:42 2025 *************** *** 0 **** --- 1,28 ---- + /* { dg-do run } */ + + struct S { int a; int b[0]; int c[24]; int d; }; + volatile int *p; + + void __attribute__((noipa)) + bar (int *q) + { + p = q; + } + + __SIZE_TYPE__ __attribute__((noipa)) + foo (struct S *p) + { + bar (&p->b[0]); + bar (&p->c[0]); + return __builtin_object_size (&p->c[0], 1); + } + + int + main() + { + struct S s; + __SIZE_TYPE__ x = foo (&s); + if (x < sizeof (int) * 24) + __builtin_abort (); + return 0; + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/c-c++-common/torture/pr117912-3.c gcc-12.5.0-RC-20250704/gcc/testsuite/c-c++-common/torture/pr117912-3.c *** gcc-12.4.0/gcc/testsuite/c-c++-common/torture/pr117912-3.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/c-c++-common/torture/pr117912-3.c Fri Jul 4 07:24:42 2025 *************** *** 0 **** --- 1,61 ---- + /* { dg-do run } */ + /* { dg-additional-options "-std=gnu++20" { target c++ } } */ + + struct B {}; + struct A { int a; + #ifdef __cplusplus + [[no_unique_address]] + #endif + struct B b; + char c[]; }; + volatile void *p; + + void __attribute__((noipa)) + bar (void *q) + { + p = q; + } + + __SIZE_TYPE__ __attribute__((noipa)) + foo (struct A *p) + { + bar (&p->b); + bar (&p->c); + return __builtin_object_size (&p->c, 1); + } + + __SIZE_TYPE__ __attribute__((noipa)) + baz (void) + { + struct A *p = (struct A *) __builtin_malloc (__builtin_offsetof (struct A, c) + 64); + bar (&p->b); + bar (&p->c); + return __builtin_object_size (&p->c, 1); + } + + __SIZE_TYPE__ __attribute__((noipa)) + qux (struct A *p) + { + bar (&p->b); + bar (&p->c); + return __builtin_object_size (&p->c, 3); + } + + __SIZE_TYPE__ __attribute__((noipa)) + boo (void) + { + struct A *p = (struct A *) __builtin_malloc (__builtin_offsetof (struct A, c) + 64); + bar (&p->b); + bar (&p->c); + return __builtin_object_size (&p->c, 3); + } + + int + main () + { + static struct A a = { .a = 1, .b = {}, .c = { 1, 2, 3, 4, 0 } }; + if (foo (&a) < 5) + __builtin_abort (); + if (baz () < 64) + __builtin_abort (); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/g++.dg/asan/pr118763.C gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/asan/pr118763.C *** gcc-12.4.0/gcc/testsuite/g++.dg/asan/pr118763.C Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/asan/pr118763.C Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,15 ---- + // PR c++/118763 + // { dg-do run } + + int * + foo (bool x) + { + return new int (({ if (x) return nullptr; 1; })); + } + + int + main () + { + delete foo (true); + delete foo (false); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/g++.dg/cpp0x/constexpr-union9.C gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/cpp0x/constexpr-union9.C *** gcc-12.4.0/gcc/testsuite/g++.dg/cpp0x/constexpr-union9.C Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/cpp0x/constexpr-union9.C Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,16 ---- + // PR c++/118661 + // { dg-do compile { target c++11 } } + + using nullptr_t = decltype (nullptr); + union U { int i; nullptr_t n; }; + constexpr U u = { 42 }; + static_assert (u.n == nullptr, ""); + + #if __cplusplus >= 201402L + constexpr nullptr_t + foo () + { + union U { int i; nullptr_t n; } u = { 42 }; + return u.n; + } + #endif diff -Nrcpad gcc-12.4.0/gcc/testsuite/g++.dg/cpp0x/constexpr-volatile4.C gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/cpp0x/constexpr-volatile4.C *** gcc-12.4.0/gcc/testsuite/g++.dg/cpp0x/constexpr-volatile4.C Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/cpp0x/constexpr-volatile4.C Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,20 ---- + // PR c++/118661 + // { dg-do compile { target c++11 } } + + using nullptr_t = decltype (nullptr); + constexpr volatile nullptr_t a = {}; + constexpr nullptr_t b = a; + + constexpr nullptr_t + foo () + { + #if __cplusplus >= 201402L + volatile nullptr_t c = {}; + return c; + #else + return nullptr; + #endif + } + + static_assert (b == nullptr, ""); + static_assert (foo () == nullptr, ""); diff -Nrcpad gcc-12.4.0/gcc/testsuite/g++.dg/cpp0x/nsdmi-defer7.C gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/cpp0x/nsdmi-defer7.C *** gcc-12.4.0/gcc/testsuite/g++.dg/cpp0x/nsdmi-defer7.C Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/cpp0x/nsdmi-defer7.C Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,13 ---- + // PR c++/118147 + // { dg-do compile { target c++11 } } + + struct F { + int i = []{ + #pragma message "test" // { dg-message "test" } + return 1; + }(); + }; + + struct G { + int i = + #pragma GCC diagnostic push // { dg-error "file ends in default argument|expected" } diff -Nrcpad gcc-12.4.0/gcc/testsuite/g++.dg/cpp0x/pr119123.C gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/cpp0x/pr119123.C *** gcc-12.4.0/gcc/testsuite/g++.dg/cpp0x/pr119123.C Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/cpp0x/pr119123.C Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,10 ---- + // PR c++/119123 + // { dg-do compile { target c++11 } } + // { dg-options "-O2 -g" } + + struct S { + template void foo (int = [] {}) const; + }; + struct T { + static void bar (const S &); + }; diff -Nrcpad gcc-12.4.0/gcc/testsuite/g++.dg/cpp0x/pr98533.C gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/cpp0x/pr98533.C *** gcc-12.4.0/gcc/testsuite/g++.dg/cpp0x/pr98533.C Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/cpp0x/pr98533.C Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,25 ---- + // PR c++/98533 + // { dg-do compile { target c++11 } } + // { dg-options "-g" } + + class IR; + struct Pass { + explicit Pass(IR *ir) : ir_(ir) {} + virtual ~Pass() = default; + IR *ir_ {nullptr}; + }; + struct PassManager { + template void RunPass() { T pass(ir_); } + IR *ir_ {nullptr}; + }; + struct IR final { + template void RunPass() { pass_manager_.RunPass(); } + PassManager pass_manager_; + }; + struct ThePass : Pass { + explicit ThePass(IR *ir) : Pass(ir) {} + ThePass(const ThePass &) = delete; + template void Bar(void *inst, Func func = [](void *) {}); + }; + + void foo(IR *ir) { ir->RunPass(); } diff -Nrcpad gcc-12.4.0/gcc/testsuite/g++.dg/cpp1y/var-templ87.C gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/cpp1y/var-templ87.C *** gcc-12.4.0/gcc/testsuite/g++.dg/cpp1y/var-templ87.C Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/cpp1y/var-templ87.C Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,43 ---- + // PR c++/113976 + // { dg-do run { target c++14 } } + + int + foo () + { + return 42; + } + + template + const int a = foo (); + const int *b = &a <0>; + template + const int c = foo (); + template const int c <0>; + template + const int d = foo (); + const int *e = &d <0>; + template const int d <0>; + template + const int f = foo (); + template const int f <0>; + const int *g = &f <0>; + struct S { int a, b; }; + template + const S h = { 42, foo () }; + const S *i = &h <0>; + template + const S j = { 42, foo () }; + template const S j <0>; + template + const S k = { 42, foo () }; + const S *l = &k <0>; + template const S k <0>; + template + const S m = { 42, foo () }; + template const S m <0>; + const S *n = &m <0>; + + int + main () + { + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/g++.dg/cpp1z/class-deduction117.C gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/cpp1z/class-deduction117.C *** gcc-12.4.0/gcc/testsuite/g++.dg/cpp1z/class-deduction117.C Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/cpp1z/class-deduction117.C Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,7 ---- + // PR c++/116108 + // { dg-do compile { target c++11 } } + template + struct S { const S s = 1; }; // { dg-error "field 's' has incomplete type 'const S'" } + S t{2}; // { dg-error "invalid use of template-name 'S' without an argument list" "" { target c++14_down } } + // { dg-error "class template argument deduction failed" "" { target c++17 } .-1 } + // { dg-error "no matching function for call to 'S\\\(int\\\)'" "" { target c++17 } .-2 } diff -Nrcpad gcc-12.4.0/gcc/testsuite/g++.dg/cpp1z/constexpr-116676.C gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/cpp1z/constexpr-116676.C *** gcc-12.4.0/gcc/testsuite/g++.dg/cpp1z/constexpr-116676.C Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/cpp1z/constexpr-116676.C Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,57 ---- + // PR c++/116676 + // { dg-do compile { target c++17 } } + + namespace std { + typedef __SIZE_TYPE__ size_t; + + template + struct remove_reference + { typedef _Tp type; }; + + template + struct remove_reference<_Tp&> + { typedef _Tp type; }; + + template + struct remove_reference<_Tp&&> + { typedef _Tp type; }; + + template + constexpr typename std::remove_reference<_Tp>::type && + move(_Tp &&__t) noexcept { + return static_cast::type &&>(__t); + } + template struct tuple_size; + template struct tuple_element; + template class __pair_base {}; + template + struct pair { + _T1 first; + _T2 second; + template + explicit constexpr pair(const _T1 &__a, const _T2 &__b) + : first(__a), second(__b) {} + }; + template + struct tuple_size> + { + static constexpr size_t value = 2; + }; + template + struct tuple_element<0, pair<_Tp1, _Tp2>> { + typedef _Tp1 type; + }; + template + struct tuple_element<1, pair<_Tp1, _Tp2>> { + typedef _Tp2 type; + }; + + template + constexpr typename tuple_element<_Int, pair<_Tp1, _Tp2>>::type & + get(pair<_Tp1, _Tp2> &&__in) noexcept { + return (std::move(__in).first); + } + int t; + auto [a, b] = std::pair{t, 1}; + } + diff -Nrcpad gcc-12.4.0/gcc/testsuite/g++.dg/cpp1z/constexpr-if-lambda6.C gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/cpp1z/constexpr-if-lambda6.C *** gcc-12.4.0/gcc/testsuite/g++.dg/cpp1z/constexpr-if-lambda6.C Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/cpp1z/constexpr-if-lambda6.C Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,16 ---- + // PR c++/114303 + // { dg-do compile { target c++17 } } + + struct A { static constexpr bool value = true; }; + + int main() { + [](auto x1) { + return [&](auto) { + return [&](auto x3) { + if constexpr (decltype(x3)::value) { + static_assert(decltype(x1)::value); + } + }(A{}); + }(0); + }(A{}); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/g++.dg/cpp1z/eval-order13.C gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/cpp1z/eval-order13.C *** gcc-12.4.0/gcc/testsuite/g++.dg/cpp1z/eval-order13.C Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/cpp1z/eval-order13.C Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,29 ---- + // PR c++/117158 - Similar to eval-order7.C, only with templates. + // { dg-do run { target c++11 } } + // { dg-options "-fstrong-eval-order" } + + int a[4] = { 1, 2, 3, 4 }; + int b[4] = { 5, 6, 7, 8 }; + + struct Base { + int *intarray; + }; + + template + struct Sub : public Base { + int Get(int i) { + Base::intarray = a; + int r = Base::intarray[(Base::intarray = b, i)]; + if (Base::intarray != b) + __builtin_abort (); + return r; + } + }; + + int + main () + { + Sub s; + if (s.Get (3) != 4) + __builtin_abort (); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/g++.dg/cpp1z/nontype7.C gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/cpp1z/nontype7.C *** gcc-12.4.0/gcc/testsuite/g++.dg/cpp1z/nontype7.C Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/cpp1z/nontype7.C Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,22 ---- + // PR c++/117792 + // { dg-do compile { target c++17 } } + + template + void f(T) { } + + template + void f(...) = delete; + + template int v; + + template struct A { }; + + template + void g() { + static constexpr int local_static = 0; + auto x = v; // OK + A y; // OK + f(0); // ICE + } + + template void g(); diff -Nrcpad gcc-12.4.0/gcc/testsuite/g++.dg/cpp1z/pr115440.C gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/cpp1z/pr115440.C *** gcc-12.4.0/gcc/testsuite/g++.dg/cpp1z/pr115440.C Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/cpp1z/pr115440.C Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,8 ---- + // PR driver/115440 + // { dg-do compile { target c++17_only } } + // { dg-options "--c++17" } + + int i; + + // { dg-bogus "unrecognized command-line option '--c\\\+\\\+17'; did you mean '--stdc\\\+\\\+17'" "" { target *-*-* } 0 } + // { dg-error "unrecognized command-line option '--c\\\+\\\+17'" "" { target *-*-* } 0 } diff -Nrcpad gcc-12.4.0/gcc/testsuite/g++.dg/cpp2a/concepts-lambda24.C gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/cpp2a/concepts-lambda24.C *** gcc-12.4.0/gcc/testsuite/g++.dg/cpp2a/concepts-lambda24.C Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/cpp2a/concepts-lambda24.C Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,13 ---- + // PR c++/120123 + // { dg-do compile { target c++20 } } + + struct H { + void member(int) {} + void call() { + [this]() { + [this](const auto& v) + requires requires { /*this->*/member(v); } + { return member(v); }(0); + }; + } + }; diff -Nrcpad gcc-12.4.0/gcc/testsuite/g++.dg/cpp2a/constexpr-virtual22.C gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/cpp2a/constexpr-virtual22.C *** gcc-12.4.0/gcc/testsuite/g++.dg/cpp2a/constexpr-virtual22.C Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/cpp2a/constexpr-virtual22.C Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,22 ---- + // PR c++/117615 + // { dg-do "compile" { target c++20 } } + + struct Base { + virtual void doit (int v) const {} + }; + + struct Derived : Base { + void doit (int v) const {} + }; + + using fn_t = void (Base::*)(int) const; + + struct Helper { + fn_t mFn; + constexpr Helper (auto && fn) : mFn(static_cast(fn)) {} + }; + + void foo () { + constexpr Helper h (&Derived::doit); + constexpr Helper h2 (&Base::doit); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/g++.dg/cpp2a/pr117317-1.C gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/cpp2a/pr117317-1.C *** gcc-12.4.0/gcc/testsuite/g++.dg/cpp2a/pr117317-1.C Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/cpp2a/pr117317-1.C Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,19 ---- + // PR c++/117317 + // { dg-do compile { target c++20 } } + + struct C { + constexpr bool operator== (const C &b) const { return foo (); } + constexpr virtual bool foo () const = 0; + }; + class A : public C {}; + class B : public C {}; + template + struct D : A, B + { + constexpr bool operator== (const D &) const = default; + constexpr bool foo () const override { return true; } + }; + struct E : D<1> {}; + constexpr E e; + constexpr E f; + static_assert (e == f, ""); diff -Nrcpad gcc-12.4.0/gcc/testsuite/g++.dg/cpp2a/pr117317-2.C gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/cpp2a/pr117317-2.C *** gcc-12.4.0/gcc/testsuite/g++.dg/cpp2a/pr117317-2.C Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/cpp2a/pr117317-2.C Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,15 ---- + // PR c++/117317 + // { dg-do compile { target c++20 } } + + struct C { + constexpr virtual bool foo () const = 0; + }; + struct A : public C {}; + struct B : public C {}; + template + struct D : A, B + { + constexpr bool foo () const override { return true; } + }; + constexpr D<0> d; + static_assert (d.foo (), ""); diff -Nrcpad gcc-12.4.0/gcc/testsuite/g++.dg/eh/pr84968.C gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/eh/pr84968.C *** gcc-12.4.0/gcc/testsuite/g++.dg/eh/pr84968.C Thu Jun 20 08:08:07 2024 --- gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/eh/pr84968.C Fri Jul 4 07:24:43 2025 *************** struct S { *** 9,15 **** void a() try { } catch (int () ! noexcept (({ union b a; true; }))) // { dg-error "constant" } { } }; --- 9,17 ---- void a() try { } catch (int () ! noexcept (({ union b a; true; }))) // { dg-error "'b a' has incomplete type" } { } }; + + template void S::a(); // { dg-message "required from here" } diff -Nrcpad gcc-12.4.0/gcc/testsuite/g++.dg/expr/pmf-4.C gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/expr/pmf-4.C *** gcc-12.4.0/gcc/testsuite/g++.dg/expr/pmf-4.C Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/expr/pmf-4.C Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,22 ---- + // PR c++/118509 + // { dg-do run } + // { dg-options "-Wall -O2" } + + struct A { void foo () { a = 1; } int a; A () : a (0) {} }; + struct B : virtual A {}; + typedef void (A::*C) (); + + __attribute__((noipa)) void + foo (C x, B *y) + { + (y->*x) (); + } + + int + main () + { + B b; + foo (&A::foo, &b); + if (b.a != 1) + __builtin_abort (); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/g++.dg/ext/attr-unavailable-13.C gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/ext/attr-unavailable-13.C *** gcc-12.4.0/gcc/testsuite/g++.dg/ext/attr-unavailable-13.C Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/ext/attr-unavailable-13.C Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,8 ---- + // PR c++/116606 + // { dg-do compile } + + struct C { + __attribute__((unavailable)) virtual void f() {} + }; + + C c; diff -Nrcpad gcc-12.4.0/gcc/testsuite/g++.dg/ext/pragma-target2.C gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/ext/pragma-target2.C *** gcc-12.4.0/gcc/testsuite/g++.dg/ext/pragma-target2.C Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/ext/pragma-target2.C Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,18 ---- + // PR c++/114772 + // { dg-do compile { target x86_64-*-* } } + + template + inline __attribute__((always_inline)) + __attribute__((warn_unused_result)) + int walk_document(V visitor) {return 0;} + + template + void parse_document() { + int r = walk_document(false); + } + + void stage2_next() { + parse_document(); + } + + #pragma GCC target("pclmul") diff -Nrcpad gcc-12.4.0/gcc/testsuite/g++.dg/ext/stmtexpr26.C gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/ext/stmtexpr26.C *** gcc-12.4.0/gcc/testsuite/g++.dg/ext/stmtexpr26.C Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/ext/stmtexpr26.C Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,10 ---- + // PR c++/116418 + // { dg-do compile { target c++14 } } + // { dg-options "" } + + void foo (); + template + void bar () + { + decltype(auto) v = ({ foo (); 3; }); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/g++.dg/init/array66.C gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/init/array66.C *** gcc-12.4.0/gcc/testsuite/g++.dg/init/array66.C Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/init/array66.C Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,33 ---- + // PR c++/117827 + // { dg-do run { target c++11 } } + + struct C { + int c; + static int d, e; + C () : c (0) { ++d; } + C (const C &) = delete; + C &operator= (const C &) = delete; + ~C () { ++e; } + }; + int C::d, C::e; + + C * + foo (C *p) + { + delete[] p; + throw 1; + } + + int + main () + { + try + { + foo (new C[1] {}); + } + catch (...) + { + } + if (C::d != C::e) + __builtin_abort (); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/g++.dg/lookup/pr99116-1.C gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/lookup/pr99116-1.C *** gcc-12.4.0/gcc/testsuite/g++.dg/lookup/pr99116-1.C Thu Jun 20 08:08:07 2024 --- gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/lookup/pr99116-1.C Fri Jul 4 07:24:43 2025 *************** *** 2,8 **** template struct Z { ! friend struct T; // { dg-error "shadows template parameter" } }; struct Y { --- 2,8 ---- template struct Z { ! friend struct T; // { dg-bogus "shadows template parameter" } }; struct Y { diff -Nrcpad gcc-12.4.0/gcc/testsuite/g++.dg/lto/pr107467_0.C gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/lto/pr107467_0.C *** gcc-12.4.0/gcc/testsuite/g++.dg/lto/pr107467_0.C Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/lto/pr107467_0.C Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,52 ---- + /* { dg-lto-do run } */ + /* { dg-lto-options {{ -O2 -fno-strict-aliasing -flto }} } */ + + template + struct pair + { + int first; + T second; + }; + + template + [[gnu::optimize("strict-aliasing")]] + bool __attribute__((noinline)) + compare_pairs(const pair &lhs, const pair &rhs) { + return lhs.first == rhs.first && lhs.second == rhs.second; + } + + template struct Combined { + pair + __attribute__((noinline)) get_const() { + return pair{123, nullptr}; + } + [[gnu::optimize("strict-aliasing")]] + bool + __attribute__((noinline)) clashy() { + return compare_pairs(get_const(), get_const()); + } + }; + + class SomeClass {}; + class OtherClass {}; + + [[gnu::optimize("strict-aliasing")]] + [[gnu::used]] + void some_func() { + Combined myvar; + __builtin_printf("%i\n", myvar.clashy()); + } + + [[gnu::optimize("strict-aliasing")]] + void other_func() { + Combined myvar; + int t = myvar.clashy(); + if (!t) + __builtin_abort(); + } + + [[gnu::optimize("O0")]] + int main() + { + other_func(); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/g++.dg/opt/pr119327.C gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/opt/pr119327.C *** gcc-12.4.0/gcc/testsuite/g++.dg/opt/pr119327.C Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/opt/pr119327.C Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,16 ---- + // PR target/119327 + // { dg-do compile { target c++11 } } + // { dg-options "-Os" } + + #pragma GCC optimize "fp-contract=off" + + template + void + foo (T f) + { + f (); + } + + struct S { + S () { [] {}; foo ([] __attribute__((always_inline)) {}); } + } s; diff -Nrcpad gcc-12.4.0/gcc/testsuite/g++.dg/parse/crash77.C gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/parse/crash77.C *** gcc-12.4.0/gcc/testsuite/g++.dg/parse/crash77.C Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/parse/crash77.C Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,13 ---- + // PR c++/117158 + // { dg-do "compile" } + + struct Base { + unsigned int *intarray; + }; + + template + struct Sub : public Base { + bool Get(int i) { + return (Base::intarray[++i] == 0); + } + }; diff -Nrcpad gcc-12.4.0/gcc/testsuite/g++.dg/parse/pr120471.C gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/parse/pr120471.C *** gcc-12.4.0/gcc/testsuite/g++.dg/parse/pr120471.C Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/parse/pr120471.C Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,42 ---- + // PR c++/120471 + // { dg-do compile } + + extern int a1[], a2[], a3[], a4[]; + + int corge (int); + + int + foo (int p) + { + return (p ? a1 : a2)[1]; + } + + int + bar (int p, int q) + { + return (p ? a1 : a2)[q]; + } + + int + garply (int p, int q) + { + return (p ? a1 : a2)[corge (q)]; + } + + int + baz (int p, int q) + { + return (p ? q ? a1 : a2 : q ? a3 : a4)[1]; + } + + int + qux (int p, int q, int r) + { + return (p ? q ? a1 : a2 : q ? a3 : a4)[r]; + } + + int + fred (int p, int q, int r) + { + return (p ? q ? a1 : a2 : q ? a3 : a4)[corge (r)]; + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/g++.dg/parse/pr120940.C gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/parse/pr120940.C *** gcc-12.4.0/gcc/testsuite/g++.dg/parse/pr120940.C Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/parse/pr120940.C Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,18 ---- + // PR c++/120940 + // { dg-do run } + + int a[8] = { 1, 2, 3, 4, 5, 6, 7, 8 }; + int b[8] = { 9, 10, 11, 12, 13, 14, 15, 16 }; + + __attribute__((noipa)) int + foo (int x, int y) + { + return (x ? a : b)[y]; + } + + int + main () + { + if (foo (1, 4) != 5 || foo (0, 6) != 15) + __builtin_abort (); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/g++.dg/pr114501_0.C gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/pr114501_0.C *** gcc-12.4.0/gcc/testsuite/g++.dg/pr114501_0.C Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/pr114501_0.C Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,20 ---- + // { dg-do compile } + // { dg-require-effective-target c++17 } + // { dg-require-effective-target lto } + // { dg-options "-flto" } + + typedef long unsigned int size_t; + struct basic_string_view { + typedef long unsigned int size_type; + constexpr size_type size() const { return 0; } + }; + struct array { + char _M_elems[1]; + }; + inline constexpr auto make_it() { + constexpr basic_string_view view; + array arr{}; + arr._M_elems[view.size()] = 'a'; + return arr; + } + auto bar = make_it(); diff -Nrcpad gcc-12.4.0/gcc/testsuite/g++.dg/pr66279.C gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/pr66279.C *** gcc-12.4.0/gcc/testsuite/g++.dg/pr66279.C Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/pr66279.C Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,23 ---- + // { dg-do run } + + struct A {}; + + struct B : public virtual A + { + B(); + }; + + B::B() + { + unsigned int x = 42; + + __asm__ __volatile__ ("" : "+r"(x)); + + if (x != 42) + __builtin_abort (); + } + + int main() + { + B b; + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/g++.dg/template/access42.C gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/template/access42.C *** gcc-12.4.0/gcc/testsuite/g++.dg/template/access42.C Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/template/access42.C Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,17 ---- + // PR c++/116320 + // { dg-do compile { target c++11 } } + + template struct C; + template using C_ptr = C*; + + struct B { int m; using B_typedef = B; }; + + template + struct C : B { + void f(C_ptr c) { + c->B::m; + c->B_typedef::m; + } + }; + + template struct C; diff -Nrcpad gcc-12.4.0/gcc/testsuite/g++.dg/template/friend84.C gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/template/friend84.C *** gcc-12.4.0/gcc/testsuite/g++.dg/template/friend84.C Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/template/friend84.C Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,26 ---- + // PR c++/118255 + // { dg-do "compile" } + + // The PR's case, that used to error out. + template + struct S { + friend class non_template; // { dg-bogus "shadows template parameter" } + }; + + class non_template {}; + S<0> s; + + // We already accepted cases where the friend is already declared. + template + struct T { + friend class non_template; + }; + T<0> t; + + // We should reject (re)declarations. + template + struct U { + class non_template {}; // { dg-error "shadows template parameter" } + void non_template () {} // { dg-error "shadows template parameter" } + }; + U<0> u; diff -Nrcpad gcc-12.4.0/gcc/testsuite/g++.dg/torture/pr111245.C gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/torture/pr111245.C *** gcc-12.4.0/gcc/testsuite/g++.dg/torture/pr111245.C Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/torture/pr111245.C Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,23 ---- + /* { dg-do run } */ + + struct Int { + int value; + }; + + __attribute__((noipa)) Int always_throws() { throw 123; } + + void foo(Int &x) { + try { + x = always_throws(); + } catch (...) { + } + } + + int main() + { + Int x; + x.value = 5; + foo(x); + if (x.value != 5) + __builtin_abort (); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/g++.dg/torture/pr113994.C gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/torture/pr113994.C *** gcc-12.4.0/gcc/testsuite/g++.dg/torture/pr113994.C Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/torture/pr113994.C Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,31 ---- + // PR rtl-optimization/113994 + // { dg-do run } + + #include + + void + foo (const std::string &x, size_t &y, std::string &z) + { + size_t w = x.find (']'); + if (w >= x.size ()) + return; + else if (w == 1) + y = std::string::npos; + while (++w < x.size () && x[w] == u'.') + ; + z = x.substr (w); + } + + __attribute__((noipa)) void + bar () + { + } + + int + main () + { + size_t y = 0; + std::string z; + foo ("[0]", y, z); + bar (); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/g++.dg/torture/pr11911.C gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/torture/pr11911.C *** gcc-12.4.0/gcc/testsuite/g++.dg/torture/pr11911.C Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/torture/pr11911.C Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,21 ---- + // { dg-do compile } + // { dg-require-effective-target c++17 } + + struct b { + int a; + }; + struct c { + b d{}; + c() = default; + c(c &) = delete; + }; + struct e { + c a{}; + e() {} + }; + inline e f() { return {}; } + struct g { + e cx; + g() : cx{f()} {} + }; + void h() { g i; } diff -Nrcpad gcc-12.4.0/gcc/testsuite/g++.dg/torture/pr119610.C gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/torture/pr119610.C *** gcc-12.4.0/gcc/testsuite/g++.dg/torture/pr119610.C Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/torture/pr119610.C Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,18 ---- + // { dg-do run } + // { dg-additional-options "-fstack-protector-strong" { target fstack_protector } } + // { dg-additional-options "-fstack-clash-protection" { target supports_stack_clash_protection } } + + int *ptr; + void foo() { + int c[1024*128]; + ptr = c; + throw 1; + } + int main() + { + try { + foo(); + } catch(int x) { + return 0; + } + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/g++.dg/torture/vect-absu-1.C gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/torture/vect-absu-1.C *** gcc-12.4.0/gcc/testsuite/g++.dg/torture/vect-absu-1.C Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/torture/vect-absu-1.C Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,29 ---- + // { dg-do run } + // PR middle-end/111285 + + // The lowering of vect absu was done incorrectly + + #define vect1 __attribute__((vector_size(sizeof(int)))) + + #define negabs(a) a < 0 ? a : -a + + __attribute__((noinline)) + int s(int a) + { + return negabs(a); + } + __attribute__((noinline)) + vect1 int v(vect1 int a) + { + return negabs(a); + } + + int main(void) + { + for(int i = -10; i < 10; i++) + { + vect1 int t = {i}; + if (v(t)[0] != s(i)) + __builtin_abort(); + } + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/g++.dg/tree-ssa/pr118924.C gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/tree-ssa/pr118924.C *** gcc-12.4.0/gcc/testsuite/g++.dg/tree-ssa/pr118924.C Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/tree-ssa/pr118924.C Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,29 ---- + /* { dg-do run } */ + /* { dg-options "-std=c++17 -O2" } */ + + template struct Vector { + int m_data[Size]; + Vector(int, int, int) {} + }; + enum class E { POINTS, LINES, TRIANGLES }; + + __attribute__((noipa)) + void getName(E type) { + static E check = E::POINTS; + if (type == check) + check = (E)((int)check + 1); + else + __builtin_abort (); + } + + int main() { + int arr[]{0, 1, 2}; + for (auto dim : arr) { + Vector<3> localInvs(1, 1, 1); + localInvs.m_data[dim] = 8; + } + E types[] = {E::POINTS, E::LINES, E::TRIANGLES}; + for (auto primType : types) + getName(primType); + return 0; + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/g++.dg/ubsan/pr116449.C gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/ubsan/pr116449.C *** gcc-12.4.0/gcc/testsuite/g++.dg/ubsan/pr116449.C Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/ubsan/pr116449.C Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,14 ---- + // PR c++/116449 + // { dg-do compile } + // { dg-options "-O2 -Wall -fsanitize=undefined" } + + struct C { void foo (int); void bar (); int c[16]; }; + typedef void (C::*P) (); + struct D { P d; }; + static D e[1] = { { &C::bar } }; + + void + C::foo (int x) + { + (this->*e[c[x]].d) (); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/g++.dg/ubsan/pr117259.C gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/ubsan/pr117259.C *** gcc-12.4.0/gcc/testsuite/g++.dg/ubsan/pr117259.C Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/ubsan/pr117259.C Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,13 ---- + // PR c++/117259 + // { dg-do compile } + // { dg-options "-Wuninitialized -fsanitize=undefined" } + + struct A { void foo () {} }; + struct B { void (A::*b) (); B (void (A::*x) ()) : b(x) {}; }; + const B c[1] = { &A::foo }; + + void + foo (A *x, int y) + { + (x->*c[y].b) (); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/g++.dg/ubsan/pr120471.C gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/ubsan/pr120471.C *** gcc-12.4.0/gcc/testsuite/g++.dg/ubsan/pr120471.C Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/ubsan/pr120471.C Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,21 ---- + // PR c++/120471 + // { dg-do run } + // { dg-options "-fsanitize=undefined" } + + volatile int b[1], a[1]; + + void + foo (int x) + { + volatile int c = 21; + volatile int v = (x % 2 ? b : a)[c % 3]; + if (v != 0) + __builtin_abort (); + } + + int + main () + { + foo (1); + foo (2); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/g++.dg/warn/Wduplicated-branches9.C gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/warn/Wduplicated-branches9.C *** gcc-12.4.0/gcc/testsuite/g++.dg/warn/Wduplicated-branches9.C Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/warn/Wduplicated-branches9.C Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,11 ---- + // PR c++/120940 + // { dg-do compile } + // { dg-options "-Wduplicated-branches" } + + static char a[16][8], b[16][8]; + + char * + foo (int x, int y) + { + return (x ? a : b)[y]; + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/g++.dg/warn/deprecated-19.C gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/warn/deprecated-19.C *** gcc-12.4.0/gcc/testsuite/g++.dg/warn/deprecated-19.C Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/warn/deprecated-19.C Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,22 ---- + // PR c++/116636 + // { dg-do compile { target c++11 } } + // { dg-options "-pedantic -Wdeprecated" } + + struct A { + virtual int foo () = 0; + }; + struct B : virtual A { + [[deprecated]] int foo () { return 0; } // { dg-message "declared here" } + }; + struct C : virtual A { + [[gnu::unavailable]] int foo () { return 0; } // { dg-message "declared here" } + }; + + void + bar () + { + B b; + b.foo (); // { dg-warning "'virtual int B::foo\\\(\\\)' is deprecated" } + C c; + c.foo (); // { dg-error "'virtual int C::foo\\\(\\\)' is unavailable" } + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/g++.dg/warn/deprecated-20.C gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/warn/deprecated-20.C *** gcc-12.4.0/gcc/testsuite/g++.dg/warn/deprecated-20.C Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/warn/deprecated-20.C Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,16 ---- + // PR c++/116678 + // { dg-do compile { target c++11 } } + // { dg-options "-Os -pedantic" } + + struct S + { + [[deprecated]] S () { s = 1; } // { dg-bogus "'S::S\\\(\\\)' is deprecated" } + S (int x) { s = x; } + ~S () {} + int s; + }; + + int + main () + { + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/g++.dg/warn/pr117825.C gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/warn/pr117825.C *** gcc-12.4.0/gcc/testsuite/g++.dg/warn/pr117825.C Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/g++.dg/warn/pr117825.C Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,18 ---- + // PR c++/117825 + // { dg-do compile { target c++17 } } + // { dg-options "-Wformat -Wformat-security" } + + __attribute__((format (printf, 1, 2))) + int fails (const char *, ...) { return 0; } + + template + auto wrap (Args... args) -> decltype (func (args...)) + { + return func (args...); // { dg-warning "format not a string literal and no format arguments" } + } + + int + main () + { + wrap ("Test!"); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/g++.target/aarch64/sve/pr119610-sve.C gcc-12.5.0-RC-20250704/gcc/testsuite/g++.target/aarch64/sve/pr119610-sve.C *** gcc-12.4.0/gcc/testsuite/g++.target/aarch64/sve/pr119610-sve.C Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/g++.target/aarch64/sve/pr119610-sve.C Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,20 ---- + // { dg-do run { target aarch64_sve_hw } } + // { dg-additional-options "-fstack-protector-strong" { target fstack_protector } } + // { dg-additional-options "-fstack-clash-protection" { target supports_stack_clash_protection } } + + void *a_ptr, *b_ptr; + void foo() { + __SVInt32_t a; + int b[1024*128]; + a_ptr = &a; + b_ptr = b; + throw 1; + } + int main() + { + try { + foo(); + } catch(int x) { + return 0; + } + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/g++.target/arm/pr115485.C gcc-12.5.0-RC-20250704/gcc/testsuite/g++.target/arm/pr115485.C *** gcc-12.4.0/gcc/testsuite/g++.target/arm/pr115485.C Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/g++.target/arm/pr115485.C Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,16 ---- + /* { dg-do compile } */ + /* { dg-options "-fPIE -mno-pic-data-is-text-relative -mlong-calls -ffunction-sections" } */ + + struct c1 { + virtual void func1() = 0; + }; + struct c2 { + virtual ~c2() {} + }; + struct c3 : c2, c1 { + void func1() override; + void func3(); + }; + void c3::func1() { + func3(); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/g++.target/i386/mv29.C gcc-12.5.0-RC-20250704/gcc/testsuite/g++.target/i386/mv29.C *** gcc-12.4.0/gcc/testsuite/g++.target/i386/mv29.C Thu Jun 20 08:08:07 2024 --- gcc-12.5.0-RC-20250704/gcc/testsuite/g++.target/i386/mv29.C Fri Jul 4 07:24:43 2025 *************** int __attribute__ ((target("arch=znver4" *** 53,58 **** --- 53,62 ---- return 10; } + int __attribute__ ((target("arch=znver5"))) foo () { + return 11; + } + int main () { int val = foo (); *************** int main () *** 77,82 **** --- 81,88 ---- assert (val == 9); else if (__builtin_cpu_is ("znver4")) assert (val == 10); + else if (__builtin_cpu_is ("znver5")) + assert (val == 11); else assert (val == 0); diff -Nrcpad gcc-12.4.0/gcc/testsuite/g++.target/i386/pr119689.C gcc-12.5.0-RC-20250704/gcc/testsuite/g++.target/i386/pr119689.C *** gcc-12.4.0/gcc/testsuite/g++.target/i386/pr119689.C Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/g++.target/i386/pr119689.C Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,44 ---- + // { dg-do compile } + // { dg-options "-O2 -fcompare-debug" } + // { dg-additional-options "-march=i586 -mtune=generic" { target ia32 } } + // { dg-additional-options "-fPIC" { target { fpic } } } + + enum gimple_code { GIMPLE_ASSIGN, GIMPLE_RETURN }; + bool is_gimple_call(); + int m_sig, m_exp, sreal_new_exp; + struct sreal { + sreal(long long sig) { + long long __trans_tmp_6 = sig >= 0 ? sig : -(unsigned long long)sig; + sig = __trans_tmp_6 <<= sreal_new_exp -= m_exp = __trans_tmp_6; + m_sig = sig; + } + void operator/(sreal); + }; + struct ipa_predicate { + ipa_predicate(bool = true); + void operator&=(ipa_predicate); + void operator&(ipa_predicate); + }; + void add_condition(); + gimple_code eliminated_by_inlining_prob_code; + static int eliminated_by_inlining_prob() { + switch (eliminated_by_inlining_prob_code) { + case GIMPLE_RETURN: + return 2; + case GIMPLE_ASSIGN: + return 1; + } + return 0; + } + void fp_expression_p() { + ipa_predicate bb_predicate; + for (;;) { + int prob = eliminated_by_inlining_prob(); + ipa_predicate sra_predicate; + sra_predicate &= add_condition; + if (is_gimple_call()) + sreal(prob) / 2; + if (prob != 2) + bb_predicate & sra_predicate; + } + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/g++.target/powerpc/pr106069.C gcc-12.5.0-RC-20250704/gcc/testsuite/g++.target/powerpc/pr106069.C *** gcc-12.4.0/gcc/testsuite/g++.target/powerpc/pr106069.C Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/g++.target/powerpc/pr106069.C Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,119 ---- + /* { dg-do run } */ + /* { dg-options "-O -fno-tree-forwprop -maltivec" } */ + /* { dg-require-effective-target vmx_hw } */ + + typedef __attribute__ ((altivec (vector__))) unsigned native_simd_type; + + union + { + native_simd_type V; + int R[4]; + } store_le_vec; + + struct S + { + S () = default; + S (unsigned B0) + { + native_simd_type val{B0}; + m_simd = val; + } + void store_le (unsigned int out[]) + { + store_le_vec.V = m_simd; + unsigned int x0 = store_le_vec.R[0]; + __builtin_memcpy (out, &x0, 4); + } + S rotl (unsigned int r) + { + native_simd_type rot{r}; + return __builtin_vec_rl (m_simd, rot); + } + void operator+= (S other) + { + m_simd = __builtin_vec_add (m_simd, other.m_simd); + } + void operator^= (S other) + { + m_simd = __builtin_vec_xor (m_simd, other.m_simd); + } + static void transpose (S &B0, S B1, S B2, S B3) + { + native_simd_type T0 = __builtin_vec_mergeh (B0.m_simd, B2.m_simd); + native_simd_type T1 = __builtin_vec_mergeh (B1.m_simd, B3.m_simd); + native_simd_type T2 = __builtin_vec_mergel (B0.m_simd, B2.m_simd); + native_simd_type T3 = __builtin_vec_mergel (B1.m_simd, B3.m_simd); + B0 = __builtin_vec_mergeh (T0, T1); + B3 = __builtin_vec_mergel (T2, T3); + } + S (native_simd_type x) : m_simd (x) {} + native_simd_type m_simd; + }; + + void + foo (unsigned int output[], unsigned state[]) + { + S R00 = state[0]; + S R01 = state[0]; + S R02 = state[2]; + S R03 = state[0]; + S R05 = state[5]; + S R06 = state[6]; + S R07 = state[7]; + S R08 = state[8]; + S R09 = state[9]; + S R10 = state[10]; + S R11 = state[11]; + S R12 = state[12]; + S R13 = state[13]; + S R14 = state[4]; + S R15 = state[15]; + for (int r = 0; r != 10; ++r) + { + R09 += R13; + R11 += R15; + R05 ^= R09; + R06 ^= R10; + R07 ^= R11; + R07 = R07.rotl (7); + R00 += R05; + R01 += R06; + R02 += R07; + R15 ^= R00; + R12 ^= R01; + R13 ^= R02; + R00 += R05; + R01 += R06; + R02 += R07; + R15 ^= R00; + R12 = R12.rotl (8); + R13 = R13.rotl (8); + R10 += R15; + R11 += R12; + R08 += R13; + R09 += R14; + R05 ^= R10; + R06 ^= R11; + R07 ^= R08; + R05 = R05.rotl (7); + R06 = R06.rotl (7); + R07 = R07.rotl (7); + } + R00 += state[0]; + S::transpose (R00, R01, R02, R03); + R00.store_le (output); + } + + unsigned int res[1]; + unsigned main_state[]{1634760805, 60878, 2036477234, 6, + 0, 825562964, 1471091955, 1346092787, + 506976774, 4197066702, 518848283, 118491664, + 0, 0, 0, 0}; + int + main () + { + foo (res, main_state); + if (res[0] != 0x41fcef98) + __builtin_abort (); + return 0; + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/g++.target/s390/pr119834.C gcc-12.5.0-RC-20250704/gcc/testsuite/g++.target/s390/pr119834.C *** gcc-12.4.0/gcc/testsuite/g++.target/s390/pr119834.C Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/g++.target/s390/pr119834.C Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,76 ---- + // PR target/119834 + // { dg-do compile { target c++11 } } + // { dg-options "-O2 -march=z900" } + + int *a; + struct A; + struct B { + A begin (); + A end (); + operator bool * (); + void operator++ (); + }; + template + auto operator| (int, T x) -> decltype (x (0)); + struct A : B { bool a; }; + struct C { A operator () (int); }; + enum D {} d; + int e; + void foo (); + struct E { + template + T *garply () + { + if (d) + return 0; + if (e) + foo (); + return reinterpret_cast (f); + } + template + void bar (long x, bool) + { + if (&g - f) + __builtin_memset (a, 0, x); + f += x; + } + template + T *baz (T *x, long y, bool z = true) + { + if (d) + return nullptr; + bar ((char *)x + y - f, z); + return x; + } + template + void qux (T x) { baz (x, x->j); } + char *f, g; + } *h; + struct F { + template + int corge (T x) { x.freddy (this); return 0; } + template + int boo (T x) { corge (x); return 0; } + } i; + template + struct G { + template friend T operator+ (U, G); + template + void waldo (F *x, G y, U z) { x->boo (z + y); } + template + void plugh (E *y, Ts... z) { T *x = y->garply (); x->thud (y, z...); } + }; + template using H = G; + struct I { + static constexpr unsigned j = 2; + void thud (E *x, A y) { x->qux (this); for (auto g : y) ; } + }; + H k; + struct J { + void freddy (F *) { C a; auto b = 0 | a; k.plugh (h, b); } + }; + H l; + struct K { + void freddy () { l.waldo (&i, l, this); } + }; + void grault () { K m; m.freddy (); } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.c-torture/execute/20241029-1.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.c-torture/execute/20241029-1.c *** gcc-12.4.0/gcc/testsuite/gcc.c-torture/execute/20241029-1.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.c-torture/execute/20241029-1.c Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,23 ---- + /* PR rtl-optimization/117327 */ + /* Testcase by Brad Moody */ + + __attribute__((noinline)) + void foo(int *self, int *x) + { + __builtin_puts ("foo\n"); + + if (x) { + while (1) { + ++*self; + if (*self == 6) break; + if (*self == 7) __builtin_unreachable(); + } + } + } + + int main (void) + { + int y = 0; + foo (&y, 0); + return 0; + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.c-torture/execute/pr111613.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.c-torture/execute/pr111613.c *** gcc-12.4.0/gcc/testsuite/gcc.c-torture/execute/pr111613.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.c-torture/execute/pr111613.c Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,29 ---- + #include + #include + + struct bitfield { + unsigned int field1 : 1; + unsigned int field2 : 1; + unsigned int field3 : 1; + }; + + __attribute__((noinline)) static void + set_field1_and_field2(struct bitfield *b) { + b->field1 = 1; + b->field2 = 1; + } + + __attribute__((noinline)) static struct bitfield * + new_bitfield(void) { + struct bitfield *b = (struct bitfield *)malloc(sizeof(*b)); + b->field3 = 1; + set_field1_and_field2(b); + return b; + } + + int main(void) { + struct bitfield *b = new_bitfield(); + if (b->field3 != 1) + __builtin_abort (); + return 0; + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.c-torture/execute/pr113787.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.c-torture/execute/pr113787.c *** gcc-12.4.0/gcc/testsuite/gcc.c-torture/execute/pr113787.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.c-torture/execute/pr113787.c Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,38 ---- + void foo(int x, int y, int z, int d, int *buf) + { + for(int i = z; i < y-z; ++i) + for(int j = 0; j < d; ++j) + /* buf[x(i+1) + j] = buf[x(i+1)-j-1] */ + buf[i*x+(x-z+j)] = buf[i*x+(x-z-1-j)]; + } + + void bar(int x, int y, int z, int d, int *buf) + { + for(int i = 0; i < d; ++i) + for(int j = z; j < x-z; ++j) + /* buf[j+(y+i)*x] = buf[j+(y-1-i)*x] */ + buf[j+(y-z+i)*x] = buf[j+(y-z-1-i)*x]; + } + + __attribute__((noipa)) + void baz(int x, int y, int d, int *buf) + { + foo(x, y, 0, d, buf); + bar(x, y, 0, d, buf); + } + + int main(void) + { + int a[] = { 1, 2, 3 }; + baz (1, 2, 1, a); + /* foo does: + buf[1] = buf[0]; + buf[2] = buf[1]; + + bar does: + buf[2] = buf[1]; (no-op) + so we should have { 1, 1, 1 }. */ + for (int i = 0; i < 3; i++) + if (a[i] != 1) + __builtin_abort (); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.c-torture/execute/pr114207.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.c-torture/execute/pr114207.c *** gcc-12.4.0/gcc/testsuite/gcc.c-torture/execute/pr114207.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.c-torture/execute/pr114207.c Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,23 ---- + #include + #include + + struct S { + int a, b; + }; + + __attribute__((noinline)) + void foo (struct S *s) { + struct S ss = (struct S) { + .a = s->b, + .b = s->a + }; + *s = ss; + } + + int main() { + struct S s = {6, 12}; + foo(&s); + if (s.a != 12 || s.b != 6) + __builtin_abort (); + return 0; + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.c-torture/execute/pr115033.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.c-torture/execute/pr115033.c *** gcc-12.4.0/gcc/testsuite/gcc.c-torture/execute/pr115033.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.c-torture/execute/pr115033.c Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,35 ---- + + typedef struct func + { + int *a; + }func; + __attribute__((noinline)) + void ff(struct func *t) + { + *(t->a) = 0; + } + + + typedef struct mapped_iterator { + func F; + }mapped_iterator; + + __attribute__((noinline)) + mapped_iterator map_iterator(func F) { + mapped_iterator t = {F}; + return t; + } + + void map_to_vector(func *F) { + mapped_iterator t = map_iterator(*F); + ff(&t.F); + } + int main() { + int resultIsStatic = 1; + func t ={&resultIsStatic}; + map_to_vector(&t); + + if (resultIsStatic) + __builtin_trap(); + __builtin_exit(0); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.c-torture/execute/pr116799.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.c-torture/execute/pr116799.c *** gcc-12.4.0/gcc/testsuite/gcc.c-torture/execute/pr116799.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.c-torture/execute/pr116799.c Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,41 ---- + /* PR rtl-optimization/116799 */ + + const char *l; + + __attribute__((noipa)) void + foo (const char *x, const char *y, int z) + { + if (x != l + 1 || y != x || z) + __builtin_abort (); + } + + __attribute__((noipa)) void + bar (const char *x, char *v) + { + const char *w = x + __builtin_strlen (x); + + while (x[0] == '*' && x < w - 1) + x++; + + const char *y = w - 1; + int z = 1; + if (y >= x) + { + while (y - x > 0 && *y == '*') + y--; + z = 0; + } + int i = 0; + if (z) + v[i++] = 'a'; + v[i] = 'b'; + foo (x, y, z); + } + + int + main () + { + char v[2] = { 0 }; + l = "**"; + bar (l, v); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.c-torture/execute/pr117432.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.c-torture/execute/pr117432.c *** gcc-12.4.0/gcc/testsuite/gcc.c-torture/execute/pr117432.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.c-torture/execute/pr117432.c Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,41 ---- + /* PR ipa/117432 */ + /* { dg-additional-options "-std=gnu2x" } */ + + #include + + long long r; + + __attribute__((noipa)) void + baz (int tag, ...) + { + va_list ap; + va_start (ap, tag); + if (!r) + r = va_arg (ap, long long); + else + r = va_arg (ap, int); + va_end (ap); + } + + void + foo (void) + { + baz (1, -1, 0); + } + + void + bar (void) + { + baz (1, -1LL, 0); + } + + int + main () + { + bar (); + if (r != -1LL) + __builtin_abort (); + foo (); + if (r != -1) + __builtin_abort (); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.c-torture/execute/pr118623.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.c-torture/execute/pr118623.c *** gcc-12.4.0/gcc/testsuite/gcc.c-torture/execute/pr118623.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.c-torture/execute/pr118623.c Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,23 ---- + /* PR target/118623 */ + + static int + foo (int x, int y) + { + int a = 1 << x; + if (y & a) + return 0; + return 5; + } + + __attribute__((noipa)) void + bar (int x) + { + if (((foo (x - 50, x) + x + x) & 1) == 0) + __builtin_abort (); + } + + int + main () + { + bar (63); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.c-torture/execute/pr118915.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.c-torture/execute/pr118915.c *** gcc-12.4.0/gcc/testsuite/gcc.c-torture/execute/pr118915.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.c-torture/execute/pr118915.c Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,22 ---- + /* PR tree-optimization/118915 */ + + int a; + + int + foo (int c, int d, int e, int f) + { + if (!d || !e) + return -22; + if (c > 16) + return -22; + if (!f) + return -22; + return 2; + } + + int + main () + { + if (foo (a + 21, a + 6, a + 34, a + 26) != -22) + __builtin_abort (); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.c-torture/execute/pr119071.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.c-torture/execute/pr119071.c *** gcc-12.4.0/gcc/testsuite/gcc.c-torture/execute/pr119071.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.c-torture/execute/pr119071.c Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,15 ---- + /* PR rtl-optimization/119071 */ + + int a, b; + + int + main () + { + int c = 0; + if (a + 2) + c = 1; + int d = (1 + c - 2 + c == 1) - 1; + b = ((d + 1) << d) + d; + if (b != 1) + __builtin_abort (); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.c-torture/execute/pr119291.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.c-torture/execute/pr119291.c *** gcc-12.4.0/gcc/testsuite/gcc.c-torture/execute/pr119291.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.c-torture/execute/pr119291.c Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,33 ---- + /* PR rtl-optimization/119291 */ + + int a; + long c; + + __attribute__((noipa)) void + foo (int x) + { + if (x != 0) + __builtin_abort (); + a = 42; + } + + int + main () + { + int e = 1; + lab: + if (a < 2) + { + int b = e; + _Bool d = a != 0; + _Bool f = b != 0; + unsigned long g = -(d & f); + unsigned long h = c & g; + unsigned long i = ~c; + e = -(i & h); + c = e != 0; + a = ~e + b; + foo (e); + goto lab; + } + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.dg/asan/pr110676.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/asan/pr110676.c *** gcc-12.4.0/gcc/testsuite/gcc.dg/asan/pr110676.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/asan/pr110676.c Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,14 ---- + /* PR sanitizer/110676 */ + /* { dg-do run } */ + /* { dg-skip-if "" { *-*-* } { "*" } { "-O0" } } */ + /* { dg-shouldfail "asan" } */ + + int + main () + { + char s[1] = "A"; + return __builtin_strlen (s); + } + + /* { dg-output "ERROR: AddressSanitizer: stack-buffer-overflow on address.*(\n|\r\n|\r)" } */ + /* { dg-output "READ of size.*" } */ diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.dg/asan/pr119582.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/asan/pr119582.c *** gcc-12.4.0/gcc/testsuite/gcc.dg/asan/pr119582.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/asan/pr119582.c Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,23 ---- + /* PR c/119582 */ + /* { dg-do compile } */ + /* { dg-options "-O2 -fsanitize=address,pointer-subtract,pointer-compare" } */ + + const char v; + typedef __PTRDIFF_TYPE__ ptrdiff_t; + char a; + const ptrdiff_t p = &a + 1 - &a; + const int q = (&a + 1) != &a; + + ptrdiff_t + foo (void) + { + char b; + return &b + (v != '\n') - &b; + } + + int + bar (void) + { + char b; + return (&b + (v != '\n')) != &b; + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.dg/dfp/pr102674.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/dfp/pr102674.c *** gcc-12.4.0/gcc/testsuite/gcc.dg/dfp/pr102674.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/dfp/pr102674.c Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,65 ---- + /* PR middle-end/102674 */ + /* { dg-do run } */ + /* { dg-options "-O2" } */ + + #define FP_NAN 0 + #define FP_INFINITE 1 + #define FP_ZERO 2 + #define FP_SUBNORMAL 3 + #define FP_NORMAL 4 + + __attribute__((noipa)) int + foo (_Decimal32 x) + { + return __builtin_fpclassify (FP_NAN, FP_INFINITE, FP_NORMAL, + FP_SUBNORMAL, FP_ZERO, x); + } + + __attribute__((noipa)) int + bar (_Decimal64 x) + { + return __builtin_fpclassify (FP_NAN, FP_INFINITE, FP_NORMAL, + FP_SUBNORMAL, FP_ZERO, x); + } + + __attribute__((noipa)) int + baz (_Decimal128 x) + { + return __builtin_fpclassify (FP_NAN, FP_INFINITE, FP_NORMAL, + FP_SUBNORMAL, FP_ZERO, x); + } + + int + main () + { + if (foo (__builtin_infd32 ()) != FP_INFINITE + || foo (-__builtin_infd32 ()) != FP_INFINITE + || foo (__builtin_nand32 ("")) != FP_NAN + || foo (9.999999E96DF) != FP_NORMAL + || foo (-1E-95DF) != FP_NORMAL + || foo (0.999999E-95DF) != FP_SUBNORMAL + || foo (-0.000001E-95DF) != FP_SUBNORMAL + || foo (0.000DF) != FP_ZERO + || foo (-0.00000DF) != FP_ZERO) + __builtin_abort (); + if (bar (__builtin_infd64 ()) != FP_INFINITE + || bar (-__builtin_infd64 ()) != FP_INFINITE + || bar (__builtin_nand64 ("")) != FP_NAN + || bar (9.999999999999999E384DD) != FP_NORMAL + || bar (-1E-383DD) != FP_NORMAL + || bar (0.999999999999999E-383DD) != FP_SUBNORMAL + || bar (-0.000000000000001E-383DD) != FP_SUBNORMAL + || bar (0.000DD) != FP_ZERO + || bar (-0.0000000000DD) != FP_ZERO) + __builtin_abort (); + if (baz (__builtin_infd128 ()) != FP_INFINITE + || baz (-__builtin_infd128 ()) != FP_INFINITE + || baz (__builtin_nand128 ("")) != FP_NAN + || baz (9.999999999999999999999999999999999E6144DL) != FP_NORMAL + || baz (-1E-6143DL) != FP_NORMAL + || baz (0.999999999999999999999999999999999E-6143DL) != FP_SUBNORMAL + || baz (-0.000000000000000000000000000000001E-6143DL) != FP_SUBNORMAL + || baz (0.000DL) != FP_ZERO + || baz (-0.0000000000000000000000DL) != FP_ZERO) + __builtin_abort (); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.dg/dfp/pr43374.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/dfp/pr43374.c *** gcc-12.4.0/gcc/testsuite/gcc.dg/dfp/pr43374.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/dfp/pr43374.c Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,56 ---- + /* PR middle-end/43374 */ + /* { dg-do run } */ + /* { dg-options "-O2" } */ + + __attribute__((noipa)) int + foo (_Decimal32 x) + { + return __builtin_isinf (x); + } + + __attribute__((noipa)) int + bar (_Decimal64 x) + { + return __builtin_isfinite (x); + } + + __attribute__((noipa)) int + baz (_Decimal128 x) + { + return __builtin_isnormal (x); + } + + int + main () + { + if (!foo (__builtin_infd32 ()) + || !foo (-__builtin_infd32 ()) + || foo (__builtin_nand32 ("")) + || foo (9.999999E96DF) + || foo (-1E-95DF) + || foo (0.999999E-95DF) + || foo (-0.000001E-95DF) + || foo (0.000DF) + || foo (-0.00000DF)) + __builtin_abort (); + if (bar (__builtin_infd64 ()) + || bar (-__builtin_infd64 ()) + || bar (__builtin_nand64 ("")) + || !bar (9.999999999999999E384DD) + || !bar (-1E-383DD) + || !bar (0.999999999999999E-383DD) + || !bar (-0.000000000000001E-383DD) + || !bar (0.000DD) + || !bar (-0.0000000000DD)) + __builtin_abort (); + if (baz (__builtin_infd128 ()) + || baz (-__builtin_infd128 ()) + || baz (__builtin_nand128 ("")) + || !baz (9.999999999999999999999999999999999E6144DL) + || !baz (-1E-6143DL) + || baz (0.999999999999999999999999999999999E-6143DL) + || baz (-0.000000000000000000000000000000001E-6143DL) + || baz (0.000DL) + || baz (-0.0000000000000000000000DL)) + __builtin_abort (); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.dg/ipa/modref-4.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/ipa/modref-4.c *** gcc-12.4.0/gcc/testsuite/gcc.dg/ipa/modref-4.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/ipa/modref-4.c Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,34 ---- + /* { dg-options "-O" } */ + /* { dg-do run } */ + + static __attribute__((noipa)) int foo (void) + { + return 1; + } + + int main (void) + { + struct S { int a; int b; }; + struct T { struct S s; }; + + struct T t = { { 0, 0 } }; + struct T u; + + __attribute__((noinline)) void bar (void) + { + if (foo ()) + { + u = t; + /* OK with u.s.a = 0; */ + } + } + + u.s.a = 1; + + bar (); + + if (u.s.a != 0) + __builtin_abort (); + + return 0; + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.dg/ipa/pr120044-1.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/ipa/pr120044-1.c *** gcc-12.4.0/gcc/testsuite/gcc.dg/ipa/pr120044-1.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/ipa/pr120044-1.c Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,17 ---- + /* { dg-do run } */ + /* { dg-options "-O3 -fno-early-inlining -fno-tree-fre -fno-tree-pre -fno-code-hoisting -fno-inline" } */ + + struct a { + int b; + } const c; + void d(char p, struct a e) { + while (e.b) + ; + } + static unsigned short f(const struct a g) { + d(g.b, g); + return g.b; + } + int main() { + return f(c); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.dg/ipa/pr120044-2.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/ipa/pr120044-2.c *** gcc-12.4.0/gcc/testsuite/gcc.dg/ipa/pr120044-2.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/ipa/pr120044-2.c Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,17 ---- + /* { dg-do run } */ + /* { dg-options "-O3 -fno-early-inlining -fno-tree-fre -fno-tree-pre -fno-code-hoisting -fno-ipa-cp" } */ + + struct a { + int b; + } const c; + void d(char p, struct a e) { + while (e.b) + ; + } + static unsigned short f(const struct a g) { + d(g.b, g); + return g.b; + } + int main() { + return f(c); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.dg/lto/pr91299_0.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/lto/pr91299_0.c *** gcc-12.4.0/gcc/testsuite/gcc.dg/lto/pr91299_0.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/lto/pr91299_0.c Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,16 ---- + /* { dg-lto-do run } */ + /* { dg-lto-options { { -O2 -flto } } } */ + + __attribute__((weak)) int get_t(void) + { + return 0; + } + + int a; + int main(void) + { + a = get_t(); + if (a != 1) + __builtin_abort (); + return 0; + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.dg/lto/pr91299_1.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/lto/pr91299_1.c *** gcc-12.4.0/gcc/testsuite/gcc.dg/lto/pr91299_1.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/lto/pr91299_1.c Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,6 ---- + /* { dg-options "-fno-lto" } */ + + int get_t(void) + { + return 1; + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.dg/pr101478.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/pr101478.c *** gcc-12.4.0/gcc/testsuite/gcc.dg/pr101478.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/pr101478.c Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,11 ---- + /* { dg-do compile } */ + /* { dg-options "" } */ + + struct obj { + int n; + int l; + }; + int main() + { + (struct obj *)((char *)(__SIZE_TYPE__)({ 0; }) - (char *)&((struct obj *)0)->l); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.dg/pr113207.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/pr113207.c *** gcc-12.4.0/gcc/testsuite/gcc.dg/pr113207.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/pr113207.c Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,10 ---- + /* { dg-compile } */ + /* { dg-require-effective-target lto } */ + /* { dg-options "-flto -fchecking" } */ + + typedef struct cl_lispunion *cl_object; + struct cl_lispunion {}; + cl_object cl_error() __attribute__((noreturn)); + volatile cl_object cl_coerce_value0; + void cl_coerce() { cl_error(); } + void L66safe_canonical_type(cl_object volatile); diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.dg/pr115646.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/pr115646.c *** gcc-12.4.0/gcc/testsuite/gcc.dg/pr115646.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/pr115646.c Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,14 ---- + /* { dg-do compile } */ + /* { dg-options "-O2" } */ + /* { dg-require-effective-target int32plus } */ + + extern double pow(double x, double y); + + struct S { + unsigned int a : 3, b : 8, c : 21; + }; + + void foo (struct S *p) + { + pow (p->c, 42); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.dg/pr116034.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/pr116034.c *** gcc-12.4.0/gcc/testsuite/gcc.dg/pr116034.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/pr116034.c Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,23 ---- + /* PR tree-optimization/116034 */ + /* { dg-do run } */ + /* { dg-options "-O1 -fno-strict-aliasing" } */ + + unsigned short int g; + + static inline int + foo (_Complex unsigned short c) + { + if (__SIZEOF_SHORT__ == 2) + __builtin_memmove (&g, 1 + (char *) &c, 2); + return g; + } + + int + main () + { + if (__SIZEOF_SHORT__ == 2 + && __CHAR_BIT__ == 8 + && (foo (__BYTE_ORDER__ != __ORDER_BIG_ENDIAN__ ? 0x100 : 1) + != (__BYTE_ORDER__ != __ORDER_BIG_ENDIAN__ ? 1 : 0x100))) + __builtin_abort (); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.dg/pr116290.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/pr116290.c *** gcc-12.4.0/gcc/testsuite/gcc.dg/pr116290.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/pr116290.c Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,18 ---- + /* { dg-do compile } */ + /* { dg-options "-g -O2 -fcompare-debug" } */ + + char *camel_message_info_class_intern_init_part; + void g_once_init_enter(); + void camel_message_info_class_intern_init() { + int ii; + char *label; + for (; camel_message_info_class_intern_init_part[ii]; ii++) + if (camel_message_info_class_intern_init_part) { + if (label && *label) + g_once_init_enter(); + label = &camel_message_info_class_intern_init_part[ii + 1]; + camel_message_info_class_intern_init_part[ii] = ' '; + } + if (label) + g_once_init_enter(); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.dg/pr116481.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/pr116481.c *** gcc-12.4.0/gcc/testsuite/gcc.dg/pr116481.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/pr116481.c Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,13 ---- + /* { dg-do compile } */ + /* { dg-options "-O2 -Warray-bounds" } */ + + extern void tramp (); + + int is_trampoline (void* function) /* { dg-bogus "arrays of functions are not meaningful" } */ + { + void* tramp_address = tramp; + if (!(((unsigned long)function & 3) == 2)) + return 0; + return (((long *) ((char*)function - 2))[0] + == ((long *) ((char*)tramp_address-2))[0]); /* { dg-warning "outside array bounds" } */ + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.dg/pr116850.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/pr116850.c *** gcc-12.4.0/gcc/testsuite/gcc.dg/pr116850.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/pr116850.c Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,12 ---- + /* { dg-do compile } */ + /* { dg-options "-Os -w" } */ + + int a, b; + int *c() + { + int d, *e = 0, *f = &d, *g = &a; + if (b) + g = 0; + *e = *g; + return f; + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.dg/pr116891.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/pr116891.c *** gcc-12.4.0/gcc/testsuite/gcc.dg/pr116891.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/pr116891.c Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,47 ---- + /* PR middle-end/116891 */ + /* { dg-do run } */ + /* { dg-require-effective-target fenv } */ + /* { dg-require-effective-target hard_float } */ + /* { dg-require-effective-target c99_runtime } */ + /* { dg-options "-O2 -frounding-math" } */ + + #include + + __attribute__((noipa)) double + foo (double x, double y, double z) + { + return -__builtin_fma (-x, y, -z); + } + + __attribute__((noipa)) double + bar (double x, double y, double z) + { + return -__builtin_fma (-x, y, z); + } + + __attribute__((noipa)) double + baz (double x, double y, double z) + { + return -__builtin_fma (x, y, -z); + } + + __attribute__((noipa)) double + qux (double x, double y, double z) + { + return -__builtin_fma (x, y, z); + } + + int + main () + { + #if defined (FE_DOWNWARD) && __DBL_MANT_DIG__ == 53 && __DBL_MAX_EXP__ == 1024 + fesetround (FE_DOWNWARD); + double a = foo (-0x1.p256, 0x1.p256, 0x1.p-256); + if (a != -__builtin_nextafter (0x1p256 * 0x1p256, 0.)) + __builtin_abort (); + if (a != bar (-0x1.p256, 0x1.p256, -0x1.p-256) + || a != baz (0x1.p256, 0x1.p256, 0x1.p-256) + || a != qux (0x1.p256, 0x1.p256, -0x1.p-256)) + __builtin_abort (); + #endif + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.dg/pr117104.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/pr117104.c *** gcc-12.4.0/gcc/testsuite/gcc.dg/pr117104.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/pr117104.c Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,12 ---- + /* { dg-do compile } */ + /* { dg-options "-O2 -fno-vect-cost-model" } */ + /* { dg-additional-options "-mavx" { target { x86_64-*-* i?86-*-* } } } */ + + void g(); + void f(long *a) + { + long b0 = a[0] > 0 ? a[0] : 0; + long b1 = a[1] > 0 ? a[1] : 0; + if ((b0|b1) == 0) + g(); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.dg/pr117254.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/pr117254.c *** gcc-12.4.0/gcc/testsuite/gcc.dg/pr117254.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/pr117254.c Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,10 ---- + /* { dg-do compile } */ + /* { dg-options "" } */ + + int g; + void e(int s) { + struct { + __attribute__((nonstring)) char bn[g]; + } f; + __builtin_strncpy (f.bn, f.bn, s); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.dg/pr117398.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/pr117398.c *** gcc-12.4.0/gcc/testsuite/gcc.dg/pr117398.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/pr117398.c Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,17 ---- + /* { dg-do compile } */ + /* { dg-options "-O2" } */ + + int a; + void c(void); + int d(_Bool b) { + switch (b+0) { + case 0: + break; + case 1: + break; + default: + c(); + } + if (b) + return a; + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.dg/pr117745.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/pr117745.c *** gcc-12.4.0/gcc/testsuite/gcc.dg/pr117745.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/pr117745.c Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,8 ---- + /* PR c/117745 */ + /* { dg-do compile } */ + /* { dg-options "" } */ + + static int foo (void); + void bar (void) { sizeof (int [0 ? foo () : 1); } /* { dg-error "expected" } */ + static int baz (void); + void qux (void) { sizeof (sizeof (int[baz ()])); } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.dg/pr119071.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/pr119071.c *** gcc-12.4.0/gcc/testsuite/gcc.dg/pr119071.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/pr119071.c Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,45 ---- + /* PR rtl-optimization/119071 */ + /* { dg-do run } */ + /* { dg-options "-O2 -fgimple" } */ + + int a, b; + + int __GIMPLE (ssa,startwith("expand")) + foo (void) + { + int _1; + int _2; + int _3; + int _5; + _Bool _7; + int _8; + int _9; + _Bool _14; + int _15; + int _16; + _Bool _17; + int _18; + + __BB(2): + _1 = a; + _17 = _1 != _Literal (int) -2; + _18 = (int) _17; + _2 = _18 + _Literal (int) -1; + _3 = _2 + _18; + _14 = _3 != 1; + _15 = (int) _14; + _16 = -_15; + _7 = _3 == 1; + _9 = (int) _7; + _5 = _9 << _16; + _8 = _5 - _15; + b = _8; + return _8; + } + + int + main () + { + if (foo () != 1) + __builtin_abort (); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.dg/pr119183.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/pr119183.c *** gcc-12.4.0/gcc/testsuite/gcc.dg/pr119183.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/pr119183.c Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,12 ---- + /* PR c/119183 */ + /* { dg-do compile } */ + + int foo (void); + #define A(x) (1.0f * (1.0f * (1.0f * (1.0f * (1.0f * (1.0f * (1.0f * (1.0f * (x))))))))) + + float + bar (float r) + { + r += A (A (A (A (A (A (A (A (foo ())))))))); + return r; + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.dg/pr120480.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/pr120480.c *** gcc-12.4.0/gcc/testsuite/gcc.dg/pr120480.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/pr120480.c Fri Jul 4 07:24:43 2025 *************** *** 0 **** --- 1,11 ---- + /* PR target/120480 */ + /* { dg-do compile } */ + /* { dg-options "-O0" } */ + + struct S { int a, b, c; } s; + + void + foo (void) + { + struct S t = s; + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.dg/torture/builtin-frexp-1.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/torture/builtin-frexp-1.c *** gcc-12.4.0/gcc/testsuite/gcc.dg/torture/builtin-frexp-1.c Thu Jun 20 08:08:08 2024 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/torture/builtin-frexp-1.c Fri Jul 4 07:24:44 2025 *************** *** 11,16 **** --- 11,17 ---- floating point formats need -funsafe-math-optimizations. */ /* { dg-require-effective-target inf } */ /* { dg-options "-funsafe-math-optimizations" { target powerpc*-*-* } } */ + /* { dg-additional-options "-Wmaybe-uninitialized" } */ extern void link_error(int); *************** extern void link_error(int); *** 52,73 **** link_error(__LINE__); \ } while (0) /* Test that FUNCRES(frexp(NEG FUNCARG(ARGARG),&i)) is false. Check ! the sign as well. Ensure side-effects are evaluated in i. */ #define TESTIT_FREXP2(NEG,FUNCARG,ARGARG,FUNCRES) do { \ ! int i=5; \ if (!__builtin_##FUNCRES##f(__builtin_frexpf(NEG __builtin_##FUNCARG##f(ARGARG),&i)) \ ! || CKSGN_F(__builtin_frexpf(NEG __builtin_##FUNCARG##f(ARGARG),(i++,&i)), NEG __builtin_##FUNCARG##f(ARGARG)) \ ! || CKEXP(i,6)) \ link_error(__LINE__); \ if (!__builtin_##FUNCRES(__builtin_frexp(NEG __builtin_##FUNCARG(ARGARG),&i)) \ ! || CKSGN(__builtin_frexp(NEG __builtin_##FUNCARG(ARGARG),(i++,&i)), NEG __builtin_##FUNCARG(ARGARG)) \ ! || CKEXP(i,7)) \ link_error(__LINE__); \ if (!__builtin_##FUNCRES##l(__builtin_frexpl(NEG __builtin_##FUNCARG##l(ARGARG),&i)) \ ! || CKSGN_L(__builtin_frexpl(NEG __builtin_##FUNCARG##l(ARGARG),(i++,&i)), NEG __builtin_##FUNCARG##l(ARGARG)) \ ! || CKEXP(i,8)) \ link_error(__LINE__); \ } while (0) void __attribute__ ((__noinline__)) --- 53,88 ---- link_error(__LINE__); \ } while (0) + int __attribute__ ((__noipa__)) + bar (int x) + { + (void) x; + return 42; + } + /* Test that FUNCRES(frexp(NEG FUNCARG(ARGARG),&i)) is false. Check ! the sign as well. Ensure side-effects are evaluated in the second ! frexp argument. */ #define TESTIT_FREXP2(NEG,FUNCARG,ARGARG,FUNCRES) do { \ ! int i, j = 5; \ if (!__builtin_##FUNCRES##f(__builtin_frexpf(NEG __builtin_##FUNCARG##f(ARGARG),&i)) \ ! || CKSGN_F(__builtin_frexpf(NEG __builtin_##FUNCARG##f(ARGARG),(j++,&i)), NEG __builtin_##FUNCARG##f(ARGARG)) \ ! || CKEXP(j,6)) \ link_error(__LINE__); \ + if (CKEXP(bar(i),42)) \ + __builtin_abort(); \ if (!__builtin_##FUNCRES(__builtin_frexp(NEG __builtin_##FUNCARG(ARGARG),&i)) \ ! || CKSGN(__builtin_frexp(NEG __builtin_##FUNCARG(ARGARG),(j++,&i)), NEG __builtin_##FUNCARG(ARGARG)) \ ! || CKEXP(j,7)) \ link_error(__LINE__); \ + if (CKEXP(bar(i),42)) \ + __builtin_abort(); \ if (!__builtin_##FUNCRES##l(__builtin_frexpl(NEG __builtin_##FUNCARG##l(ARGARG),&i)) \ ! || CKSGN_L(__builtin_frexpl(NEG __builtin_##FUNCARG##l(ARGARG),(j++,&i)), NEG __builtin_##FUNCARG##l(ARGARG)) \ ! || CKEXP(j,8)) \ link_error(__LINE__); \ + if (CKEXP(bar(i),42)) \ + __builtin_abort(); \ } while (0) void __attribute__ ((__noinline__)) *************** foo(void) *** 111,118 **** --- 126,135 ---- Exponent is left unspecified, but we test for side-effects. */ TESTIT_FREXP2 ( ,inf, , isinf); TESTIT_FREXP2 (- ,inf, , isinf); + #ifdef __OPTIMIZE__ TESTIT_FREXP2 ( ,nan, "", isnan); TESTIT_FREXP2 (- ,nan, "", isnan); + #endif } int main() diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.dg/torture/pr112859.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/torture/pr112859.c *** gcc-12.4.0/gcc/testsuite/gcc.dg/torture/pr112859.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/torture/pr112859.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,24 ---- + /* { dg-do run } */ + /* { dg-additional-options "-ftree-loop-distribution" } */ + + struct a { + char b; + int c; + } f, *i = &f; + static struct a e[4]; + int *d, **g = &d; + static int h, j; + int main() + { + for (; h < 1; h++) { + struct a k = {1, 1}; + for (j = 0; j < 2; j++) { + *i = e[h]; + e[h] = k; + } + *g = 0; + } + if (f.c != 1) + __builtin_abort(); + return 0; + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.dg/torture/pr114246.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/torture/pr114246.c *** gcc-12.4.0/gcc/testsuite/gcc.dg/torture/pr114246.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/torture/pr114246.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,11 ---- + /* { dg-do compile } */ + /* { dg-additional-options "-w" } */ + + int a, b; + + void + foo (void) + { + __builtin_memcpy (&a, (char *)&b - 1, 2); + __builtin_memcpy (&a, &b, 1); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.dg/torture/pr115347.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/torture/pr115347.c *** gcc-12.4.0/gcc/testsuite/gcc.dg/torture/pr115347.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/torture/pr115347.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,21 ---- + /* { dg-do run } */ + /* { dg-additional-options "-ftree-loop-distribution" } */ + + struct a { + int b; + int c; + } d, e[2]; + int f, g, h; + int main() + { + for (; f < 1; f++) { + for (h = 0; h < 2; h++) { + d = e[f]; + g = e[1].c; + e[f].c = 1; + } + } + if (d.c != 1) + __builtin_abort(); + return 0; + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.dg/torture/pr115641.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/torture/pr115641.c *** gcc-12.4.0/gcc/testsuite/gcc.dg/torture/pr115641.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/torture/pr115641.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,29 ---- + /* { dg-do run } */ + + typedef struct { + char hours, day, month; + short year; + } T; + + T g (void) + { + T now; + now.hours = 1; + now.day = 2; + now.month = 3; + now.year = 4; + return now; + } + + __attribute__((const)) T f (void) + { + T virk = g (); + return virk; + } + + int main () + { + if (f ().hours != 1 || f ().day != 2 || f ().month != 3 || f ().year != 4) + __builtin_abort (); + return 0; + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.dg/torture/pr116057.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/torture/pr116057.c *** gcc-12.4.0/gcc/testsuite/gcc.dg/torture/pr116057.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/torture/pr116057.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,20 ---- + /* { dg-do run } */ + /* { dg-additional-options "-Wno-psabi" } */ + + #define vect8 __attribute__((vector_size(8))) + + vect8 int __attribute__((noipa)) + f(int a) + { + int b; + vect8 int t={1,1}; + if(a) return t; + return (vect8 int){0, b}; + } + + int main () + { + if (f(0)[0] != 0) + __builtin_abort (); + return 0; + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.dg/torture/pr116412-1.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/torture/pr116412-1.c *** gcc-12.4.0/gcc/testsuite/gcc.dg/torture/pr116412-1.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/torture/pr116412-1.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,6 ---- + /* { dg-do compile } */ + double f(_Complex double a, _Complex double *b, int c) + { + if (c) return __real__ a; + return __real__ *b; + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.dg/torture/pr116585.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/torture/pr116585.c *** gcc-12.4.0/gcc/testsuite/gcc.dg/torture/pr116585.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/torture/pr116585.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,32 ---- + /* { dg-do compile } */ + + char *s1, *s2; + extern int* my_alloc (int); + extern int _setjmp (); + extern void bar(); + void foo(int s1len, int s2len) + { + int e; + e = _setjmp (); + { + int l, i; + int *md = my_alloc(((sizeof(int)) * (s1len + 1) * (s2len))); + s1len++; + for (; s1len; l) + for (; s2len; l) + for (; s1len; i) + { + int j = 1; + for (; j < s2len; j++) + { + int cost; + if (s1[1] == s2[1]) + cost = 0; + else + cost = 1; + md[j * s1len ] = ((cost)); + } + } + bar(); + } + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.dg/torture/pr116768.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/torture/pr116768.c *** gcc-12.4.0/gcc/testsuite/gcc.dg/torture/pr116768.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/torture/pr116768.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,32 ---- + /* { dg-do run } */ + + #define numwords 2 + + typedef struct { + unsigned words[numwords]; + } Child; + + typedef struct { + Child child; + } Parent; + + Parent my_or(Parent x, const Parent *y) { + const Child *y_child = &y->child; + for (int i = 0; i < numwords; i++) { + x.child.words[i] |= y_child->words[i]; + } + return x; + } + + int main() { + Parent bs[4]; + __builtin_memset(bs, 0, sizeof(bs)); + + bs[0].child.words[0] = 1; + for (int i = 1; i <= 3; i++) { + bs[i] = my_or(bs[i], &bs[i - 1]); + } + if (bs[2].child.words[0] != 1) + __builtin_abort (); + return 0; + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.dg/torture/pr116922.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/torture/pr116922.c *** gcc-12.4.0/gcc/testsuite/gcc.dg/torture/pr116922.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/torture/pr116922.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,19 ---- + /* { dg-do compile } */ + /* { dg-additional-options "-ffast-math" } */ + /* PR tree-optimization/116922 */ + + + static int g; + + void + foo (int c, double v, double *r) + { + b: + do + v /= g - v; + while (c); + *r = v; + + double x; + foo (5, (double)0, &x); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.dg/torture/pr117113.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/torture/pr117113.c *** gcc-12.4.0/gcc/testsuite/gcc.dg/torture/pr117113.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/torture/pr117113.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,20 ---- + /* { dg-do compile } */ + /* { dg-additional-options "-fno-tree-dce -fno-inline" } */ + + int a, b, c; + volatile int d[1]; + void e() {} + void f(int g) {} + int main() { + int i; + for (; b; b--) { + for (i = 0; i < 3; i++) { + e(); + f(d[0]); + d[0]; + } + if (a) + c++; + } + return 0; + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.dg/torture/pr117119.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/torture/pr117119.c *** gcc-12.4.0/gcc/testsuite/gcc.dg/torture/pr117119.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/torture/pr117119.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,10 ---- + /* { dg-do compile } */ + /* { dg-require-effective-target int128 } */ + + unsigned __int128 g_728; + int func_1_l_5011[8]; + void func_1() { + for (;; g_728 += 1) + func_1_l_5011[g_728] ^= func_1_l_5011[g_728 + 5]; + } + void main() {} diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.dg/torture/pr117243-1.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/torture/pr117243-1.c *** gcc-12.4.0/gcc/testsuite/gcc.dg/torture/pr117243-1.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/torture/pr117243-1.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,30 ---- + /* { dg-do compile } */ + /* { dg-options "-fdump-tree-optimized" } */ + /* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } { "" } } */ + + /* PR tree-optimization/117243 */ + /* foo should be an infinite but sometimes it gets optimized incorrectly into + an __builtin_unreachable(); which is not valid. */ + void + foo (unsigned int a, unsigned char b) + { + lbl: + for (b = 0; b <= 7; b++) + { + unsigned char c[1][1]; + int i, j; + for (i = 0; i < 1; i++) + for (j = 0; j < 1; j++) + c[i][j] = 1; + if (b) + goto lbl; + } + } + + int + main () + { + foo (1, 2); + } + + /* { dg-final { scan-tree-dump-not "__builtin_unreachable " "optimized"} } */ diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.dg/torture/pr117243-2.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/torture/pr117243-2.c *** gcc-12.4.0/gcc/testsuite/gcc.dg/torture/pr117243-2.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/torture/pr117243-2.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,34 ---- + /* { dg-do compile } */ + /* { dg-options "-fno-tree-ch -fdump-tree-optimized" } */ + /* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } { "" } } */ + + /* PR tree-optimization/117243 */ + /* PR tree-optimization/116749 */ + + /* main1 should be an infinite but sometimes it gets optimized incorrectly into + an __builtin_unreachable(); which is not valid. */ + int main1 (void) + { + int g=0; + int l1[1]; + int *l2 = &g; + int i; + for (i=0; i<1; i++) + l1[i] = (1); + for (g=0; g; ++g) + { + int *l3[1] = {&l1[0]}; + } + *l2 = *l1; + b: + for (i=0; i<2; ++i) + { + if (i) + goto b; + if (g) + continue; + } + return 0; + } + + /* { dg-final { scan-tree-dump-not "__builtin_unreachable " "optimized"} } */ diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.dg/torture/pr117417.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/torture/pr117417.c *** gcc-12.4.0/gcc/testsuite/gcc.dg/torture/pr117417.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/torture/pr117417.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,16 ---- + /* { dg-do compile } */ + + typedef __attribute__((__vector_size__ (8))) double V; + int bar (int a, V *p) + { + V v; + v = *p; + a += *(_Complex short *) &v; + return a; + } + V x; + int + foo () + { + return bar (0, &x); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.dg/torture/pr117574-1.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/torture/pr117574-1.c *** gcc-12.4.0/gcc/testsuite/gcc.dg/torture/pr117574-1.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/torture/pr117574-1.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,20 ---- + /* { dg-do run } */ + + void abort (void); + int a, c; + long b; + short d; + static long e(long f, long h, long i) { + for (long g = f; g <= h; g += i) + b += g; + return b; + } + int main() { + c = 1; + for (; c >= 0; c--) + ; + for (; e(d + 40, d + 76, c + 51) < 4;) + ; + if (a != 0) + abort (); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.dg/torture/pr117811.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/torture/pr117811.c *** gcc-12.4.0/gcc/testsuite/gcc.dg/torture/pr117811.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/torture/pr117811.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,32 ---- + /* { dg-do run } */ + + #include + + typedef int v4 __attribute__((vector_size (4 * sizeof (int)))); + + void __attribute__((noclone,noinline)) do_shift (v4 *vec, int shift) + { + v4 t = *vec; + + if (shift > 0) + { + t = t >> shift; + } + + *vec = t; + } + + int main () + { + #if __SIZEOF_INT__ >= 4 + v4 vec = {0x1000000, 0x2000, 0x300, 0x40}; + v4 vec2 = {0x100000, 0x200, 0x30, 0x4}; + #else + v4 vec = {0x4000, 0x2000, 0x300, 0x40}; + v4 vec2 = {0x400, 0x200, 0x30, 0x4}; + #endif + do_shift (&vec, 4); + if (memcmp (&vec, &vec2, sizeof (v4)) != 0) + __builtin_abort (); + return 0; + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.dg/torture/pr118476-1.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/torture/pr118476-1.c *** gcc-12.4.0/gcc/testsuite/gcc.dg/torture/pr118476-1.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/torture/pr118476-1.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,14 ---- + /* { dg-do compile } */ + + /* PR tree-optimization/118476 */ + + typedef unsigned long long poly64x1 __attribute__((__vector_size__(1*sizeof(long long)))); + + poly64x1 vext_p64(poly64x1 a, poly64x1 b, const int n) + { + poly64x1 r = a; + unsigned src = (unsigned)n; + long long t = b[0]; + r[0] = (src < 1) ? a[src] : t; + return r; + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.dg/torture/pr118717.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/torture/pr118717.c *** gcc-12.4.0/gcc/testsuite/gcc.dg/torture/pr118717.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/torture/pr118717.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,41 ---- + /* { dg-do compile } */ + + void jj(void); + int ff1(void) __attribute__((__returns_twice__)); + struct s2 { + int prev; + }; + typedef struct s1 { + unsigned interrupt_flag; + unsigned interrupt_mask; + int tag; + int state; + }s1; + int ff(void); + static inline + int mm(s1 *ec) { + if (ff()) + if (ec->interrupt_flag & ~(ec)->interrupt_mask) + return 0; + } + void ll(s1 *ec) { + int t = 1; + int state; + if (t) + { + { + s1 *const _ec = ec; + struct s2 _tag = {0}; + if (ff1()) + state = ec->state; + else + state = 0; + if (!state) + mm (ec); + _ec->tag = _tag.prev; + } + if (state) + __builtin_exit(0); + } + jj(); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.dg/torture/pr118922-1.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/torture/pr118922-1.c *** gcc-12.4.0/gcc/testsuite/gcc.dg/torture/pr118922-1.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/torture/pr118922-1.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,57 ---- + /* { dg-do run } */ + /* PR tree-optimization/118922 */ + + /* Phi-opt would convert: + [local count: 1014686024]: + if (h_6 != 0) + goto ; [94.50%] + else + goto ; [5.50%] + + [local count: 114863530]: + # h_6 = PHI <0(4), 1(5)> + + [local count: 1073741824]: + # f_8 = PHI <0(5), h_6(6)> + _9 = f_8 ^ 1; + a.0_10 = a; + _11 = _9 + a.0_10; + if (_11 != -117) + goto ; [94.50%] + else + goto ; [5.50%] + + into: + + [local count: 59055799]: + c = d_3; + + [local count: 1073741824]: + # f_8 = PHI <0(5), 0(4)> + _9 = f_8 ^ 1; + a.0_10 = a; + _11 = _9 + a.0_10; + if (_11 != -117) + goto ; [94.50%] + else + goto ; [5.50%] + + as it thought the middle bb was empty as there was only a phi node there. */ + + + int a = -117, b, c, e; + void g(int h) { + int f = 0; + while (!f + a - -117) { + f = h == 0; + if (h == 0) + h = 1; + } + } + int main() { + int d = 8; + for (; e;) + d = 0; + c = d; + g(0); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.dg/tree-ssa/ldist-36.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/tree-ssa/ldist-36.c *** gcc-12.4.0/gcc/testsuite/gcc.dg/tree-ssa/ldist-36.c Thu Jun 20 08:08:08 2024 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/tree-ssa/ldist-36.c Fri Jul 4 07:24:44 2025 *************** foo (struct st * restrict p) *** 25,28 **** } } ! /* { dg-final { scan-tree-dump-times "Loop nest . distributed: split to 0 loops and 3 library" 1 "ldist" } } */ --- 25,29 ---- } } ! /* The cost modeling doesn't consider splitting a WAR re-use profitable. */ ! /* { dg-final { scan-tree-dump-times "Loop nest . distributed: split to 1 loops and 1 library" 1 "ldist" } } */ diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.dg/tree-ssa/pr109934.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/tree-ssa/pr109934.c *** gcc-12.4.0/gcc/testsuite/gcc.dg/tree-ssa/pr109934.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/tree-ssa/pr109934.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,22 ---- + // { dg-do run } + // { dg-options "-O3" } + + int printf(const char *, ...); + short a; + long b = 3, c; + int d(int e) { + switch (e) + case 111: + case 222: + case 44: + return 0; + return e; + } + int main() { + for (; a >= 0; --a) + if (d(c + 23) - 23) + b = 0; + + if (b != 3) + __builtin_abort (); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.dg/tree-ssa/pr114864.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/tree-ssa/pr114864.c *** gcc-12.4.0/gcc/testsuite/gcc.dg/tree-ssa/pr114864.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/tree-ssa/pr114864.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,15 ---- + /* { dg-do run } */ + /* { dg-options "-O1 -fno-tree-dce -fno-tree-fre" } */ + + struct a { + int b; + } const c; + void d(const struct a f) {} + void e(const struct a f) { + f.b == 0 ? 1 : f.b; + d(f); + } + int main() { + e(c); + return 0; + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.dg/tree-ssa/pr117142.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/tree-ssa/pr117142.c *** gcc-12.4.0/gcc/testsuite/gcc.dg/tree-ssa/pr117142.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/tree-ssa/pr117142.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,14 ---- + /* { dg-do compile } */ + /* { dg-options "-O1" } */ + + struct a { + int b; + }; + void c(int, int); + void __attribute__((returns_twice)) + bar1(struct a); + void bar(struct a) { + struct a d; + bar1(d); + c(d.b, d.b); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-25.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-25.c *** gcc-12.4.0/gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-25.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/tree-ssa/ssa-lim-25.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,18 ---- + /* { dg-do compile } */ + /* { dg-options "-O2 -fdump-tree-lim2-details" } */ + + char x; + + long foo (int n) + { + long y = 0; + for (int j = 0; j < 1024; ++j) + for (int i = 0; i < n; ++i) + y += *(long *)&x; + return y; + } + + /* Because *(long *)&x may trap we have to preserve execution and + only hoist it from the innermost loop (after the header check). */ + /* { dg-final { scan-tree-dump-not "out of loop 1" "lim2" } } */ + /* { dg-final { scan-tree-dump "out of loop 2" "lim2" } } */ diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.dg/vect/pr115669.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/vect/pr115669.c *** gcc-12.4.0/gcc/testsuite/gcc.dg/vect/pr115669.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/vect/pr115669.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,22 ---- + /* { dg-additional-options "-fwrapv" } */ + + #include "tree-vect.h" + + int a = 10; + unsigned b; + long long c[100]; + int foo() + { + long long *d = c; + for (short e = 0; e < a; e++) + b += ~(d ? d[e] : 0); + return b; + } + + int main() + { + check_vect (); + if (foo () != -10) + abort (); + return 0; + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.dg/vect/pr116125.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/vect/pr116125.c *** gcc-12.4.0/gcc/testsuite/gcc.dg/vect/pr116125.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/vect/pr116125.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,30 ---- + #include "tree-vect.h" + + struct st + { + unsigned int num : 8; + }; + + void __attribute__((noipa)) + mem_overlap (struct st *a, struct st *b) + { + for (int i = 0; i < 9; i++) + a[i].num = b[i].num + 1; + } + + int + main (void) + { + check_vect (); + + struct st a[9] = {}; + + // input a = 0, 0, 0, 0, 0, 0, 0, 0, 0 + mem_overlap (&a[1], a); + + // output a = 0, 1, 2, 3, 4, 5, 6, 7, 8 + if (a[2].num == 2) + return 0; + else + __builtin_abort (); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.dg/vect/pr117307.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/vect/pr117307.c *** gcc-12.4.0/gcc/testsuite/gcc.dg/vect/pr117307.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/vect/pr117307.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,17 ---- + /* { dg-do compile } */ + /* { dg-additional-options "-march=x86-64-v4" { target { x86_64-*-* i?86-*-* } } } */ + + int a; + float *b, *c; + float d; + void e() { + for (; a; a++) { + if (d) { + c[0] = b[0]; + c[1] = b[1]; + } else if (b[1]) + c[0] = b[0] * 0; + b += 2; + c += 2; + } + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.dg/vect/pr119057.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/vect/pr119057.c *** gcc-12.4.0/gcc/testsuite/gcc.dg/vect/pr119057.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/vect/pr119057.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,19 ---- + /* { dg-do compile } */ + /* { dg-additional-options "-fno-tree-vrp -fno-tree-forwprop" } */ + + int a, b, c, d; + unsigned e; + static void f(void) + { + unsigned h; + for (d = 0; d < 2; d++) + b |= e; + h = b; + c |= h; + } + int main() + { + for (; a; a++) + f(); + return 0; + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.dg/vect/pr119399.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/vect/pr119399.c *** gcc-12.4.0/gcc/testsuite/gcc.dg/vect/pr119399.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.dg/vect/pr119399.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,10 ---- + /* { dg-do compile } */ + /* { dg-additional-options "-fdump-tree-vect-raw" } */ + + void foo(int *p, int *q, int n) + { + for (int i = 0; i < n; i++) + p[i] = q[i] + 1; + } + + /* { dg-final { scan-tree-dump-not {= w / 2); + out[j] += d[i]; + } + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/aarch64/acle/bf16_feature.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/aarch64/acle/bf16_feature.c *** gcc-12.4.0/gcc/testsuite/gcc.target/aarch64/acle/bf16_feature.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/aarch64/acle/bf16_feature.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,10 ---- + /* { dg-do compile } */ + + #pragma GCC target "+bf16" + #ifndef __ARM_FEATURE_BF16 + #error "__ARM_FEATURE_BF16 is not defined but should be!" + #endif + + void + foo (void) {} + diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/aarch64/acle/bf16_sve_feature.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/aarch64/acle/bf16_sve_feature.c *** gcc-12.4.0/gcc/testsuite/gcc.target/aarch64/acle/bf16_sve_feature.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/aarch64/acle/bf16_sve_feature.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,10 ---- + /* { dg-do compile } */ + + #pragma GCC target "+sve+bf16" + #ifndef __ARM_FEATURE_SVE_BF16 + #error "__ARM_FEATURE_SVE_BF16 is not defined but should be!" + #endif + + void + foo (void) {} + diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/aarch64/sve/acle/asm/sudot_s32.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/aarch64/sve/acle/asm/sudot_s32.c *** gcc-12.4.0/gcc/testsuite/gcc.target/aarch64/sve/acle/asm/sudot_s32.c Thu Jun 20 08:08:08 2024 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/aarch64/sve/acle/asm/sudot_s32.c Fri Jul 4 07:24:44 2025 *************** *** 6,12 **** /* ** sudot_s32_tied1: ! ** usdot z0\.s, z2\.b, z4\.b ** ret */ TEST_TRIPLE_Z (sudot_s32_tied1, svint32_t, svint8_t, svuint8_t, --- 6,12 ---- /* ** sudot_s32_tied1: ! ** usdot z0\.s, z4\.b, z2\.b ** ret */ TEST_TRIPLE_Z (sudot_s32_tied1, svint32_t, svint8_t, svuint8_t, *************** TEST_TRIPLE_Z (sudot_s32_tied1, svint32_ *** 17,23 **** ** sudot_s32_tied2: ** mov (z[0-9]+)\.d, z0\.d ** movprfx z0, z4 ! ** usdot z0\.s, z2\.b, \1\.b ** ret */ TEST_TRIPLE_Z_REV (sudot_s32_tied2, svint32_t, svint8_t, svuint8_t, --- 17,23 ---- ** sudot_s32_tied2: ** mov (z[0-9]+)\.d, z0\.d ** movprfx z0, z4 ! ** usdot z0\.s, \1\.b, z2\.b ** ret */ TEST_TRIPLE_Z_REV (sudot_s32_tied2, svint32_t, svint8_t, svuint8_t, *************** TEST_TRIPLE_Z_REV (sudot_s32_tied2, svin *** 27,33 **** /* ** sudot_w0_s32_tied: ** mov (z[0-9]+\.b), w0 ! ** usdot z0\.s, z2\.b, \1 ** ret */ TEST_TRIPLE_ZX (sudot_w0_s32_tied, svint32_t, svint8_t, uint8_t, --- 27,33 ---- /* ** sudot_w0_s32_tied: ** mov (z[0-9]+\.b), w0 ! ** usdot z0\.s, \1, z2\.b ** ret */ TEST_TRIPLE_ZX (sudot_w0_s32_tied, svint32_t, svint8_t, uint8_t, *************** TEST_TRIPLE_ZX (sudot_w0_s32_tied, svint *** 37,43 **** /* ** sudot_9_s32_tied: ** mov (z[0-9]+\.b), #9 ! ** usdot z0\.s, z2\.b, \1 ** ret */ TEST_TRIPLE_Z (sudot_9_s32_tied, svint32_t, svint8_t, uint8_t, --- 37,43 ---- /* ** sudot_9_s32_tied: ** mov (z[0-9]+\.b), #9 ! ** usdot z0\.s, \1, z2\.b ** ret */ TEST_TRIPLE_Z (sudot_9_s32_tied, svint32_t, svint8_t, uint8_t, diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cnot_1.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cnot_1.c *** gcc-12.4.0/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cnot_1.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cnot_1.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,23 ---- + /* { dg-options "-O2" } */ + /* { dg-final { check-function-bodies "**" "" } } */ + + #include + + #ifdef __cplusplus + extern "C" { + #endif + + /* + ** foo: + ** cmpeq (p[0-7])\.s, p0/z, z0\.s, #0 + ** mov z0\.s, \1/z, #1 + ** ret + */ + svint32_t foo(svbool_t pg, svint32_t y) + { + return svsel(svcmpeq(pg, y, 0), svdup_s32(1), svdup_s32(0)); + } + + #ifdef __cplusplus + } + #endif diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_11.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_11.c *** gcc-12.4.0/gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_11.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_11.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,31 ---- + /* { dg-do compile } */ + /* { dg-options "-O2" } */ + + #include + #include + + svbool_t + f1 (volatile int32_t *ptr) + { + return svwhilelt_b8_s32 (*ptr, INT32_MIN); + } + + svbool_t + f2 (volatile uint32_t *ptr) + { + return svwhilelt_b16_u32 (*ptr, 0); + } + + svbool_t + f3 (volatile int64_t *ptr) + { + return svwhilelt_b32_s64 (*ptr, INT64_MIN); + } + + svbool_t + f4 (volatile uint64_t *ptr) + { + return svwhilelt_b64_u64 (*ptr, 0); + } + + /* { dg-final { scan-assembler-times {\tpfalse\tp[0-9]+\.b\n} 4 } } */ diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_12.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_12.c *** gcc-12.4.0/gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_12.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_12.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,34 ---- + /* { dg-do compile } */ + /* { dg-options "-O2" } */ + + #include + #include + + svbool_t + f1 (volatile int32_t *ptr) + { + return svwhilele_b8_s32 (*ptr, INT32_MAX); + } + + svbool_t + f2 (volatile uint32_t *ptr) + { + return svwhilele_b16_u32 (*ptr, UINT32_MAX); + } + + svbool_t + f3 (volatile int64_t *ptr) + { + return svwhilele_b32_s64 (*ptr, INT64_MAX); + } + + svbool_t + f4 (volatile uint64_t *ptr) + { + return svwhilele_b64_u64 (*ptr, UINT64_MAX); + } + + /* { dg-final { scan-assembler {\tptrue\tp[0-9]+\.b(?:, all)\n} } } */ + /* { dg-final { scan-assembler {\tptrue\tp[0-9]+\.h(?:, all)\n} } } */ + /* { dg-final { scan-assembler {\tptrue\tp[0-9]+\.s(?:, all)\n} } } */ + /* { dg-final { scan-assembler {\tptrue\tp[0-9]+\.d(?:, all)\n} } } */ diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_5.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_5.c *** gcc-12.4.0/gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_5.c Thu Jun 20 08:08:08 2024 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/aarch64/sve/acle/general/whilele_5.c Fri Jul 4 07:24:44 2025 *************** test3 (svbool_t *ptr) *** 28,34 **** *ptr = svwhilele_b16_s32 (0x7ffffffb, 0x7fffffff); } ! /* { dg-final { scan-assembler {\tptrue\tp[0-7]\.h, vl5\n} } } */ void test4 (svbool_t *ptr) --- 28,34 ---- *ptr = svwhilele_b16_s32 (0x7ffffffb, 0x7fffffff); } ! /* { dg-final { scan-assembler {\tptrue\tp[0-9]+\.h(?:, all)\n} } } */ void test4 (svbool_t *ptr) diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/aarch64/sve/pr116238.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/aarch64/sve/pr116238.c *** gcc-12.4.0/gcc/testsuite/gcc.target/aarch64/sve/pr116238.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/aarch64/sve/pr116238.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,13 ---- + /* { dg-additional-options "-O2 -msve-vector-bits=128" } */ + + void foo(); + typedef unsigned char v2qi __attribute__((vector_size(2))); + void f(v2qi *ptr) + { + v2qi x = *ptr; + asm volatile ("" :: "w" (x)); + asm volatile ("" ::: "d8", "d9", "d10", "d11", "d12", "d13", "d14", "d15"); + foo(); + asm volatile ("" :: "w" (x)); + *ptr = x; + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/aarch64/torture/pr116564.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/aarch64/torture/pr116564.c *** gcc-12.4.0/gcc/testsuite/gcc.target/aarch64/torture/pr116564.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/aarch64/torture/pr116564.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,11 ---- + /* { dg-do compile } */ + /* { dg-options "" } */ + #include + void test() + { + for (int L = 0; L < 4; ++L) { + float64_t ResData[1 * 2]; + float64x1x2_t Src1; + vst2_f64(ResData, Src1); + } + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/alpha/pr115526.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/alpha/pr115526.c *** gcc-12.4.0/gcc/testsuite/gcc.target/alpha/pr115526.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/alpha/pr115526.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,46 ---- + /* PR target/115526 */ + /* { dg-do assemble } */ + /* { dg-options "-O2 -Wno-attributes -fvisibility=hidden -fPIC -mcpu=ev4" } */ + + struct _ts { + struct _dtoa_state *interp; + }; + struct Bigint { + int k; + } *_Py_dg_strtod_bs; + struct _dtoa_state { + struct Bigint p5s; + struct Bigint *freelist[]; + }; + extern _Thread_local struct _ts _Py_tss_tstate; + typedef struct Bigint Bigint; + int pow5mult_k; + long _Py_dg_strtod_ndigits; + void PyMem_Free(); + void Bfree(Bigint *v) { + if (v) + { + if (v->k) + PyMem_Free(); + else { + struct _dtoa_state *interp = _Py_tss_tstate.interp; + interp->freelist[v->k] = v; + } + } + } + static Bigint *pow5mult(Bigint *b) { + for (;;) { + if (pow5mult_k & 1) { + Bfree(b); + if (b == 0) + return 0; + } + if (!(pow5mult_k >>= 1)) + break; + } + return 0; + } + void _Py_dg_strtod() { + if (_Py_dg_strtod_ndigits) + pow5mult(_Py_dg_strtod_bs); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/arm/mve/intrinsics/vsetq_lane_su64.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/arm/mve/intrinsics/vsetq_lane_su64.c *** gcc-12.4.0/gcc/testsuite/gcc.target/arm/mve/intrinsics/vsetq_lane_su64.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/arm/mve/intrinsics/vsetq_lane_su64.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,63 ---- + /* { dg-require-effective-target arm_v8_1m_mve_ok } */ + /* { dg-add-options arm_v8_1m_mve } */ + /* { dg-require-effective-target arm_hard_ok } */ + /* { dg-additional-options "-mfloat-abi=hard -O2" } */ + /* { dg-final { check-function-bodies "**" "" } } */ + + #include "arm_mve.h" + + #ifdef __cplusplus + extern "C" { + #endif + + /* + **fn1: + ** vmov d0, r0, r1 + ** bx lr + */ + uint64x2_t + fn1 (uint64_t a, uint64x2_t b) + { + return vsetq_lane_u64 (a, b, 0); + } + + /* + **fn2: + ** vmov d1, r0, r1 + ** bx lr + */ + uint64x2_t + fn2 (uint64_t a, uint64x2_t b) + { + return vsetq_lane_u64 (a, b, 1); + } + + /* + **fn3: + ** vmov d0, r0, r1 + ** bx lr + */ + int64x2_t + fn3 (int64_t a, int64x2_t b) + { + return vsetq_lane_s64 (a, b, 0); + } + + /* + **fn4: + ** vmov d1, r0, r1 + ** bx lr + */ + int64x2_t + fn4 (int64_t a, int64x2_t b) + { + return vsetq_lane_s64 (a, b, 1); + } + + + #ifdef __cplusplus + } + #endif + + /* { dg-final { scan-assembler-not "__ARM_undef" } } */ + diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/arm/simd/mve-vshr.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/arm/simd/mve-vshr.c *** gcc-12.4.0/gcc/testsuite/gcc.target/arm/simd/mve-vshr.c Thu Jun 20 08:08:08 2024 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/arm/simd/mve-vshr.c Fri Jul 4 07:24:44 2025 *************** *** 9,14 **** --- 9,16 ---- void test_ ## NAME ##_ ## SIGN ## BITS ## x ## NB (TYPE##BITS##_t * __restrict__ dest, TYPE##BITS##_t *a, TYPE##BITS##_t *b) { \ int i; \ for (i=0; i= (unsigned)(BITS)) \ + __builtin_unreachable(); \ dest[i] = a[i] OP b[i]; \ } \ } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/avr/torture/pr119989-memx-1.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/avr/torture/pr119989-memx-1.c *** gcc-12.4.0/gcc/testsuite/gcc.target/avr/torture/pr119989-memx-1.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/avr/torture/pr119989-memx-1.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,6 ---- + /* { dg-do run { target { ! avr_tiny } } } */ + /* { dg-additional-options "-std=gnu99" } */ + + typedef __UINT8_TYPE__ TYP; + + #include "pr119989.h" diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/avr/torture/pr119989-memx-2.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/avr/torture/pr119989-memx-2.c *** gcc-12.4.0/gcc/testsuite/gcc.target/avr/torture/pr119989-memx-2.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/avr/torture/pr119989-memx-2.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,6 ---- + /* { dg-do run { target { ! avr_tiny } } } */ + /* { dg-additional-options "-std=gnu99" } */ + + typedef __UINT16_TYPE__ TYP; + + #include "pr119989.h" diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/avr/torture/pr119989-memx-3.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/avr/torture/pr119989-memx-3.c *** gcc-12.4.0/gcc/testsuite/gcc.target/avr/torture/pr119989-memx-3.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/avr/torture/pr119989-memx-3.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,6 ---- + /* { dg-do run { target { ! avr_tiny } } } */ + /* { dg-additional-options "-std=gnu99" } */ + + __extension__ typedef __uint24 TYP; + + #include "pr119989.h" diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/avr/torture/pr119989-memx-4.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/avr/torture/pr119989-memx-4.c *** gcc-12.4.0/gcc/testsuite/gcc.target/avr/torture/pr119989-memx-4.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/avr/torture/pr119989-memx-4.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,6 ---- + /* { dg-do run { target { ! avr_tiny } } } */ + /* { dg-additional-options "-std=gnu99" } */ + + typedef __UINT32_TYPE__ TYP; + + #include "pr119989.h" diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/avr/torture/pr119989.h gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/avr/torture/pr119989.h *** gcc-12.4.0/gcc/testsuite/gcc.target/avr/torture/pr119989.h Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/avr/torture/pr119989.h Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,37 ---- + const __memx TYP some_data[] = { 1, 2, 3, 4, 5 }; + const __memx TYP *IP; + + TYP DT, a, b; + + __attribute__((noipa)) + void do_test1 (void) + { + DT = *IP; + DT = *IP--; + } + + __attribute__((noipa)) + void do_test2 (void) + { + DT = *IP; + __asm volatile ("" ::: "memory"); // Prevents unwanted optimization + DT = *IP--; + } + + TYP difference(void) + { + IP = &some_data[3]; + do_test1(); + a = DT; + IP = &some_data[3]; + do_test2(); + b = DT; + return a - b; // Expected: 0 + } + + int main (void) + { + if (difference () != 0) + __builtin_exit (__LINE__); + return 0; + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/avr/torture/pr87376.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/avr/torture/pr87376.c *** gcc-12.4.0/gcc/testsuite/gcc.target/avr/torture/pr87376.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/avr/torture/pr87376.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,60 ---- + /* { dg-do run { target { ! avr_tiny } } } */ + /* { dg-additional-options "-std=gnu99" } */ + + typedef __UINT64_TYPE__ uint64_t; + + extern const __memx uint64_t aa __asm ("real_aa"); + extern const uint64_t bb __asm ("real_bb"); + + const __memx uint64_t real_aa = 0x1122334455667788; + const uint64_t real_bb = 0x0908070605040302; + + __attribute__((noinline,noclone)) + uint64_t add1 (void) + { + return aa + bb; + } + + __attribute__((noinline,noclone)) + uint64_t add2 (void) + { + return bb + aa; + } + + __attribute__((noinline,noclone)) + uint64_t sub1 (void) + { + return aa - bb; + } + + __attribute__((noinline,noclone)) + uint64_t sub2 (void) + { + return bb - aa; + } + + __attribute__((noinline,noclone)) + uint64_t neg1 (void) + { + return -aa; + } + + int main (void) + { + if (neg1() != -real_aa) + __builtin_exit (__LINE__); + + if (add1() != real_aa + real_bb) + __builtin_exit (__LINE__); + + if (add2() != real_bb + real_aa) + __builtin_exit (__LINE__); + + if (sub1() != real_aa - real_bb) + __builtin_exit (__LINE__); + + if (sub2() != real_bb - real_aa) + __builtin_exit (__LINE__); + + return 0; + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/avr/torture/pr88236-pr115726.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/avr/torture/pr88236-pr115726.c *** gcc-12.4.0/gcc/testsuite/gcc.target/avr/torture/pr88236-pr115726.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/avr/torture/pr88236-pr115726.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,115 ---- + /* { dg-do run { target { ! avr_tiny } } } */ + /* { dg-additional-options "-std=gnu99" } */ + + const __flash char fvals8[] = { 1, 2, 3 }; + char rvals8[] = { 0, 2, 4 }; + + const __flash int fvals16[] = { 1, 2, 3 }; + int rvals16[] = { 0, 2, 4 }; + + __attribute__((noinline, noclone)) + char xload8_r30 (const __memx char *pc) + { + register char c __asm ("r30"); + c = *pc; + __asm (";;" : "+r" (c)); + return c; + } + + __attribute__((noinline, noclone)) + int xload16_r30 (const __memx int *pc) + { + register int c __asm ("r30"); + c = *pc; + __asm (";;" : "+r" (c)); + return c; + } + + __attribute__((noinline, noclone)) + char xload8_r22 (const __memx char *pc) + { + register char c __asm ("r22"); + c = *pc; + __asm (";;" : "+r" (c)); + return c; + } + + __attribute__((noinline, noclone)) + int xload16_r22 (const __memx int *pc) + { + register int c __asm ("r22"); + c = *pc; + __asm (";;" : "+r" (c)); + return c; + } + + __attribute__((noinline, noclone)) + int xload16_r20 (const __memx int *pc) + { + register int c __asm ("r20"); + c = *pc; + __asm (";;" : "+r" (c)); + return c; + } + + void test8 (void) + { + char c; + for (int i = 0; i < 3; ++i) + { + c = xload8_r30 (fvals8 + i); + if (c != 1 + i) + __builtin_exit (__LINE__); + + c = xload8_r22 (fvals8 + i); + if (c != 1 + i) + __builtin_exit (__LINE__); + + c = xload8_r30 (rvals8 + i); + if (c != 2 * i) + __builtin_exit (__LINE__); + + c = xload8_r22 (rvals8 + i); + if (c != 2 * i) + __builtin_exit (__LINE__); + } + } + + void test16 (void) + { + int c; + for (int i = 0; i < 3; ++i) + { + c = xload16_r30 (fvals16 + i); + if (c != 1 + i) + __builtin_exit (__LINE__); + + c = xload16_r22 (fvals16 + i); + if (c != 1 + i) + __builtin_exit (__LINE__); + + c = xload16_r20 (fvals16 + i); + if (c != 1 + i) + __builtin_exit (__LINE__); + + c = xload16_r30 (rvals16 + i); + if (c != 2 * i) + __builtin_exit (__LINE__); + + c = xload16_r22 (rvals16 + i); + if (c != 2 * i) + __builtin_exit (__LINE__); + + c = xload16_r20 (rvals16 + i); + if (c != 2 * i) + __builtin_exit (__LINE__); + } + } + + int main (void) + { + test8(); + test16(); + + return 0; + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/avr/torture/pr98762.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/avr/torture/pr98762.c *** gcc-12.4.0/gcc/testsuite/gcc.target/avr/torture/pr98762.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/avr/torture/pr98762.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,19 ---- + /* { dg-do run } */ + /* { dg-additional-options "-std=c99" } */ + + long long acc = 0x1122334455667788; + + __attribute__((noinline,noclone)) + void addhi (short a) + { + acc += (long long) a << 32; + } + + int main (void) + { + addhi (0x0304); + if (acc != 0x1122364855667788) + __builtin_abort(); + + return 0; + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/i386/avx512bw-pr103750-1.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/avx512bw-pr103750-1.c *** gcc-12.4.0/gcc/testsuite/gcc.target/i386/avx512bw-pr103750-1.c Thu Jun 20 08:08:08 2024 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/avx512bw-pr103750-1.c Fri Jul 4 07:24:44 2025 *************** *** 1,8 **** /* PR target/103750 */ /* { dg-do compile } */ /* { dg-options "-O2 -mavx512bw -mavx512vl" } */ ! /* { dg-final { scan-assembler-not "kmov" { xfail ia32 } } } */ ! /* xfail need to be fixed. */ #include extern __m128i* pi128; --- 1,7 ---- /* PR target/103750 */ /* { dg-do compile } */ /* { dg-options "-O2 -mavx512bw -mavx512vl" } */ ! /* { dg-final { scan-assembler-not "kmov" } } */ #include extern __m128i* pi128; diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/i386/avx512bw-vpalignr-1b.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/avx512bw-vpalignr-1b.c *** gcc-12.4.0/gcc/testsuite/gcc.target/i386/avx512bw-vpalignr-1b.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/avx512bw-vpalignr-1b.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,18 ---- + /* { dg-do compile } */ + /* { dg-options "-O0 -mavx512bw -mavx512vl" } */ + /* { dg-final { scan-assembler-times "vpalignr\[ \\t\]+\[^\{\n\]*%ymm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ + /* { dg-final { scan-assembler-times "vpalignr\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ + + #include + + volatile __m256i y; + volatile __m128i x; + volatile __mmask32 m2; + volatile __mmask16 m3; + + void extern + avx512bw_test (void) + { + y = _mm256_mask_alignr_epi8 (y, m2, y, y, 10); + x = _mm_mask_alignr_epi8 (x, m3, x, x, 10); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/i386/avx512dq-vfpclasssd-1b.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/avx512dq-vfpclasssd-1b.c *** gcc-12.4.0/gcc/testsuite/gcc.target/i386/avx512dq-vfpclasssd-1b.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/avx512dq-vfpclasssd-1b.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,14 ---- + /* { dg-do compile } */ + /* { dg-options "-mavx512dq -O0" } */ + /* { dg-final { scan-assembler-times "vfpclasssd\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\[^\n^k\]*%k\[0-7\]\{%k\[0-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ + + #include + + volatile __m128d x128; + volatile __mmask8 m8; + + void extern + avx512dq_test (void) + { + m8 = _mm_mask_fpclass_sd_mask (m8, x128, 13); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/i386/avx512dq-vfpclassss-1b.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/avx512dq-vfpclassss-1b.c *** gcc-12.4.0/gcc/testsuite/gcc.target/i386/avx512dq-vfpclassss-1b.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/avx512dq-vfpclassss-1b.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,14 ---- + /* { dg-do compile } */ + /* { dg-options "-mavx512dq -O0" } */ + /* { dg-final { scan-assembler-times "vfpclassss\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\[^\n^k\]*%k\[0-7\]\{%k\[0-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ + + #include + + volatile __m128 x128; + volatile __mmask8 m8; + + void extern + avx512dq_test (void) + { + m8 = _mm_mask_fpclass_ss_mask (m8, x128, 13); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/i386/avx512dq-vreducesd-1b.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/avx512dq-vreducesd-1b.c *** gcc-12.4.0/gcc/testsuite/gcc.target/i386/avx512dq-vreducesd-1b.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/avx512dq-vreducesd-1b.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,16 ---- + /* { dg-do compile } */ + /* { dg-options "-mavx512dq -O0" } */ + /* { dg-final { scan-assembler-times "vreducesd\[ \\t\]+\[^\{\n\]*\{sae\}\[^\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ + + #include + + #define IMM 123 + + volatile __m128d x1, x2, xx1, xx2; + volatile __mmask8 m; + + void extern + avx512dq_test (void) + { + xx1 = _mm_reduce_round_sd (xx1, xx2, IMM, _MM_FROUND_NO_EXC); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/i386/avx512dq-vreducess-1b.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/avx512dq-vreducess-1b.c *** gcc-12.4.0/gcc/testsuite/gcc.target/i386/avx512dq-vreducess-1b.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/avx512dq-vreducess-1b.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,16 ---- + /* { dg-do compile } */ + /* { dg-options "-mavx512dq -O0" } */ + /* { dg-final { scan-assembler-times "vreducess\[ \\t\]+\[^\{\n\]*\{sae\}\[^\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ + + #include + + #define IMM 123 + + volatile __m128 x1, x2, xx1, xx2; + volatile __mmask8 m; + + void extern + avx512dq_test (void) + { + xx1 = _mm_reduce_round_ss (xx1, xx2, IMM, _MM_FROUND_NO_EXC); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/i386/avx512fp16-vfpclassph-1c.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/avx512fp16-vfpclassph-1c.c *** gcc-12.4.0/gcc/testsuite/gcc.target/i386/avx512fp16-vfpclassph-1c.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/avx512fp16-vfpclassph-1c.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,77 ---- + /* { dg-do run } */ + /* { dg-options "-O0 -mavx512fp16" } */ + /* { dg-require-effective-target avx512fp16 } */ + + #define AVX512FP16 + #include "avx512f-helper.h" + + #include + #include + #include + #define SIZE (AVX512F_LEN / 16) + #include "avx512f-mask-type.h" + + #ifndef __FPCLASSPH__ + #define __FPCLASSPH__ + int check_fp_class_hp (_Float16 src, int imm) + { + int qNaN_res = isnan (src); + int sNaN_res = isnan (src); + int Pzero_res = (src == 0.0); + int Nzero_res = (src == -0.0); + int PInf_res = (isinf (src) == 1); + int NInf_res = (isinf (src) == -1); + int Denorm_res = (fpclassify (src) == FP_SUBNORMAL); + int FinNeg_res = __builtin_finite (src) && (src < 0); + + int result = (((imm & 1) && qNaN_res) + || (((imm >> 1) & 1) && Pzero_res) + || (((imm >> 2) & 1) && Nzero_res) + || (((imm >> 3) & 1) && PInf_res) + || (((imm >> 4) & 1) && NInf_res) + || (((imm >> 5) & 1) && Denorm_res) + || (((imm >> 6) & 1) && FinNeg_res) + || (((imm >> 7) & 1) && sNaN_res)); + return result; + } + #endif + + MASK_TYPE + CALC (_Float16 *s1, int imm) + { + int i; + MASK_TYPE res = 0; + + for (i = 0; i < SIZE; i++) + if (check_fp_class_hp(s1[i], imm)) + res = res | (1 << i); + + return res; + } + + void + TEST (void) + { + int i; + UNION_TYPE (AVX512F_LEN, h) src; + MASK_TYPE res1, res2, res_ref = 0; + MASK_TYPE mask = MASK_VALUE; + + src.a[SIZE - 1] = NAN; + src.a[SIZE - 2] = 1.0 / 0.0; + for (i = 0; i < SIZE - 2; i++) + { + src.a[i] = -24.43 + 0.6 * i; + } + + res1 = INTRINSIC (_fpclass_ph_mask) (src.x, 0xFF); + res2 = INTRINSIC (_mask_fpclass_ph_mask) (mask, src.x, 0xFF); + + res_ref = CALC (src.a, 0xFF); + + if (res_ref != res1) + abort (); + + if ((mask & res_ref) != res2) + abort (); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/i386/avx512vl-valignq-1b.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/avx512vl-valignq-1b.c *** gcc-12.4.0/gcc/testsuite/gcc.target/i386/avx512vl-valignq-1b.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/avx512vl-valignq-1b.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,15 ---- + /* { dg-do compile } */ + /* { dg-options "-O0 -mavx512vl" } */ + /* { dg-final { scan-assembler-times "valignq\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}(?:\n|\[ \\t\]+#)" 1 } } */ + + #include + + volatile __m256i y; + volatile __m128i x; + volatile __mmask8 m; + + void extern + avx512vl_test (void) + { + x = _mm_mask_alignr_epi64 (x, m, x, x, 1); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/i386/bmi-pr116287.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/bmi-pr116287.c *** gcc-12.4.0/gcc/testsuite/gcc.target/i386/bmi-pr116287.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/bmi-pr116287.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,28 ---- + /* PR target/116287 */ + /* { dg-do run { target bmi } } */ + /* { dg-options "-O2 -mbmi" } */ + + #include + + #include "bmi-check.h" + + static void + bmi_test () + { + unsigned int a = 0; + if (__builtin_ia32_bextr_u32 (a++, 0) != 0) + abort (); + if (__builtin_ia32_bextr_u32 (a++, 0x120) != 0) + abort (); + if (a != 2) + abort (); + #ifdef __x86_64__ + unsigned long long b = 0; + if (__builtin_ia32_bextr_u64 (b++, 0) != 0) + abort (); + if (__builtin_ia32_bextr_u64 (b++, 0x140) != 0) + abort (); + if (b != 2) + abort (); + #endif + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/i386/bmi2-pr116287.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/bmi2-pr116287.c *** gcc-12.4.0/gcc/testsuite/gcc.target/i386/bmi2-pr116287.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/bmi2-pr116287.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,24 ---- + /* PR target/116287 */ + /* { dg-do run { target bmi2 } } */ + /* { dg-options "-O2 -mbmi2" } */ + + #include + + #include "bmi2-check.h" + + static void + bmi2_test () + { + unsigned int a = 0; + if (__builtin_ia32_bzhi_si (a++, 0) != 0) + abort (); + if (a != 1) + abort (); + #ifdef __x86_64__ + unsigned long long b = 0; + if (__builtin_ia32_bzhi_di (b++, 0) != 0) + abort (); + if (b != 1) + abort (); + #endif + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/i386/fma-pr116891.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/fma-pr116891.c *** gcc-12.4.0/gcc/testsuite/gcc.target/i386/fma-pr116891.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/fma-pr116891.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,19 ---- + /* PR middle-end/116891 */ + /* { dg-do run } */ + /* { dg-require-effective-target fenv } */ + /* { dg-require-effective-target hard_float } */ + /* { dg-require-effective-target c99_runtime } */ + /* { dg-require-effective-target fma } */ + /* { dg-options "-O2 -mfma -frounding-math" } */ + + #include + #include "fma-check.h" + + #define main() do_main () + #include "../../gcc.dg/pr116891.c" + + static void + fma_test (void) + { + do_main (); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/i386/funcspec-56.inc gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/funcspec-56.inc *** gcc-12.4.0/gcc/testsuite/gcc.target/i386/funcspec-56.inc Thu Jun 20 08:08:08 2024 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/funcspec-56.inc Fri Jul 4 07:24:44 2025 *************** extern void test_arch_znver1 (void) *** 200,205 **** --- 200,206 ---- extern void test_arch_znver2 (void) __attribute__((__target__("arch=znver2"))); extern void test_arch_znver3 (void) __attribute__((__target__("arch=znver3"))); extern void test_arch_znver4 (void) __attribute__((__target__("arch=znver4"))); + extern void test_arch_znver5 (void) __attribute__((__target__("arch=znver5"))); extern void test_tune_nocona (void) __attribute__((__target__("tune=nocona"))); extern void test_tune_core2 (void) __attribute__((__target__("tune=core2"))); *************** extern void test_tune_znver1 (void) *** 223,228 **** --- 224,230 ---- extern void test_tune_znver2 (void) __attribute__((__target__("tune=znver2"))); extern void test_tune_znver3 (void) __attribute__((__target__("tune=znver3"))); extern void test_tune_znver4 (void) __attribute__((__target__("tune=znver4"))); + extern void test_tune_znver5 (void) __attribute__((__target__("tune=znver5"))); extern void test_fpmath_sse (void) __attribute__((__target__("sse2,fpmath=sse"))); extern void test_fpmath_387 (void) __attribute__((__target__("sse2,fpmath=387"))); diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/i386/pieces-memcpy-10.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pieces-memcpy-10.c *** gcc-12.4.0/gcc/testsuite/gcc.target/i386/pieces-memcpy-10.c Thu Jun 20 08:08:08 2024 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pieces-memcpy-10.c Fri Jul 4 07:24:44 2025 *************** *** 1,5 **** /* { dg-do compile } */ ! /* { dg-options "-O2 -mno-avx2 -mavx -mtune=sandybridge" } */ extern char *dst, *src; --- 1,5 ---- /* { dg-do compile } */ ! /* { dg-options "-O2 -mno-avx2 -mavx -mmove-max=128 -mstore-max=128 -mtune=sandybridge" } */ extern char *dst, *src; diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/i386/pieces-memcpy-22.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pieces-memcpy-22.c *** gcc-12.4.0/gcc/testsuite/gcc.target/i386/pieces-memcpy-22.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pieces-memcpy-22.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,12 ---- + /* { dg-do compile { target { ! ia32 } } } */ + /* { dg-options "-O2 -mno-avx2 -mavx -mtune=generic" } */ + + extern char *dst, *src; + + void + foo (void) + { + __builtin_memcpy (dst, src, 33); + } + + /* { dg-final { scan-assembler-times "vmovdqu\[ \\t\]+\[^\n\]*%ymm" 2 } } */ diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/i386/pieces-memcpy-6.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pieces-memcpy-6.c *** gcc-12.4.0/gcc/testsuite/gcc.target/i386/pieces-memcpy-6.c Thu Jun 20 08:08:08 2024 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pieces-memcpy-6.c Fri Jul 4 07:24:44 2025 *************** *** 1,5 **** /* { dg-do compile { target { ! ia32 } } } */ ! /* { dg-options "-O2 -mno-avx2 -mavx -mtune=sandybridge" } */ extern char *dst, *src; --- 1,5 ---- /* { dg-do compile { target { ! ia32 } } } */ ! /* { dg-options "-O2 -mno-avx2 -mavx -mmove-max=128 -mstore-max=128 -mtune=sandybridge" } */ extern char *dst, *src; diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/i386/pieces-memset-38.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pieces-memset-38.c *** gcc-12.4.0/gcc/testsuite/gcc.target/i386/pieces-memset-38.c Thu Jun 20 08:08:08 2024 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pieces-memset-38.c Fri Jul 4 07:24:44 2025 *************** *** 1,5 **** /* { dg-do compile } */ ! /* { dg-options "-O2 -mno-avx512f -mavx2 -mtune=sandybridge" } */ extern char *dst; --- 1,5 ---- /* { dg-do compile } */ ! /* { dg-options "-O2 -mno-avx512f -mavx2 -mmove-max=128 -mstore-max=128 -mtune=sandybridge" } */ extern char *dst; diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/i386/pieces-memset-40.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pieces-memset-40.c *** gcc-12.4.0/gcc/testsuite/gcc.target/i386/pieces-memset-40.c Thu Jun 20 08:08:08 2024 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pieces-memset-40.c Fri Jul 4 07:24:44 2025 *************** *** 1,5 **** /* { dg-do compile } */ ! /* { dg-options "-O2 -mno-avx512f -mavx2 -mtune=sandybridge" } */ extern char *dst; --- 1,5 ---- /* { dg-do compile } */ ! /* { dg-options "-O2 -mno-avx512f -mavx2 -mmove-max=128 -mstore-max=128 -mtune=sandybridge" } */ extern char *dst; diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/i386/pieces-memset-41.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pieces-memset-41.c *** gcc-12.4.0/gcc/testsuite/gcc.target/i386/pieces-memset-41.c Thu Jun 20 08:08:08 2024 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pieces-memset-41.c Fri Jul 4 07:24:44 2025 *************** *** 1,5 **** /* { dg-do compile } */ ! /* { dg-options "-O2 -mno-avx2 -mavx -mtune=sandybridge -mno-stackrealign" } */ extern char *dst; --- 1,5 ---- /* { dg-do compile } */ ! /* { dg-options "-O2 -mno-avx2 -mavx -mmove-max=128 -mstore-max=128 -mtune=sandybridge -mno-stackrealign" } */ extern char *dst; diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/i386/pieces-memset-42.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pieces-memset-42.c *** gcc-12.4.0/gcc/testsuite/gcc.target/i386/pieces-memset-42.c Thu Jun 20 08:08:08 2024 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pieces-memset-42.c Fri Jul 4 07:24:44 2025 *************** *** 1,5 **** /* { dg-do compile } */ ! /* { dg-options "-O2 -mno-avx2 -mavx -mtune=sandybridge" } */ extern char *dst; --- 1,5 ---- /* { dg-do compile } */ ! /* { dg-options "-O2 -mno-avx2 -mavx -mmove-max=128 -mstore-max=128 -mtune=sandybridge" } */ extern char *dst; diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/i386/pieces-memset-43.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pieces-memset-43.c *** gcc-12.4.0/gcc/testsuite/gcc.target/i386/pieces-memset-43.c Thu Jun 20 08:08:08 2024 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pieces-memset-43.c Fri Jul 4 07:24:44 2025 *************** *** 1,5 **** /* { dg-do compile } */ ! /* { dg-options "-O2 -mno-avx2 -mavx -mtune=sandybridge" } */ extern char *dst; --- 1,5 ---- /* { dg-do compile } */ ! /* { dg-options "-O2 -mno-avx2 -mavx -mmove-max=128 -mstore-max=128 -mtune=sandybridge" } */ extern char *dst; diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/i386/pieces-memset-51.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pieces-memset-51.c *** gcc-12.4.0/gcc/testsuite/gcc.target/i386/pieces-memset-51.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pieces-memset-51.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,12 ---- + /* { dg-do compile } */ + /* { dg-options "-O2 -mno-avx2 -mavx -mtune=generic" } */ + + extern char *dst; + + void + foo (int x) + { + __builtin_memset (dst, x, 64); + } + + /* { dg-final { scan-assembler-times "vmovdqu\[ \\t\]+\[^\n\]*%ymm" 2 } } */ diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/i386/pieces-strcpy-2.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pieces-strcpy-2.c *** gcc-12.4.0/gcc/testsuite/gcc.target/i386/pieces-strcpy-2.c Thu Jun 20 08:08:08 2024 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pieces-strcpy-2.c Fri Jul 4 07:24:44 2025 *************** *** 1,5 **** /* { dg-do compile { target { ! ia32 } } } */ ! /* { dg-options "-O2 -mno-avx2 -mavx -mtune=sandybridge" } */ extern char *strcpy (char *, const char *); --- 1,5 ---- /* { dg-do compile { target { ! ia32 } } } */ ! /* { dg-options "-O2 -mno-avx2 -mavx -mmove-max=128 -mstore-max=128 -mtune=sandybridge" } */ extern char *strcpy (char *, const char *); diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/i386/pieces-strcpy-3.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pieces-strcpy-3.c *** gcc-12.4.0/gcc/testsuite/gcc.target/i386/pieces-strcpy-3.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pieces-strcpy-3.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,15 ---- + /* { dg-do compile { target { ! ia32 } } } */ + /* { dg-options "-O2 -mno-avx2 -mavx -mtune=generic" } */ + + extern char *strcpy (char *, const char *); + + void + foo (char *s) + { + strcpy (s, + "1234567890abcdef123456abcdef5678123456abcdef567abcdef678" + "1234567"); + } + + /* { dg-final { scan-assembler-times "vmovdqa\[ \\t\]+\[^\n\]*%ymm" 2 } } */ + /* { dg-final { scan-assembler-times "vmovdqu\[ \\t\]+\[^\n\]*%ymm" 2 } } */ diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/i386/pr115568.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pr115568.c *** gcc-12.4.0/gcc/testsuite/gcc.target/i386/pr115568.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pr115568.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,38 ---- + /* { dg-do run } */ + /* { dg-options "-O2 -fno-tree-sink -fno-tree-ter -fschedule-insns" } */ + + int a, c, d = 1, e, f = 1, h, i, j; + unsigned b = 1, g; + int main() { + for (; h < 2; h++) { + int k = ~(b || 0), l = ((~e - j) ^ a % b) % k, m = (b ^ -1) + e; + unsigned o = ~a % ~1; + if (f) { + l = d; + m = 10; + i = e; + d = -(~e + b); + g = o % m; + e = -1; + n: + a = a % ~i; + b = ~k; + if (!g) { + b = e + o % -1; + continue; + } + if (!l) + break; + } + int q = (~d + g) << ~e, p = (~d - q) & a >> b; + unsigned s = ~((g & e) + (p | (b ^ (d + k)))); + int r = (e & s) + p, u = d | ~a, + t = ((~(q + (~a + (s + e)))) & u) | (-g & (c << d ^ p)); + if (t) + if (!r) + goto n; + g = m; + e = i; + } + return 0; + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/i386/pr115872.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pr115872.c *** gcc-12.4.0/gcc/testsuite/gcc.target/i386/pr115872.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pr115872.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,16 ---- + /* { dg-do compile } */ + /* { dg-options "-O2 -g" } */ + + long set_work_pending_p; + _Bool set_work_pending() { + _Bool __trans_tmp_1; + long mask = 1, old = __atomic_fetch_or(&set_work_pending_p, mask, 0); + __trans_tmp_1 = old & mask; + return !__trans_tmp_1; + } + void __queue_work() { + _Bool ret = set_work_pending(); + if (ret) + __queue_work(); + } + diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/i386/pr116043.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pr116043.c *** gcc-12.4.0/gcc/testsuite/gcc.target/i386/pr116043.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pr116043.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,33 ---- + /* { dg-do compile } */ + /* { dg-options "-mavx512bf16 -O3" } */ + /* { dg-final { scan-assembler-not {(?n)lea.*@gottpoff} } } */ + + extern __thread int a, c, i, j, k, l; + int *b; + struct d { + int e; + } f, g; + char *h; + + void m(struct d *n) { + b = &k; + for (; n->e; b++, n--) { + i = b && a; + if (i) + j = c; + } + } + + char *o(struct d *n) { + for (; n->e;) + return h; + } + + int q() { + if (l) + return 1; + int p = *o(&g); + m(&f); + m(&g); + l = p; + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/i386/pr116512.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pr116512.c *** gcc-12.4.0/gcc/testsuite/gcc.target/i386/pr116512.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pr116512.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,26 ---- + /* { dg-do compile } */ + /* { dg-options "-march=x86-64-v4 -O2" } */ + /* { dg-final { scan-assembler-not "vzeroupper" { target { ! ia32 } } } } */ + + #include + + struct B { + union { + __m512 f; + __m512i s; + }; + }; + + struct B foo(int n) { + struct B res; + res.s = _mm512_set1_epi32(n); + + return res; + } + + __m512i bar(int n) { + struct B res; + res.s = _mm512_set1_epi32(n); + + return res.s; + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/i386/pr116621.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pr116621.c *** gcc-12.4.0/gcc/testsuite/gcc.target/i386/pr116621.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pr116621.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,43 ---- + /* { dg-do run } */ + /* { dg-options "-O2" } */ + + #include + #include + + union S8302 + { + union + { + double b; + int c; + } a; + long double d; + unsigned short int f[5]; + }; + + union S8302 s8302; + extern void check8302va (int i, ...); + + int + main (void) + { + memset (&s8302, '\0', sizeof (s8302)); + s8302.a.b = -221438.250000; + check8302va (1, s8302); + return 0; + } + + __attribute__((noinline, noclone)) + void + check8302va (int z, ...) + { + union S8302 arg, *p; + va_list ap; + + __builtin_va_start (ap, z); + p = &s8302; + arg = __builtin_va_arg (ap, union S8302); + if (p->a.b != arg.a.b) + __builtin_abort (); + __builtin_va_end (ap); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/i386/pr116839.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pr116839.c *** gcc-12.4.0/gcc/testsuite/gcc.target/i386/pr116839.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pr116839.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,48 ---- + /* { dg-do compile { target { ! ia32 } } } */ + /* { dg-require-effective-target maybe_x32 } */ + /* { dg-options "-mx32 -O2 -fPIC -mtls-dialect=gnu2" } */ + /* { dg-final { scan-assembler-not "cmpl\[ \t\]+%fs:previous_emax@dtpoff\\(%eax\\)" } } */ + + typedef long mpfr_prec_t; + typedef long mpfr_exp_t; + typedef struct { + mpfr_prec_t _mpfr_prec; + } __mpfr_struct; + typedef __mpfr_struct mpfr_t[1]; + extern _Thread_local mpfr_exp_t __gmpfr_emax; + static _Thread_local mpfr_exp_t previous_emax; + static _Thread_local mpfr_t bound_emax; + extern const mpfr_t __gmpfr_const_log2_RNDD; + extern const mpfr_t __gmpfr_const_log2_RNDU; + + typedef enum { + MPFR_RNDN=0, + MPFR_RNDZ, + MPFR_RNDU, + MPFR_RNDD, + MPFR_RNDA, + MPFR_RNDF, + MPFR_RNDNA=-1 + } mpfr_rnd_t; + typedef __mpfr_struct *mpfr_ptr; + typedef const __mpfr_struct *mpfr_srcptr; + void mpfr_mul (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t); + + void + foo (void) + { + mpfr_exp_t saved_emax; + + if (__gmpfr_emax != previous_emax) + { + saved_emax = __gmpfr_emax; + + bound_emax->_mpfr_prec = 32; + + mpfr_mul (bound_emax, saved_emax < 0 ? + __gmpfr_const_log2_RNDD : __gmpfr_const_log2_RNDU, + MPFR_RNDU); + previous_emax = saved_emax; + __gmpfr_emax = saved_emax; + } + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/i386/pr116962.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pr116962.c *** gcc-12.4.0/gcc/testsuite/gcc.target/i386/pr116962.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pr116962.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,10 ---- + /* { dg-do compile { target fstack_protector } } */ + /* { dg-options "-O2 -fstack-protector-all" } */ + /* { dg-final { scan-assembler-not "__stack_chk_fail" } } */ + + __attribute__ ((naked)) + void + foo (void) + { + asm ("ret"); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/i386/pr117116.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pr117116.c *** gcc-12.4.0/gcc/testsuite/gcc.target/i386/pr117116.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pr117116.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,18 ---- + /* PR target/117116 */ + /* { dg-do compile } */ + /* { dg-options "-O2 -mavx2" } */ + + typedef void (*StmFct)(); + typedef struct { + StmFct fct_getc; + StmFct fct_putc; + StmFct fct_flush; + StmFct fct_close; + } StmInf; + + StmInf TTY_Getc_pstm; + + void TTY_Getc() { + TTY_Getc_pstm.fct_getc = TTY_Getc; + TTY_Getc_pstm.fct_putc = TTY_Getc_pstm.fct_flush = TTY_Getc_pstm.fct_close = (StmFct)1; + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/i386/pr117159.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pr117159.c *** gcc-12.4.0/gcc/testsuite/gcc.target/i386/pr117159.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pr117159.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,42 ---- + /* { dg-do run } */ + /* { dg-options "-Os -mavx512bw" } */ + /* { dg-require-effective-target avx512bw } */ + + typedef __attribute__((__vector_size__ (4))) unsigned char W; + typedef __attribute__((__vector_size__ (64))) int V; + typedef __attribute__((__vector_size__ (64))) long long Vq; + + W w; + V v; + Vq vq; + + static inline W + foo (short m) + { + unsigned k = __builtin_ia32_pcmpgtq512_mask ((Vq) { }, vq, m); + W r = (W) k + w; + return r; + } + + static inline W + foo1 (short m) + { + unsigned k = __builtin_ia32_pcmpgtd512_mask ((V) {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, v, m); + W r = (W) k + w; + return r; + } + + int + main () + { + if (!__builtin_cpu_supports ("avx512bw")) + return 0; + W y = foo1 (65535); + if (!y[0] || !y[1] || y[2] || y[3]) + __builtin_abort(); + W x = foo (65535); + if (x[0] || x[1] || x[2] || x[3]) + __builtin_abort(); + + return 0; + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/i386/pr117240_avx.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pr117240_avx.c *** gcc-12.4.0/gcc/testsuite/gcc.target/i386/pr117240_avx.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pr117240_avx.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,10 ---- + /* { dg-do compile } */ + /* { dg-options "-O2 -mvaes -mno-xsave -Wno-psabi -Wno-implicit-function-declaration" } */ + + typedef __attribute__((__vector_size__(32))) char V; + + V + foo(V v) + { + return __builtin_ia32_vaesenc_v32qi(v, v);/* { dg-error "incompatible types when returning" } */ + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/i386/pr117240_avx512f.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pr117240_avx512f.c *** gcc-12.4.0/gcc/testsuite/gcc.target/i386/pr117240_avx512f.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pr117240_avx512f.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,10 ---- + /* { dg-do compile } */ + /* { dg-options "-O2 -mvaes -mno-xsave -Wno-psabi -Wno-implicit-function-declaration" } */ + + typedef __attribute__((__vector_size__(64))) char V; + + V + foo(V v) + { + return __builtin_ia32_vaesenc_v64qi(v, v);/* { dg-error "incompatible types when returning" } */ + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/i386/pr117296.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pr117296.c *** gcc-12.4.0/gcc/testsuite/gcc.target/i386/pr117296.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pr117296.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,12 ---- + /* PR target/117296 */ + /* { dg-do compile } */ + /* { dg-options "-O1" } */ + /* { dg-additional-options "-mtune=k6 -mstringop-strategy=libcall -ffloat-store" { target ia32 } } */ + + int x; + + void + foo (_Complex double c) + { + lab:; + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/i386/pr117318.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pr117318.c *** gcc-12.4.0/gcc/testsuite/gcc.target/i386/pr117318.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pr117318.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,12 ---- + /* { dg-do compile } */ + /* { dg-options "-mavx512f -O" } */ + + typedef __attribute__((__vector_size__ (64))) long long V; + unsigned long long x; + + unsigned long long + foo() + { + __builtin_ia32_pmovusqb512mem_mask (&x, (V){8000000000000000}, 255); + return x; + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/i386/pr117357.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pr117357.c *** gcc-12.4.0/gcc/testsuite/gcc.target/i386/pr117357.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pr117357.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,7 ---- + /* { dg-do compile } */ + /* { dg-options "-msse -mfpmath=387" } */ + + float foo (float f) + { + return __builtin_ia32_rsqrtf (f); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/i386/pr117418-1.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pr117418-1.c *** gcc-12.4.0/gcc/testsuite/gcc.target/i386/pr117418-1.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pr117418-1.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,24 ---- + /* PR target/117418 */ + /* { dg-do compile { target { ! ia32 } } } */ + /* { dg-options "-maddress-mode=long -mwidekl -mx32" } */ + /* { dg-require-effective-target maybe_x32 } */ + /* { dg-final { scan-assembler-times "aesdec128kl" 1 } } */ + /* { dg-final { scan-assembler-times "aesdec256kl" 1 } } */ + /* { dg-final { scan-assembler-times "aesenc128kl" 1 } } */ + /* { dg-final { scan-assembler-times "aesenc256kl" 1 } } */ + /* { dg-final { scan-assembler-times "encodekey128" 1 } } */ + /* { dg-final { scan-assembler-times "encodekey256" 1 } } */ + + typedef __attribute__((__vector_size__(16))) long long V; + V a; + + void + foo() + { + __builtin_ia32_aesdec128kl_u8 (&a, a, &a); + __builtin_ia32_aesdec256kl_u8 (&a, a, &a); + __builtin_ia32_aesenc128kl_u8 (&a, a, &a); + __builtin_ia32_aesenc256kl_u8 (&a, a, &a); + __builtin_ia32_encodekey128_u32 (0, a, &a); + __builtin_ia32_encodekey256_u32 (0, a, a, &a); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/i386/pr117432.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pr117432.c *** gcc-12.4.0/gcc/testsuite/gcc.target/i386/pr117432.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pr117432.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,17 ---- + /* PR ipa/117432 */ + /* { dg-do compile { target lp64 } } */ + /* { dg-options "-O2" } */ + /* { dg-final { scan-assembler "# myinsn %rax" } } */ + /* { dg-final { scan-assembler "# myinsn %eax" } } */ + + void + foo (void) + { + asm volatile ("# myinsn %0" : : "r" (-42L)); + } + + void + bar (void) + { + asm volatile ("# myinsn %0" : : "r" (-42)); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/i386/pr118739.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pr118739.c *** gcc-12.4.0/gcc/testsuite/gcc.target/i386/pr118739.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pr118739.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,50 ---- + /* PR rtl-optimization/118739 */ + /* { dg-do run } */ + /* { dg-options "-O3 -fno-tree-forwprop -fno-tree-vrp" } */ + + volatile int a; + int b, c, d = 1, e, f, g; + + int h (void) + { + int i = 1; + + j: + for (b = 1; b; b--) + { + asm ("#"); + + g = 0; + + for (; g <= 1; g++) + { + int k = f = 0; + + for (; f <= 1; f++) + k = (1 == i) >= k || ((d = 0) >= a) + k; + } + } + + for (; i < 3; i++) + { + if (!c) + return g; + + if (e) + goto j; + + asm ("#"); + } + + return 0; + } + + int main() + { + h(); + + if (d != 1) + __builtin_abort(); + + return 0; + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/i386/pr118776.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pr118776.c *** gcc-12.4.0/gcc/testsuite/gcc.target/i386/pr118776.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pr118776.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,23 ---- + /* PR target/118776 */ + /* { dg-do compile } */ + /* { dg-options "-O2 -mavx512bw -mavx512vl" } */ + + void bar (unsigned char *); + + void + foo (unsigned char *x) + { + unsigned char b[32]; + bar (b); + for (int i = 0; i < 32; i++) + { + unsigned char c = 8; + if (i > 3) + { + unsigned char d = b[i]; + d = 1 > d ? 1 : d; + c = d; + } + x[i] = c; + } + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/i386/pr69482-1.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pr69482-1.c *** gcc-12.4.0/gcc/testsuite/gcc.target/i386/pr69482-1.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pr69482-1.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,16 ---- + /* { dg-do compile } */ + /* { dg-options "-O3 -fno-stack-protector -fomit-frame-pointer" } */ + + static inline void memset_s(void* s, int n) { + volatile unsigned char * p = s; + for(int i = 0; i < n; ++i) { + p[i] = 0; + } + } + + void test() { + unsigned char x[4]; + memset_s(x, sizeof x); + } + + /* { dg-final { scan-assembler-times "mov" 4 } } */ diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/i386/pr69482-2.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pr69482-2.c *** gcc-12.4.0/gcc/testsuite/gcc.target/i386/pr69482-2.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pr69482-2.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,10 ---- + /* { dg-do compile } */ + /* { dg-options "-O2 -fomit-frame-pointer" } */ + + void bar () + { + int j; + *(volatile int *)&j = 0; + } + + /* { dg-final { scan-assembler-times "mov" 1 } } */ diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/i386/pr87984.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pr87984.c *** gcc-12.4.0/gcc/testsuite/gcc.target/i386/pr87984.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/pr87984.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,23 ---- + /* { dg-do run } */ + /* { dg-options "-O" } */ + + __attribute__((noipa)) + int f(void) + { + int o = 0; + for (int i = 0; i < 3; i++) + { + register int a asm("eax"); + a = 1; + asm("add %1, %0" : "+r"(o) : "r"(a)); + asm("xor %%eax, %%eax" ::: "eax"); + } + return o; + } + + int main() + { + if (f() != 3) + __builtin_abort(); + return 0; + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/i386/sse-pr116738.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/sse-pr116738.c *** gcc-12.4.0/gcc/testsuite/gcc.target/i386/sse-pr116738.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/sse-pr116738.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,28 ---- + /* PR target/116738 */ + /* { dg-do run } */ + /* { dg-options "-O2 -msse" } */ + /* { dg-require-effective-target sse } */ + + #include "sse-check.h" + + static inline float + clamp (float f) + { + __m128 v = _mm_set_ss (f); + __m128 zero = _mm_setzero_ps (); + __m128 greatest = _mm_set_ss (__FLT_MAX__); + v = _mm_min_ss (v, greatest); + v = _mm_max_ss (v, zero); + return _mm_cvtss_f32 (v); + } + + static void + sse_test (void) + { + float f = clamp (-0.0f); + if (f != 0.0f || __builtin_signbitf (f)) + abort (); + f = clamp (__builtin_nanf ("")); + if (__builtin_isnanf (f) || f != __FLT_MAX__) + abort (); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/i386/tbm-pr116287.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/tbm-pr116287.c *** gcc-12.4.0/gcc/testsuite/gcc.target/i386/tbm-pr116287.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/i386/tbm-pr116287.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,29 ---- + /* PR target/116287 */ + /* { dg-do compile } */ + /* { dg-options "-O2 -mtbm -fdump-tree-optimized" } */ + /* { dg-final { scan-tree-dump-not "link_error \\\(\\\);" "optimized" } } */ + + #include + + extern void link_error (void); + + void + tbm_test () + { + unsigned int a = 0; + if (__builtin_ia32_bextri_u32 (a++, 0) != 0) + link_error (); + if (__builtin_ia32_bextri_u32 (a++, 0x120) != 0) + link_error (); + if (a != 2) + link_error (); + #ifdef __x86_64__ + unsigned long long b = 0; + if (__builtin_ia32_bextr_u64 (b++, 0) != 0) + link_error (); + if (__builtin_ia32_bextr_u64 (b++, 0x140) != 0) + link_error (); + if (b != 2) + link_error (); + #endif + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/powerpc/mma-builtin-error.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/powerpc/mma-builtin-error.c *** gcc-12.4.0/gcc/testsuite/gcc.target/powerpc/mma-builtin-error.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/powerpc/mma-builtin-error.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,11 ---- + /* { dg-do compile } */ + /* { dg-require-effective-target power10_ok } */ + /* { dg-options "-O2 -mdejagnu-cpu=power10" } */ + + typedef unsigned char vec_t __attribute__((vector_size(16))); + + void + foo (__vector_quad *dst, vec_t vec0, vec_t vec1) /* { dg-error "argument 5 must be a literal between 0 and 15, inclusive" } */ + { + __builtin_mma_pmxvi8ger4 (dst, vec0, vec1, 15, 15, -1); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/powerpc/pr106069-1.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/powerpc/pr106069-1.c *** gcc-12.4.0/gcc/testsuite/gcc.target/powerpc/pr106069-1.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/powerpc/pr106069-1.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,39 ---- + /* { dg-do run } */ + /* { dg-options "-O2" } */ + /* { dg-require-effective-target vmx_hw } */ + + /* Test vector merge for 8-bit element size, + it will abort if the RTL pattern isn't expected. */ + + #include "altivec.h" + + __attribute__((noipa)) + signed char elem_6 (vector signed char a, vector signed char b) + { + vector signed char c = vec_mergeh (a,b); + return vec_extract (c, 6); + } + + __attribute__((noipa)) + unsigned char elem_15 (vector unsigned char a, vector unsigned char b) + { + vector unsigned char c = vec_mergel (a,b); + return vec_extract (c, 15); + } + + int + main () + { + vector unsigned char v1 + = {3, 33, 22, 12, 34, 14, 5, 25, 30, 11, 0, 21, 17, 27, 38, 8}; + vector unsigned char v2 + = {81, 82, 83, 84, 68, 67, 66, 65, 99, 100, 101, 102, 250, 125, 0, 6}; + signed char x1 = elem_6 ((vector signed char) v1, (vector signed char) v2); + unsigned char x2 = elem_15 (v1, v2); + + if (x1 != 12 || x2 != 6) + __builtin_abort (); + + return 0; + } + diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/powerpc/pr106069-2.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/powerpc/pr106069-2.c *** gcc-12.4.0/gcc/testsuite/gcc.target/powerpc/pr106069-2.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/powerpc/pr106069-2.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,37 ---- + /* { dg-do run } */ + /* { dg-options "-O2" } */ + /* { dg-require-effective-target vmx_hw } */ + + /* Test vector merge for 16-bit element size, + it will abort if the RTL pattern isn't expected. */ + + #include "altivec.h" + + __attribute__((noipa)) + signed short elem_2 (vector signed short a, vector signed short b) + { + vector signed short c = vec_mergeh (a,b); + return vec_extract (c, 2); + } + + __attribute__((noipa)) + unsigned short elem_7 (vector unsigned short a, vector unsigned short b) + { + vector unsigned short c = vec_mergel (a,b); + return vec_extract (c, 7); + } + + int + main () + { + vector unsigned short v1 = {3, 22, 12, 34, 5, 25, 30, 11}; + vector unsigned short v2 = {84, 168, 267, 966, 65, 399, 999, 99}; + signed short x1 = elem_2 ((vector signed short) v1, (vector signed short) v2); + unsigned short x2 = elem_7 (v1, v2); + + if (x1 != 22 || x2 != 99) + __builtin_abort (); + + return 0; + } + diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/powerpc/pr114759-2.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/powerpc/pr114759-2.c *** gcc-12.4.0/gcc/testsuite/gcc.target/powerpc/pr114759-2.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/powerpc/pr114759-2.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,17 ---- + /* { dg-do compile } */ + /* { dg-options "-O2 -mdejagnu-cpu=power8 -mrop-protect" } */ + /* { dg-require-effective-target rop_ok } Only enable on supported ABIs. */ + + /* Verify we generate ROP-protect hash insns when compiling for Power8. */ + + extern void foo (void); + + int + bar (void) + { + foo (); + return 5; + } + + /* { dg-final { scan-assembler-times {\mhashst\M} 1 } } */ + /* { dg-final { scan-assembler-times {\mhashchk\M} 1 } } */ diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/powerpc/pr114759-3.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/powerpc/pr114759-3.c *** gcc-12.4.0/gcc/testsuite/gcc.target/powerpc/pr114759-3.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/powerpc/pr114759-3.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,21 ---- + /* PR target/114759 */ + /* { dg-do compile } */ + /* { dg-options "-O2 -mdejagnu-cpu=power7 -mrop-protect" } */ + + /* Verify we emit an error if we use -mrop-protect with an unsupported cpu + or ABI. */ + + extern void foo (void); + + int + bar (void) + { + foo (); + return 5; + } + + /* The correct line number is in the preamble to the error message, not + in the final line (which is all that dg-error inspects). Hence, we have + to tell dg-error to ignore the line number. */ + /* { dg-error "'-mrop-protect' requires '-mcpu=power8'" "PR114759" { target *-*-* } 0 } */ + /* { dg-error "'-mrop-protect' requires the ELFv2 ABI" "PR114759" { target { ! rop_ok } } 0 } */ diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/powerpc/pr114846.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/powerpc/pr114846.c *** gcc-12.4.0/gcc/testsuite/gcc.target/powerpc/pr114846.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/powerpc/pr114846.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,20 ---- + /* { dg-do run } */ + /* { dg-require-effective-target builtin_eh_return } */ + + /* Ensure it runs successfully. */ + + __attribute__ ((noipa)) + int f (int *a, long offset, void *handler) + { + if (*a == 5) + return 5; + __builtin_eh_return (offset, handler); + } + + int main () + { + int t = 5; + if (f (&t, 0, 0) != 5) + __builtin_abort (); + return 0; + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/powerpc/pr115355.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/powerpc/pr115355.c *** gcc-12.4.0/gcc/testsuite/gcc.target/powerpc/pr115355.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/powerpc/pr115355.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,37 ---- + /* { dg-do run } */ + /* { dg-require-effective-target p9vector_hw } */ + /* Force vectorization with -fno-vect-cost-model to have vector unpack + which exposes the issue in PR115355. */ + /* { dg-options "-O2 -mdejagnu-cpu=power9 -fno-vect-cost-model" } */ + + /* Verify it runs successfully. */ + + __attribute__((noipa)) + void setToIdentityGOOD(unsigned long long *mVec, unsigned int mLen) + { + #pragma GCC novector + for (unsigned int i = 0; i < mLen; i++) + mVec[i] = i; + } + + __attribute__((noipa)) + void setToIdentityBAD(unsigned long long *mVec, unsigned int mLen) + { + for (unsigned int i = 0; i < mLen; i++) + mVec[i] = i; + } + + unsigned long long vec1[100]; + unsigned long long vec2[100]; + + int main() + { + unsigned int l = 29; + setToIdentityGOOD (vec1, 29); + setToIdentityBAD (vec2, 29); + + if (__builtin_memcmp (vec1, vec2, l * sizeof (vec1[0])) != 0) + __builtin_abort (); + + return 0; + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/powerpc/pr115389.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/powerpc/pr115389.c *** gcc-12.4.0/gcc/testsuite/gcc.target/powerpc/pr115389.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/powerpc/pr115389.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,17 ---- + /* PR target/115389 */ + /* { dg-do assemble } */ + /* { dg-options "-O2 -mdejagnu-cpu=power10 -mrop-protect -mno-vsx -mno-altivec -mabi=no-altivec -save-temps" } */ + /* { dg-require-effective-target rop_ok } */ + + /* Verify we do not emit invalid offsets for our ROP insns. */ + + extern void foo (void); + long + bar (void) + { + foo (); + return 0; + } + + /* { dg-final { scan-assembler-times {\mhashst\M} 1 } } */ + /* { dg-final { scan-assembler-times {\mhashchk\M} 1 } } */ diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/powerpc/pr116415.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/powerpc/pr116415.c *** gcc-12.4.0/gcc/testsuite/gcc.target/powerpc/pr116415.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/powerpc/pr116415.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,42 ---- + /* { dg-do run } */ + /* { dg-require-effective-target p8vector_hw } */ + /* { dg-require-effective-target int128 } */ + /* { dg-options "-O2 -mdejagnu-cpu=power8" } */ + + /* PR 116415: Verify our Power8 swap optimization pass doesn't incorrectly swap + PTImode values. They should be handled identically to TImode values. */ + + #include + #include + #include + + typedef union { + struct { + uint64_t a; + uint64_t b; + } t; + __uint128_t data; + } Value; + Value value, next; + + void + bug (Value *val, Value *nxt) + { + for (;;) { + nxt->t.a = val->t.a + 1; + nxt->t.b = val->t.b + 2; + if (__atomic_compare_exchange (&val->data, &val->data, &nxt->data, + 0, __ATOMIC_SEQ_CST, __ATOMIC_ACQUIRE)) + break; + } + } + + int + main (void) + { + bug (&value, &next); + printf ("%lu %lu\n", value.t.a, value.t.b); + if (value.t.a != 1 || value.t.b != 2) + abort (); + return 0; + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/powerpc/pr97367.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/powerpc/pr97367.c *** gcc-12.4.0/gcc/testsuite/gcc.target/powerpc/pr97367.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/powerpc/pr97367.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,13 ---- + /* PR target/97367 */ + /* { dg-options "-mdejagnu-cpu=G5" } */ + + /* Verify we emit a ".machine power4" and ".machine altivec" rather + than a ".machine power7". */ + + int dummy (void) + { + return 0; + } + + /* { dg-final { scan-assembler {\.machine power4\M} } } */ + /* { dg-final { scan-assembler {\.machine altivec\M} } } */ diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/s390/pr115860-1.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/s390/pr115860-1.c *** gcc-12.4.0/gcc/testsuite/gcc.target/s390/pr115860-1.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/s390/pr115860-1.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,26 ---- + /* { dg-do run } */ + /* { dg-require-effective-target s390_vxe } */ + /* { dg-options "-O2 -march=z14 -mzarch" } */ + + __attribute__ ((noipa)) + long long trunctf (long double x) + { + /* Ensure via ++x that x is in a register. */ + ++x; + return x; + } + + __attribute__ ((noipa)) + long long trunctf_from_mem (long double x) + { + return x; + } + + int main (void) + { + if (trunctf (0x7ffffffffffffffeLL) != 0x7fffffffffffffffLL) + __builtin_abort (); + if (trunctf_from_mem (0x7fffffffffffffffLL) != 0x7fffffffffffffffLL) + __builtin_abort (); + return 0; + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/s390/pr118835.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/s390/pr118835.c *** gcc-12.4.0/gcc/testsuite/gcc.target/s390/pr118835.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/s390/pr118835.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,21 ---- + /* { dg-do compile { target int128 } } */ + /* { dg-options "-O2" } */ + + /* During combine we may end up with patterns of the form + + (set (reg:DI 66 [ _6 ]) + (ashift:DI (reg:DI 72 [ x ]) + (subreg:QI (and:TI (reg:TI 67 [ _1 ]) + (const_wide_int 0x0aaaaaaaaaaaaaabf)) + 15))) + + which should be rejected since the shift count does not trivially fit the + scheme of address operands. */ + + long + test (long x, int y) + { + __int128 z = 0xAAAAAAAAAAAAAABF; + z &= y; + return x << z; + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/s390/vector/long-double-asm-abi.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/s390/vector/long-double-asm-abi.c *** gcc-12.4.0/gcc/testsuite/gcc.target/s390/vector/long-double-asm-abi.c Thu Jun 20 08:08:08 2024 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/s390/vector/long-double-asm-abi.c Fri Jul 4 07:24:44 2025 *************** xsqrt (long double x) *** 14,20 **** /* Check that the generated code is very small and straightforward. In particular, there must be no unnecessary copying and no stack frame. */ ! /* { dg-final { scan-assembler {\n\tld\t[^\n]*\n\tld\t[^\n]*\n(#[^\n]*\n)*\tsqxbr\t.*\n(#[^\n]*\n)*\tstd\t[^\n]*\n\tstd\t[^\n]*\n\tbr\t%r14\n} } } */ int main (void) --- 14,20 ---- /* Check that the generated code is very small and straightforward. In particular, there must be no unnecessary copying and no stack frame. */ ! /* { dg-final { scan-assembler {\n\tld\t[^\n]*;ld\t[^\n]*\n(#[^\n]*\n)*\tsqxbr\t.*\n(#[^\n]*\n)*\tstd\t[^\n]*\n\tstd\t[^\n]*\n\tbr\t%r14\n} } } */ int main (void) diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/s390/vector/long-double-to-i64.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/s390/vector/long-double-to-i64.c *** gcc-12.4.0/gcc/testsuite/gcc.target/s390/vector/long-double-to-i64.c Thu Jun 20 08:08:08 2024 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/s390/vector/long-double-to-i64.c Fri Jul 4 07:24:44 2025 *************** long_double_to_i64 (long double x) *** 10,17 **** return x; } - /* { dg-final { scan-assembler-times {\n\tvpdi\t%v\d+,%v\d+,%v\d+,1\n} 1 } } */ - /* { dg-final { scan-assembler-times {\n\tvpdi\t%v\d+,%v\d+,%v\d+,5\n} 1 } } */ /* { dg-final { scan-assembler-times {\n\tcgxbr\t} 1 } } */ int --- 10,15 ---- diff -Nrcpad gcc-12.4.0/gcc/testsuite/gcc.target/s390/zvector/pr114676.c gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/s390/zvector/pr114676.c *** gcc-12.4.0/gcc/testsuite/gcc.target/s390/zvector/pr114676.c Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gcc.target/s390/zvector/pr114676.c Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,19 ---- + /* { dg-do run { target { s390*-*-* } } } */ + /* { dg-options "-O3 -mzarch -march=z14 -mzvector" } */ + + #include + + void __attribute__((noinline)) foo (int *mem) + { + vec_xst ((vector float){ 1.0f, 2.0f, 3.0f, 4.0f }, 0, (float*)mem); + } + + int + main () + { + int m[4] = { 0 }; + foo (m); + if (m[3] == 0) + __builtin_abort (); + return 0; + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gdc.dg/debug/imports/m119817/a.d gcc-12.5.0-RC-20250704/gcc/testsuite/gdc.dg/debug/imports/m119817/a.d *** gcc-12.4.0/gcc/testsuite/gdc.dg/debug/imports/m119817/a.d Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gdc.dg/debug/imports/m119817/a.d Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,2 ---- + module imports.m119817.a; + void f119817()() { } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gdc.dg/debug/imports/m119817/b.d gcc-12.5.0-RC-20250704/gcc/testsuite/gdc.dg/debug/imports/m119817/b.d *** gcc-12.4.0/gcc/testsuite/gdc.dg/debug/imports/m119817/b.d Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gdc.dg/debug/imports/m119817/b.d Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,2 ---- + module imports.m119817.b; + void f119817() { } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gdc.dg/debug/imports/m119817/package.d gcc-12.5.0-RC-20250704/gcc/testsuite/gdc.dg/debug/imports/m119817/package.d *** gcc-12.4.0/gcc/testsuite/gdc.dg/debug/imports/m119817/package.d Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gdc.dg/debug/imports/m119817/package.d Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,4 ---- + module imports.m119817; + public import + imports.m119817.a, + imports.m119817.b; diff -Nrcpad gcc-12.4.0/gcc/testsuite/gdc.dg/debug/pr119817.d gcc-12.5.0-RC-20250704/gcc/testsuite/gdc.dg/debug/pr119817.d *** gcc-12.4.0/gcc/testsuite/gdc.dg/debug/pr119817.d Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gdc.dg/debug/pr119817.d Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,4 ---- + // { dg-do compile } + // { dg-additional-sources "imports/m119817/package.d imports/m119817/a.d imports/m119817/b.d" } + module pr119817; + import imports.m119817 : f119817; diff -Nrcpad gcc-12.4.0/gcc/testsuite/gdc.dg/pr111650.d gcc-12.5.0-RC-20250704/gcc/testsuite/gdc.dg/pr111650.d *** gcc-12.4.0/gcc/testsuite/gdc.dg/pr111650.d Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gdc.dg/pr111650.d Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,21 ---- + // { dg-do compile } + ref V require(K, V)(ref V[K] aa, K key, lazy V value); + + struct Root + { + ulong[3] f; + } + + Root[ulong] roots; + + Root getRoot(int fd, ulong rootID) + { + return roots.require(rootID, + { + Root result; + inoLookup(fd, () => result); + return result; + }()); + } + + void inoLookup(int, scope Root delegate()) { } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gdc.dg/pr116961.d gcc-12.5.0-RC-20250704/gcc/testsuite/gdc.dg/pr116961.d *** gcc-12.4.0/gcc/testsuite/gdc.dg/pr116961.d Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gdc.dg/pr116961.d Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,7 ---- + // { dg-do compile } + struct S116961 + { + float thing = 0.0; + } + + static assert(__traits(isZeroInit, S116961) == true); diff -Nrcpad gcc-12.4.0/gcc/testsuite/gdc.dg/pr119139.d gcc-12.5.0-RC-20250704/gcc/testsuite/gdc.dg/pr119139.d *** gcc-12.4.0/gcc/testsuite/gdc.dg/pr119139.d Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gdc.dg/pr119139.d Fri Jul 4 07:24:44 2025 *************** *** 0 **** --- 1,24 ---- + // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119139 + // { dg-do compile } + // { dg-options "-fdump-tree-gimple" } + string toString() + { + return "1"; + } + + struct B + { + ulong n; + + invariant{} + + string str() + { + if (n == 0) + { + return "0"; + } + return toString(); + } + } + // { dg-final { scan-tree-dump-not "static const struct __result =" "gimple" } } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gdc.test/runnable/test23514.d gcc-12.5.0-RC-20250704/gcc/testsuite/gdc.test/runnable/test23514.d *** gcc-12.4.0/gcc/testsuite/gdc.test/runnable/test23514.d Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gdc.test/runnable/test23514.d Fri Jul 4 07:24:45 2025 *************** *** 0 **** --- 1,13 ---- + // DISABLED: win64 + // https://issues.dlang.org/show_bug.cgi?id=23514 + + // Note: this test is disabled on Win64 because of an issue with the Windows + // MS-COFF backend causing it to fail. + + enum ulong offset = 0xFFFF_FFFF_0000_0000UL; + + void main() + { + ulong voffset = offset; + assert((cast(ulong)&main + voffset) == (cast(ulong)&main + offset)); + } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gfortran.dg/character_workout_1.f90 gcc-12.5.0-RC-20250704/gcc/testsuite/gfortran.dg/character_workout_1.f90 *** gcc-12.4.0/gcc/testsuite/gfortran.dg/character_workout_1.f90 Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gfortran.dg/character_workout_1.f90 Fri Jul 4 07:24:45 2025 *************** *** 1,7 **** ! { dg-do run } ! ! Tests fix for PR100120/100816/100818/100819/100821 ! ! program main_p --- 1,7 ---- ! { dg-do run } ! ! Tests fix for PR100120/100816/100818/100819/100821 ! ! program main_p *************** program main_p *** 27,36 **** character(len=m, kind=k), pointer :: pm(:) character(len=e, kind=k), pointer :: pe(:) character(len=:, kind=k), pointer :: pd(:) ! class(*), pointer :: su class(*), pointer :: pu(:) ! integer :: i, j nullify(s1, sm, se, sd, su) --- 27,36 ---- character(len=m, kind=k), pointer :: pm(:) character(len=e, kind=k), pointer :: pe(:) character(len=:, kind=k), pointer :: pd(:) ! class(*), pointer :: su class(*), pointer :: pu(:) ! integer :: i, j nullify(s1, sm, se, sd, su) *************** program main_p *** 41,47 **** cm(i)(j:j) = char(i*m+j+c-m, kind=k) end do end do ! s1 => c1(n) if(.not.associated(s1)) stop 1 if(.not.associated(s1, c1(n))) stop 2 --- 41,47 ---- cm(i)(j:j) = char(i*m+j+c-m, kind=k) end do end do ! s1 => c1(n) if(.not.associated(s1)) stop 1 if(.not.associated(s1, c1(n))) stop 2 diff -Nrcpad gcc-12.4.0/gcc/testsuite/gfortran.dg/cray_pointers_13.f90 gcc-12.5.0-RC-20250704/gcc/testsuite/gfortran.dg/cray_pointers_13.f90 *** gcc-12.4.0/gcc/testsuite/gfortran.dg/cray_pointers_13.f90 Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gfortran.dg/cray_pointers_13.f90 Fri Jul 4 07:24:45 2025 *************** *** 0 **** --- 1,51 ---- + ! { dg-do run } + ! { dg-additional-options "-fcray-pointer" } + ! + ! PR fortran/106692 - Cray pointer comparison wrongly optimized away + ! + ! Contributed by Marek Polacek + + program test + call test_cray() + call test_cray2() + end + + subroutine test_cray() + pointer(ptrzz1 , zz1) + ptrzz1=0 + if (ptrzz1 .ne. 0) then + print *, "test_cray: ptrzz1=", ptrzz1 + stop 1 + else + call shape_cray(zz1) + end if + end + + subroutine shape_cray(zz1) + pointer(ptrzz , zz) + ptrzz=loc(zz1) + if (ptrzz .ne. 0) then + print *, "shape_cray: ptrzz=", ptrzz + stop 3 + end if + end + + subroutine test_cray2() + pointer(ptrzz1 , zz1) + ptrzz1=0 + if (0 == ptrzz1) then + call shape_cray2(zz1) + else + print *, "test_cray2: ptrzz1=", ptrzz1 + stop 2 + end if + end + + subroutine shape_cray2(zz1) + pointer(ptrzz , zz) + ptrzz=loc(zz1) + if (.not. (0 == ptrzz)) then + print *, "shape_cray2: ptrzz=", ptrzz + stop 4 + end if + end diff -Nrcpad gcc-12.4.0/gcc/testsuite/gfortran.dg/optional_absent_13.f90 gcc-12.5.0-RC-20250704/gcc/testsuite/gfortran.dg/optional_absent_13.f90 *** gcc-12.4.0/gcc/testsuite/gfortran.dg/optional_absent_13.f90 Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gfortran.dg/optional_absent_13.f90 Fri Jul 4 07:24:45 2025 *************** *** 0 **** --- 1,48 ---- + ! { dg-do run } + ! PR fortran/119656 - wrong code with impure elemental subroutine and interface + ! + ! Derived from testcase at: + ! https://fortran-lang.discourse.group/t/ + ! problem-with-impure-elemental-subroutine-in-interface-with-gfortran/9545 + + module m2 + implicit none + interface foo + module procedure foo_mat + module procedure foo_df + module procedure foo_cmat + end interface foo + contains + + subroutine foo_mat(x, nacf, label) + real, intent(in) :: x(:,:) + integer, intent(in) :: nacf + character(len=*), intent(in), optional :: label + end subroutine foo_mat + + impure elemental subroutine foo_df(nacf, outu, xstr) + integer , intent(in) :: nacf + integer , intent(in), optional :: outu + character(len=*), intent(in), optional :: xstr + if (present(xstr)) then + if (len (xstr) /= 2) then + print *,"nacf, len(xstr) =", nacf, len(xstr) + stop nacf + end if + end if + end subroutine foo_df + + subroutine foo_cmat(x, nacf, label) + complex, intent(in) :: x(:,:) + integer, intent(in) :: nacf + character(len=*), intent(in), optional :: label + end subroutine foo_cmat + + end module m2 + + program main + use m2, only: foo, foo_df + implicit none + call foo_df(nacf = 1, xstr="ab") + call foo (nacf = 2, xstr="ab") + end program main diff -Nrcpad gcc-12.4.0/gcc/testsuite/gfortran.dg/pr100273.f90 gcc-12.5.0-RC-20250704/gcc/testsuite/gfortran.dg/pr100273.f90 *** gcc-12.4.0/gcc/testsuite/gfortran.dg/pr100273.f90 Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gfortran.dg/pr100273.f90 Fri Jul 4 07:24:45 2025 *************** *** 0 **** --- 1,26 ---- + ! { dg-do compile } + ! PR fortran/100273 - ICE in gfc_create_module_variable + ! + ! Contributed by G.Steinmetz + + module m + implicit none + contains + character(4) function g(k) + integer :: k + g = f(k) + contains + function f(n) + character(3), parameter :: a(2) = ['1 ', '123'] + integer :: n + character(len_trim(a(n))) :: f + f = 'abc' + end + end + end + program p + use m + implicit none + print *, '>>' // g(1) // '<<' + print *, '>>' // g(2) // '<<' + end diff -Nrcpad gcc-12.4.0/gcc/testsuite/gfortran.dg/pr108889.f90 gcc-12.5.0-RC-20250704/gcc/testsuite/gfortran.dg/pr108889.f90 *** gcc-12.4.0/gcc/testsuite/gfortran.dg/pr108889.f90 Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gfortran.dg/pr108889.f90 Fri Jul 4 07:24:45 2025 *************** *** 0 **** --- 1,43 ---- + ! { dg-do compile } + ! { dg-options "-Wall -fdump-tree-original" } + ! + ! Contributed by Tobias Burnus + ! + program main + implicit none + + type :: struct + real, allocatable :: var(:) + end type struct + + type(struct) :: single + real, allocatable :: ref1(:), ref2(:), ref3(:), ref4(:) + + ref2 = [1,2,3,4,5] ! Warnings here + + single%var = ref2 ! No warnings for components + ref1 = single%var ! Warnings here + ref1 = [1,2,3,4,5] ! Should not add to tree dump count + + allocate (ref3(5)) + ref3 = single%var ! No warnings following allocation + + call set_ref4 + + call test (ref1) + call test (ref2) + call test (ref3) + call test (ref4) + + contains + subroutine test (arg) + real, allocatable :: arg(:) + if (size(arg) /= size(single%var)) stop 1 + if (lbound(arg, 1) /= 1) stop 2 + if (any (arg /= single%var)) stop 3 + end + subroutine set_ref4 + ref4 = single%var ! Warnings in contained scope + end + end + ! { df-final { scan-tree-dump-times "ubound = 0" 3 "original" } } \ No newline at end of file diff -Nrcpad gcc-12.4.0/gcc/testsuite/gfortran.dg/pr109345.f90 gcc-12.5.0-RC-20250704/gcc/testsuite/gfortran.dg/pr109345.f90 *** gcc-12.4.0/gcc/testsuite/gfortran.dg/pr109345.f90 Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gfortran.dg/pr109345.f90 Fri Jul 4 07:24:45 2025 *************** *** 0 **** --- 1,77 ---- + ! { dg-do run } + ! + ! Test the fix for PR109345 in which array references in the SELECT TYPE + ! block below failed because the descriptor span was not set correctly. + ! + ! Contributed by Lauren Chilutti + ! + program test + implicit none + type :: t + character(len=12, kind=4) :: str_array(4) + integer :: i + end type + character(len=12, kind=1), target :: str_array(4) + character(len=12, kind=4), target :: str_array4(4) + type(t) :: str_t (4) + integer :: i + + str_array(:) = "" + str_array(1) = "12345678" + str_array(2) = "@ABCDEFG" + ! Original failing test + call foo (str_array) + + str_array4(:) = "" + str_array4(1) = "12345678" + str_array4(2) = "@ABCDEFG" + str_t = [(t(str_array4, i), i = 1, 4)] + ! Test character(kind=4) + call foo (str_t(2)%str_array) + ! Test component references + ! call foo (str_t%str_array(1), .true.) ! Does not work in 12-/13-branches + ! Test component references and that array offset is correct. + ! call foo (str_t(2:3)%i) ! Does not work in 12-/13-branches + + contains + subroutine foo (var, flag) + class(*), intent(in) :: var(:) + integer(kind=4) :: i + logical, optional :: flag + select type (var) + type is (character(len=*, kind=1)) + if (len (var) /= 12) stop 1 + ! Scalarised array references worked. + if (any (var /= str_array)) stop 2 + do i = 1, size(var) + ! Elemental array references did not work. + if (trim (var(i)) /= trim (str_array(i))) stop 3 + enddo + + type is (character(len=*, kind=4)) + if (len (var) /= 12) stop 4 + ! Scalarised array references worked. + if (any (var /= var(1))) then + if (any (var /= str_array4)) stop 5 + else + if (any (var /= str_array4(1))) stop 6 + end if + do i = 1, size(var) + ! Elemental array references did not work. + if (var(i) /= var(1)) then + if (present (flag)) stop 7 + if (trim (var(i)) /= trim (str_array4(i))) stop 8 + else + if (trim (var(i)) /= trim (str_array4(1))) stop 9 + end if + enddo + + type is (integer(kind=4)) + if (any(var /= [2,3])) stop 10 + do i = 1, size (var) + if (var(i) /= i+1) stop 11 + end do + end select + end + end + diff -Nrcpad gcc-12.4.0/gcc/testsuite/gfortran.dg/pr117763.f90 gcc-12.5.0-RC-20250704/gcc/testsuite/gfortran.dg/pr117763.f90 *** gcc-12.4.0/gcc/testsuite/gfortran.dg/pr117763.f90 Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gfortran.dg/pr117763.f90 Fri Jul 4 07:24:45 2025 *************** *** 0 **** --- 1,279 ---- + ! { dg-do compile } + ! { dg-options "-fdump-tree-original" } + ! + ! Test the fix for PR117763, which was a regression caused by the patch for + ! PR109345. + ! + ! Contributed by Juergen Reuter + ! + module iso_varying_string + implicit none + integer, parameter, private :: GET_BUFFER_LEN = 1 + + type, public :: varying_string + private + character(LEN=1), dimension(:), allocatable :: chars + end type varying_string + + interface assignment(=) + module procedure op_assign_CH_VS + module procedure op_assign_VS_CH + end interface assignment(=) + + interface char + module procedure char_auto + module procedure char_fixed + end interface char + + interface len + module procedure len_ + end interface len + + interface var_str + module procedure var_str_ + end interface var_str + + public :: assignment(=) + public :: char + public :: len + public :: var_str + + private :: op_assign_CH_VS + private :: op_assign_VS_CH + private :: char_auto + private :: char_fixed + private :: len_ + private :: var_str_ + + contains + + elemental function len_ (string) result (length) + type(varying_string), intent(in) :: string + integer :: length + if(ALLOCATED(string%chars)) then + length = SIZE(string%chars) + else + length = 0 + endif + end function len_ + + elemental subroutine op_assign_CH_VS (var, exp) + character(LEN=*), intent(out) :: var + type(varying_string), intent(in) :: exp + var = char(exp) + end subroutine op_assign_CH_VS + + elemental subroutine op_assign_VS_CH (var, exp) + type(varying_string), intent(out) :: var + character(LEN=*), intent(in) :: exp + var = var_str(exp) + end subroutine op_assign_VS_CH + + pure function char_auto (string) result (char_string) + type(varying_string), intent(in) :: string + character(LEN=len(string)) :: char_string + integer :: i_char + forall(i_char = 1:len(string)) + char_string(i_char:i_char) = string%chars(i_char) + end forall + end function char_auto + + pure function char_fixed (string, length) result (char_string) + type(varying_string), intent(in) :: string + integer, intent(in) :: length + character(LEN=length) :: char_string + char_string = char(string) + end function char_fixed + + elemental function var_str_ (char) result (string) + character(LEN=*), intent(in) :: char + type(varying_string) :: string + integer :: length + integer :: i_char + length = LEN(char) + ALLOCATE(string%chars(length)) + forall(i_char = 1:length) + string%chars(i_char) = char(i_char:i_char) + end forall + end function var_str_ + + end module iso_varying_string + + module model_data + use, intrinsic :: iso_c_binding !NODEP! + use iso_varying_string, string_t => varying_string + + implicit none + private + + public :: field_data_t + public :: model_data_t + + type :: field_data_t + private + type(string_t) :: longname + integer :: pdg = 0 + logical :: has_anti = .false. + type(string_t), dimension(:), allocatable :: name, anti + type(string_t) :: tex_name + integer :: multiplicity = 1 + contains + procedure :: init => field_data_init + procedure :: set => field_data_set + procedure :: get_longname => field_data_get_longname + procedure :: get_name_array => field_data_get_name_array + end type field_data_t + + type :: model_data_t + private + type(field_data_t), dimension(:), allocatable :: field + contains + generic :: init => model_data_init + procedure, private :: model_data_init + procedure :: get_field_array_ptr => model_data_get_field_array_ptr + procedure :: get_field_ptr_by_index => model_data_get_field_ptr_index + procedure :: init_sm_test => model_data_init_sm_test + end type model_data_t + + + contains + + subroutine field_data_init (prt, longname, pdg) + class(field_data_t), intent(out) :: prt + type(string_t), intent(in) :: longname + integer, intent(in) :: pdg + prt%longname = longname + prt%pdg = pdg + prt%tex_name = "" + end subroutine field_data_init + + subroutine field_data_set (prt, & + name, anti, tex_name) + class(field_data_t), intent(inout) :: prt + type(string_t), dimension(:), intent(in), optional :: name, anti + type(string_t), intent(in), optional :: tex_name + if (present (name)) then + if (allocated (prt%name)) deallocate (prt%name) + allocate (prt%name (size (name)), source = name) + end if + if (present (anti)) then + if (allocated (prt%anti)) deallocate (prt%anti) + allocate (prt%anti (size (anti)), source = anti) + prt%has_anti = .true. + end if + if (present (tex_name)) prt%tex_name = tex_name + end subroutine field_data_set + + pure function field_data_get_longname (prt) result (name) + type(string_t) :: name + class(field_data_t), intent(in) :: prt + name = prt%longname + end function field_data_get_longname + + subroutine field_data_get_name_array (prt, is_antiparticle, name) + class(field_data_t), intent(in) :: prt + logical, intent(in) :: is_antiparticle + type(string_t), dimension(:), allocatable, intent(inout) :: name + if (allocated (name)) deallocate (name) + if (is_antiparticle) then + if (prt%has_anti) then + allocate (name (size (prt%anti))) + name = prt%anti + else + allocate (name (0)) + end if + else + allocate (name (size (prt%name))) + name = prt%name + end if + end subroutine field_data_get_name_array + + subroutine model_data_init (model, n_field) + class(model_data_t), intent(out) :: model + integer, intent(in) :: n_field + allocate (model%field (n_field)) + end subroutine model_data_init + + function model_data_get_field_array_ptr (model) result (ptr) + class(model_data_t), intent(in), target :: model + type(field_data_t), dimension(:), pointer :: ptr + ptr => model%field + end function model_data_get_field_array_ptr + + function model_data_get_field_ptr_index (model, i) result (ptr) + class(model_data_t), intent(in), target :: model + integer, intent(in) :: i + type(field_data_t), pointer :: ptr + ptr => model%field(i) + end function model_data_get_field_ptr_index + + subroutine model_data_init_sm_test (model) + class(model_data_t), intent(out) :: model + type(field_data_t), pointer :: field + integer :: i + call model%init (2) + i = 0 + i = i + 1 + field => model%get_field_ptr_by_index (i) + call field%init (var_str ("W_BOSON"), 24) + call field%set (name = [var_str ("W+")], anti = [var_str ("W-")]) + i = i + 1 + field => model%get_field_ptr_by_index (i) + call field%init (var_str ("HIGGS"), 25) + call field%set (name = [var_str ("H")]) + end subroutine model_data_init_sm_test + + end module model_data + + + module models + use, intrinsic :: iso_c_binding !NODEP! + use iso_varying_string, string_t => varying_string + use model_data + ! use parser + ! use variables + implicit none + private + public :: model_t + + type, extends (model_data_t) :: model_t + private + contains + procedure :: append_field_vars => model_append_field_vars + end type model_t + + contains + + subroutine model_append_field_vars (model) + class(model_t), intent(inout) :: model + type(field_data_t), dimension(:), pointer :: field_array + type(field_data_t), pointer :: field + type(string_t) :: name + type(string_t), dimension(:), allocatable :: name_array + integer :: i, j + field_array => model%get_field_array_ptr () + do i = 1, size (field_array) + name = field_array(i)%get_longname () + call field_array(i)%get_name_array (.false., name_array) + end do + end subroutine model_append_field_vars + + end module models + + + program main_ut + use iso_varying_string, string_t => varying_string + use model_data + use models + implicit none + + class(model_data_t), pointer :: model + model => null () + allocate (model_t :: model) + select type (model) + type is (model_t) + call model%init_sm_test () + call model%append_field_vars () + end select + end program main_ut + ! { dg-final { scan-tree-dump-times "__result->span = \[12\].." 1 "original" } } diff -Nrcpad gcc-12.4.0/gcc/testsuite/gfortran.dg/pr120191_1.f90 gcc-12.5.0-RC-20250704/gcc/testsuite/gfortran.dg/pr120191_1.f90 *** gcc-12.4.0/gcc/testsuite/gfortran.dg/pr120191_1.f90 Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gfortran.dg/pr120191_1.f90 Fri Jul 4 07:24:45 2025 *************** *** 0 **** --- 1,614 ---- + ! PR fortran/120191 + ! { dg-do run } + + integer(kind=1) :: a1(10, 10, 10), b1(10) + integer(kind=2) :: a2(10, 10, 10), b2(10) + integer(kind=4) :: a4(10, 10, 10), b4(10) + integer(kind=8) :: a8(10, 10, 10), b8(10) + real(kind=4) :: r4(10, 10, 10), s4(10) + real(kind=8) :: r8(10, 10, 10), s8(10) + logical :: l1(10, 10, 10), l2(10), l3 + l1 = .true. + l2 = .true. + l3 = .true. + a1 = 0 + if (any (maxloc (a1) .ne. 1)) stop 1 + if (any (maxloc (a1, back=.false.) .ne. 1)) stop 2 + if (any (maxloc (a1, back=.true.) .ne. 10)) stop 3 + if (any (maxloc (a1, kind=2) .ne. 1)) stop 4 + if (any (maxloc (a1, kind=4, back=.false.) .ne. 1)) stop 5 + if (any (maxloc (a1, kind=8, back=.true.) .ne. 10)) stop 6 + if (any (maxloc (a1, 1) .ne. 1)) stop 7 + if (any (maxloc (a1, 1, back=.false.) .ne. 1)) stop 8 + if (any (maxloc (a1, 1, back=.true.) .ne. 10)) stop 9 + if (any (maxloc (a1, 1, kind=1) .ne. 1)) stop 10 + if (any (maxloc (a1, 1, kind=2, back=.false.) .ne. 1)) stop 11 + if (any (maxloc (a1, 1, kind=4, back=.true.) .ne. 10)) stop 12 + if (any (maxloc (a1, 1, l1) .ne. 1)) stop 13 + if (any (maxloc (a1, 1, l1, back=.false.) .ne. 1)) stop 14 + if (any (maxloc (a1, 1, l1, back=.true.) .ne. 10)) stop 15 + if (any (maxloc (a1, 1, l1, kind=8) .ne. 1)) stop 16 + if (any (maxloc (a1, 1, l1, 4, .false.) .ne. 1)) stop 17 + if (any (maxloc (a1, 1, l1, 2, .true.) .ne. 10)) stop 18 + if (any (maxloc (a1, 1, l3) .ne. 1)) stop 19 + if (any (maxloc (a1, 1, l3, back=.false.) .ne. 1)) stop 20 + if (any (maxloc (a1, 1, l3, back=.true.) .ne. 10)) stop 21 + if (any (maxloc (a1, 1, l3, kind=8) .ne. 1)) stop 22 + if (any (maxloc (a1, 1, l3, 4, .false.) .ne. 1)) stop 23 + if (any (maxloc (a1, 1, l3, 2, .true.) .ne. 10)) stop 24 + b1 = 0 + if (any (maxloc (b1) .ne. 1)) stop 1 + if (any (maxloc (b1, back=.false.) .ne. 1)) stop 2 + if (any (maxloc (b1, back=.true.) .ne. 10)) stop 3 + if (any (maxloc (b1, kind=2) .ne. 1)) stop 4 + if (any (maxloc (b1, kind=4, back=.false.) .ne. 1)) stop 5 + if (any (maxloc (b1, kind=8, back=.true.) .ne. 10)) stop 6 + if (maxloc (b1, 1) .ne. 1) stop 7 + if (maxloc (b1, 1, back=.false.) .ne. 1) stop 8 + if (maxloc (b1, 1, back=.true.) .ne. 10) stop 9 + if (maxloc (b1, 1, kind=1) .ne. 1) stop 10 + if (maxloc (b1, 1, kind=2, back=.false.) .ne. 1) stop 11 + if (maxloc (b1, 1, kind=4, back=.true.) .ne. 10) stop 12 + if (maxloc (b1, 1, l2) .ne. 1) stop 13 + if (maxloc (b1, 1, l2, back=.false.) .ne. 1) stop 14 + if (maxloc (b1, 1, l2, back=.true.) .ne. 10) stop 15 + if (maxloc (b1, 1, l2, kind=8) .ne. 1) stop 16 + if (maxloc (b1, 1, l2, 4, .false.) .ne. 1) stop 17 + if (maxloc (b1, 1, l2, 2, .true.) .ne. 10) stop 18 + if (maxloc (b1, 1, l3) .ne. 1) stop 19 + if (maxloc (b1, 1, l3, back=.false.) .ne. 1) stop 20 + if (maxloc (b1, 1, l3, back=.true.) .ne. 10) stop 21 + if (maxloc (b1, 1, l3, kind=8) .ne. 1) stop 22 + if (maxloc (b1, 1, l3, 4, .false.) .ne. 1) stop 23 + if (maxloc (b1, 1, l3, 2, .true.) .ne. 10) stop 24 + a2 = 0 + if (any (maxloc (a2) .ne. 1)) stop 1 + if (any (maxloc (a2, back=.false.) .ne. 1)) stop 2 + if (any (maxloc (a2, back=.true.) .ne. 10)) stop 3 + if (any (maxloc (a2, kind=2) .ne. 1)) stop 4 + if (any (maxloc (a2, kind=4, back=.false.) .ne. 1)) stop 5 + if (any (maxloc (a2, kind=8, back=.true.) .ne. 10)) stop 6 + if (any (maxloc (a2, 1) .ne. 1)) stop 7 + if (any (maxloc (a2, 1, back=.false.) .ne. 1)) stop 8 + if (any (maxloc (a2, 1, back=.true.) .ne. 10)) stop 9 + if (any (maxloc (a2, 1, kind=1) .ne. 1)) stop 10 + if (any (maxloc (a2, 1, kind=2, back=.false.) .ne. 1)) stop 11 + if (any (maxloc (a2, 1, kind=4, back=.true.) .ne. 10)) stop 12 + if (any (maxloc (a2, 1, l1) .ne. 1)) stop 13 + if (any (maxloc (a2, 1, l1, back=.false.) .ne. 1)) stop 14 + if (any (maxloc (a2, 1, l1, back=.true.) .ne. 10)) stop 15 + if (any (maxloc (a2, 1, l1, kind=8) .ne. 1)) stop 16 + if (any (maxloc (a2, 1, l1, 4, .false.) .ne. 1)) stop 17 + if (any (maxloc (a2, 1, l1, 2, .true.) .ne. 10)) stop 18 + if (any (maxloc (a2, 1, l3) .ne. 1)) stop 19 + if (any (maxloc (a2, 1, l3, back=.false.) .ne. 1)) stop 20 + if (any (maxloc (a2, 1, l3, back=.true.) .ne. 10)) stop 21 + if (any (maxloc (a2, 1, l3, kind=8) .ne. 1)) stop 22 + if (any (maxloc (a2, 1, l3, 4, .false.) .ne. 1)) stop 23 + if (any (maxloc (a2, 1, l3, 2, .true.) .ne. 10)) stop 24 + b2 = 0 + if (any (maxloc (b2) .ne. 1)) stop 1 + if (any (maxloc (b2, back=.false.) .ne. 1)) stop 2 + if (any (maxloc (b2, back=.true.) .ne. 10)) stop 3 + if (any (maxloc (b2, kind=2) .ne. 1)) stop 4 + if (any (maxloc (b2, kind=4, back=.false.) .ne. 1)) stop 5 + if (any (maxloc (b2, kind=8, back=.true.) .ne. 10)) stop 6 + if (maxloc (b2, 1) .ne. 1) stop 7 + if (maxloc (b2, 1, back=.false.) .ne. 1) stop 8 + if (maxloc (b2, 1, back=.true.) .ne. 10) stop 9 + if (maxloc (b2, 1, kind=1) .ne. 1) stop 10 + if (maxloc (b2, 1, kind=2, back=.false.) .ne. 1) stop 11 + if (maxloc (b2, 1, kind=4, back=.true.) .ne. 10) stop 12 + if (maxloc (b2, 1, l2) .ne. 1) stop 13 + if (maxloc (b2, 1, l2, back=.false.) .ne. 1) stop 14 + if (maxloc (b2, 1, l2, back=.true.) .ne. 10) stop 15 + if (maxloc (b2, 1, l2, kind=8) .ne. 1) stop 16 + if (maxloc (b2, 1, l2, 4, .false.) .ne. 1) stop 17 + if (maxloc (b2, 1, l2, 2, .true.) .ne. 10) stop 18 + if (maxloc (b2, 1, l3) .ne. 1) stop 19 + if (maxloc (b2, 1, l3, back=.false.) .ne. 1) stop 20 + if (maxloc (b2, 1, l3, back=.true.) .ne. 10) stop 21 + if (maxloc (b2, 1, l3, kind=8) .ne. 1) stop 22 + if (maxloc (b2, 1, l3, 4, .false.) .ne. 1) stop 23 + if (maxloc (b2, 1, l3, 2, .true.) .ne. 10) stop 24 + a4 = 0 + if (any (maxloc (a4) .ne. 1)) stop 1 + if (any (maxloc (a4, back=.false.) .ne. 1)) stop 2 + if (any (maxloc (a4, back=.true.) .ne. 10)) stop 3 + if (any (maxloc (a4, kind=2) .ne. 1)) stop 4 + if (any (maxloc (a4, kind=4, back=.false.) .ne. 1)) stop 5 + if (any (maxloc (a4, kind=8, back=.true.) .ne. 10)) stop 6 + if (any (maxloc (a4, 1) .ne. 1)) stop 7 + if (any (maxloc (a4, 1, back=.false.) .ne. 1)) stop 8 + if (any (maxloc (a4, 1, back=.true.) .ne. 10)) stop 9 + if (any (maxloc (a4, 1, kind=1) .ne. 1)) stop 10 + if (any (maxloc (a4, 1, kind=2, back=.false.) .ne. 1)) stop 11 + if (any (maxloc (a4, 1, kind=4, back=.true.) .ne. 10)) stop 12 + if (any (maxloc (a4, 1, l1) .ne. 1)) stop 13 + if (any (maxloc (a4, 1, l1, back=.false.) .ne. 1)) stop 14 + if (any (maxloc (a4, 1, l1, back=.true.) .ne. 10)) stop 15 + if (any (maxloc (a4, 1, l1, kind=8) .ne. 1)) stop 16 + if (any (maxloc (a4, 1, l1, 4, .false.) .ne. 1)) stop 17 + if (any (maxloc (a4, 1, l1, 2, .true.) .ne. 10)) stop 18 + if (any (maxloc (a4, 1, l3) .ne. 1)) stop 19 + if (any (maxloc (a4, 1, l3, back=.false.) .ne. 1)) stop 20 + if (any (maxloc (a4, 1, l3, back=.true.) .ne. 10)) stop 21 + if (any (maxloc (a4, 1, l3, kind=8) .ne. 1)) stop 22 + if (any (maxloc (a4, 1, l3, 4, .false.) .ne. 1)) stop 23 + if (any (maxloc (a4, 1, l3, 2, .true.) .ne. 10)) stop 24 + b4 = 0 + if (any (maxloc (b4) .ne. 1)) stop 1 + if (any (maxloc (b4, back=.false.) .ne. 1)) stop 2 + if (any (maxloc (b4, back=.true.) .ne. 10)) stop 3 + if (any (maxloc (b4, kind=2) .ne. 1)) stop 4 + if (any (maxloc (b4, kind=4, back=.false.) .ne. 1)) stop 5 + if (any (maxloc (b4, kind=8, back=.true.) .ne. 10)) stop 6 + if (maxloc (b4, 1) .ne. 1) stop 7 + if (maxloc (b4, 1, back=.false.) .ne. 1) stop 8 + if (maxloc (b4, 1, back=.true.) .ne. 10) stop 9 + if (maxloc (b4, 1, kind=1) .ne. 1) stop 10 + if (maxloc (b4, 1, kind=2, back=.false.) .ne. 1) stop 11 + if (maxloc (b4, 1, kind=4, back=.true.) .ne. 10) stop 12 + if (maxloc (b4, 1, l2) .ne. 1) stop 13 + if (maxloc (b4, 1, l2, back=.false.) .ne. 1) stop 14 + if (maxloc (b4, 1, l2, back=.true.) .ne. 10) stop 15 + if (maxloc (b4, 1, l2, kind=8) .ne. 1) stop 16 + if (maxloc (b4, 1, l2, 4, .false.) .ne. 1) stop 17 + if (maxloc (b4, 1, l2, 2, .true.) .ne. 10) stop 18 + if (maxloc (b4, 1, l3) .ne. 1) stop 19 + if (maxloc (b4, 1, l3, back=.false.) .ne. 1) stop 20 + if (maxloc (b4, 1, l3, back=.true.) .ne. 10) stop 21 + if (maxloc (b4, 1, l3, kind=8) .ne. 1) stop 22 + if (maxloc (b4, 1, l3, 4, .false.) .ne. 1) stop 23 + if (maxloc (b4, 1, l3, 2, .true.) .ne. 10) stop 24 + a8 = 0 + if (any (maxloc (a8) .ne. 1)) stop 1 + if (any (maxloc (a8, back=.false.) .ne. 1)) stop 2 + if (any (maxloc (a8, back=.true.) .ne. 10)) stop 3 + if (any (maxloc (a8, kind=2) .ne. 1)) stop 4 + if (any (maxloc (a8, kind=4, back=.false.) .ne. 1)) stop 5 + if (any (maxloc (a8, kind=8, back=.true.) .ne. 10)) stop 6 + if (any (maxloc (a8, 1) .ne. 1)) stop 7 + if (any (maxloc (a8, 1, back=.false.) .ne. 1)) stop 8 + if (any (maxloc (a8, 1, back=.true.) .ne. 10)) stop 9 + if (any (maxloc (a8, 1, kind=1) .ne. 1)) stop 10 + if (any (maxloc (a8, 1, kind=2, back=.false.) .ne. 1)) stop 11 + if (any (maxloc (a8, 1, kind=4, back=.true.) .ne. 10)) stop 12 + if (any (maxloc (a8, 1, l1) .ne. 1)) stop 13 + if (any (maxloc (a8, 1, l1, back=.false.) .ne. 1)) stop 14 + if (any (maxloc (a8, 1, l1, back=.true.) .ne. 10)) stop 15 + if (any (maxloc (a8, 1, l1, kind=8) .ne. 1)) stop 16 + if (any (maxloc (a8, 1, l1, 4, .false.) .ne. 1)) stop 17 + if (any (maxloc (a8, 1, l1, 2, .true.) .ne. 10)) stop 18 + if (any (maxloc (a8, 1, l3) .ne. 1)) stop 19 + if (any (maxloc (a8, 1, l3, back=.false.) .ne. 1)) stop 20 + if (any (maxloc (a8, 1, l3, back=.true.) .ne. 10)) stop 21 + if (any (maxloc (a8, 1, l3, kind=8) .ne. 1)) stop 22 + if (any (maxloc (a8, 1, l3, 4, .false.) .ne. 1)) stop 23 + if (any (maxloc (a8, 1, l3, 2, .true.) .ne. 10)) stop 24 + b8 = 0 + if (any (maxloc (b8) .ne. 1)) stop 1 + if (any (maxloc (b8, back=.false.) .ne. 1)) stop 2 + if (any (maxloc (b8, back=.true.) .ne. 10)) stop 3 + if (any (maxloc (b8, kind=2) .ne. 1)) stop 4 + if (any (maxloc (b8, kind=4, back=.false.) .ne. 1)) stop 5 + if (any (maxloc (b8, kind=8, back=.true.) .ne. 10)) stop 6 + if (maxloc (b8, 1) .ne. 1) stop 7 + if (maxloc (b8, 1, back=.false.) .ne. 1) stop 8 + if (maxloc (b8, 1, back=.true.) .ne. 10) stop 9 + if (maxloc (b8, 1, kind=1) .ne. 1) stop 10 + if (maxloc (b8, 1, kind=2, back=.false.) .ne. 1) stop 11 + if (maxloc (b8, 1, kind=4, back=.true.) .ne. 10) stop 12 + if (maxloc (b8, 1, l2) .ne. 1) stop 13 + if (maxloc (b8, 1, l2, back=.false.) .ne. 1) stop 14 + if (maxloc (b8, 1, l2, back=.true.) .ne. 10) stop 15 + if (maxloc (b8, 1, l2, kind=8) .ne. 1) stop 16 + if (maxloc (b8, 1, l2, 4, .false.) .ne. 1) stop 17 + if (maxloc (b8, 1, l2, 2, .true.) .ne. 10) stop 18 + if (maxloc (b8, 1, l3) .ne. 1) stop 19 + if (maxloc (b8, 1, l3, back=.false.) .ne. 1) stop 20 + if (maxloc (b8, 1, l3, back=.true.) .ne. 10) stop 21 + if (maxloc (b8, 1, l3, kind=8) .ne. 1) stop 22 + if (maxloc (b8, 1, l3, 4, .false.) .ne. 1) stop 23 + if (maxloc (b8, 1, l3, 2, .true.) .ne. 10) stop 24 + r4 = 0.0 + if (any (maxloc (r4) .ne. 1)) stop 1 + if (any (maxloc (r4, back=.false.) .ne. 1)) stop 2 + if (any (maxloc (r4, back=.true.) .ne. 10)) stop 3 + if (any (maxloc (r4, kind=2) .ne. 1)) stop 4 + if (any (maxloc (r4, kind=4, back=.false.) .ne. 1)) stop 5 + if (any (maxloc (r4, kind=8, back=.true.) .ne. 10)) stop 6 + if (any (maxloc (r4, 1) .ne. 1)) stop 7 + if (any (maxloc (r4, 1, back=.false.) .ne. 1)) stop 8 + if (any (maxloc (r4, 1, back=.true.) .ne. 10)) stop 9 + if (any (maxloc (r4, 1, kind=1) .ne. 1)) stop 10 + if (any (maxloc (r4, 1, kind=2, back=.false.) .ne. 1)) stop 11 + if (any (maxloc (r4, 1, kind=4, back=.true.) .ne. 10)) stop 12 + if (any (maxloc (r4, 1, l1) .ne. 1)) stop 13 + if (any (maxloc (r4, 1, l1, back=.false.) .ne. 1)) stop 14 + if (any (maxloc (r4, 1, l1, back=.true.) .ne. 10)) stop 15 + if (any (maxloc (r4, 1, l1, kind=8) .ne. 1)) stop 16 + if (any (maxloc (r4, 1, l1, 4, .false.) .ne. 1)) stop 17 + if (any (maxloc (r4, 1, l1, 2, .true.) .ne. 10)) stop 18 + if (any (maxloc (r4, 1, l3) .ne. 1)) stop 19 + if (any (maxloc (r4, 1, l3, back=.false.) .ne. 1)) stop 20 + if (any (maxloc (r4, 1, l3, back=.true.) .ne. 10)) stop 21 + if (any (maxloc (r4, 1, l3, kind=8) .ne. 1)) stop 22 + if (any (maxloc (r4, 1, l3, 4, .false.) .ne. 1)) stop 23 + if (any (maxloc (r4, 1, l3, 2, .true.) .ne. 10)) stop 24 + s4 = 0.0 + if (any (maxloc (s4) .ne. 1)) stop 1 + if (any (maxloc (s4, back=.false.) .ne. 1)) stop 2 + if (any (maxloc (s4, back=.true.) .ne. 10)) stop 3 + if (any (maxloc (s4, kind=2) .ne. 1)) stop 4 + if (any (maxloc (s4, kind=4, back=.false.) .ne. 1)) stop 5 + if (any (maxloc (s4, kind=8, back=.true.) .ne. 10)) stop 6 + if (maxloc (s4, 1) .ne. 1) stop 7 + if (maxloc (s4, 1, back=.false.) .ne. 1) stop 8 + if (maxloc (s4, 1, back=.true.) .ne. 10) stop 9 + if (maxloc (s4, 1, kind=1) .ne. 1) stop 10 + if (maxloc (s4, 1, kind=2, back=.false.) .ne. 1) stop 11 + if (maxloc (s4, 1, kind=4, back=.true.) .ne. 10) stop 12 + if (maxloc (s4, 1, l2) .ne. 1) stop 13 + if (maxloc (s4, 1, l2, back=.false.) .ne. 1) stop 14 + if (maxloc (s4, 1, l2, back=.true.) .ne. 10) stop 15 + if (maxloc (s4, 1, l2, kind=8) .ne. 1) stop 16 + if (maxloc (s4, 1, l2, 4, .false.) .ne. 1) stop 17 + if (maxloc (s4, 1, l2, 2, .true.) .ne. 10) stop 18 + if (maxloc (s4, 1, l3) .ne. 1) stop 19 + if (maxloc (s4, 1, l3, back=.false.) .ne. 1) stop 20 + if (maxloc (s4, 1, l3, back=.true.) .ne. 10) stop 21 + if (maxloc (s4, 1, l3, kind=8) .ne. 1) stop 22 + if (maxloc (s4, 1, l3, 4, .false.) .ne. 1) stop 23 + if (maxloc (s4, 1, l3, 2, .true.) .ne. 10) stop 24 + r8 = 0.0 + if (any (maxloc (r8) .ne. 1)) stop 1 + if (any (maxloc (r8, back=.false.) .ne. 1)) stop 2 + if (any (maxloc (r8, back=.true.) .ne. 10)) stop 3 + if (any (maxloc (r8, kind=2) .ne. 1)) stop 4 + if (any (maxloc (r8, kind=4, back=.false.) .ne. 1)) stop 5 + if (any (maxloc (r8, kind=8, back=.true.) .ne. 10)) stop 6 + if (any (maxloc (r8, 1) .ne. 1)) stop 7 + if (any (maxloc (r8, 1, back=.false.) .ne. 1)) stop 8 + if (any (maxloc (r8, 1, back=.true.) .ne. 10)) stop 9 + if (any (maxloc (r8, 1, kind=1) .ne. 1)) stop 10 + if (any (maxloc (r8, 1, kind=2, back=.false.) .ne. 1)) stop 11 + if (any (maxloc (r8, 1, kind=4, back=.true.) .ne. 10)) stop 12 + if (any (maxloc (r8, 1, l1) .ne. 1)) stop 13 + if (any (maxloc (r8, 1, l1, back=.false.) .ne. 1)) stop 14 + if (any (maxloc (r8, 1, l1, back=.true.) .ne. 10)) stop 15 + if (any (maxloc (r8, 1, l1, kind=8) .ne. 1)) stop 16 + if (any (maxloc (r8, 1, l1, 4, .false.) .ne. 1)) stop 17 + if (any (maxloc (r8, 1, l1, 2, .true.) .ne. 10)) stop 18 + if (any (maxloc (r8, 1, l3) .ne. 1)) stop 19 + if (any (maxloc (r8, 1, l3, back=.false.) .ne. 1)) stop 20 + if (any (maxloc (r8, 1, l3, back=.true.) .ne. 10)) stop 21 + if (any (maxloc (r8, 1, l3, kind=8) .ne. 1)) stop 22 + if (any (maxloc (r8, 1, l3, 4, .false.) .ne. 1)) stop 23 + if (any (maxloc (r8, 1, l3, 2, .true.) .ne. 10)) stop 24 + s8 = 0.0 + if (any (maxloc (s8) .ne. 1)) stop 1 + if (any (maxloc (s8, back=.false.) .ne. 1)) stop 2 + if (any (maxloc (s8, back=.true.) .ne. 10)) stop 3 + if (any (maxloc (s8, kind=2) .ne. 1)) stop 4 + if (any (maxloc (s8, kind=4, back=.false.) .ne. 1)) stop 5 + if (any (maxloc (s8, kind=8, back=.true.) .ne. 10)) stop 6 + if (maxloc (s8, 1) .ne. 1) stop 7 + if (maxloc (s8, 1, back=.false.) .ne. 1) stop 8 + if (maxloc (s8, 1, back=.true.) .ne. 10) stop 9 + if (maxloc (s8, 1, kind=1) .ne. 1) stop 10 + if (maxloc (s8, 1, kind=2, back=.false.) .ne. 1) stop 11 + if (maxloc (s8, 1, kind=4, back=.true.) .ne. 10) stop 12 + if (maxloc (s8, 1, l2) .ne. 1) stop 13 + if (maxloc (s8, 1, l2, back=.false.) .ne. 1) stop 14 + if (maxloc (s8, 1, l2, back=.true.) .ne. 10) stop 15 + if (maxloc (s8, 1, l2, kind=8) .ne. 1) stop 16 + if (maxloc (s8, 1, l2, 4, .false.) .ne. 1) stop 17 + if (maxloc (s8, 1, l2, 2, .true.) .ne. 10) stop 18 + if (maxloc (s8, 1, l3) .ne. 1) stop 19 + if (maxloc (s8, 1, l3, back=.false.) .ne. 1) stop 20 + if (maxloc (s8, 1, l3, back=.true.) .ne. 10) stop 21 + if (maxloc (s8, 1, l3, kind=8) .ne. 1) stop 22 + if (maxloc (s8, 1, l3, 4, .false.) .ne. 1) stop 23 + if (maxloc (s8, 1, l3, 2, .true.) .ne. 10) stop 24 + a1 = 0 + if (any (minloc (a1) .ne. 1)) stop 1 + if (any (minloc (a1, back=.false.) .ne. 1)) stop 2 + if (any (minloc (a1, back=.true.) .ne. 10)) stop 3 + if (any (minloc (a1, kind=2) .ne. 1)) stop 4 + if (any (minloc (a1, kind=4, back=.false.) .ne. 1)) stop 5 + if (any (minloc (a1, kind=8, back=.true.) .ne. 10)) stop 6 + if (any (minloc (a1, 1) .ne. 1)) stop 7 + if (any (minloc (a1, 1, back=.false.) .ne. 1)) stop 8 + if (any (minloc (a1, 1, back=.true.) .ne. 10)) stop 9 + if (any (minloc (a1, 1, kind=1) .ne. 1)) stop 10 + if (any (minloc (a1, 1, kind=2, back=.false.) .ne. 1)) stop 11 + if (any (minloc (a1, 1, kind=4, back=.true.) .ne. 10)) stop 12 + if (any (minloc (a1, 1, l1) .ne. 1)) stop 13 + if (any (minloc (a1, 1, l1, back=.false.) .ne. 1)) stop 14 + if (any (minloc (a1, 1, l1, back=.true.) .ne. 10)) stop 15 + if (any (minloc (a1, 1, l1, kind=8) .ne. 1)) stop 16 + if (any (minloc (a1, 1, l1, 4, .false.) .ne. 1)) stop 17 + if (any (minloc (a1, 1, l1, 2, .true.) .ne. 10)) stop 18 + if (any (minloc (a1, 1, l3) .ne. 1)) stop 19 + if (any (minloc (a1, 1, l3, back=.false.) .ne. 1)) stop 20 + if (any (minloc (a1, 1, l3, back=.true.) .ne. 10)) stop 21 + if (any (minloc (a1, 1, l3, kind=8) .ne. 1)) stop 22 + if (any (minloc (a1, 1, l3, 4, .false.) .ne. 1)) stop 23 + if (any (minloc (a1, 1, l3, 2, .true.) .ne. 10)) stop 24 + b1 = 0 + if (any (minloc (b1) .ne. 1)) stop 1 + if (any (minloc (b1, back=.false.) .ne. 1)) stop 2 + if (any (minloc (b1, back=.true.) .ne. 10)) stop 3 + if (any (minloc (b1, kind=2) .ne. 1)) stop 4 + if (any (minloc (b1, kind=4, back=.false.) .ne. 1)) stop 5 + if (any (minloc (b1, kind=8, back=.true.) .ne. 10)) stop 6 + if (minloc (b1, 1) .ne. 1) stop 7 + if (minloc (b1, 1, back=.false.) .ne. 1) stop 8 + if (minloc (b1, 1, back=.true.) .ne. 10) stop 9 + if (minloc (b1, 1, kind=1) .ne. 1) stop 10 + if (minloc (b1, 1, kind=2, back=.false.) .ne. 1) stop 11 + if (minloc (b1, 1, kind=4, back=.true.) .ne. 10) stop 12 + if (minloc (b1, 1, l2) .ne. 1) stop 13 + if (minloc (b1, 1, l2, back=.false.) .ne. 1) stop 14 + if (minloc (b1, 1, l2, back=.true.) .ne. 10) stop 15 + if (minloc (b1, 1, l2, kind=8) .ne. 1) stop 16 + if (minloc (b1, 1, l2, 4, .false.) .ne. 1) stop 17 + if (minloc (b1, 1, l2, 2, .true.) .ne. 10) stop 18 + if (minloc (b1, 1, l3) .ne. 1) stop 19 + if (minloc (b1, 1, l3, back=.false.) .ne. 1) stop 20 + if (minloc (b1, 1, l3, back=.true.) .ne. 10) stop 21 + if (minloc (b1, 1, l3, kind=8) .ne. 1) stop 22 + if (minloc (b1, 1, l3, 4, .false.) .ne. 1) stop 23 + if (minloc (b1, 1, l3, 2, .true.) .ne. 10) stop 24 + a2 = 0 + if (any (minloc (a2) .ne. 1)) stop 1 + if (any (minloc (a2, back=.false.) .ne. 1)) stop 2 + if (any (minloc (a2, back=.true.) .ne. 10)) stop 3 + if (any (minloc (a2, kind=2) .ne. 1)) stop 4 + if (any (minloc (a2, kind=4, back=.false.) .ne. 1)) stop 5 + if (any (minloc (a2, kind=8, back=.true.) .ne. 10)) stop 6 + if (any (minloc (a2, 1) .ne. 1)) stop 7 + if (any (minloc (a2, 1, back=.false.) .ne. 1)) stop 8 + if (any (minloc (a2, 1, back=.true.) .ne. 10)) stop 9 + if (any (minloc (a2, 1, kind=1) .ne. 1)) stop 10 + if (any (minloc (a2, 1, kind=2, back=.false.) .ne. 1)) stop 11 + if (any (minloc (a2, 1, kind=4, back=.true.) .ne. 10)) stop 12 + if (any (minloc (a2, 1, l1) .ne. 1)) stop 13 + if (any (minloc (a2, 1, l1, back=.false.) .ne. 1)) stop 14 + if (any (minloc (a2, 1, l1, back=.true.) .ne. 10)) stop 15 + if (any (minloc (a2, 1, l1, kind=8) .ne. 1)) stop 16 + if (any (minloc (a2, 1, l1, 4, .false.) .ne. 1)) stop 17 + if (any (minloc (a2, 1, l1, 2, .true.) .ne. 10)) stop 18 + if (any (minloc (a2, 1, l3) .ne. 1)) stop 19 + if (any (minloc (a2, 1, l3, back=.false.) .ne. 1)) stop 20 + if (any (minloc (a2, 1, l3, back=.true.) .ne. 10)) stop 21 + if (any (minloc (a2, 1, l3, kind=8) .ne. 1)) stop 22 + if (any (minloc (a2, 1, l3, 4, .false.) .ne. 1)) stop 23 + if (any (minloc (a2, 1, l3, 2, .true.) .ne. 10)) stop 24 + b2 = 0 + if (any (minloc (b2) .ne. 1)) stop 1 + if (any (minloc (b2, back=.false.) .ne. 1)) stop 2 + if (any (minloc (b2, back=.true.) .ne. 10)) stop 3 + if (any (minloc (b2, kind=2) .ne. 1)) stop 4 + if (any (minloc (b2, kind=4, back=.false.) .ne. 1)) stop 5 + if (any (minloc (b2, kind=8, back=.true.) .ne. 10)) stop 6 + if (minloc (b2, 1) .ne. 1) stop 7 + if (minloc (b2, 1, back=.false.) .ne. 1) stop 8 + if (minloc (b2, 1, back=.true.) .ne. 10) stop 9 + if (minloc (b2, 1, kind=1) .ne. 1) stop 10 + if (minloc (b2, 1, kind=2, back=.false.) .ne. 1) stop 11 + if (minloc (b2, 1, kind=4, back=.true.) .ne. 10) stop 12 + if (minloc (b2, 1, l2) .ne. 1) stop 13 + if (minloc (b2, 1, l2, back=.false.) .ne. 1) stop 14 + if (minloc (b2, 1, l2, back=.true.) .ne. 10) stop 15 + if (minloc (b2, 1, l2, kind=8) .ne. 1) stop 16 + if (minloc (b2, 1, l2, 4, .false.) .ne. 1) stop 17 + if (minloc (b2, 1, l2, 2, .true.) .ne. 10) stop 18 + if (minloc (b2, 1, l3) .ne. 1) stop 19 + if (minloc (b2, 1, l3, back=.false.) .ne. 1) stop 20 + if (minloc (b2, 1, l3, back=.true.) .ne. 10) stop 21 + if (minloc (b2, 1, l3, kind=8) .ne. 1) stop 22 + if (minloc (b2, 1, l3, 4, .false.) .ne. 1) stop 23 + if (minloc (b2, 1, l3, 2, .true.) .ne. 10) stop 24 + a4 = 0 + if (any (minloc (a4) .ne. 1)) stop 1 + if (any (minloc (a4, back=.false.) .ne. 1)) stop 2 + if (any (minloc (a4, back=.true.) .ne. 10)) stop 3 + if (any (minloc (a4, kind=2) .ne. 1)) stop 4 + if (any (minloc (a4, kind=4, back=.false.) .ne. 1)) stop 5 + if (any (minloc (a4, kind=8, back=.true.) .ne. 10)) stop 6 + if (any (minloc (a4, 1) .ne. 1)) stop 7 + if (any (minloc (a4, 1, back=.false.) .ne. 1)) stop 8 + if (any (minloc (a4, 1, back=.true.) .ne. 10)) stop 9 + if (any (minloc (a4, 1, kind=1) .ne. 1)) stop 10 + if (any (minloc (a4, 1, kind=2, back=.false.) .ne. 1)) stop 11 + if (any (minloc (a4, 1, kind=4, back=.true.) .ne. 10)) stop 12 + if (any (minloc (a4, 1, l1) .ne. 1)) stop 13 + if (any (minloc (a4, 1, l1, back=.false.) .ne. 1)) stop 14 + if (any (minloc (a4, 1, l1, back=.true.) .ne. 10)) stop 15 + if (any (minloc (a4, 1, l1, kind=8) .ne. 1)) stop 16 + if (any (minloc (a4, 1, l1, 4, .false.) .ne. 1)) stop 17 + if (any (minloc (a4, 1, l1, 2, .true.) .ne. 10)) stop 18 + if (any (minloc (a4, 1, l3) .ne. 1)) stop 19 + if (any (minloc (a4, 1, l3, back=.false.) .ne. 1)) stop 20 + if (any (minloc (a4, 1, l3, back=.true.) .ne. 10)) stop 21 + if (any (minloc (a4, 1, l3, kind=8) .ne. 1)) stop 22 + if (any (minloc (a4, 1, l3, 4, .false.) .ne. 1)) stop 23 + if (any (minloc (a4, 1, l3, 2, .true.) .ne. 10)) stop 24 + b4 = 0 + if (any (minloc (b4) .ne. 1)) stop 1 + if (any (minloc (b4, back=.false.) .ne. 1)) stop 2 + if (any (minloc (b4, back=.true.) .ne. 10)) stop 3 + if (any (minloc (b4, kind=2) .ne. 1)) stop 4 + if (any (minloc (b4, kind=4, back=.false.) .ne. 1)) stop 5 + if (any (minloc (b4, kind=8, back=.true.) .ne. 10)) stop 6 + if (minloc (b4, 1) .ne. 1) stop 7 + if (minloc (b4, 1, back=.false.) .ne. 1) stop 8 + if (minloc (b4, 1, back=.true.) .ne. 10) stop 9 + if (minloc (b4, 1, kind=1) .ne. 1) stop 10 + if (minloc (b4, 1, kind=2, back=.false.) .ne. 1) stop 11 + if (minloc (b4, 1, kind=4, back=.true.) .ne. 10) stop 12 + if (minloc (b4, 1, l2) .ne. 1) stop 13 + if (minloc (b4, 1, l2, back=.false.) .ne. 1) stop 14 + if (minloc (b4, 1, l2, back=.true.) .ne. 10) stop 15 + if (minloc (b4, 1, l2, kind=8) .ne. 1) stop 16 + if (minloc (b4, 1, l2, 4, .false.) .ne. 1) stop 17 + if (minloc (b4, 1, l2, 2, .true.) .ne. 10) stop 18 + if (minloc (b4, 1, l3) .ne. 1) stop 19 + if (minloc (b4, 1, l3, back=.false.) .ne. 1) stop 20 + if (minloc (b4, 1, l3, back=.true.) .ne. 10) stop 21 + if (minloc (b4, 1, l3, kind=8) .ne. 1) stop 22 + if (minloc (b4, 1, l3, 4, .false.) .ne. 1) stop 23 + if (minloc (b4, 1, l3, 2, .true.) .ne. 10) stop 24 + a8 = 0 + if (any (minloc (a8) .ne. 1)) stop 1 + if (any (minloc (a8, back=.false.) .ne. 1)) stop 2 + if (any (minloc (a8, back=.true.) .ne. 10)) stop 3 + if (any (minloc (a8, kind=2) .ne. 1)) stop 4 + if (any (minloc (a8, kind=4, back=.false.) .ne. 1)) stop 5 + if (any (minloc (a8, kind=8, back=.true.) .ne. 10)) stop 6 + if (any (minloc (a8, 1) .ne. 1)) stop 7 + if (any (minloc (a8, 1, back=.false.) .ne. 1)) stop 8 + if (any (minloc (a8, 1, back=.true.) .ne. 10)) stop 9 + if (any (minloc (a8, 1, kind=1) .ne. 1)) stop 10 + if (any (minloc (a8, 1, kind=2, back=.false.) .ne. 1)) stop 11 + if (any (minloc (a8, 1, kind=4, back=.true.) .ne. 10)) stop 12 + if (any (minloc (a8, 1, l1) .ne. 1)) stop 13 + if (any (minloc (a8, 1, l1, back=.false.) .ne. 1)) stop 14 + if (any (minloc (a8, 1, l1, back=.true.) .ne. 10)) stop 15 + if (any (minloc (a8, 1, l1, kind=8) .ne. 1)) stop 16 + if (any (minloc (a8, 1, l1, 4, .false.) .ne. 1)) stop 17 + if (any (minloc (a8, 1, l1, 2, .true.) .ne. 10)) stop 18 + if (any (minloc (a8, 1, l3) .ne. 1)) stop 19 + if (any (minloc (a8, 1, l3, back=.false.) .ne. 1)) stop 20 + if (any (minloc (a8, 1, l3, back=.true.) .ne. 10)) stop 21 + if (any (minloc (a8, 1, l3, kind=8) .ne. 1)) stop 22 + if (any (minloc (a8, 1, l3, 4, .false.) .ne. 1)) stop 23 + if (any (minloc (a8, 1, l3, 2, .true.) .ne. 10)) stop 24 + b8 = 0 + if (any (minloc (b8) .ne. 1)) stop 1 + if (any (minloc (b8, back=.false.) .ne. 1)) stop 2 + if (any (minloc (b8, back=.true.) .ne. 10)) stop 3 + if (any (minloc (b8, kind=2) .ne. 1)) stop 4 + if (any (minloc (b8, kind=4, back=.false.) .ne. 1)) stop 5 + if (any (minloc (b8, kind=8, back=.true.) .ne. 10)) stop 6 + if (minloc (b8, 1) .ne. 1) stop 7 + if (minloc (b8, 1, back=.false.) .ne. 1) stop 8 + if (minloc (b8, 1, back=.true.) .ne. 10) stop 9 + if (minloc (b8, 1, kind=1) .ne. 1) stop 10 + if (minloc (b8, 1, kind=2, back=.false.) .ne. 1) stop 11 + if (minloc (b8, 1, kind=4, back=.true.) .ne. 10) stop 12 + if (minloc (b8, 1, l2) .ne. 1) stop 13 + if (minloc (b8, 1, l2, back=.false.) .ne. 1) stop 14 + if (minloc (b8, 1, l2, back=.true.) .ne. 10) stop 15 + if (minloc (b8, 1, l2, kind=8) .ne. 1) stop 16 + if (minloc (b8, 1, l2, 4, .false.) .ne. 1) stop 17 + if (minloc (b8, 1, l2, 2, .true.) .ne. 10) stop 18 + if (minloc (b8, 1, l3) .ne. 1) stop 19 + if (minloc (b8, 1, l3, back=.false.) .ne. 1) stop 20 + if (minloc (b8, 1, l3, back=.true.) .ne. 10) stop 21 + if (minloc (b8, 1, l3, kind=8) .ne. 1) stop 22 + if (minloc (b8, 1, l3, 4, .false.) .ne. 1) stop 23 + if (minloc (b8, 1, l3, 2, .true.) .ne. 10) stop 24 + r4 = 0.0 + if (any (minloc (r4) .ne. 1)) stop 1 + if (any (minloc (r4, back=.false.) .ne. 1)) stop 2 + if (any (minloc (r4, back=.true.) .ne. 10)) stop 3 + if (any (minloc (r4, kind=2) .ne. 1)) stop 4 + if (any (minloc (r4, kind=4, back=.false.) .ne. 1)) stop 5 + if (any (minloc (r4, kind=8, back=.true.) .ne. 10)) stop 6 + if (any (minloc (r4, 1) .ne. 1)) stop 7 + if (any (minloc (r4, 1, back=.false.) .ne. 1)) stop 8 + if (any (minloc (r4, 1, back=.true.) .ne. 10)) stop 9 + if (any (minloc (r4, 1, kind=1) .ne. 1)) stop 10 + if (any (minloc (r4, 1, kind=2, back=.false.) .ne. 1)) stop 11 + if (any (minloc (r4, 1, kind=4, back=.true.) .ne. 10)) stop 12 + if (any (minloc (r4, 1, l1) .ne. 1)) stop 13 + if (any (minloc (r4, 1, l1, back=.false.) .ne. 1)) stop 14 + if (any (minloc (r4, 1, l1, back=.true.) .ne. 10)) stop 15 + if (any (minloc (r4, 1, l1, kind=8) .ne. 1)) stop 16 + if (any (minloc (r4, 1, l1, 4, .false.) .ne. 1)) stop 17 + if (any (minloc (r4, 1, l1, 2, .true.) .ne. 10)) stop 18 + if (any (minloc (r4, 1, l3) .ne. 1)) stop 19 + if (any (minloc (r4, 1, l3, back=.false.) .ne. 1)) stop 20 + if (any (minloc (r4, 1, l3, back=.true.) .ne. 10)) stop 21 + if (any (minloc (r4, 1, l3, kind=8) .ne. 1)) stop 22 + if (any (minloc (r4, 1, l3, 4, .false.) .ne. 1)) stop 23 + if (any (minloc (r4, 1, l3, 2, .true.) .ne. 10)) stop 24 + s4 = 0.0 + if (any (minloc (s4) .ne. 1)) stop 1 + if (any (minloc (s4, back=.false.) .ne. 1)) stop 2 + if (any (minloc (s4, back=.true.) .ne. 10)) stop 3 + if (any (minloc (s4, kind=2) .ne. 1)) stop 4 + if (any (minloc (s4, kind=4, back=.false.) .ne. 1)) stop 5 + if (any (minloc (s4, kind=8, back=.true.) .ne. 10)) stop 6 + if (minloc (s4, 1) .ne. 1) stop 7 + if (minloc (s4, 1, back=.false.) .ne. 1) stop 8 + if (minloc (s4, 1, back=.true.) .ne. 10) stop 9 + if (minloc (s4, 1, kind=1) .ne. 1) stop 10 + if (minloc (s4, 1, kind=2, back=.false.) .ne. 1) stop 11 + if (minloc (s4, 1, kind=4, back=.true.) .ne. 10) stop 12 + if (minloc (s4, 1, l2) .ne. 1) stop 13 + if (minloc (s4, 1, l2, back=.false.) .ne. 1) stop 14 + if (minloc (s4, 1, l2, back=.true.) .ne. 10) stop 15 + if (minloc (s4, 1, l2, kind=8) .ne. 1) stop 16 + if (minloc (s4, 1, l2, 4, .false.) .ne. 1) stop 17 + if (minloc (s4, 1, l2, 2, .true.) .ne. 10) stop 18 + if (minloc (s4, 1, l3) .ne. 1) stop 19 + if (minloc (s4, 1, l3, back=.false.) .ne. 1) stop 20 + if (minloc (s4, 1, l3, back=.true.) .ne. 10) stop 21 + if (minloc (s4, 1, l3, kind=8) .ne. 1) stop 22 + if (minloc (s4, 1, l3, 4, .false.) .ne. 1) stop 23 + if (minloc (s4, 1, l3, 2, .true.) .ne. 10) stop 24 + r8 = 0.0 + if (any (minloc (r8) .ne. 1)) stop 1 + if (any (minloc (r8, back=.false.) .ne. 1)) stop 2 + if (any (minloc (r8, back=.true.) .ne. 10)) stop 3 + if (any (minloc (r8, kind=2) .ne. 1)) stop 4 + if (any (minloc (r8, kind=4, back=.false.) .ne. 1)) stop 5 + if (any (minloc (r8, kind=8, back=.true.) .ne. 10)) stop 6 + if (any (minloc (r8, 1) .ne. 1)) stop 7 + if (any (minloc (r8, 1, back=.false.) .ne. 1)) stop 8 + if (any (minloc (r8, 1, back=.true.) .ne. 10)) stop 9 + if (any (minloc (r8, 1, kind=1) .ne. 1)) stop 10 + if (any (minloc (r8, 1, kind=2, back=.false.) .ne. 1)) stop 11 + if (any (minloc (r8, 1, kind=4, back=.true.) .ne. 10)) stop 12 + if (any (minloc (r8, 1, l1) .ne. 1)) stop 13 + if (any (minloc (r8, 1, l1, back=.false.) .ne. 1)) stop 14 + if (any (minloc (r8, 1, l1, back=.true.) .ne. 10)) stop 15 + if (any (minloc (r8, 1, l1, kind=8) .ne. 1)) stop 16 + if (any (minloc (r8, 1, l1, 4, .false.) .ne. 1)) stop 17 + if (any (minloc (r8, 1, l1, 2, .true.) .ne. 10)) stop 18 + if (any (minloc (r8, 1, l3) .ne. 1)) stop 19 + if (any (minloc (r8, 1, l3, back=.false.) .ne. 1)) stop 20 + if (any (minloc (r8, 1, l3, back=.true.) .ne. 10)) stop 21 + if (any (minloc (r8, 1, l3, kind=8) .ne. 1)) stop 22 + if (any (minloc (r8, 1, l3, 4, .false.) .ne. 1)) stop 23 + if (any (minloc (r8, 1, l3, 2, .true.) .ne. 10)) stop 24 + s8 = 0.0 + if (any (minloc (s8) .ne. 1)) stop 1 + if (any (minloc (s8, back=.false.) .ne. 1)) stop 2 + if (any (minloc (s8, back=.true.) .ne. 10)) stop 3 + if (any (minloc (s8, kind=2) .ne. 1)) stop 4 + if (any (minloc (s8, kind=4, back=.false.) .ne. 1)) stop 5 + if (any (minloc (s8, kind=8, back=.true.) .ne. 10)) stop 6 + if (minloc (s8, 1) .ne. 1) stop 7 + if (minloc (s8, 1, back=.false.) .ne. 1) stop 8 + if (minloc (s8, 1, back=.true.) .ne. 10) stop 9 + if (minloc (s8, 1, kind=1) .ne. 1) stop 10 + if (minloc (s8, 1, kind=2, back=.false.) .ne. 1) stop 11 + if (minloc (s8, 1, kind=4, back=.true.) .ne. 10) stop 12 + if (minloc (s8, 1, l2) .ne. 1) stop 13 + if (minloc (s8, 1, l2, back=.false.) .ne. 1) stop 14 + if (minloc (s8, 1, l2, back=.true.) .ne. 10) stop 15 + if (minloc (s8, 1, l2, kind=8) .ne. 1) stop 16 + if (minloc (s8, 1, l2, 4, .false.) .ne. 1) stop 17 + if (minloc (s8, 1, l2, 2, .true.) .ne. 10) stop 18 + if (minloc (s8, 1, l3) .ne. 1) stop 19 + if (minloc (s8, 1, l3, back=.false.) .ne. 1) stop 20 + if (minloc (s8, 1, l3, back=.true.) .ne. 10) stop 21 + if (minloc (s8, 1, l3, kind=8) .ne. 1) stop 22 + if (minloc (s8, 1, l3, 4, .false.) .ne. 1) stop 23 + if (minloc (s8, 1, l3, 2, .true.) .ne. 10) stop 24 + end diff -Nrcpad gcc-12.4.0/gcc/testsuite/gfortran.dg/pr120191_2.f90 gcc-12.5.0-RC-20250704/gcc/testsuite/gfortran.dg/pr120191_2.f90 *** gcc-12.4.0/gcc/testsuite/gfortran.dg/pr120191_2.f90 Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gfortran.dg/pr120191_2.f90 Fri Jul 4 07:24:45 2025 *************** *** 0 **** --- 1,84 ---- + ! PR fortran/120191 + ! { dg-do run } + + character(kind=1, len=2) :: a(4, 4, 4), b(4) + logical :: l(4, 4, 4), m, n(4) + a = 'aa' + b = 'aa' + l = .true. + m = .true. + n = .true. + if (any (maxloc (a) .ne. 1)) stop 1 + if (any (maxloc (a, dim=1) .ne. 1)) stop 2 + if (any (maxloc (a, 1) .ne. 1)) stop 3 + if (any (maxloc (a, dim=1, mask=l, kind=4, back=.false.) .ne. 1)) stop 4 + if (any (maxloc (a, 1, l, 4, .false.) .ne. 1)) stop 5 + if (any (maxloc (a, dim=1, mask=m, kind=4, back=.false.) .ne. 1)) stop 6 + if (any (maxloc (a, 1, m, 4, .false.) .ne. 1)) stop 7 + if (any (maxloc (a, dim=1, mask=l, kind=4, back=.true.) .ne. 4)) stop 8 + if (any (maxloc (a, 1, l, 4, .true.) .ne. 4)) stop 9 + if (any (maxloc (a, dim=1, mask=m, kind=4, back=.true.) .ne. 4)) stop 10 + if (any (maxloc (a, 1, m, 4, .true.) .ne. 4)) stop 11 + if (any (maxloc (b) .ne. 1)) stop 12 + if (maxloc (b, dim=1) .ne. 1) stop 13 + if (maxloc (b, 1) .ne. 1) stop 14 + if (maxloc (b, dim=1, mask=n, kind=4, back=.false.) .ne. 1) stop 15 + if (maxloc (b, 1, n, 4, .false.) .ne. 1) stop 16 + if (maxloc (b, dim=1, mask=m, kind=4, back=.false.) .ne. 1) stop 17 + if (maxloc (b, 1, m, 4, .false.) .ne. 1) stop 18 + if (maxloc (b, dim=1, mask=n, kind=4, back=.true.) .ne. 4) stop 19 + if (maxloc (b, 1, n, 4, .true.) .ne. 4) stop 20 + if (maxloc (b, dim=1, mask=m, kind=4, back=.true.) .ne. 4) stop 21 + if (maxloc (b, 1, m, 4, .true.) .ne. 4) stop 22 + l = .false. + m = .false. + n = .false. + if (any (maxloc (a, dim=1, mask=l, kind=4, back=.false.) .ne. 0)) stop 23 + if (any (maxloc (a, 1, l, 4, .false.) .ne. 0)) stop 24 + if (maxloc (b, dim=1, mask=n, kind=4, back=.false.) .ne. 0) stop 25 + if (maxloc (b, 1, n, 4, .false.) .ne. 0) stop 26 + if (maxloc (b, dim=1, mask=m, kind=4, back=.false.) .ne. 0) stop 27 + if (maxloc (b, 1, m, 4, .false.) .ne. 0) stop 28 + if (maxloc (b, dim=1, mask=n, kind=4, back=.true.) .ne. 0) stop 29 + if (maxloc (b, 1, n, 4, .true.) .ne. 0) stop 30 + if (maxloc (b, dim=1, mask=m, kind=4, back=.true.) .ne. 0) stop 31 + if (maxloc (b, 1, m, 4, .true.) .ne. 0) stop 32 + l = .true. + m = .true. + n = .true. + if (any (minloc (a) .ne. 1)) stop 1 + if (any (minloc (a, dim=1) .ne. 1)) stop 2 + if (any (minloc (a, 1) .ne. 1)) stop 3 + if (any (minloc (a, dim=1, mask=l, kind=4, back=.false.) .ne. 1)) stop 4 + if (any (minloc (a, 1, l, 4, .false.) .ne. 1)) stop 5 + if (any (minloc (a, dim=1, mask=m, kind=4, back=.false.) .ne. 1)) stop 6 + if (any (minloc (a, 1, m, 4, .false.) .ne. 1)) stop 7 + if (any (minloc (a, dim=1, mask=l, kind=4, back=.true.) .ne. 4)) stop 8 + if (any (minloc (a, 1, l, 4, .true.) .ne. 4)) stop 9 + if (any (minloc (a, dim=1, mask=m, kind=4, back=.true.) .ne. 4)) stop 10 + if (any (minloc (a, 1, m, 4, .true.) .ne. 4)) stop 11 + if (any (minloc (b) .ne. 1)) stop 12 + if (minloc (b, dim=1) .ne. 1) stop 13 + if (minloc (b, 1) .ne. 1) stop 14 + if (minloc (b, dim=1, mask=n, kind=4, back=.false.) .ne. 1) stop 15 + if (minloc (b, 1, n, 4, .false.) .ne. 1) stop 16 + if (minloc (b, dim=1, mask=m, kind=4, back=.false.) .ne. 1) stop 17 + if (minloc (b, 1, m, 4, .false.) .ne. 1) stop 18 + if (minloc (b, dim=1, mask=n, kind=4, back=.true.) .ne. 4) stop 19 + if (minloc (b, 1, n, 4, .true.) .ne. 4) stop 20 + if (minloc (b, dim=1, mask=m, kind=4, back=.true.) .ne. 4) stop 21 + if (minloc (b, 1, m, 4, .true.) .ne. 4) stop 22 + l = .false. + m = .false. + n = .false. + if (any (minloc (a, dim=1, mask=l, kind=4, back=.false.) .ne. 0)) stop 23 + if (any (minloc (a, 1, l, 4, .false.) .ne. 0)) stop 24 + if (minloc (b, dim=1, mask=n, kind=4, back=.false.) .ne. 0) stop 25 + if (minloc (b, 1, n, 4, .false.) .ne. 0) stop 26 + if (minloc (b, dim=1, mask=m, kind=4, back=.false.) .ne. 0) stop 27 + if (minloc (b, 1, m, 4, .false.) .ne. 0) stop 28 + if (minloc (b, dim=1, mask=n, kind=4, back=.true.) .ne. 0) stop 29 + if (minloc (b, 1, n, 4, .true.) .ne. 0) stop 30 + if (minloc (b, dim=1, mask=m, kind=4, back=.true.) .ne. 0) stop 31 + if (minloc (b, 1, m, 4, .true.) .ne. 0) stop 32 + end diff -Nrcpad gcc-12.4.0/gcc/testsuite/gfortran.dg/pr120191_3.f90 gcc-12.5.0-RC-20250704/gcc/testsuite/gfortran.dg/pr120191_3.f90 *** gcc-12.4.0/gcc/testsuite/gfortran.dg/pr120191_3.f90 Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gfortran.dg/pr120191_3.f90 Fri Jul 4 07:24:45 2025 *************** *** 0 **** --- 1,23 ---- + ! PR fortran/120191 + ! { dg-do run } + + character(kind=1, len=2) :: a(4, 4, 4), b(4) + logical :: l(4, 4, 4), m, n(4) + a = 'aa' + b = 'aa' + l = .false. + m = .false. + n = .false. + if (any (maxloc (a, dim=1, mask=m, kind=4, back=.false.) .ne. 0)) stop 1 + if (any (maxloc (a, 1, m, 4, .false.) .ne. 0)) stop 2 + if (any (maxloc (a, dim=1, mask=l, kind=4, back=.true.) .ne. 0)) stop 3 + if (any (maxloc (a, 1, l, 4, .true.) .ne. 0)) stop 4 + if (any (maxloc (a, dim=1, mask=m, kind=4, back=.true.) .ne. 0)) stop 5 + if (any (maxloc (a, 1, m, 4, .true.) .ne. 0)) stop 6 + if (any (minloc (a, dim=1, mask=m, kind=4, back=.false.) .ne. 0)) stop 7 + if (any (minloc (a, 1, m, 4, .false.) .ne. 0)) stop 8 + if (any (minloc (a, dim=1, mask=l, kind=4, back=.true.) .ne. 0)) stop 9 + if (any (minloc (a, 1, l, 4, .true.) .ne. 0)) stop 10 + if (any (minloc (a, dim=1, mask=m, kind=4, back=.true.) .ne. 0)) stop 11 + if (any (minloc (a, 1, m, 4, .true.) .ne. 0)) stop 12 + end diff -Nrcpad gcc-12.4.0/gcc/testsuite/gfortran.dg/pr120196.f90 gcc-12.5.0-RC-20250704/gcc/testsuite/gfortran.dg/pr120196.f90 *** gcc-12.4.0/gcc/testsuite/gfortran.dg/pr120196.f90 Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gfortran.dg/pr120196.f90 Fri Jul 4 07:24:45 2025 *************** *** 0 **** --- 1,26 ---- + ! PR libfortran/120196 + ! { dg-do run } + + program pr120196 + character(len=:, kind=1), allocatable :: a(:), s + character(len=:, kind=4), allocatable :: b(:), t + logical, allocatable :: l(:) + logical :: m + allocate (character(len=16, kind=1) :: a(10), s) + allocate (l(10)) + a(:) = "" + s = "*" + l = .true. + m = .true. + if (findloc (a, s, dim=1, back=.true.) .ne. 0) stop 1 + if (findloc (a, s, mask=l, dim=1, back=.true.) .ne. 0) stop 2 + if (findloc (a, s, mask=m, dim=1, back=.true.) .ne. 0) stop 3 + deallocate (a, s) + allocate (character(len=16, kind=4) :: b(10), t) + b(:) = "" + t = "*" + if (findloc (b, t, dim=1, back=.true.) .ne. 0) stop 4 + if (findloc (b, t, mask=l, dim=1, back=.true.) .ne. 0) stop 5 + if (findloc (b, t, mask=m, dim=1, back=.true.) .ne. 0) stop 6 + deallocate (b, t, l) + end program pr120196 diff -Nrcpad gcc-12.4.0/gcc/testsuite/gfortran.dg/pr84868.f90 gcc-12.5.0-RC-20250704/gcc/testsuite/gfortran.dg/pr84868.f90 *** gcc-12.4.0/gcc/testsuite/gfortran.dg/pr84868.f90 Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gfortran.dg/pr84868.f90 Fri Jul 4 07:24:45 2025 *************** *** 0 **** --- 1,84 ---- + ! { dg-do run } + ! + ! Test the fix for PR84868. Module 'orig' and the call to 'f_orig' is the + ! original bug. The rest tests variants and the fix for a gimplifier ICE. + ! + ! Subroutine 'h' and calls to it were introduced to check the corrections + ! needed to fix additional problems, noted in the review of the patch by + ! Harald Anlauf + ! + ! Contributed by Gerhard Steinmetz + ! + module orig + character(:), allocatable :: c + integer :: ans1(3,3), ans2(3), ans3(2) + contains + function f_orig(n) result(z) + character(2), parameter :: c(3) = ['x1', 'y ', 'z2'] + integer, intent(in) :: n + character(len_trim(c(n))) :: z + z = c(n) + end + function h(n) result(z) + integer, intent(in) :: n + character(2), parameter :: c(3,3) = & + reshape (['ab','c ','de','f ','gh','i ','jk','l ','mn'],[3,3]) + character(4), parameter :: chr(3) = ['ab ',' cd','e f '] + character(len_trim(c(n,n))) :: z + z = c(n,n) + ! Make sure that full arrays are correctly scalarized both having been previously + ! used with an array reference and not previously referenced. + ans1 = len_trim (c) + ans2 = len_trim (chr) + ! Finally check a slightly more complicated array reference + ans3 = len_trim (c(1:n+1:2,n-1)) + end + end module orig + + module m + character(:), allocatable :: c + contains + function f(n, c) result(z) + character (2) :: c(:) + integer, intent(in) :: n + character(len_trim(c(n))) :: z + z = c(n) + end + subroutine foo (pc) + character(2) :: pc(:) + if (any ([(len (f(i, pc)), i = 1,3)] .ne. [2,1,2])) stop 1 + end + end + program p + use m + use orig + character (2) :: pc(3) = ['x1', 'y ', 'z2'] + integer :: i + + if (any ([(len (f_orig(i)), i = 1,3)] .ne. [2,1,2])) stop 2 ! ICE + + call foo (pc) + if (any ([(len (g(i, pc)), i = 1,3)] .ne. [2,1,2])) stop 3 + if (any ([(bar1(i), i = 1,3)] .ne. [2,1,2])) stop 4 + if (any ([(bar2(i), i = 1,3)] .ne. [2,1,2])) stop 5 + + if (h(2) .ne. 'gh') stop 6 + if (any (ans1 .ne. reshape ([2,1,2,1,2,1,2,1,2],[3,3]))) stop 7 + if (any (ans2 .ne. [2,4,3])) stop 8 + if (any (ans3 .ne. [2,2])) stop 9 + contains + function g(n, c) result(z) + character (2) :: c(:) + integer, intent(in) :: n + character(len_trim(c(n))) :: z + z = c(n) + end + integer function bar1 (i) + integer :: i + bar1 = len (f(i, pc)) ! ICE in is_gimple_min_invariant + end + integer function bar2 (i) + integer :: i + bar2 = len (g(i, pc)) + end + end diff -Nrcpad gcc-12.4.0/gcc/testsuite/gfortran.dg/ptr_func_assign_6.f08 gcc-12.5.0-RC-20250704/gcc/testsuite/gfortran.dg/ptr_func_assign_6.f08 *** gcc-12.4.0/gcc/testsuite/gfortran.dg/ptr_func_assign_6.f08 Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gfortran.dg/ptr_func_assign_6.f08 Fri Jul 4 07:24:45 2025 *************** *** 0 **** --- 1,89 ---- + ! { dg-do run } + ! + ! Test the fix for PR105054. + ! + ! Contributed by Arjen Markus + ! + module string_pointers + implicit none + character(len=20), dimension(10), target :: array_strings + character(len=:), dimension(:), target, allocatable :: array_strings2 + + contains + + function pointer_to_string( i , flag) + integer, intent(in) :: i, flag + + character(len=:), pointer :: pointer_to_string + + if (flag == 1) then + pointer_to_string => array_strings(i) + return + endif + + if (.not.allocated (array_strings2)) allocate (array_strings2(4), & + mold = ' ') + pointer_to_string => array_strings2(i) + end function pointer_to_string + + function pointer_to_string2( i , flag) result (res) + integer, intent(in) :: i, flag + + character(len=:), pointer :: res + + if (flag == 1) then + res => array_strings(i) + return + endif + + if (.not.allocated (array_strings2)) allocate (array_strings2(4), & + mold = ' ') + res => array_strings2(i) + end function pointer_to_string2 + + end module string_pointers + + program chk_string_pointer + use string_pointers + implicit none + integer :: i + character(*), parameter :: chr(4) = ['1234 ','ABCDefgh ', & + '12345678 ',' '] + + pointer_to_string(1, 1) = '1234567890' + pointer_to_string(2, 1) = '12345678901234567890' + + if (len(pointer_to_string(3, 1)) /= 20) stop 1 + + array_strings(1) = array_strings(1)(1:4) // 'ABC' + if (pointer_to_string(1, 1) /= '1234ABC') stop 2 + + pointer_to_string(1, 2) = '1234' + pointer_to_string(2, 2) = 'ABCDefgh' + pointer_to_string(3, 2) = '12345678' + + do i = 1, 3 + if (trim (array_strings2(i)) /= trim(chr(i))) stop 3 + enddo + + ! Clear the target arrays + array_strings = repeat (' ', 20) + deallocate (array_strings2) + + ! Repeat with an explicit result. + pointer_to_string2(1, 1) = '1234567890' + pointer_to_string2(2, 1) = '12345678901234567890' + + if (len(pointer_to_string(3, 1)) /= 20) stop 4 + + array_strings(1) = array_strings(1)(1:4) // 'ABC' + if (pointer_to_string(1, 1) /= '1234ABC') stop 5 + + pointer_to_string2(1, 2) = '1234' + pointer_to_string2(2, 2) = 'ABCDefgh' + pointer_to_string2(3, 2) = '12345678' + + do i = 1, 3 + if (trim (array_strings2(i)) /= trim(chr(i))) stop 6 + enddo + end program chk_string_pointer diff -Nrcpad gcc-12.4.0/gcc/testsuite/gfortran.dg/string_array_constructor_4.f90 gcc-12.5.0-RC-20250704/gcc/testsuite/gfortran.dg/string_array_constructor_4.f90 *** gcc-12.4.0/gcc/testsuite/gfortran.dg/string_array_constructor_4.f90 Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gfortran.dg/string_array_constructor_4.f90 Fri Jul 4 07:24:45 2025 *************** *** 0 **** --- 1,59 ---- + ! { dg-do run } + ! PR fortran/103115 - character array constructor with >= 4 constant elements + ! + ! This used to ICE when the first element is deferred-length character + ! or could lead to wrong results. + + program pr103115 + implicit none + integer :: i + character(*), parameter :: expect(*) = [ "1","2","3","4","5" ] + character(5) :: abc = "12345" + character(5), parameter :: def = "12345" + character(:), dimension(:), allocatable :: list + character(:), dimension(:), allocatable :: titles + titles = ["1"] + titles = [ titles& + ,"2"& + ,"3"& + ,"4"& + ,"5"& ! used to ICE + ] + if (len (titles) /= 1 .or. size (titles) /= 5) stop 1 + if (any (titles /= expect)) stop 2 + titles = ["1"] + titles = [ titles, (char(48+i),i=2,5) ] + if (len (titles) /= 1 .or. size (titles) /= 5) stop 3 + if (any (titles /= expect)) stop 4 + titles = ["1"] + titles = [ titles, ("2345"(i:i),i=1,4) ] + if (len (titles) /= 1 .or. size (titles) /= 5) stop 5 + if (any (titles /= expect)) stop 6 + titles = ["1"] + titles = [ titles, (def(i:i),i=2,5) ] + if (len (titles) /= 1 .or. size (titles) /= 5) stop 7 + if (any (titles /= expect)) stop 8 + list = [ (char(48+i),i=1,5) ] + titles = [ list(1), (char(48+i),i=2,5) ] + if (len (titles) /= 1 .or. size (titles) /= 5) stop 9 + if (any (titles /= expect)) stop 10 + titles = ["1"] + titles = [ titles, (abc(i:i),i=2,5) ] + if (len (titles) /= 1 .or. size (titles) /= 5) stop 11 + if (any (titles /= expect)) stop 12 + + ! with typespec: + list = [ (char(48+i),i=1,5) ] + titles = [ character(2) :: list(1), (char(48+i),i=2,5) ] + if (len (titles) /= 2 .or. size (titles) /= 5) stop 13 + if (any (titles /= expect)) stop 14 + titles = ["1"] + titles = [ character(2) :: titles, (char(48+i),i=2,5) ] + if (len (titles) /= 2 .or. size (titles) /= 5) stop 15 + if (any (titles /= expect)) stop 16 + titles = ["1"] + titles = [ character(2) :: titles, (def(i:i),i=2,5) ] + if (len (titles) /= 2 .or. size (titles) /= 5) stop 17 + if (any (titles /= expect)) stop 18 + deallocate (titles, list) + end diff -Nrcpad gcc-12.4.0/gcc/testsuite/gfortran.dg/use_rename_13.f90 gcc-12.5.0-RC-20250704/gcc/testsuite/gfortran.dg/use_rename_13.f90 *** gcc-12.4.0/gcc/testsuite/gfortran.dg/use_rename_13.f90 Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gfortran.dg/use_rename_13.f90 Fri Jul 4 07:24:45 2025 *************** *** 0 **** --- 1,37 ---- + ! { dg-do compile } + ! + ! Test the fix for pr79685, which failed as in the comments below. + ! + ! Contributed by Juergen Reuter + ! + module omega_color + implicit none + + type omega_color_factor + integer :: i + end type + + type(omega_color_factor), parameter :: op = omega_color_factor (199) + + end module + + module foo + use omega_color, ocf => omega_color_factor, ocfp => op + implicit none + + type(ocf) :: table_color_factors1 = ocf(42) + type(ocf) :: table_color_factors2 + type(ocf) :: table_color_factors3 (2) + type(ocf) :: table_color_factors4 + data table_color_factors2 / ocf(99) / ! This failed in gfc_match_structure_constructor. + data table_color_factors3 / ocf(1), ocf(2) / ! ditto. + data table_color_factors4 / ocfp / + end module + + use foo + if (table_color_factors1%i .ne. 42) stop 1 + if (table_color_factors2%i .ne. 99) stop 2 + if (any (table_color_factors3%i .ne. [1,2])) stop 3 + if (table_color_factors4%i .ne. 199) stop 4 + end + diff -Nrcpad gcc-12.4.0/gcc/testsuite/gnat.dg/matrix1.adb gcc-12.5.0-RC-20250704/gcc/testsuite/gnat.dg/matrix1.adb *** gcc-12.4.0/gcc/testsuite/gnat.dg/matrix1.adb Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gnat.dg/matrix1.adb Fri Jul 4 07:24:45 2025 *************** *** 0 **** --- 1,16 ---- + -- { dg-do run } + -- { dg-options "-gnata" } + + with Ada.Numerics.Generic_Real_Arrays; + + procedure Matrix1 is + + package GRA is new Ada.Numerics.Generic_Real_Arrays (real => float); + use GRA; + + M : constant Real_Matrix (1..2, 1..2) := ((1.0, 0.0), (0.0, 2.0)); + E : constant Real_Vector := Eigenvalues (M); + + begin + null; + end; diff -Nrcpad gcc-12.4.0/gcc/testsuite/gnat.dg/specs/array7.ads gcc-12.5.0-RC-20250704/gcc/testsuite/gnat.dg/specs/array7.ads *** gcc-12.4.0/gcc/testsuite/gnat.dg/specs/array7.ads Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gnat.dg/specs/array7.ads Fri Jul 4 07:24:45 2025 *************** *** 0 **** --- 1,14 ---- + -- { dg-do compile } + -- { dg-options "-O" } + + package Array7 is + + type I is interface; + + type Rec (Name_Len : Natural) is new I with record + Input : String (1 .. Name_Len); + end record; + + function Image (R : Rec) return String is ("I" & String (R.Input)); + + end Array7; diff -Nrcpad gcc-12.4.0/gcc/testsuite/gnat.dg/specs/generic_inst2-child1.ads gcc-12.5.0-RC-20250704/gcc/testsuite/gnat.dg/specs/generic_inst2-child1.ads *** gcc-12.4.0/gcc/testsuite/gnat.dg/specs/generic_inst2-child1.ads Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gnat.dg/specs/generic_inst2-child1.ads Fri Jul 4 07:24:45 2025 *************** *** 0 **** --- 1,17 ---- + generic + package Generic_Inst2.Child1 is + + function Get_Custom return Custom_Type; + + private + + type Dummy is null record; + + Placeholder : constant Dummy := (null record); + + -- This type conversion fails (though only when + -- instantiated in the other package) + function Get_Custom return Custom_Type is + (Custom_Type(Placeholder'Address)); + + end Generic_Inst2.Child1; diff -Nrcpad gcc-12.4.0/gcc/testsuite/gnat.dg/specs/generic_inst2-child2.ads gcc-12.5.0-RC-20250704/gcc/testsuite/gnat.dg/specs/generic_inst2-child2.ads *** gcc-12.4.0/gcc/testsuite/gnat.dg/specs/generic_inst2-child2.ads Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gnat.dg/specs/generic_inst2-child2.ads Fri Jul 4 07:24:45 2025 *************** *** 0 **** --- 1,10 ---- + -- { dg-do compile } + + with Generic_Inst2.Child1; + + generic + package Generic_Inst2.Child2 is + + package Second is new Generic_Inst2.Child1; + + end Generic_Inst2.Child2; diff -Nrcpad gcc-12.4.0/gcc/testsuite/gnat.dg/specs/generic_inst2.ads gcc-12.5.0-RC-20250704/gcc/testsuite/gnat.dg/specs/generic_inst2.ads *** gcc-12.4.0/gcc/testsuite/gnat.dg/specs/generic_inst2.ads Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/gcc/testsuite/gnat.dg/specs/generic_inst2.ads Fri Jul 4 07:24:45 2025 *************** *** 0 **** --- 1,11 ---- + private with System; + + package Generic_Inst2 is + + type Custom_Type is private; + + private + + type Custom_Type is new System.Address; + + end Generic_Inst2; diff -Nrcpad gcc-12.4.0/gcc/testsuite/lib/target-supports.exp gcc-12.5.0-RC-20250704/gcc/testsuite/lib/target-supports.exp *** gcc-12.4.0/gcc/testsuite/lib/target-supports.exp Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/gcc/testsuite/lib/target-supports.exp Fri Jul 4 07:24:45 2025 *************** proc check_effective_target_powerpc_elfv *** 6752,6758 **** # Return 1 if this is a PowerPC target supporting -mrop-protect proc check_effective_target_rop_ok { } { ! return [check_effective_target_power10_ok] && [check_effective_target_powerpc_elfv2] } # The VxWorks SPARC simulator accepts only EM_SPARC executables and --- 6752,6758 ---- # Return 1 if this is a PowerPC target supporting -mrop-protect proc check_effective_target_rop_ok { } { ! return [check_effective_target_has_arch_pwr8] && [check_effective_target_powerpc_elfv2] } # The VxWorks SPARC simulator accepts only EM_SPARC executables and diff -Nrcpad gcc-12.4.0/gcc/tree-call-cdce.cc gcc-12.5.0-RC-20250704/gcc/tree-call-cdce.cc *** gcc-12.4.0/gcc/tree-call-cdce.cc Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/gcc/tree-call-cdce.cc Fri Jul 4 07:24:45 2025 *************** check_pow (gcall *pow_call) *** 260,266 **** /* If the type of the base is too wide, the resulting shrink wrapping condition will be too conservative. */ ! if (bit_sz > MAX_BASE_INT_BIT_SIZE) return false; return true; --- 260,266 ---- /* If the type of the base is too wide, the resulting shrink wrapping condition will be too conservative. */ ! if (bit_sz != 8 && bit_sz != 16 && bit_sz != MAX_BASE_INT_BIT_SIZE) return false; return true; diff -Nrcpad gcc-12.4.0/gcc/tree-chrec.cc gcc-12.5.0-RC-20250704/gcc/tree-chrec.cc *** gcc-12.4.0/gcc/tree-chrec.cc Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/gcc/tree-chrec.cc Fri Jul 4 07:24:45 2025 *************** eq_evolutions_p (const_tree chrec0, cons *** 1594,1600 **** || TREE_CODE (chrec0) != TREE_CODE (chrec1)) return false; ! if (chrec0 == chrec1) return true; if (! types_compatible_p (TREE_TYPE (chrec0), TREE_TYPE (chrec1))) --- 1594,1600 ---- || TREE_CODE (chrec0) != TREE_CODE (chrec1)) return false; ! if (operand_equal_p (chrec0, chrec1, 0)) return true; if (! types_compatible_p (TREE_TYPE (chrec0), TREE_TYPE (chrec1))) *************** eq_evolutions_p (const_tree chrec0, cons *** 1621,1627 **** TREE_OPERAND (chrec1, 0)); default: ! return operand_equal_p (chrec0, chrec1, 0); } } --- 1621,1627 ---- TREE_OPERAND (chrec1, 0)); default: ! return false; } } diff -Nrcpad gcc-12.4.0/gcc/tree-data-ref.cc gcc-12.5.0-RC-20250704/gcc/tree-data-ref.cc *** gcc-12.4.0/gcc/tree-data-ref.cc Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/gcc/tree-data-ref.cc Fri Jul 4 07:24:45 2025 *************** split_constant_offset_1 (tree type, tree *** 761,766 **** --- 761,774 ---- if (INTEGRAL_TYPE_P (type) && TYPE_OVERFLOW_TRAPS (type)) return false; + if (TREE_CODE (op0) == SSA_NAME + && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (op0)) + return false; + if (op1 + && TREE_CODE (op1) == SSA_NAME + && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (op1)) + return false; + switch (code) { case INTEGER_CST: *************** split_constant_offset_1 (tree type, tree *** 853,861 **** case SSA_NAME: { - if (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (op0)) - return false; - gimple *def_stmt = SSA_NAME_DEF_STMT (op0); enum tree_code subcode; --- 861,866 ---- *************** create_waw_or_war_checks (tree *cond_exp *** 2480,2488 **** limit = fold_build2 (PLUS_EXPR, sizetype, limit, size_int (last_chunk_a + last_chunk_b)); ! tree subject = fold_build2 (POINTER_DIFF_EXPR, ssizetype, addr_b, addr_a); ! subject = fold_build2 (PLUS_EXPR, sizetype, ! fold_convert (sizetype, subject), bias); *cond_expr = fold_build2 (GT_EXPR, boolean_type_node, subject, limit); if (dump_enabled_p ()) --- 2485,2494 ---- limit = fold_build2 (PLUS_EXPR, sizetype, limit, size_int (last_chunk_a + last_chunk_b)); ! tree subject = fold_build2 (MINUS_EXPR, sizetype, ! fold_convert (sizetype, addr_b), ! fold_convert (sizetype, addr_a)); ! subject = fold_build2 (PLUS_EXPR, sizetype, subject, bias); *cond_expr = fold_build2 (GT_EXPR, boolean_type_node, subject, limit); if (dump_enabled_p ()) *************** create_intersect_range_checks (class loo *** 2629,2636 **** if the maximum value of one segment is equal to the minimum value of the other. */ min_align = std::min (dr_a.align, dr_b.align); - min_align = std::min (min_align, known_alignment (dr_a.access_size)); - min_align = std::min (min_align, known_alignment (dr_b.access_size)); cmp_code = LT_EXPR; } --- 2635,2640 ---- *************** initialize_matrix_A (lambda_matrix A, tr *** 4027,4033 **** } case INTEGER_CST: ! return chrec; default: gcc_unreachable (); --- 4031,4037 ---- } case INTEGER_CST: ! return cst_and_fits_in_hwi (chrec) ? chrec : chrec_dont_know; default: gcc_unreachable (); *************** build_classic_dist_vector_1 (struct data *** 5163,5170 **** non_affine_dependence_relation (ddr); return false; } - else - *init_b = true; } return true; --- 5167,5172 ---- diff -Nrcpad gcc-12.4.0/gcc/tree-eh.cc gcc-12.5.0-RC-20250704/gcc/tree-eh.cc *** gcc-12.4.0/gcc/tree-eh.cc Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/gcc/tree-eh.cc Fri Jul 4 07:24:45 2025 *************** add_stmt_to_eh_lp_fn (struct function *i *** 76,82 **** if (!get_eh_throw_stmt_table (ifun)) set_eh_throw_stmt_table (ifun, hash_map::create_ggc (31)); ! gcc_assert (!get_eh_throw_stmt_table (ifun)->put (t, num)); } /* Add statement T in the current function (cfun) to EH landing pad NUM. */ --- 76,83 ---- if (!get_eh_throw_stmt_table (ifun)) set_eh_throw_stmt_table (ifun, hash_map::create_ggc (31)); ! bool existed = get_eh_throw_stmt_table (ifun)->put (t, num); ! gcc_assert (!existed); } /* Add statement T in the current function (cfun) to EH landing pad NUM. */ *************** tree_could_trap_p (tree expr) *** 2728,2738 **** if (TREE_CODE (base) == STRING_CST) return maybe_le (TREE_STRING_LENGTH (base), off); tree size = DECL_SIZE_UNIT (base); if (size == NULL_TREE || !poly_int_tree_p (size) ! || maybe_le (wi::to_poly_offset (size), off)) return true; ! /* Now we are sure the first byte of the access is inside the object. */ return false; } --- 2729,2744 ---- if (TREE_CODE (base) == STRING_CST) return maybe_le (TREE_STRING_LENGTH (base), off); tree size = DECL_SIZE_UNIT (base); + tree refsz = TYPE_SIZE_UNIT (TREE_TYPE (expr)); if (size == NULL_TREE + || refsz == NULL_TREE || !poly_int_tree_p (size) ! || !poly_int_tree_p (refsz) ! || maybe_le (wi::to_poly_offset (size), off) ! || maybe_gt (off + wi::to_poly_offset (refsz), ! wi::to_poly_offset (size))) return true; ! /* Now we are sure the whole base of the access is inside the object. */ return false; } diff -Nrcpad gcc-12.4.0/gcc/tree-loop-distribution.cc gcc-12.5.0-RC-20250704/gcc/tree-loop-distribution.cc *** gcc-12.4.0/gcc/tree-loop-distribution.cc Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/gcc/tree-loop-distribution.cc Fri Jul 4 07:24:45 2025 *************** loop_distribution::pg_add_dependence_edg *** 2122,2146 **** gcc.dg/tree-ssa/pr94969.c. */ if (DDR_NUM_DIST_VECTS (ddr) != 1) this_dir = 2; - /* If the overlap is exact preserve stmt order. */ - else if (lambda_vector_zerop (DDR_DIST_VECT (ddr, 0), - DDR_NB_LOOPS (ddr))) - ; - /* Else as the distance vector is lexicographic positive swap - the dependence direction. */ else { ! if (DDR_REVERSED_P (ddr)) ! this_dir = -this_dir; ! this_dir = -this_dir; ! /* When then dependence distance of the innermost common ! loop of the DRs is zero we have a conflict. */ auto l1 = gimple_bb (DR_STMT (dr1))->loop_father; auto l2 = gimple_bb (DR_STMT (dr2))->loop_father; int idx = index_in_loop_nest (find_common_loop (l1, l2)->num, DDR_LOOP_NEST (ddr)); ! if (DDR_DIST_VECT (ddr, 0)[idx] == 0) this_dir = 2; } } --- 2122,2153 ---- gcc.dg/tree-ssa/pr94969.c. */ if (DDR_NUM_DIST_VECTS (ddr) != 1) this_dir = 2; else { ! /* If the overlap is exact preserve stmt order. */ ! if (lambda_vector_zerop (DDR_DIST_VECT (ddr, 0), ! DDR_NB_LOOPS (ddr))) ! ; ! /* Else as the distance vector is lexicographic positive swap ! the dependence direction. */ ! else ! { ! if (DDR_REVERSED_P (ddr)) ! this_dir = -this_dir; ! this_dir = -this_dir; ! } /* When then dependence distance of the innermost common ! loop of the DRs is zero we have a conflict. This is ! due to wonky dependence analysis which sometimes ! ends up using a zero distance in place of unknown. */ auto l1 = gimple_bb (DR_STMT (dr1))->loop_father; auto l2 = gimple_bb (DR_STMT (dr2))->loop_father; int idx = index_in_loop_nest (find_common_loop (l1, l2)->num, DDR_LOOP_NEST (ddr)); ! if (DDR_DIST_VECT (ddr, 0)[idx] == 0 ! /* Unless it is the outermost loop which is the one ! we eventually distribute. */ ! && idx != 0) this_dir = 2; } } *************** determine_reduction_stmt_1 (const loop_p *** 3492,3498 **** basic_block bb = bbs[i]; for (gphi_iterator bsi = gsi_start_phis (bb); !gsi_end_p (bsi); ! gsi_next_nondebug (&bsi)) { gphi *phi = bsi.phi (); if (virtual_operand_p (gimple_phi_result (phi))) --- 3499,3505 ---- basic_block bb = bbs[i]; for (gphi_iterator bsi = gsi_start_phis (bb); !gsi_end_p (bsi); ! gsi_next (&bsi)) { gphi *phi = bsi.phi (); if (virtual_operand_p (gimple_phi_result (phi))) *************** determine_reduction_stmt_1 (const loop_p *** 3505,3512 **** } } ! for (gimple_stmt_iterator bsi = gsi_start_bb (bb); !gsi_end_p (bsi); ! gsi_next_nondebug (&bsi), ++ninsns) { /* Bail out early for loops which are unlikely to match. */ if (ninsns > 16) --- 3512,3519 ---- } } ! for (gimple_stmt_iterator bsi = gsi_start_nondebug_bb (bb); ! !gsi_end_p (bsi); gsi_next_nondebug (&bsi), ++ninsns) { /* Bail out early for loops which are unlikely to match. */ if (ninsns > 16) diff -Nrcpad gcc-12.4.0/gcc/tree-sra.cc gcc-12.5.0-RC-20250704/gcc/tree-sra.cc *** gcc-12.4.0/gcc/tree-sra.cc Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/gcc/tree-sra.cc Fri Jul 4 07:24:45 2025 *************** scan_function (void) *** 1392,1400 **** break; case GIMPLE_CALL: ! for (i = 0; i < gimple_call_num_args (stmt); i++) ! ret |= build_access_from_expr (gimple_call_arg (stmt, i), ! stmt, false); t = gimple_call_lhs (stmt); if (t && !disqualify_if_bad_bb_terminating_stmt (stmt, t, NULL)) --- 1392,1407 ---- break; case GIMPLE_CALL: ! if (gimple_call_flags (stmt) & ECF_RETURNS_TWICE) ! { ! for (i = 0; i < gimple_call_num_args (stmt); i++) ! disqualify_base_of_expr (gimple_call_arg (stmt, i), ! "Passed to a returns_twice call."); ! } ! else ! for (i = 0; i < gimple_call_num_args (stmt); i++) ! ret |= build_access_from_expr (gimple_call_arg (stmt, i), ! stmt, false); t = gimple_call_lhs (stmt); if (t && !disqualify_if_bad_bb_terminating_stmt (stmt, t, NULL)) *************** create_total_scalarization_access (struc *** 3123,3129 **** access->grp_write = parent->grp_write; access->grp_total_scalarization = 1; access->grp_hint = 1; ! access->grp_same_access_path = path_comparable_for_same_access (expr); access->reverse = reverse_storage_order_for_component_p (expr); access->next_sibling = next_sibling; --- 3130,3136 ---- access->grp_write = parent->grp_write; access->grp_total_scalarization = 1; access->grp_hint = 1; ! access->grp_same_access_path = 0; access->reverse = reverse_storage_order_for_component_p (expr); access->next_sibling = next_sibling; *************** sra_modify_expr (tree *expr, gimple_stmt *** 3864,3871 **** } else { ! gassign *stmt; if (access->grp_partial_lhs) repl = force_gimple_operand_gsi (gsi, repl, true, NULL_TREE, true, GSI_SAME_STMT); --- 3871,3880 ---- } else { ! if (TREE_READONLY (access->base)) ! return false; + gassign *stmt; if (access->grp_partial_lhs) repl = force_gimple_operand_gsi (gsi, repl, true, NULL_TREE, true, GSI_SAME_STMT); diff -Nrcpad gcc-12.4.0/gcc/tree-ssa-alias.cc gcc-12.5.0-RC-20250704/gcc/tree-ssa-alias.cc *** gcc-12.4.0/gcc/tree-ssa-alias.cc Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/gcc/tree-ssa-alias.cc Fri Jul 4 07:24:45 2025 *************** along with GCC; see the file COPYING3. *** 87,96 **** This function tries to disambiguate two reference trees. ! bool ptr_deref_may_alias_global_p (tree) This function queries if dereferencing a pointer variable may ! alias global memory. More low-level disambiguators are available and documented in this file. Low-level disambiguators dealing with points-to --- 87,97 ---- This function tries to disambiguate two reference trees. ! bool ptr_deref_may_alias_global_p (tree, bool) This function queries if dereferencing a pointer variable may ! alias global memory. If bool argument is true, global memory ! is considered to also include function local memory that escaped. More low-level disambiguators are available and documented in this file. Low-level disambiguators dealing with points-to *************** view_converted_memref_p (tree base) *** 2041,2048 **** { if (TREE_CODE (base) != MEM_REF && TREE_CODE (base) != TARGET_MEM_REF) return false; ! return same_type_for_tbaa (TREE_TYPE (base), ! TREE_TYPE (TREE_OPERAND (base, 1))) != 1; } /* Return true if an indirect reference based on *PTR1 constrained --- 2042,2050 ---- { if (TREE_CODE (base) != MEM_REF && TREE_CODE (base) != TARGET_MEM_REF) return false; ! return (same_type_for_tbaa (TREE_TYPE (base), ! TREE_TYPE (TREE_TYPE (TREE_OPERAND (base, 1)))) ! != 1); } /* Return true if an indirect reference based on *PTR1 constrained *************** stmt_kills_ref_p (gimple *stmt, ao_ref * *** 3345,3355 **** && TREE_CODE (gimple_get_lhs (stmt)) != SSA_NAME /* The assignment is not necessarily carried out if it can throw and we can catch it in the current function where we could inspect ! the previous value. ??? We only need to care about the RHS throwing. For aggregate assignments or similar calls and non-call exceptions the LHS ! might throw as well. */ ! && !stmt_can_throw_internal (cfun, stmt)) { tree lhs = gimple_get_lhs (stmt); /* If LHS is literally a base of the access we are done. */ --- 3347,3364 ---- && TREE_CODE (gimple_get_lhs (stmt)) != SSA_NAME /* The assignment is not necessarily carried out if it can throw and we can catch it in the current function where we could inspect ! the previous value. Similarly if the function can throw externally ! and the ref does not die on the function return. ??? We only need to care about the RHS throwing. For aggregate assignments or similar calls and non-call exceptions the LHS ! might throw as well. ! ??? We also should care about possible longjmp, but since we ! do not understand that longjmp is not using global memory we will ! not consider a kill here since the function call will be considered ! as possibly using REF. */ ! && !stmt_can_throw_internal (cfun, stmt) ! && (!stmt_can_throw_external (cfun, stmt) ! || !ref_may_alias_global_p (ref, false))) { tree lhs = gimple_get_lhs (stmt); /* If LHS is literally a base of the access we are done. */ *************** stmt_kills_ref_p (gimple *stmt, ao_ref * *** 3446,3453 **** && node->binds_to_current_def_p () && (summary = get_modref_function_summary (node)) != NULL && summary->kills.length () && (!cfun->can_throw_non_call_exceptions ! || !stmt_can_throw_internal (cfun, stmt))) { for (auto kill : summary->kills) { --- 3455,3466 ---- && node->binds_to_current_def_p () && (summary = get_modref_function_summary (node)) != NULL && summary->kills.length () + /* Check that we can not trap while evaulating function + parameters. This check is overly conservative. */ && (!cfun->can_throw_non_call_exceptions ! || (!stmt_can_throw_internal (cfun, stmt) ! && (!stmt_can_throw_external (cfun, stmt) ! || !ref_may_alias_global_p (ref, false))))) { for (auto kill : summary->kills) { diff -Nrcpad gcc-12.4.0/gcc/tree-ssa-ccp.cc gcc-12.5.0-RC-20250704/gcc/tree-ssa-ccp.cc *** gcc-12.4.0/gcc/tree-ssa-ccp.cc Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/gcc/tree-ssa-ccp.cc Fri Jul 4 07:24:45 2025 *************** likely_value (gimple *stmt) *** 750,755 **** --- 750,766 ---- continue; if (is_gimple_min_invariant (op)) has_constant_operand = true; + else if (TREE_CODE (op) == CONSTRUCTOR) + { + unsigned j; + tree val; + FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (op), j, val) + if (CONSTANT_CLASS_P (val)) + { + has_constant_operand = true; + break; + } + } } if (has_constant_operand) *************** convert_atomic_bit_not (enum internal_fn *** 3306,3314 **** return nullptr; gimple_stmt_iterator gsi; - gsi = gsi_for_stmt (use_stmt); - gsi_remove (&gsi, true); tree var = make_ssa_name (TREE_TYPE (lhs)); use_stmt = gimple_build_assign (var, BIT_AND_EXPR, lhs, and_mask); gsi = gsi_for_stmt (use_not_stmt); gsi_insert_before (&gsi, use_stmt, GSI_NEW_STMT); --- 3317,3326 ---- return nullptr; gimple_stmt_iterator gsi; tree var = make_ssa_name (TREE_TYPE (lhs)); + /* use_stmt need to be removed after use_nop_stmt, + so use_lhs can be released. */ + gimple *use_stmt_removal = use_stmt; use_stmt = gimple_build_assign (var, BIT_AND_EXPR, lhs, and_mask); gsi = gsi_for_stmt (use_not_stmt); gsi_insert_before (&gsi, use_stmt, GSI_NEW_STMT); *************** convert_atomic_bit_not (enum internal_fn *** 3318,3323 **** --- 3330,3337 ---- gsi_insert_after (&gsi, g, GSI_NEW_STMT); gsi = gsi_for_stmt (use_not_stmt); gsi_remove (&gsi, true); + gsi = gsi_for_stmt (use_stmt_removal); + gsi_remove (&gsi, true); return use_stmt; } *************** optimize_atomic_bit_test_and (gimple_stm *** 3569,3576 **** */ } var = make_ssa_name (TREE_TYPE (use_rhs)); ! gsi = gsi_for_stmt (use_stmt); ! gsi_remove (&gsi, true); g = gimple_build_assign (var, BIT_AND_EXPR, use_rhs, and_mask); gsi = gsi_for_stmt (use_nop_stmt); --- 3583,3589 ---- */ } var = make_ssa_name (TREE_TYPE (use_rhs)); ! gimple* use_stmt_removal = use_stmt; g = gimple_build_assign (var, BIT_AND_EXPR, use_rhs, and_mask); gsi = gsi_for_stmt (use_nop_stmt); *************** optimize_atomic_bit_test_and (gimple_stm *** 3584,3589 **** --- 3597,3604 ---- gsi_insert_after (&gsi, g, GSI_NEW_STMT); gsi = gsi_for_stmt (use_nop_stmt); gsi_remove (&gsi, true); + gsi = gsi_for_stmt (use_stmt_removal); + gsi_remove (&gsi, true); } } else diff -Nrcpad gcc-12.4.0/gcc/tree-ssa-dom.cc gcc-12.5.0-RC-20250704/gcc/tree-ssa-dom.cc *** gcc-12.4.0/gcc/tree-ssa-dom.cc Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/gcc/tree-ssa-dom.cc Fri Jul 4 07:24:45 2025 *************** dom_opt_dom_walker::optimize_stmt (basic *** 2245,2251 **** /* Perform simple redundant store elimination. */ if (gimple_assign_single_p (stmt) ! && TREE_CODE (gimple_assign_lhs (stmt)) != SSA_NAME) { tree lhs = gimple_assign_lhs (stmt); tree rhs = gimple_assign_rhs1 (stmt); --- 2245,2253 ---- /* Perform simple redundant store elimination. */ if (gimple_assign_single_p (stmt) ! && TREE_CODE (gimple_assign_lhs (stmt)) != SSA_NAME ! && (TREE_CODE (gimple_assign_lhs (stmt)) != VAR_DECL ! || !DECL_HARD_REGISTER (gimple_assign_lhs (stmt)))) { tree lhs = gimple_assign_lhs (stmt); tree rhs = gimple_assign_rhs1 (stmt); diff -Nrcpad gcc-12.4.0/gcc/tree-ssa-dse.cc gcc-12.5.0-RC-20250704/gcc/tree-ssa-dse.cc *** gcc-12.4.0/gcc/tree-ssa-dse.cc Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/gcc/tree-ssa-dse.cc Fri Jul 4 07:24:45 2025 *************** along with GCC; see the file COPYING3. *** 45,50 **** --- 45,51 ---- #include "ipa-modref.h" #include "target.h" #include "tree-ssa-loop-niter.h" + #include "tree-ssa.h" /* This file implements dead store elimination. *************** increment_start_addr (gimple *stmt, tree *** 614,619 **** --- 615,621 ---- *where, build_int_cst (ptr_type_node, increment))); + STRIP_USELESS_TYPE_CONVERSION (*where); } /* STMT is builtin call that writes bytes in bitmap ORIG, some bytes are dead diff -Nrcpad gcc-12.4.0/gcc/tree-ssa-forwprop.cc gcc-12.5.0-RC-20250704/gcc/tree-ssa-forwprop.cc *** gcc-12.4.0/gcc/tree-ssa-forwprop.cc Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/gcc/tree-ssa-forwprop.cc Fri Jul 4 07:24:45 2025 *************** pass_forwprop::execute (function *fun) *** 3542,3550 **** else if (TREE_CODE (TREE_TYPE (lhs)) == COMPLEX_TYPE && gimple_assign_load_p (stmt) && !gimple_has_volatile_ops (stmt) ! && (TREE_CODE (gimple_assign_rhs1 (stmt)) ! != TARGET_MEM_REF) ! && !stmt_can_throw_internal (cfun, stmt)) { /* Rewrite loads used only in real/imagpart extractions to component-wise loads. */ --- 3542,3550 ---- else if (TREE_CODE (TREE_TYPE (lhs)) == COMPLEX_TYPE && gimple_assign_load_p (stmt) && !gimple_has_volatile_ops (stmt) ! && TREE_CODE (rhs) != TARGET_MEM_REF ! && TREE_CODE (rhs) != BIT_FIELD_REF ! && !stmt_can_throw_internal (fun, stmt)) { /* Rewrite loads used only in real/imagpart extractions to component-wise loads. */ diff -Nrcpad gcc-12.4.0/gcc/tree-ssa-loop-ivopts.cc gcc-12.5.0-RC-20250704/gcc/tree-ssa-loop-ivopts.cc *** gcc-12.4.0/gcc/tree-ssa-loop-ivopts.cc Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/gcc/tree-ssa-loop-ivopts.cc Fri Jul 4 07:24:45 2025 *************** find_givs_in_bb (struct ivopts_data *dat *** 1458,1464 **** gimple_stmt_iterator bsi; for (bsi = gsi_start_bb (bb); !gsi_end_p (bsi); gsi_next (&bsi)) ! find_givs_in_stmt (data, gsi_stmt (bsi)); } /* Finds general ivs. */ --- 1458,1465 ---- gimple_stmt_iterator bsi; for (bsi = gsi_start_bb (bb); !gsi_end_p (bsi); gsi_next (&bsi)) ! if (!is_gimple_debug (gsi_stmt (bsi))) ! find_givs_in_stmt (data, gsi_stmt (bsi)); } /* Finds general ivs. */ *************** get_alias_ptr_type_for_ptr_address (iv_u *** 7556,7562 **** case IFN_LEN_LOAD: case IFN_LEN_STORE: /* The second argument contains the correct alias type. */ ! gcc_assert (use->op_p = gimple_call_arg_ptr (call, 0)); return TREE_TYPE (gimple_call_arg (call, 1)); default: --- 7557,7563 ---- case IFN_LEN_LOAD: case IFN_LEN_STORE: /* The second argument contains the correct alias type. */ ! gcc_assert (use->op_p == gimple_call_arg_ptr (call, 0)); return TREE_TYPE (gimple_call_arg (call, 1)); default: diff -Nrcpad gcc-12.4.0/gcc/tree-ssa-loop-niter.cc gcc-12.5.0-RC-20250704/gcc/tree-ssa-loop-niter.cc *** gcc-12.4.0/gcc/tree-ssa-loop-niter.cc Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/gcc/tree-ssa-loop-niter.cc Fri Jul 4 07:24:45 2025 *************** number_of_iterations_lt_to_ne (tree type *** 1214,1230 **** if (integer_zerop (assumption)) goto end; } - if (mpz_cmp (mmod, bnds->below) < 0) - noloop = boolean_false_node; - else if (POINTER_TYPE_P (type)) - noloop = fold_build2 (GT_EXPR, boolean_type_node, - iv0->base, - fold_build_pointer_plus (iv1->base, tmod)); - else - noloop = fold_build2 (GT_EXPR, boolean_type_node, - iv0->base, - fold_build2 (PLUS_EXPR, type1, - iv1->base, tmod)); } else { --- 1214,1219 ---- *************** number_of_iterations_lt_to_ne (tree type *** 1240,1260 **** if (integer_zerop (assumption)) goto end; } - if (mpz_cmp (mmod, bnds->below) < 0) - noloop = boolean_false_node; - else if (POINTER_TYPE_P (type)) - noloop = fold_build2 (GT_EXPR, boolean_type_node, - fold_build_pointer_plus (iv0->base, - fold_build1 (NEGATE_EXPR, - type1, tmod)), - iv1->base); - else - noloop = fold_build2 (GT_EXPR, boolean_type_node, - fold_build2 (MINUS_EXPR, type1, - iv0->base, tmod), - iv1->base); } if (!integer_nonzerop (assumption)) niter->assumptions = fold_build2 (TRUTH_AND_EXPR, boolean_type_node, niter->assumptions, --- 1229,1243 ---- if (integer_zerop (assumption)) goto end; } } + /* IV0 < IV1 does not loop if IV0->base >= IV1->base. */ + if (mpz_cmp (mmod, bnds->below) < 0) + noloop = boolean_false_node; + else + noloop = fold_build2 (GE_EXPR, boolean_type_node, + iv0->base, iv1->base); + if (!integer_nonzerop (assumption)) niter->assumptions = fold_build2 (TRUTH_AND_EXPR, boolean_type_node, niter->assumptions, diff -Nrcpad gcc-12.4.0/gcc/tree-ssa-phiopt.cc gcc-12.5.0-RC-20250704/gcc/tree-ssa-phiopt.cc *** gcc-12.4.0/gcc/tree-ssa-phiopt.cc Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/gcc/tree-ssa-phiopt.cc Fri Jul 4 07:24:45 2025 *************** along with GCC; see the file COPYING3. *** 53,58 **** --- 53,59 ---- #include "gimple-match.h" #include "dbgcnt.h" #include "tree-ssa-propagate.h" + #include "tree-ssa-loop-niter.h" static unsigned int tree_ssa_phiopt_worker (bool, bool, bool); static bool two_value_replacement (basic_block, basic_block, edge, gphi *, *************** replace_phi_edge_with_variable (basic_bl *** 429,434 **** --- 430,446 ---- edge_to_remove = EDGE_SUCC (cond_block, 1); else edge_to_remove = EDGE_SUCC (cond_block, 0); + + /* If we are removing the cond on a loop exit, + reset number of iteration information of the loop. */ + if (loop_exits_from_bb_p (cond_block->loop_father, cond_block)) + { + auto loop = cond_block->loop_father; + free_numbers_of_iterations_estimates (loop); + loop->any_upper_bound = false; + loop->any_likely_upper_bound = false; + } + if (EDGE_COUNT (edge_to_remove->dest->preds) == 1) { e->flags |= EDGE_FALLTHRU; *************** value_replacement (basic_block cond_bb, *** 1310,1315 **** --- 1322,1330 ---- && jump_function_from_stmt (&arg1, stmt))) empty_or_with_defined_p = false; } + /* The middle bb is not empty if there are any phi nodes. */ + if (phi_nodes (middle_bb)) + empty_or_with_defined_p = false; cond = last_stmt (cond_bb); code = gimple_cond_code (cond); *************** cond_if_else_store_replacement_1 (basic_ *** 3293,3299 **** || else_assign == NULL || !gimple_assign_single_p (else_assign) || gimple_clobber_p (else_assign) ! || gimple_has_volatile_ops (else_assign)) return false; lhs = gimple_assign_lhs (then_assign); --- 3308,3316 ---- || else_assign == NULL || !gimple_assign_single_p (else_assign) || gimple_clobber_p (else_assign) ! || gimple_has_volatile_ops (else_assign) ! || stmt_references_abnormal_ssa_name (then_assign) ! || stmt_references_abnormal_ssa_name (else_assign)) return false; lhs = gimple_assign_lhs (then_assign); diff -Nrcpad gcc-12.4.0/gcc/tree-ssa-reassoc.cc gcc-12.5.0-RC-20250704/gcc/tree-ssa-reassoc.cc *** gcc-12.4.0/gcc/tree-ssa-reassoc.cc Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/gcc/tree-ssa-reassoc.cc Fri Jul 4 07:24:45 2025 *************** static inline void *** 403,409 **** insert_operand_rank (tree e, int64_t rank) { gcc_assert (rank > 0); ! gcc_assert (!operand_rank->put (e, rank)); } /* Given an expression E, return the rank of the expression. */ --- 403,410 ---- insert_operand_rank (tree e, int64_t rank) { gcc_assert (rank > 0); ! bool existed = operand_rank->put (e, rank); ! gcc_assert (!existed); } /* Given an expression E, return the rank of the expression. */ *************** optimize_range_tests_to_bit_test (enum t *** 3347,3353 **** continue; highj = ranges[j].high; if (highj == NULL_TREE) ! highj = TYPE_MAX_VALUE (type); wide_int mask2; exp2 = extract_bit_test_mask (ranges[j].exp, prec, lowi, lowj, highj, &mask2, NULL); --- 3348,3354 ---- continue; highj = ranges[j].high; if (highj == NULL_TREE) ! highj = TYPE_MAX_VALUE (TREE_TYPE (lowj)); wide_int mask2; exp2 = extract_bit_test_mask (ranges[j].exp, prec, lowi, lowj, highj, &mask2, NULL); diff -Nrcpad gcc-12.4.0/gcc/tree-ssa-sccvn.cc gcc-12.5.0-RC-20250704/gcc/tree-ssa-sccvn.cc *** gcc-12.4.0/gcc/tree-ssa-sccvn.cc Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/gcc/tree-ssa-sccvn.cc Fri Jul 4 07:24:45 2025 *************** copy_reference_ops_from_ref (tree ref, v *** 943,953 **** poly_offset_int off = (wi::to_poly_offset (this_offset) + (wi::to_offset (bit_offset) >> LOG2_BITS_PER_UNIT)); ! /* Probibit value-numbering zero offset components of addresses the same before the pass folding ! __builtin_object_size had a chance to run. */ if (TREE_CODE (orig) != ADDR_EXPR ! || maybe_ne (off, 0) || (cfun->curr_properties & PROP_objsz)) off.to_shwi (&temp.off); } --- 943,956 ---- poly_offset_int off = (wi::to_poly_offset (this_offset) + (wi::to_offset (bit_offset) >> LOG2_BITS_PER_UNIT)); ! /* Prohibit value-numbering zero offset components of addresses the same before the pass folding ! __builtin_object_size had a chance to run. Likewise ! for components of zero size at arbitrary offset. */ if (TREE_CODE (orig) != ADDR_EXPR ! || (TYPE_SIZE (temp.type) ! && integer_nonzerop (TYPE_SIZE (temp.type)) ! && maybe_ne (off, 0)) || (cfun->curr_properties & PROP_objsz)) off.to_shwi (&temp.off); } *************** copy_reference_ops_from_ref (tree ref, v *** 968,976 **** if (! temp.op2) temp.op2 = size_binop (EXACT_DIV_EXPR, TYPE_SIZE_UNIT (eltype), size_int (TYPE_ALIGN_UNIT (eltype))); if (poly_int_tree_p (temp.op0) && poly_int_tree_p (temp.op1) ! && TREE_CODE (temp.op2) == INTEGER_CST) { poly_offset_int off = ((wi::to_poly_offset (temp.op0) - wi::to_poly_offset (temp.op1)) --- 971,1001 ---- if (! temp.op2) temp.op2 = size_binop (EXACT_DIV_EXPR, TYPE_SIZE_UNIT (eltype), size_int (TYPE_ALIGN_UNIT (eltype))); + /* Prohibit value-numbering addresses of one-after-the-last + element ARRAY_REFs the same as addresses of other components + before the pass folding __builtin_object_size had a chance + to run. */ + bool avoid_oob = true; + if (TREE_CODE (orig) != ADDR_EXPR + || cfun->curr_properties & PROP_objsz) + avoid_oob = false; + else if (poly_int_tree_p (temp.op0)) + { + tree ub = array_ref_up_bound (ref); + if (ub + && poly_int_tree_p (ub) + /* ??? The C frontend for T[0] uses [0:] and the + C++ frontend [0:-1U]. See layout_type for how + awkward this is. */ + && !integer_minus_onep (ub) + && known_le (wi::to_poly_offset (temp.op0), + wi::to_poly_offset (ub))) + avoid_oob = false; + } if (poly_int_tree_p (temp.op0) && poly_int_tree_p (temp.op1) ! && TREE_CODE (temp.op2) == INTEGER_CST ! && !avoid_oob) { poly_offset_int off = ((wi::to_poly_offset (temp.op0) - wi::to_poly_offset (temp.op1)) *************** re_valueize: *** 1706,1711 **** --- 1731,1754 ---- && poly_int_tree_p (vro->op1) && TREE_CODE (vro->op2) == INTEGER_CST) { + /* Prohibit value-numbering addresses of one-after-the-last + element ARRAY_REFs the same as addresses of other components + before the pass folding __builtin_object_size had a chance + to run. */ + if (!(cfun->curr_properties & PROP_objsz) + && (*orig)[0].opcode == ADDR_EXPR) + { + tree dom = TYPE_DOMAIN ((*orig)[i + 1].type); + if (!dom + || !TYPE_MAX_VALUE (dom) + || !poly_int_tree_p (TYPE_MAX_VALUE (dom)) + || integer_minus_onep (TYPE_MAX_VALUE (dom))) + continue; + if (!known_le (wi::to_poly_offset (vro->op0), + wi::to_poly_offset (TYPE_MAX_VALUE (dom)))) + continue; + } + poly_offset_int off = ((wi::to_poly_offset (vro->op0) - wi::to_poly_offset (vro->op1)) * wi::to_offset (vro->op2) *************** eliminate_dom_walker::eliminate_stmt (ba *** 6542,6547 **** --- 6585,6592 ---- if (gimple_assign_single_p (stmt) && !gimple_has_volatile_ops (stmt) && !is_gimple_reg (gimple_assign_lhs (stmt)) + && (TREE_CODE (gimple_assign_lhs (stmt)) != VAR_DECL + || !DECL_HARD_REGISTER (gimple_assign_lhs (stmt))) && (TREE_CODE (gimple_assign_rhs1 (stmt)) == SSA_NAME || is_gimple_min_invariant (gimple_assign_rhs1 (stmt)))) { diff -Nrcpad gcc-12.4.0/gcc/tree-ssa-sink.cc gcc-12.5.0-RC-20250704/gcc/tree-ssa-sink.cc *** gcc-12.4.0/gcc/tree-ssa-sink.cc Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/gcc/tree-ssa-sink.cc Fri Jul 4 07:24:45 2025 *************** along with GCC; see the file COPYING3. *** 35,40 **** --- 35,41 ---- #include "tree-cfg.h" #include "cfgloop.h" #include "tree-eh.h" + #include "tree-dfa.h" /* TODO: 1. Sinking store only using scalar promotion (IE without moving the RHS): *************** sink_common_stores_to_bb (basic_block bb *** 523,529 **** gimple *def = SSA_NAME_DEF_STMT (arg); if (! is_gimple_assign (def) || stmt_can_throw_internal (cfun, def) ! || (gimple_phi_arg_edge (phi, i)->flags & EDGE_ABNORMAL)) { /* ??? We could handle some cascading with the def being another PHI. We'd have to insert multiple PHIs for --- 524,531 ---- gimple *def = SSA_NAME_DEF_STMT (arg); if (! is_gimple_assign (def) || stmt_can_throw_internal (cfun, def) ! || (gimple_phi_arg_edge (phi, i)->flags & EDGE_ABNORMAL) ! || stmt_references_abnormal_ssa_name (def)) { /* ??? We could handle some cascading with the def being another PHI. We'd have to insert multiple PHIs for diff -Nrcpad gcc-12.4.0/gcc/tree-ssa-structalias.cc gcc-12.5.0-RC-20250704/gcc/tree-ssa-structalias.cc *** gcc-12.4.0/gcc/tree-ssa-structalias.cc Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/gcc/tree-ssa-structalias.cc Fri Jul 4 07:24:45 2025 *************** static void *** 2882,2888 **** insert_vi_for_tree (tree t, varinfo_t vi) { gcc_assert (vi); ! gcc_assert (!vi_for_tree->put (t, vi)); } /* Find the variable info for tree T in VI_FOR_TREE. If T does not --- 2882,2889 ---- insert_vi_for_tree (tree t, varinfo_t vi) { gcc_assert (vi); ! bool existed = vi_for_tree->put (t, vi); ! gcc_assert (!existed); } /* Find the variable info for tree T in VI_FOR_TREE. If T does not diff -Nrcpad gcc-12.4.0/gcc/tree-ssa.cc gcc-12.5.0-RC-20250704/gcc/tree-ssa.cc *** gcc-12.4.0/gcc/tree-ssa.cc Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/gcc/tree-ssa.cc Fri Jul 4 07:24:45 2025 *************** maybe_rewrite_mem_ref_base (tree *tp, bi *** 1527,1533 **** } else if (TREE_CODE (TREE_TYPE (sym)) == COMPLEX_TYPE && useless_type_conversion_p (TREE_TYPE (*tp), ! TREE_TYPE (TREE_TYPE (sym)))) { *tp = build1 (integer_zerop (TREE_OPERAND (*tp, 1)) ? REALPART_EXPR : IMAGPART_EXPR, --- 1527,1536 ---- } else if (TREE_CODE (TREE_TYPE (sym)) == COMPLEX_TYPE && useless_type_conversion_p (TREE_TYPE (*tp), ! TREE_TYPE (TREE_TYPE (sym))) ! && (integer_zerop (TREE_OPERAND (*tp, 1)) ! || tree_int_cst_equal (TREE_OPERAND (*tp, 1), ! TYPE_SIZE_UNIT (TREE_TYPE (*tp))))) { *tp = build1 (integer_zerop (TREE_OPERAND (*tp, 1)) ? REALPART_EXPR : IMAGPART_EXPR, diff -Nrcpad gcc-12.4.0/gcc/tree-vect-data-refs.cc gcc-12.5.0-RC-20250704/gcc/tree-vect-data-refs.cc *** gcc-12.4.0/gcc/tree-vect-data-refs.cc Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/gcc/tree-vect-data-refs.cc Fri Jul 4 07:24:45 2025 *************** You should have received a copy of the G *** 19,24 **** --- 19,25 ---- along with GCC; see the file COPYING3. If not see . */ + #define INCLUDE_ALGORITHM #include "config.h" #include "system.h" #include "coretypes.h" *************** vect_analyze_data_ref_accesses (vec_info *** 3255,3266 **** DR_GROUP_NEXT_ELEMENT (lastinfo) = stmtinfo_b; lastinfo = stmtinfo_b; ! STMT_VINFO_SLP_VECT_ONLY (stmtinfo_a) ! = !can_group_stmts_p (stmtinfo_a, stmtinfo_b, false); ! if (dump_enabled_p () && STMT_VINFO_SLP_VECT_ONLY (stmtinfo_a)) ! dump_printf_loc (MSG_NOTE, vect_location, ! "Load suitable for SLP vectorization only.\n"); if (init_b == init_prev && !to_fixup.add (DR_GROUP_FIRST_ELEMENT (stmtinfo_a)) --- 3256,3270 ---- DR_GROUP_NEXT_ELEMENT (lastinfo) = stmtinfo_b; lastinfo = stmtinfo_b; ! if (! STMT_VINFO_SLP_VECT_ONLY (stmtinfo_a)) ! { ! STMT_VINFO_SLP_VECT_ONLY (stmtinfo_a) ! = !can_group_stmts_p (stmtinfo_a, stmtinfo_b, false); ! if (dump_enabled_p () && STMT_VINFO_SLP_VECT_ONLY (stmtinfo_a)) ! dump_printf_loc (MSG_NOTE, vect_location, ! "Load suitable for SLP vectorization only.\n"); ! } if (init_b == init_prev && !to_fixup.add (DR_GROUP_FIRST_ELEMENT (stmtinfo_a)) *************** vect_analyze_data_ref_accesses (vec_info *** 3304,3310 **** { DR_GROUP_NEXT_ELEMENT (g) = DR_GROUP_NEXT_ELEMENT (next); if (!newgroup) ! newgroup = next; else DR_GROUP_NEXT_ELEMENT (ng) = next; ng = next; --- 3308,3318 ---- { DR_GROUP_NEXT_ELEMENT (g) = DR_GROUP_NEXT_ELEMENT (next); if (!newgroup) ! { ! newgroup = next; ! STMT_VINFO_SLP_VECT_ONLY (newgroup) ! = STMT_VINFO_SLP_VECT_ONLY (grp); ! } else DR_GROUP_NEXT_ELEMENT (ng) = next; ng = next; *************** vect_prune_runtime_alias_test_list (loop *** 3655,3661 **** poly_uint64 lower_bound; tree segment_length_a, segment_length_b; unsigned HOST_WIDE_INT access_size_a, access_size_b; ! unsigned int align_a, align_b; /* Ignore the alias if the VF we chose ended up being no greater than the dependence distance. */ --- 3663,3669 ---- poly_uint64 lower_bound; tree segment_length_a, segment_length_b; unsigned HOST_WIDE_INT access_size_a, access_size_b; ! unsigned HOST_WIDE_INT align_a, align_b; /* Ignore the alias if the VF we chose ended up being no greater than the dependence distance. */ *************** vect_prune_runtime_alias_test_list (loop *** 3812,3817 **** --- 3820,3832 ---- stmt_info_b->stmt); } + /* dr_with_seg_len requires the alignment to apply to the segment length + and access size, not just the start address. The access size can be + smaller than the pointer alignment for grouped accesses and bitfield + references; see PR115192 and PR116125 respectively. */ + align_a = std::min (align_a, least_bit_hwi (access_size_a)); + align_b = std::min (align_b, least_bit_hwi (access_size_b)); + dr_with_seg_len dr_a (dr_info_a->dr, segment_length_a, access_size_a, align_a); dr_with_seg_len dr_b (dr_info_b->dr, segment_length_b, diff -Nrcpad gcc-12.4.0/gcc/tree-vect-generic.cc gcc-12.5.0-RC-20250704/gcc/tree-vect-generic.cc *** gcc-12.4.0/gcc/tree-vect-generic.cc Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/gcc/tree-vect-generic.cc Fri Jul 4 07:24:45 2025 *************** do_unop (gimple_stmt_iterator *gsi, tree *** 202,208 **** tree b ATTRIBUTE_UNUSED, tree bitpos, tree bitsize, enum tree_code code, tree type ATTRIBUTE_UNUSED) { ! a = tree_vec_extract (gsi, inner_type, a, bitsize, bitpos); return gimplify_build1 (gsi, code, inner_type, a); } --- 202,216 ---- tree b ATTRIBUTE_UNUSED, tree bitpos, tree bitsize, enum tree_code code, tree type ATTRIBUTE_UNUSED) { ! tree rhs_type = inner_type; ! ! /* For ABSU_EXPR, use the signed type for the rhs if the rhs was signed. */ ! if (code == ABSU_EXPR ! && ANY_INTEGRAL_TYPE_P (TREE_TYPE (a)) ! && !TYPE_UNSIGNED (TREE_TYPE (a))) ! rhs_type = signed_type_for (rhs_type); ! ! a = tree_vec_extract (gsi, rhs_type, a, bitsize, bitpos); return gimplify_build1 (gsi, code, inner_type, a); } diff -Nrcpad gcc-12.4.0/gcc/tree-vect-loop.cc gcc-12.5.0-RC-20250704/gcc/tree-vect-loop.cc *** gcc-12.4.0/gcc/tree-vect-loop.cc Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/gcc/tree-vect-loop.cc Fri Jul 4 07:24:45 2025 *************** needs_fold_left_reduction_p (tree type, *** 3379,3385 **** static bool check_reduction_path (dump_user_location_t loc, loop_p loop, gphi *phi, tree loop_arg, code_helper *code, ! vec > &path) { auto_bitmap visited; tree lookfor = PHI_RESULT (phi); --- 3379,3386 ---- static bool check_reduction_path (dump_user_location_t loc, loop_p loop, gphi *phi, tree loop_arg, code_helper *code, ! vec > &path, ! bool inner_loop_of_double_reduc) { auto_bitmap visited; tree lookfor = PHI_RESULT (phi); *************** pop: *** 3509,3515 **** break; } /* Check there's only a single stmt the op is used on. For the ! not value-changing tail and the last stmt allow out-of-loop uses. ??? We could relax this and handle arbitrary live stmts by forcing a scalar epilogue for example. */ imm_use_iterator imm_iter; --- 3510,3517 ---- break; } /* Check there's only a single stmt the op is used on. For the ! not value-changing tail and the last stmt allow out-of-loop uses, ! but not when this is the inner loop of a double reduction. ??? We could relax this and handle arbitrary live stmts by forcing a scalar epilogue for example. */ imm_use_iterator imm_iter; *************** pop: *** 3518,3524 **** unsigned cnt = 0; FOR_EACH_IMM_USE_STMT (op_use_stmt, imm_iter, op.ops[opi]) if (!is_gimple_debug (op_use_stmt) ! && (*code != ERROR_MARK || flow_bb_inside_loop_p (loop, gimple_bb (op_use_stmt)))) FOR_EACH_IMM_USE_ON_STMT (use_p, imm_iter) cnt++; --- 3520,3526 ---- unsigned cnt = 0; FOR_EACH_IMM_USE_STMT (op_use_stmt, imm_iter, op.ops[opi]) if (!is_gimple_debug (op_use_stmt) ! && ((*code != ERROR_MARK || inner_loop_of_double_reduc) || flow_bb_inside_loop_p (loop, gimple_bb (op_use_stmt)))) FOR_EACH_IMM_USE_ON_STMT (use_p, imm_iter) cnt++; *************** check_reduction_path (dump_user_location *** 3537,3543 **** { auto_vec > path; code_helper code_; ! return (check_reduction_path (loc, loop, phi, loop_arg, &code_, path) && code_ == code); } --- 3539,3545 ---- { auto_vec > path; code_helper code_; ! return (check_reduction_path (loc, loop, phi, loop_arg, &code_, path, false) && code_ == code); } *************** vect_is_simple_reduction (loop_vec_info *** 3737,3743 **** auto_vec > path; code_helper code; if (check_reduction_path (vect_location, loop, phi, latch_def, &code, ! path)) { STMT_VINFO_REDUC_CODE (phi_info) = code; if (code == COND_EXPR && !nested_in_vect_loop) --- 3739,3745 ---- auto_vec > path; code_helper code; if (check_reduction_path (vect_location, loop, phi, latch_def, &code, ! path, inner_loop_of_double_reduc)) { STMT_VINFO_REDUC_CODE (phi_info) = code; if (code == COND_EXPR && !nested_in_vect_loop) diff -Nrcpad gcc-12.4.0/gcc/tree-vect-slp.cc gcc-12.5.0-RC-20250704/gcc/tree-vect-slp.cc *** gcc-12.4.0/gcc/tree-vect-slp.cc Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/gcc/tree-vect-slp.cc Fri Jul 4 07:24:45 2025 *************** vect_build_slp_tree_2 (vec_info *vinfo, *** 1825,1830 **** --- 1825,1833 ---- else if (is_a (vinfo) /* ??? We don't handle !vect_internal_def defs below. */ && STMT_VINFO_DEF_TYPE (stmt_info) == vect_internal_def + /* ??? Do not associate a reduction, this will wreck REDUC_IDX + mapping as long as that exists on the stmt_info level. */ + && STMT_VINFO_REDUC_IDX (stmt_info) == -1 && is_gimple_assign (stmt_info->stmt) && (associative_tree_code (gimple_assign_rhs_code (stmt_info->stmt)) || gimple_assign_rhs_code (stmt_info->stmt) == MINUS_EXPR) *************** vect_slp_function (function *fun) *** 6259,6264 **** --- 6262,6278 ---- bbs[0]->loop_father->num, bb->index); split = true; } + else if (!bbs.is_empty () + && bb->loop_father->header == bb + && bb->loop_father->dont_vectorize) + { + if (dump_enabled_p ()) + dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location, + "splitting region at dont-vectorize loop %d " + "entry at bb%d\n", + bb->loop_father->num, bb->index); + split = true; + } if (split && !bbs.is_empty ()) { *************** vect_slp_function (function *fun) *** 6266,6284 **** bbs.truncate (0); } - /* We need to be able to insert at the head of the region which - we cannot for region starting with a returns-twice call. */ if (bbs.is_empty ()) ! if (gcall *first = safe_dyn_cast (first_stmt (bb))) ! if (gimple_call_flags (first) & ECF_RETURNS_TWICE) ! { ! if (dump_enabled_p ()) ! dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location, ! "skipping bb%d as start of region as it " ! "starts with returns-twice call\n", ! bb->index); ! continue; ! } bbs.safe_push (bb); --- 6280,6304 ---- bbs.truncate (0); } if (bbs.is_empty ()) ! { ! /* We need to be able to insert at the head of the region which ! we cannot for region starting with a returns-twice call. */ ! if (gcall *first = safe_dyn_cast (first_stmt (bb))) ! if (gimple_call_flags (first) & ECF_RETURNS_TWICE) ! { ! if (dump_enabled_p ()) ! dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location, ! "skipping bb%d as start of region as it " ! "starts with returns-twice call\n", ! bb->index); ! continue; ! } ! /* If the loop this BB belongs to is marked as not to be vectorized ! honor that also for BB vectorization. */ ! if (bb->loop_father->dont_vectorize) ! continue; ! } bbs.safe_push (bb); diff -Nrcpad gcc-12.4.0/gcc/tree-vect-stmts.cc gcc-12.5.0-RC-20250704/gcc/tree-vect-stmts.cc *** gcc-12.4.0/gcc/tree-vect-stmts.cc Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/gcc/tree-vect-stmts.cc Fri Jul 4 07:24:45 2025 *************** get_load_store_type (vec_info *vinfo, s *** 2493,2498 **** --- 2493,2499 ---- else if (!TYPE_VECTOR_SUBPARTS (vectype).is_constant () || !TYPE_VECTOR_SUBPARTS (gs_info->offset_vectype).is_constant () + || VECTOR_BOOLEAN_TYPE_P (gs_info->offset_vectype) || !constant_multiple_p (TYPE_VECTOR_SUBPARTS (gs_info->offset_vectype), TYPE_VECTOR_SUBPARTS (vectype))) diff -Nrcpad gcc-12.4.0/gcc/tree.cc gcc-12.5.0-RC-20250704/gcc/tree.cc *** gcc-12.4.0/gcc/tree.cc Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/gcc/tree.cc Fri Jul 4 07:24:45 2025 *************** skip_simple_arithmetic (tree expr) *** 3967,3973 **** expr = TREE_OPERAND (expr, 0); else if (BINARY_CLASS_P (expr)) { ! if (tree_invariant_p (TREE_OPERAND (expr, 1))) expr = TREE_OPERAND (expr, 0); else if (tree_invariant_p (TREE_OPERAND (expr, 0))) expr = TREE_OPERAND (expr, 1); --- 3967,3985 ---- expr = TREE_OPERAND (expr, 0); else if (BINARY_CLASS_P (expr)) { ! /* Before commutative binary operands are canonicalized, ! it is quite common to have constants in the first operand. ! Check for that common case first so that we don't walk ! large expressions with tree_invariant_p unnecessarily. ! This can still have terrible compile time complexity, ! we should limit the depth of the tree_invariant_p and ! skip_simple_arithmetic recursion. */ ! if ((TREE_CONSTANT (TREE_OPERAND (expr, 0)) ! || (TREE_READONLY (TREE_OPERAND (expr, 0)) ! && !TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 0)))) ! && tree_invariant_p (TREE_OPERAND (expr, 0))) ! expr = TREE_OPERAND (expr, 1); ! else if (tree_invariant_p (TREE_OPERAND (expr, 1))) expr = TREE_OPERAND (expr, 0); else if (tree_invariant_p (TREE_OPERAND (expr, 0))) expr = TREE_OPERAND (expr, 1); diff -Nrcpad gcc-12.4.0/gcc/value-range.cc gcc-12.5.0-RC-20250704/gcc/value-range.cc *** gcc-12.4.0/gcc/value-range.cc Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/gcc/value-range.cc Fri Jul 4 07:24:45 2025 *************** irange::invert () *** 1856,1869 **** signop sign = TYPE_SIGN (ttype); wide_int type_min = wi::min_value (prec, sign); wide_int type_max = wi::max_value (prec, sign); - if (m_num_ranges == m_max_ranges - && lower_bound () != type_min - && upper_bound () != type_max) - { - m_base[1] = wide_int_to_tree (ttype, type_max); - m_num_ranges = 1; - return; - } // The algorithm is as follows. To calculate INVERT ([a,b][c,d]), we // generate [-MIN, a-1][b+1, c-1][d+1, MAX]. // --- 1856,1861 ---- diff -Nrcpad gcc-12.4.0/gcc/varasm.cc gcc-12.5.0-RC-20250704/gcc/varasm.cc *** gcc-12.4.0/gcc/varasm.cc Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/gcc/varasm.cc Fri Jul 4 07:24:45 2025 *************** decl_binds_to_current_def_p (const_tree *** 7621,7626 **** --- 7621,7628 ---- for all other declaration types. */ if (DECL_WEAK (decl)) return false; + if (DECL_COMDAT_GROUP (decl)) + return false; if (DECL_COMMON (decl) && (DECL_INITIAL (decl) == NULL || (!in_lto_p && DECL_INITIAL (decl) == error_mark_node))) diff -Nrcpad gcc-12.4.0/libatomic/ChangeLog gcc-12.5.0-RC-20250704/libatomic/ChangeLog *** gcc-12.4.0/libatomic/ChangeLog Thu Jun 20 08:09:01 2024 --- gcc-12.5.0-RC-20250704/libatomic/ChangeLog Fri Jul 4 07:24:45 2025 *************** *** 1,3 **** --- 1,29 ---- + 2025-06-13 Jakub Jelinek + + Backported from master: + 2025-04-16 Jakub Jelinek + + PR libgcc/101075 + PR libgcc/119796 + * config/mingw/lock.c (libat_lock_n, libat_unlock_n): Start with + computing how many locks will be needed and take into account + ((uintptr_t)ptr % WATCH_SIZE). If some locks from the end of the + locks array and others from the start of it will be needed, first + lock the ones from the start followed by ones from the end. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2025-04-16 Jakub Jelinek + + PR libgcc/101075 + PR libgcc/119796 + * config/posix/lock.c (libat_lock_n, libat_unlock_n): Start with + computing how many locks will be needed and take into account + ((uintptr_t)ptr % WATCH_SIZE). If some locks from the end of the + locks array and others from the start of it will be needed, first + lock the ones from the start followed by ones from the end. + 2024-06-20 Release Manager * GCC 12.4.0 released. diff -Nrcpad gcc-12.4.0/libatomic/config/mingw/lock.c gcc-12.5.0-RC-20250704/libatomic/config/mingw/lock.c *** gcc-12.4.0/libatomic/config/mingw/lock.c Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/libatomic/config/mingw/lock.c Fri Jul 4 07:24:45 2025 *************** libat_lock_n (void *ptr, size_t n) *** 86,106 **** { uintptr_t h = addr_hash (ptr); size_t i = 0; /* Don't lock more than all the locks we have. */ ! if (n > PAGE_SIZE) ! n = PAGE_SIZE; ! do { if (!locks[h].mutex) ! locks[h].mutex = CreateMutex (NULL, FALSE, NULL); ! WaitForSingleObject (locks[h].mutex, INFINITE); ! if (++h == NLOCKS) ! h = 0; ! i += WATCH_SIZE; } - while (i < n); } void --- 86,115 ---- { uintptr_t h = addr_hash (ptr); size_t i = 0; + size_t nlocks + = (n + ((uintptr_t)ptr % WATCH_SIZE) + WATCH_SIZE - 1) / WATCH_SIZE; /* Don't lock more than all the locks we have. */ ! if (nlocks > NLOCKS) ! nlocks = NLOCKS; ! if (__builtin_expect (h + nlocks > NLOCKS, 0)) ! { ! size_t j = h + nlocks - NLOCKS; ! for (; i < j; ++i) ! { ! if (!locks[i].mutex) ! locks[i].mutex = CreateMutex (NULL, FALSE, NULL); ! WaitForSingleObject (locks[i].mutex, INFINITE); ! } ! } ! ! for (; i < nlocks; ++i) { if (!locks[h].mutex) ! locks[h].mutex = CreateMutex (NULL, FALSE, NULL); ! WaitForSingleObject (locks[h++].mutex, INFINITE); } } void *************** libat_unlock_n (void *ptr, size_t n) *** 108,124 **** { uintptr_t h = addr_hash (ptr); size_t i = 0; ! if (n > PAGE_SIZE) ! n = PAGE_SIZE; ! do { ! if (locks[h].mutex) ! ReleaseMutex (locks[h].mutex); ! if (++h == NLOCKS) ! h = 0; ! i += WATCH_SIZE; } ! while (i < n); } --- 117,138 ---- { uintptr_t h = addr_hash (ptr); size_t i = 0; + size_t nlocks + = (n + ((uintptr_t)ptr % WATCH_SIZE) + WATCH_SIZE - 1) / WATCH_SIZE; ! /* Don't lock more than all the locks we have. */ ! if (nlocks > NLOCKS) ! nlocks = NLOCKS; ! if (__builtin_expect (h + nlocks > NLOCKS, 0)) { ! size_t j = h + nlocks - NLOCKS; ! for (; i < j; ++i) ! if (locks[i].mutex) ! ReleaseMutex (locks[i].mutex); } ! ! for (; i < nlocks; ++i, ++h) ! if (locks[h].mutex) ! ReleaseMutex (locks[h].mutex); } diff -Nrcpad gcc-12.4.0/libatomic/config/posix/lock.c gcc-12.5.0-RC-20250704/libatomic/config/posix/lock.c *** gcc-12.4.0/libatomic/config/posix/lock.c Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/libatomic/config/posix/lock.c Fri Jul 4 07:24:45 2025 *************** libat_lock_n (void *ptr, size_t n) *** 81,99 **** { uintptr_t h = addr_hash (ptr); size_t i = 0; /* Don't lock more than all the locks we have. */ ! if (n > PAGE_SIZE) ! n = PAGE_SIZE; ! do { ! pthread_mutex_lock (&locks[h].mutex); ! if (++h == NLOCKS) ! h = 0; ! i += WATCH_SIZE; } ! while (i < n); } void --- 81,102 ---- { uintptr_t h = addr_hash (ptr); size_t i = 0; + size_t nlocks + = (n + ((uintptr_t)ptr % WATCH_SIZE) + WATCH_SIZE - 1) / WATCH_SIZE; /* Don't lock more than all the locks we have. */ ! if (nlocks > NLOCKS) ! nlocks = NLOCKS; ! if (__builtin_expect (h + nlocks > NLOCKS, 0)) { ! size_t j = h + nlocks - NLOCKS; ! for (; i < j; ++i) ! pthread_mutex_lock (&locks[i].mutex); } ! ! for (; i < nlocks; ++i) ! pthread_mutex_lock (&locks[h++].mutex); } void *************** libat_unlock_n (void *ptr, size_t n) *** 101,116 **** { uintptr_t h = addr_hash (ptr); size_t i = 0; ! if (n > PAGE_SIZE) ! n = PAGE_SIZE; ! do { ! pthread_mutex_unlock (&locks[h].mutex); ! if (++h == NLOCKS) ! h = 0; ! i += WATCH_SIZE; } ! while (i < n); } --- 104,123 ---- { uintptr_t h = addr_hash (ptr); size_t i = 0; + size_t nlocks + = (n + ((uintptr_t)ptr % WATCH_SIZE) + WATCH_SIZE - 1) / WATCH_SIZE; ! /* Don't lock more than all the locks we have. */ ! if (nlocks > NLOCKS) ! nlocks = NLOCKS; ! if (__builtin_expect (h + nlocks > NLOCKS, 0)) { ! size_t j = h + nlocks - NLOCKS; ! for (; i < j; ++i) ! pthread_mutex_unlock (&locks[i].mutex); } ! ! for (; i < nlocks; ++i) ! pthread_mutex_unlock (&locks[h++].mutex); } diff -Nrcpad gcc-12.4.0/libffi/doc/libffi.info gcc-12.5.0-RC-20250704/libffi/doc/libffi.info *** gcc-12.4.0/libffi/doc/libffi.info Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/libffi/doc/libffi.info Fri Jul 4 07:45:04 2025 *************** *** 0 **** --- 1,1057 ---- + This is libffi.info, produced by makeinfo version 6.5 from libffi.texi. + + This manual is for libffi, a portable foreign function interface + library. + + Copyright (C) 2008-2019, 2021 Anthony Green and Red Hat, Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + INFO-DIR-SECTION Development + START-INFO-DIR-ENTRY + * libffi: (libffi). Portable foreign function interface library. + END-INFO-DIR-ENTRY + +  + File: libffi.info, Node: Top, Next: Introduction, Up: (dir) + + libffi + ****** + + This manual is for libffi, a portable foreign function interface + library. + + Copyright (C) 2008-2019, 2021 Anthony Green and Red Hat, Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + * Menu: + + * Introduction:: What is libffi? + * Using libffi:: How to use libffi. + * Memory Usage:: Where memory for closures comes from. + * Missing Features:: Things libffi can't do. + * Index:: Index. + +  + File: libffi.info, Node: Introduction, Next: Using libffi, Prev: Top, Up: Top + + 1 What is libffi? + ***************** + + Compilers for high level languages generate code that follow certain + conventions. These conventions are necessary, in part, for separate + compilation to work. One such convention is the "calling convention". + The calling convention is a set of assumptions made by the compiler + about where function arguments will be found on entry to a function. A + calling convention also specifies where the return value for a function + is found. The calling convention is also sometimes called the "ABI" or + "Application Binary Interface". + + Some programs may not know at the time of compilation what arguments + are to be passed to a function. For instance, an interpreter may be + told at run-time about the number and types of arguments used to call a + given function. 'Libffi' can be used in such programs to provide a + bridge from the interpreter program to compiled code. + + The 'libffi' library provides a portable, high level programming + interface to various calling conventions. This allows a programmer to + call any function specified by a call interface description at run time. + + FFI stands for Foreign Function Interface. A foreign function + interface is the popular name for the interface that allows code written + in one language to call code written in another language. The 'libffi' + library really only provides the lowest, machine dependent layer of a + fully featured foreign function interface. A layer must exist above + 'libffi' that handles type conversions for values passed between the two + languages. + +  + File: libffi.info, Node: Using libffi, Next: Memory Usage, Prev: Introduction, Up: Top + + 2 Using libffi + ************** + + * Menu: + + * The Basics:: The basic libffi API. + * Simple Example:: A simple example. + * Types:: libffi type descriptions. + * Multiple ABIs:: Different passing styles on one platform. + * The Closure API:: Writing a generic function. + * Closure Example:: A closure example. + * Thread Safety:: Thread safety. + +  + File: libffi.info, Node: The Basics, Next: Simple Example, Up: Using libffi + + 2.1 The Basics + ============== + + 'Libffi' assumes that you have a pointer to the function you wish to + call and that you know the number and types of arguments to pass it, as + well as the return type of the function. + + The first thing you must do is create an 'ffi_cif' object that + matches the signature of the function you wish to call. This is a + separate step because it is common to make multiple calls using a single + 'ffi_cif'. The "cif" in 'ffi_cif' stands for Call InterFace. To + prepare a call interface object, use the function 'ffi_prep_cif'. + + -- Function: ffi_status ffi_prep_cif (ffi_cif *CIF, ffi_abi ABI, + unsigned int NARGS, ffi_type *RTYPE, ffi_type **ARGTYPES) + This initializes CIF according to the given parameters. + + ABI is the ABI to use; normally 'FFI_DEFAULT_ABI' is what you want. + *note Multiple ABIs:: for more information. + + NARGS is the number of arguments that this function accepts. + + RTYPE is a pointer to an 'ffi_type' structure that describes the + return type of the function. *Note Types::. + + ARGTYPES is a vector of 'ffi_type' pointers. ARGTYPES must have + NARGS elements. If NARGS is 0, this argument is ignored. + + 'ffi_prep_cif' returns a 'libffi' status code, of type + 'ffi_status'. This will be either 'FFI_OK' if everything worked + properly; 'FFI_BAD_TYPEDEF' if one of the 'ffi_type' objects is + incorrect; or 'FFI_BAD_ABI' if the ABI parameter is invalid. + + If the function being called is variadic (varargs) then + 'ffi_prep_cif_var' must be used instead of 'ffi_prep_cif'. + + -- Function: ffi_status ffi_prep_cif_var (ffi_cif *CIF, ffi_abi ABI, + unsigned int NFIXEDARGS, unsigned int NTOTALARGS, ffi_type + *RTYPE, ffi_type **ARGTYPES) + This initializes CIF according to the given parameters for a call + to a variadic function. In general its operation is the same as + for 'ffi_prep_cif' except that: + + NFIXEDARGS is the number of fixed arguments, prior to any variadic + arguments. It must be greater than zero. + + NTOTALARGS the total number of arguments, including variadic and + fixed arguments. ARGTYPES must have this many elements. + + 'ffi_prep_cif_var' will return 'FFI_BAD_ARGTYPE' if any of the + variable argument types are 'ffi_type_float' (promote to + 'ffi_type_double' first), or any integer type small than an int + (promote to an int-sized type first). + + Note that, different cif's must be prepped for calls to the same + function when different numbers of arguments are passed. + + Also note that a call to 'ffi_prep_cif_var' with + NFIXEDARGS=NOTOTALARGS is NOT equivalent to a call to + 'ffi_prep_cif'. + + Note that the resulting 'ffi_cif' holds pointers to all the + 'ffi_type' objects that were used during initialization. You must + ensure that these type objects have a lifetime at least as long as that + of the 'ffi_cif'. + + To call a function using an initialized 'ffi_cif', use the 'ffi_call' + function: + + -- Function: void ffi_call (ffi_cif *CIF, void *FN, void *RVALUE, void + **AVALUES) + This calls the function FN according to the description given in + CIF. CIF must have already been prepared using 'ffi_prep_cif'. + + RVALUE is a pointer to a chunk of memory that will hold the result + of the function call. This must be large enough to hold the + result, no smaller than the system register size (generally 32 or + 64 bits), and must be suitably aligned; it is the caller's + responsibility to ensure this. If CIF declares that the function + returns 'void' (using 'ffi_type_void'), then RVALUE is ignored. + + In most situations, 'libffi' will handle promotion according to the + ABI. However, for historical reasons, there is a special case with + return values that must be handled by your code. In particular, + for integral (not 'struct') types that are narrower than the system + register size, the return value will be widened by 'libffi'. + 'libffi' provides a type, 'ffi_arg', that can be used as the return + type. For example, if the CIF was defined with a return type of + 'char', 'libffi' will try to store a full 'ffi_arg' into the return + value. + + AVALUES is a vector of 'void *' pointers that point to the memory + locations holding the argument values for a call. If CIF declares + that the function has no arguments (i.e., NARGS was 0), then + AVALUES is ignored. Note that argument values may be modified by + the callee (for instance, structs passed by value); the burden of + copying pass-by-value arguments is placed on the caller. + + Note that while the return value must be register-sized, arguments + should exactly match their declared type. For example, if an + argument is a 'short', then the entry in AVALUES should point to an + object declared as 'short'; but if the return type is 'short', then + RVALUE should point to an object declared as a larger type - + usually 'ffi_arg'. + +  + File: libffi.info, Node: Simple Example, Next: Types, Prev: The Basics, Up: Using libffi + + 2.2 Simple Example + ================== + + Here is a trivial example that calls 'puts' a few times. + + #include + #include + + int main() + { + ffi_cif cif; + ffi_type *args[1]; + void *values[1]; + char *s; + ffi_arg rc; + + /* Initialize the argument info vectors */ + args[0] = &ffi_type_pointer; + values[0] = &s; + + /* Initialize the cif */ + if (ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, + &ffi_type_sint, args) == FFI_OK) + { + s = "Hello World!"; + ffi_call(&cif, puts, &rc, values); + /* rc now holds the result of the call to puts */ + + /* values holds a pointer to the function's arg, so to + call puts() again all we need to do is change the + value of s */ + s = "This is cool!"; + ffi_call(&cif, puts, &rc, values); + } + + return 0; + } + +  + File: libffi.info, Node: Types, Next: Multiple ABIs, Prev: Simple Example, Up: Using libffi + + 2.3 Types + ========= + + * Menu: + + * Primitive Types:: Built-in types. + * Structures:: Structure types. + * Size and Alignment:: Size and alignment of types. + * Arrays Unions Enums:: Arrays, unions, and enumerations. + * Type Example:: Structure type example. + * Complex:: Complex types. + * Complex Type Example:: Complex type example. + +  + File: libffi.info, Node: Primitive Types, Next: Structures, Up: Types + + 2.3.1 Primitive Types + --------------------- + + 'Libffi' provides a number of built-in type descriptors that can be used + to describe argument and return types: + + 'ffi_type_void' + The type 'void'. This cannot be used for argument types, only for + return values. + + 'ffi_type_uint8' + An unsigned, 8-bit integer type. + + 'ffi_type_sint8' + A signed, 8-bit integer type. + + 'ffi_type_uint16' + An unsigned, 16-bit integer type. + + 'ffi_type_sint16' + A signed, 16-bit integer type. + + 'ffi_type_uint32' + An unsigned, 32-bit integer type. + + 'ffi_type_sint32' + A signed, 32-bit integer type. + + 'ffi_type_uint64' + An unsigned, 64-bit integer type. + + 'ffi_type_sint64' + A signed, 64-bit integer type. + + 'ffi_type_float' + The C 'float' type. + + 'ffi_type_double' + The C 'double' type. + + 'ffi_type_uchar' + The C 'unsigned char' type. + + 'ffi_type_schar' + The C 'signed char' type. (Note that there is not an exact + equivalent to the C 'char' type in 'libffi'; ordinarily you should + either use 'ffi_type_schar' or 'ffi_type_uchar' depending on + whether 'char' is signed.) + + 'ffi_type_ushort' + The C 'unsigned short' type. + + 'ffi_type_sshort' + The C 'short' type. + + 'ffi_type_uint' + The C 'unsigned int' type. + + 'ffi_type_sint' + The C 'int' type. + + 'ffi_type_ulong' + The C 'unsigned long' type. + + 'ffi_type_slong' + The C 'long' type. + + 'ffi_type_longdouble' + On platforms that have a C 'long double' type, this is defined. On + other platforms, it is not. + + 'ffi_type_pointer' + A generic 'void *' pointer. You should use this for all pointers, + regardless of their real type. + + 'ffi_type_complex_float' + The C '_Complex float' type. + + 'ffi_type_complex_double' + The C '_Complex double' type. + + 'ffi_type_complex_longdouble' + The C '_Complex long double' type. On platforms that have a C + 'long double' type, this is defined. On other platforms, it is + not. + + Each of these is of type 'ffi_type', so you must take the address + when passing to 'ffi_prep_cif'. + +  + File: libffi.info, Node: Structures, Next: Size and Alignment, Prev: Primitive Types, Up: Types + + 2.3.2 Structures + ---------------- + + 'libffi' is perfectly happy passing structures back and forth. You must + first describe the structure to 'libffi' by creating a new 'ffi_type' + object for it. + + -- Data type: ffi_type + The 'ffi_type' has the following members: + 'size_t size' + This is set by 'libffi'; you should initialize it to zero. + + 'unsigned short alignment' + This is set by 'libffi'; you should initialize it to zero. + + 'unsigned short type' + For a structure, this should be set to 'FFI_TYPE_STRUCT'. + + 'ffi_type **elements' + This is a 'NULL'-terminated array of pointers to 'ffi_type' + objects. There is one element per field of the struct. + + Note that 'libffi' has no special support for bit-fields. You + must manage these manually. + + The 'size' and 'alignment' fields will be filled in by 'ffi_prep_cif' + or 'ffi_prep_cif_var', as needed. + +  + File: libffi.info, Node: Size and Alignment, Next: Arrays Unions Enums, Prev: Structures, Up: Types + + 2.3.3 Size and Alignment + ------------------------ + + 'libffi' will set the 'size' and 'alignment' fields of an 'ffi_type' + object for you. It does so using its knowledge of the ABI. + + You might expect that you can simply read these fields for a type + that has been laid out by 'libffi'. However, there are some caveats. + + * The size or alignment of some of the built-in types may vary + depending on the chosen ABI. + + * The size and alignment of a new structure type will not be set by + 'libffi' until it has been passed to 'ffi_prep_cif' or + 'ffi_get_struct_offsets'. + + * A structure type cannot be shared across ABIs. Instead each ABI + needs its own copy of the structure type. + + So, before examining these fields, it is safest to pass the + 'ffi_type' object to 'ffi_prep_cif' or 'ffi_get_struct_offsets' first. + This function will do all the needed setup. + + ffi_type *desired_type; + ffi_abi desired_abi; + ... + ffi_cif cif; + if (ffi_prep_cif (&cif, desired_abi, 0, desired_type, NULL) == FFI_OK) + { + size_t size = desired_type->size; + unsigned short alignment = desired_type->alignment; + } + + 'libffi' also provides a way to get the offsets of the members of a + structure. + + -- Function: ffi_status ffi_get_struct_offsets (ffi_abi abi, ffi_type + *struct_type, size_t *offsets) + Compute the offset of each element of the given structure type. + ABI is the ABI to use; this is needed because in some cases the + layout depends on the ABI. + + OFFSETS is an out parameter. The caller is responsible for + providing enough space for all the results to be written - one + element per element type in STRUCT_TYPE. If OFFSETS is 'NULL', + then the type will be laid out but not otherwise modified. This + can be useful for accessing the type's size or layout, as mentioned + above. + + This function returns 'FFI_OK' on success; 'FFI_BAD_ABI' if ABI is + invalid; or 'FFI_BAD_TYPEDEF' if STRUCT_TYPE is invalid in some + way. Note that only 'FFI_STRUCT' types are valid here. + +  + File: libffi.info, Node: Arrays Unions Enums, Next: Type Example, Prev: Size and Alignment, Up: Types + + 2.3.4 Arrays, Unions, and Enumerations + -------------------------------------- + + 2.3.4.1 Arrays + .............. + + 'libffi' does not have direct support for arrays or unions. However, + they can be emulated using structures. + + To emulate an array, simply create an 'ffi_type' using + 'FFI_TYPE_STRUCT' with as many members as there are elements in the + array. + + ffi_type array_type; + ffi_type **elements + int i; + + elements = malloc ((n + 1) * sizeof (ffi_type *)); + for (i = 0; i < n; ++i) + elements[i] = array_element_type; + elements[n] = NULL; + + array_type.size = array_type.alignment = 0; + array_type.type = FFI_TYPE_STRUCT; + array_type.elements = elements; + + Note that arrays cannot be passed or returned by value in C - + structure types created like this should only be used to refer to + members of real 'FFI_TYPE_STRUCT' objects. + + However, a phony array type like this will not cause any errors from + 'libffi' if you use it as an argument or return type. This may be + confusing. + + 2.3.4.2 Unions + .............. + + A union can also be emulated using 'FFI_TYPE_STRUCT'. In this case, + however, you must make sure that the size and alignment match the real + requirements of the union. + + One simple way to do this is to ensue that each element type is laid + out. Then, give the new structure type a single element; the size of + the largest element; and the largest alignment seen as well. + + This example uses the 'ffi_prep_cif' trick to ensure that each + element type is laid out. + + ffi_abi desired_abi; + ffi_type union_type; + ffi_type **union_elements; + + int i; + ffi_type element_types[2]; + + element_types[1] = NULL; + + union_type.size = union_type.alignment = 0; + union_type.type = FFI_TYPE_STRUCT; + union_type.elements = element_types; + + for (i = 0; union_elements[i]; ++i) + { + ffi_cif cif; + if (ffi_prep_cif (&cif, desired_abi, 0, union_elements[i], NULL) == FFI_OK) + { + if (union_elements[i]->size > union_type.size) + { + union_type.size = union_elements[i]; + size = union_elements[i]->size; + } + if (union_elements[i]->alignment > union_type.alignment) + union_type.alignment = union_elements[i]->alignment; + } + } + + 2.3.4.3 Enumerations + .................... + + 'libffi' does not have any special support for C 'enum's. Although any + given 'enum' is implemented using a specific underlying integral type, + exactly which type will be used cannot be determined by 'libffi' - it + may depend on the values in the enumeration or on compiler flags such as + '-fshort-enums'. *Note (gcc)Structures unions enumerations and + bit-fields implementation::, for more information about how GCC handles + enumerations. + +  + File: libffi.info, Node: Type Example, Next: Complex, Prev: Arrays Unions Enums, Up: Types + + 2.3.5 Type Example + ------------------ + + The following example initializes a 'ffi_type' object representing the + 'tm' struct from Linux's 'time.h'. + + Here is how the struct is defined: + + struct tm { + int tm_sec; + int tm_min; + int tm_hour; + int tm_mday; + int tm_mon; + int tm_year; + int tm_wday; + int tm_yday; + int tm_isdst; + /* Those are for future use. */ + long int __tm_gmtoff__; + __const char *__tm_zone__; + }; + + Here is the corresponding code to describe this struct to 'libffi': + + { + ffi_type tm_type; + ffi_type *tm_type_elements[12]; + int i; + + tm_type.size = tm_type.alignment = 0; + tm_type.type = FFI_TYPE_STRUCT; + tm_type.elements = &tm_type_elements; + + for (i = 0; i < 9; i++) + tm_type_elements[i] = &ffi_type_sint; + + tm_type_elements[9] = &ffi_type_slong; + tm_type_elements[10] = &ffi_type_pointer; + tm_type_elements[11] = NULL; + + /* tm_type can now be used to represent tm argument types and + return types for ffi_prep_cif() */ + } + +  + File: libffi.info, Node: Complex, Next: Complex Type Example, Prev: Type Example, Up: Types + + 2.3.6 Complex Types + ------------------- + + 'libffi' supports the complex types defined by the C99 standard + ('_Complex float', '_Complex double' and '_Complex long double' with the + built-in type descriptors 'ffi_type_complex_float', + 'ffi_type_complex_double' and 'ffi_type_complex_longdouble'. + + Custom complex types like '_Complex int' can also be used. An + 'ffi_type' object has to be defined to describe the complex type to + 'libffi'. + + -- Data type: ffi_type + 'size_t size' + This must be manually set to the size of the complex type. + + 'unsigned short alignment' + This must be manually set to the alignment of the complex + type. + + 'unsigned short type' + For a complex type, this must be set to 'FFI_TYPE_COMPLEX'. + + 'ffi_type **elements' + + This is a 'NULL'-terminated array of pointers to 'ffi_type' + objects. The first element is set to the 'ffi_type' of the + complex's base type. The second element must be set to + 'NULL'. + + The section *note Complex Type Example:: shows a way to determine the + 'size' and 'alignment' members in a platform independent way. + + For platforms that have no complex support in 'libffi' yet, the + functions 'ffi_prep_cif' and 'ffi_prep_args' abort the program if they + encounter a complex type. + +  + File: libffi.info, Node: Complex Type Example, Prev: Complex, Up: Types + + 2.3.7 Complex Type Example + -------------------------- + + This example demonstrates how to use complex types: + + #include + #include + #include + + void complex_fn(_Complex float cf, + _Complex double cd, + _Complex long double cld) + { + printf("cf=%f+%fi\ncd=%f+%fi\ncld=%f+%fi\n", + (float)creal (cf), (float)cimag (cf), + (float)creal (cd), (float)cimag (cd), + (float)creal (cld), (float)cimag (cld)); + } + + int main() + { + ffi_cif cif; + ffi_type *args[3]; + void *values[3]; + _Complex float cf; + _Complex double cd; + _Complex long double cld; + + /* Initialize the argument info vectors */ + args[0] = &ffi_type_complex_float; + args[1] = &ffi_type_complex_double; + args[2] = &ffi_type_complex_longdouble; + values[0] = &cf; + values[1] = &cd; + values[2] = &cld; + + /* Initialize the cif */ + if (ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 3, + &ffi_type_void, args) == FFI_OK) + { + cf = 1.0 + 20.0 * I; + cd = 300.0 + 4000.0 * I; + cld = 50000.0 + 600000.0 * I; + /* Call the function */ + ffi_call(&cif, (void (*)(void))complex_fn, 0, values); + } + + return 0; + } + + This is an example for defining a custom complex type descriptor for + compilers that support them: + + /* + * This macro can be used to define new complex type descriptors + * in a platform independent way. + * + * name: Name of the new descriptor is ffi_type_complex_. + * type: The C base type of the complex type. + */ + #define FFI_COMPLEX_TYPEDEF(name, type, ffitype) \ + static ffi_type *ffi_elements_complex_##name [2] = { \ + (ffi_type *)(&ffitype), NULL \ + }; \ + struct struct_align_complex_##name { \ + char c; \ + _Complex type x; \ + }; \ + ffi_type ffi_type_complex_##name = { \ + sizeof(_Complex type), \ + offsetof(struct struct_align_complex_##name, x), \ + FFI_TYPE_COMPLEX, \ + (ffi_type **)ffi_elements_complex_##name \ + } + + /* Define new complex type descriptors using the macro: */ + /* ffi_type_complex_sint */ + FFI_COMPLEX_TYPEDEF(sint, int, ffi_type_sint); + /* ffi_type_complex_uchar */ + FFI_COMPLEX_TYPEDEF(uchar, unsigned char, ffi_type_uint8); + + The new type descriptors can then be used like one of the built-in + type descriptors in the previous example. + +  + File: libffi.info, Node: Multiple ABIs, Next: The Closure API, Prev: Types, Up: Using libffi + + 2.4 Multiple ABIs + ================= + + A given platform may provide multiple different ABIs at once. For + instance, the x86 platform has both 'stdcall' and 'fastcall' functions. + + 'libffi' provides some support for this. However, this is + necessarily platform-specific. + +  + File: libffi.info, Node: The Closure API, Next: Closure Example, Prev: Multiple ABIs, Up: Using libffi + + 2.5 The Closure API + =================== + + 'libffi' also provides a way to write a generic function - a function + that can accept and decode any combination of arguments. This can be + useful when writing an interpreter, or to provide wrappers for arbitrary + functions. + + This facility is called the "closure API". Closures are not supported + on all platforms; you can check the 'FFI_CLOSURES' define to determine + whether they are supported on the current platform. + + Because closures work by assembling a tiny function at runtime, they + require special allocation on platforms that have a non-executable heap. + Memory management for closures is handled by a pair of functions: + + -- Function: void *ffi_closure_alloc (size_t SIZE, void **CODE) + Allocate a chunk of memory holding SIZE bytes. This returns a + pointer to the writable address, and sets *CODE to the + corresponding executable address. + + SIZE should be sufficient to hold a 'ffi_closure' object. + + -- Function: void ffi_closure_free (void *WRITABLE) + Free memory allocated using 'ffi_closure_alloc'. The argument is + the writable address that was returned. + + Once you have allocated the memory for a closure, you must construct + a 'ffi_cif' describing the function call. Finally you can prepare the + closure function: + + -- Function: ffi_status ffi_prep_closure_loc (ffi_closure *CLOSURE, + ffi_cif *CIF, void (*FUN) (ffi_cif *CIF, void *RET, void + **ARGS, void *USER_DATA), void *USER_DATA, void *CODELOC) + Prepare a closure function. The arguments to + 'ffi_prep_closure_loc' are: + + CLOSURE + The address of a 'ffi_closure' object; this is the writable + address returned by 'ffi_closure_alloc'. + + CIF + The 'ffi_cif' describing the function parameters. Note that + this object, and the types to which it refers, must be kept + alive until the closure itself is freed. + + USER_DATA + An arbitrary datum that is passed, uninterpreted, to your + closure function. + + CODELOC + The executable address returned by 'ffi_closure_alloc'. + + FUN + The function which will be called when the closure is invoked. + It is called with the arguments: + + CIF + The 'ffi_cif' passed to 'ffi_prep_closure_loc'. + + RET + A pointer to the memory used for the function's return + value. + + If the function is declared as returning 'void', then + this value is garbage and should not be used. + + Otherwise, FUN must fill the object to which this points, + following the same special promotion behavior as + 'ffi_call'. That is, in most cases, RET points to an + object of exactly the size of the type specified when CIF + was constructed. However, integral types narrower than + the system register size are widened. In these cases + your program may assume that RET points to an 'ffi_arg' + object. + + ARGS + A vector of pointers to memory holding the arguments to + the function. + + USER_DATA + The same USER_DATA that was passed to + 'ffi_prep_closure_loc'. + + 'ffi_prep_closure_loc' will return 'FFI_OK' if everything went ok, + and one of the other 'ffi_status' values on error. + + After calling 'ffi_prep_closure_loc', you can cast CODELOC to the + appropriate pointer-to-function type. + + You may see old code referring to 'ffi_prep_closure'. This function + is deprecated, as it cannot handle the need for separate writable and + executable addresses. + +  + File: libffi.info, Node: Closure Example, Next: Thread Safety, Prev: The Closure API, Up: Using libffi + + 2.6 Closure Example + =================== + + A trivial example that creates a new 'puts' by binding 'fputs' with + 'stdout'. + + #include + #include + + /* Acts like puts with the file given at time of enclosure. */ + void puts_binding(ffi_cif *cif, void *ret, void* args[], + void *stream) + { + *(ffi_arg *)ret = fputs(*(char **)args[0], (FILE *)stream); + } + + typedef int (*puts_t)(char *); + + int main() + { + ffi_cif cif; + ffi_type *args[1]; + ffi_closure *closure; + + void *bound_puts; + int rc; + + /* Allocate closure and bound_puts */ + closure = ffi_closure_alloc(sizeof(ffi_closure), &bound_puts); + + if (closure) + { + /* Initialize the argument info vectors */ + args[0] = &ffi_type_pointer; + + /* Initialize the cif */ + if (ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, + &ffi_type_sint, args) == FFI_OK) + { + /* Initialize the closure, setting stream to stdout */ + if (ffi_prep_closure_loc(closure, &cif, puts_binding, + stdout, bound_puts) == FFI_OK) + { + rc = ((puts_t)bound_puts)("Hello World!"); + /* rc now holds the result of the call to fputs */ + } + } + } + + /* Deallocate both closure, and bound_puts */ + ffi_closure_free(closure); + + return 0; + } + + +  + File: libffi.info, Node: Thread Safety, Prev: Closure Example, Up: Using libffi + + 2.7 Thread Safety + ================= + + 'libffi' is not completely thread-safe. However, many parts are, and if + you follow some simple rules, you can use it safely in a multi-threaded + program. + + * 'ffi_prep_cif' may modify the 'ffi_type' objects passed to it. It + is best to ensure that only a single thread prepares a given + 'ffi_cif' at a time. + + * On some platforms, 'ffi_prep_cif' may modify the size and alignment + of some types, depending on the chosen ABI. On these platforms, if + you switch between ABIs, you must ensure that there is only one + call to 'ffi_prep_cif' at a time. + + Currently the only affected platform is PowerPC and the only + affected type is 'long double'. + +  + File: libffi.info, Node: Memory Usage, Next: Missing Features, Prev: Using libffi, Up: Top + + 3 Memory Usage + ************** + + Note that memory allocated by 'ffi_closure_alloc' and freed by + 'ffi_closure_free' does not come from the same general pool of memory + that 'malloc' and 'free' use. To accomodate security settings, 'libffi' + may aquire memory, for example, by mapping temporary files into multiple + places in the address space (once to write out the closure, a second to + execute it). The search follows this list, using the first that works: + + * A anonymous mapping (i.e. not file-backed) + + * 'memfd_create()', if the kernel supports it. + + * A file created in the directory referenced by the environment + variable 'LIBFFI_TMPDIR'. + + * Likewise for the environment variable 'TMPDIR'. + + * A file created in '/tmp'. + + * A file created in '/var/tmp'. + + * A file created in '/dev/shm'. + + * A file created in the user's home directory ('$HOME'). + + * A file created in any directory listed in '/etc/mtab'. + + * A file created in any directory listed in '/proc/mounts'. + + If security settings prohibit using any of these for closures, + 'ffi_closure_alloc' will fail. + +  + File: libffi.info, Node: Missing Features, Next: Index, Prev: Memory Usage, Up: Top + + 4 Missing Features + ****************** + + 'libffi' is missing a few features. We welcome patches to add support + for these. + + * Variadic closures. + + * There is no support for bit fields in structures. + + * The "raw" API is undocumented. + + * The Go API is undocumented. + +  + File: libffi.info, Node: Index, Prev: Missing Features, Up: Top + + Index + ***** + + [index] + * Menu: + + * ABI: Introduction. (line 13) + * Application Binary Interface: Introduction. (line 13) + * calling convention: Introduction. (line 13) + * cif: The Basics. (line 14) + * closure API: The Closure API. (line 13) + * closures: The Closure API. (line 13) + * FFI: Introduction. (line 31) + * ffi_call: The Basics. (line 72) + * FFI_CLOSURES: The Closure API. (line 13) + * ffi_closure_alloc: The Closure API. (line 19) + * ffi_closure_free: The Closure API. (line 26) + * ffi_get_struct_offsets: Size and Alignment. (line 39) + * ffi_prep_cif: The Basics. (line 16) + * ffi_prep_cif_var: The Basics. (line 39) + * ffi_prep_closure_loc: The Closure API. (line 34) + * ffi_status: The Basics. (line 16) + * ffi_status <1>: The Basics. (line 39) + * ffi_status <2>: Size and Alignment. (line 39) + * ffi_status <3>: The Closure API. (line 34) + * ffi_type: Structures. (line 10) + * ffi_type <1>: Structures. (line 10) + * ffi_type <2>: Complex. (line 15) + * ffi_type <3>: Complex. (line 15) + * ffi_type_complex_double: Primitive Types. (line 82) + * ffi_type_complex_float: Primitive Types. (line 79) + * ffi_type_complex_longdouble: Primitive Types. (line 85) + * ffi_type_double: Primitive Types. (line 41) + * ffi_type_float: Primitive Types. (line 38) + * ffi_type_longdouble: Primitive Types. (line 71) + * ffi_type_pointer: Primitive Types. (line 75) + * ffi_type_schar: Primitive Types. (line 47) + * ffi_type_sint: Primitive Types. (line 62) + * ffi_type_sint16: Primitive Types. (line 23) + * ffi_type_sint32: Primitive Types. (line 29) + * ffi_type_sint64: Primitive Types. (line 35) + * ffi_type_sint8: Primitive Types. (line 17) + * ffi_type_slong: Primitive Types. (line 68) + * ffi_type_sshort: Primitive Types. (line 56) + * ffi_type_uchar: Primitive Types. (line 44) + * ffi_type_uint: Primitive Types. (line 59) + * ffi_type_uint16: Primitive Types. (line 20) + * ffi_type_uint32: Primitive Types. (line 26) + * ffi_type_uint64: Primitive Types. (line 32) + * ffi_type_uint8: Primitive Types. (line 14) + * ffi_type_ulong: Primitive Types. (line 65) + * ffi_type_ushort: Primitive Types. (line 53) + * ffi_type_void: Primitive Types. (line 10) + * Foreign Function Interface: Introduction. (line 31) + * void: The Basics. (line 72) + * void <1>: The Closure API. (line 19) + * void <2>: The Closure API. (line 26) + + +  + Tag Table: + Node: Top1394 + Node: Introduction2923 + Node: Using libffi4555 + Node: The Basics5084 + Node: Simple Example10191 + Node: Types11222 + Node: Primitive Types11733 + Node: Structures13854 + Node: Size and Alignment14893 + Node: Arrays Unions Enums17090 + Node: Type Example20019 + Node: Complex21310 + Node: Complex Type Example22728 + Node: Multiple ABIs25780 + Node: The Closure API26151 + Node: Closure Example29977 + Node: Thread Safety31609 + Node: Memory Usage32410 + Node: Missing Features33605 + Node: Index33970 +  + End Tag Table diff -Nrcpad gcc-12.4.0/libgcc/ChangeLog gcc-12.5.0-RC-20250704/libgcc/ChangeLog *** gcc-12.4.0/libgcc/ChangeLog Thu Jun 20 08:09:01 2024 --- gcc-12.5.0-RC-20250704/libgcc/ChangeLog Fri Jul 4 07:24:45 2025 *************** *** 1,3 **** --- 1,8 ---- + 2025-02-20 Dimitry Andric + + PR target/118685 + * config.host (*-*-freebsd*): Add crtbeginT.o to extra_parts. + 2024-06-20 Release Manager * GCC 12.4.0 released. diff -Nrcpad gcc-12.4.0/libgcc/config/avr/libf7/ChangeLog gcc-12.5.0-RC-20250704/libgcc/config/avr/libf7/ChangeLog *** gcc-12.4.0/libgcc/config/avr/libf7/ChangeLog Thu Jun 20 08:09:01 2024 --- gcc-12.5.0-RC-20250704/libgcc/config/avr/libf7/ChangeLog Fri Jul 4 07:24:45 2025 *************** *** 1,3 **** --- 1,11 ---- + 2025-05-27 Georg-Johann Lay + + Backported from master: + 2025-05-27 Georg-Johann Lay + + PR target/120441 + * libf7.c (f7_exp): Limit aa->expo to 10 (not to 9). + 2024-06-20 Release Manager * GCC 12.4.0 released. diff -Nrcpad gcc-12.4.0/libgcc/config/avr/libf7/libf7.c gcc-12.5.0-RC-20250704/libgcc/config/avr/libf7/libf7.c *** gcc-12.4.0/libgcc/config/avr/libf7/libf7.c Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/libgcc/config/avr/libf7/libf7.c Fri Jul 4 07:24:45 2025 *************** void f7_exp (f7_t *cc, const f7_t *aa) *** 1670,1679 **** return f7_set_nan (cc); /* The maximal exponent of 2 for a double is 1023, hence we may limit ! to |A| < 1023 * ln2 ~ 709. We limit to 1024 ~ 1.99 * 2^9 */ if (f7_class_inf (a_class) ! || (f7_class_nonzero (a_class) && aa->expo >= 9)) { if (f7_class_sign (a_class)) return f7_clr (cc); --- 1670,1679 ---- return f7_set_nan (cc); /* The maximal exponent of 2 for a double is 1023, hence we may limit ! to |A| < 1023 * ln2 ~ 709. We limit to 1024 = 2^10 */ if (f7_class_inf (a_class) ! || (f7_class_nonzero (a_class) && aa->expo >= 10)) { if (f7_class_sign (a_class)) return f7_clr (cc); diff -Nrcpad gcc-12.4.0/libgcc/config/i386/t-darwin gcc-12.5.0-RC-20250704/libgcc/config/i386/t-darwin *** gcc-12.4.0/libgcc/config/i386/t-darwin Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/libgcc/config/i386/t-darwin Fri Jul 4 07:24:45 2025 *************** LIB2FUNCS_EXCLUDE = _fixtfdi _fixunstfdi *** 4,9 **** # Extra symbols for this port. SHLIB_MAPFILES += $(srcdir)/config/i386/libgcc-darwin.ver - - # Build a legacy libgcc_s.1 - BUILD_LIBGCCS1 = YES --- 4,6 ---- diff -Nrcpad gcc-12.4.0/libgcc/config/rs6000/t-darwin gcc-12.5.0-RC-20250704/libgcc/config/rs6000/t-darwin *** gcc-12.4.0/libgcc/config/rs6000/t-darwin Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/libgcc/config/rs6000/t-darwin Fri Jul 4 07:24:45 2025 *************** unwind-dw2_s.o: HOST_LIBGCC2_CFLAGS += - *** 56,61 **** unwind-dw2.o: HOST_LIBGCC2_CFLAGS += -maltivec LIB2ADDEH += $(srcdir)/config/rs6000/darwin-fallback.c - - # Build a legacy libgcc_s.1 - BUILD_LIBGCCS1 = YES --- 56,58 ---- diff -Nrcpad gcc-12.4.0/libgcc/config/t-darwin-libgccs1 gcc-12.5.0-RC-20250704/libgcc/config/t-darwin-libgccs1 *** gcc-12.4.0/libgcc/config/t-darwin-libgccs1 Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/libgcc/config/t-darwin-libgccs1 Fri Jul 4 07:24:45 2025 *************** *** 0 **** --- 1,3 ---- + + # Build a legacy libgcc_s.1 + BUILD_LIBGCCS1 = YES diff -Nrcpad gcc-12.4.0/libgcc/config.host gcc-12.5.0-RC-20250704/libgcc/config.host *** gcc-12.4.0/libgcc/config.host Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/libgcc/config.host Fri Jul 4 07:24:45 2025 *************** case ${host} in *** 246,261 **** *-*-darwin1[89]* | *-*-darwin2* ) tmake_file="t-darwin-min-8 $tmake_file" ;; ! *-*-darwin9* | *-*-darwin1[0-7]*) tmake_file="t-darwin-min-5 $tmake_file" ;; *-*-darwin[4-8]*) ! tmake_file="t-darwin-min-1 $tmake_file" ;; *) # Fall back to configuring for the oldest system known to work with # all archs and the current sources. ! tmake_file="t-darwin-min-5 $tmake_file" echo "Warning: libgcc configured to support macOS 10.5" 1>&2 ;; esac --- 246,264 ---- *-*-darwin1[89]* | *-*-darwin2* ) tmake_file="t-darwin-min-8 $tmake_file" ;; ! *-*-darwin1[67]]*) tmake_file="t-darwin-min-5 $tmake_file" ;; + *-*-darwin9* | *-*-darwin1[0-5]*) + tmake_file="t-darwin-min-5 t-darwin-libgccs1 $tmake_file" + ;; *-*-darwin[4-8]*) ! tmake_file="t-darwin-min-1 t-darwin-libgccs1 $tmake_file" ;; *) # Fall back to configuring for the oldest system known to work with # all archs and the current sources. ! tmake_file="t-darwin-min-5 t-darwin-libgccs1 $tmake_file" echo "Warning: libgcc configured to support macOS 10.5" 1>&2 ;; esac *************** case ${host} in *** 271,277 **** # machine-specific sections may refine and add to this # configuration. tmake_file="$tmake_file t-freebsd t-crtstuff-pic t-libgcc-pic t-eh-dw2-dip t-slibgcc t-slibgcc-gld t-slibgcc-elf-ver" ! extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o" case ${target_thread_file} in posix) tmake_file="${tmake_file} t-freebsd-thread" --- 274,280 ---- # machine-specific sections may refine and add to this # configuration. tmake_file="$tmake_file t-freebsd t-crtstuff-pic t-libgcc-pic t-eh-dw2-dip t-slibgcc t-slibgcc-gld t-slibgcc-elf-ver" ! extra_parts="crtbegin.o crtend.o crtbeginS.o crtbeginT.o crtendS.o" case ${target_thread_file} in posix) tmake_file="${tmake_file} t-freebsd-thread" diff -Nrcpad gcc-12.4.0/libgfortran/ChangeLog gcc-12.5.0-RC-20250704/libgfortran/ChangeLog *** gcc-12.4.0/libgfortran/ChangeLog Thu Jun 20 08:09:01 2024 --- gcc-12.5.0-RC-20250704/libgfortran/ChangeLog Fri Jul 4 07:24:45 2025 *************** *** 1,3 **** --- 1,57 ---- + 2025-06-13 Jakub Jelinek + + Backported from master: + 2025-05-13 Jakub Jelinek + + PR libfortran/120196 + * m4/ifindloc2.m4 (header1, header2): For back use i > 0 rather than + i >= 0 as for condition. + * generated/findloc2_s1.c: Regenerate. + * generated/findloc2_s4.c: Regenerate. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2025-05-13 Jakub Jelinek + + PR fortran/120191 + * m4/ifunction-s.m4 (SCALAR_ARRAY_FUNCTION): Don't multiply + GFC_DESCRIPTOR_EXTENT(array,) by string_len. + * generated/maxloc1_4_s1.c: Regenerate. + * generated/maxloc1_4_s4.c: Regenerate. + * generated/maxloc1_8_s1.c: Regenerate. + * generated/maxloc1_8_s4.c: Regenerate. + * generated/maxloc1_16_s1.c: Regenerate. + * generated/maxloc1_16_s4.c: Regenerate. + * generated/minloc1_4_s1.c: Regenerate. + * generated/minloc1_4_s4.c: Regenerate. + * generated/minloc1_8_s1.c: Regenerate. + * generated/minloc1_8_s4.c: Regenerate. + * generated/minloc1_16_s1.c: Regenerate. + * generated/minloc1_16_s4.c: Regenerate. + + 2025-06-13 Jakub Jelinek + + Backported from master: + 2025-05-13 Jakub Jelinek + + PR fortran/120191 + * m4/maxloc2s.m4: For smaxloc2 call maxloc2 if mask is NULL or *mask. + Swap back and len arguments. + * m4/minloc2s.m4: Likewise. + * generated/maxloc2_4_s1.c: Regenerate. + * generated/maxloc2_4_s4.c: Regenerate. + * generated/maxloc2_8_s1.c: Regenerate. + * generated/maxloc2_8_s4.c: Regenerate. + * generated/maxloc2_16_s1.c: Regenerate. + * generated/maxloc2_16_s4.c: Regenerate. + * generated/minloc2_4_s1.c: Regenerate. + * generated/minloc2_4_s4.c: Regenerate. + * generated/minloc2_8_s1.c: Regenerate. + * generated/minloc2_8_s4.c: Regenerate. + * generated/minloc2_16_s1.c: Regenerate. + * generated/minloc2_16_s4.c: Regenerate. + 2024-06-20 Release Manager * GCC 12.4.0 released. diff -Nrcpad gcc-12.4.0/libgfortran/generated/findloc2_s1.c gcc-12.5.0-RC-20250704/libgfortran/generated/findloc2_s1.c *** gcc-12.4.0/libgfortran/generated/findloc2_s1.c Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/libgfortran/generated/findloc2_s1.c Fri Jul 4 07:24:45 2025 *************** findloc2_s1 (gfc_array_s1 * const restri *** 49,55 **** if (back) { src = array->base_addr + (extent - 1) * sstride; ! for (i = extent; i >= 0; i--) { if (compare_string (len_array, (char *) src, len_value, (char *) value) == 0) return i; --- 49,55 ---- if (back) { src = array->base_addr + (extent - 1) * sstride; ! for (i = extent; i > 0; i--) { if (compare_string (len_array, (char *) src, len_value, (char *) value) == 0) return i; *************** mfindloc2_s1 (gfc_array_s1 * const restr *** 112,118 **** { src = array->base_addr + (extent - 1) * sstride; mbase += (extent - 1) * mstride; ! for (i = extent; i >= 0; i--) { if (*mbase && (compare_string (len_array, (char *) src, len_value, (char *) value) == 0)) return i; --- 112,118 ---- { src = array->base_addr + (extent - 1) * sstride; mbase += (extent - 1) * mstride; ! for (i = extent; i > 0; i--) { if (*mbase && (compare_string (len_array, (char *) src, len_value, (char *) value) == 0)) return i; diff -Nrcpad gcc-12.4.0/libgfortran/generated/findloc2_s4.c gcc-12.5.0-RC-20250704/libgfortran/generated/findloc2_s4.c *** gcc-12.4.0/libgfortran/generated/findloc2_s4.c Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/libgfortran/generated/findloc2_s4.c Fri Jul 4 07:24:45 2025 *************** findloc2_s4 (gfc_array_s4 * const restri *** 49,55 **** if (back) { src = array->base_addr + (extent - 1) * sstride; ! for (i = extent; i >= 0; i--) { if (compare_string_char4 (len_array, src, len_value, value) == 0) return i; --- 49,55 ---- if (back) { src = array->base_addr + (extent - 1) * sstride; ! for (i = extent; i > 0; i--) { if (compare_string_char4 (len_array, src, len_value, value) == 0) return i; *************** mfindloc2_s4 (gfc_array_s4 * const restr *** 112,118 **** { src = array->base_addr + (extent - 1) * sstride; mbase += (extent - 1) * mstride; ! for (i = extent; i >= 0; i--) { if (*mbase && (compare_string_char4 (len_array, src, len_value, value) == 0)) return i; --- 112,118 ---- { src = array->base_addr + (extent - 1) * sstride; mbase += (extent - 1) * mstride; ! for (i = extent; i > 0; i--) { if (*mbase && (compare_string_char4 (len_array, src, len_value, value) == 0)) return i; diff -Nrcpad gcc-12.4.0/libgfortran/generated/maxloc1_16_s1.c gcc-12.5.0-RC-20250704/libgfortran/generated/maxloc1_16_s1.c *** gcc-12.4.0/libgfortran/generated/maxloc1_16_s1.c Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/libgfortran/generated/maxloc1_16_s1.c Fri Jul 4 07:24:45 2025 *************** smaxloc1_16_s1 (gfc_array_i16 * const re *** 468,474 **** for (n = 0; n < dim; n++) { ! extent[n] = GFC_DESCRIPTOR_EXTENT(array,n) * string_len; if (extent[n] <= 0) extent[n] = 0; --- 468,474 ---- for (n = 0; n < dim; n++) { ! extent[n] = GFC_DESCRIPTOR_EXTENT(array,n); if (extent[n] <= 0) extent[n] = 0; *************** smaxloc1_16_s1 (gfc_array_i16 * const re *** 476,483 **** for (n = dim; n < rank; n++) { ! extent[n] = ! GFC_DESCRIPTOR_EXTENT(array,n + 1) * string_len; if (extent[n] <= 0) extent[n] = 0; --- 476,482 ---- for (n = dim; n < rank; n++) { ! extent[n] = GFC_DESCRIPTOR_EXTENT(array,n + 1); if (extent[n] <= 0) extent[n] = 0; diff -Nrcpad gcc-12.4.0/libgfortran/generated/maxloc1_16_s4.c gcc-12.5.0-RC-20250704/libgfortran/generated/maxloc1_16_s4.c *** gcc-12.4.0/libgfortran/generated/maxloc1_16_s4.c Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/libgfortran/generated/maxloc1_16_s4.c Fri Jul 4 07:24:45 2025 *************** smaxloc1_16_s4 (gfc_array_i16 * const re *** 468,474 **** for (n = 0; n < dim; n++) { ! extent[n] = GFC_DESCRIPTOR_EXTENT(array,n) * string_len; if (extent[n] <= 0) extent[n] = 0; --- 468,474 ---- for (n = 0; n < dim; n++) { ! extent[n] = GFC_DESCRIPTOR_EXTENT(array,n); if (extent[n] <= 0) extent[n] = 0; *************** smaxloc1_16_s4 (gfc_array_i16 * const re *** 476,483 **** for (n = dim; n < rank; n++) { ! extent[n] = ! GFC_DESCRIPTOR_EXTENT(array,n + 1) * string_len; if (extent[n] <= 0) extent[n] = 0; --- 476,482 ---- for (n = dim; n < rank; n++) { ! extent[n] = GFC_DESCRIPTOR_EXTENT(array,n + 1); if (extent[n] <= 0) extent[n] = 0; diff -Nrcpad gcc-12.4.0/libgfortran/generated/maxloc1_4_s1.c gcc-12.5.0-RC-20250704/libgfortran/generated/maxloc1_4_s1.c *** gcc-12.4.0/libgfortran/generated/maxloc1_4_s1.c Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/libgfortran/generated/maxloc1_4_s1.c Fri Jul 4 07:24:45 2025 *************** smaxloc1_4_s1 (gfc_array_i4 * const rest *** 468,474 **** for (n = 0; n < dim; n++) { ! extent[n] = GFC_DESCRIPTOR_EXTENT(array,n) * string_len; if (extent[n] <= 0) extent[n] = 0; --- 468,474 ---- for (n = 0; n < dim; n++) { ! extent[n] = GFC_DESCRIPTOR_EXTENT(array,n); if (extent[n] <= 0) extent[n] = 0; *************** smaxloc1_4_s1 (gfc_array_i4 * const rest *** 476,483 **** for (n = dim; n < rank; n++) { ! extent[n] = ! GFC_DESCRIPTOR_EXTENT(array,n + 1) * string_len; if (extent[n] <= 0) extent[n] = 0; --- 476,482 ---- for (n = dim; n < rank; n++) { ! extent[n] = GFC_DESCRIPTOR_EXTENT(array,n + 1); if (extent[n] <= 0) extent[n] = 0; diff -Nrcpad gcc-12.4.0/libgfortran/generated/maxloc1_4_s4.c gcc-12.5.0-RC-20250704/libgfortran/generated/maxloc1_4_s4.c *** gcc-12.4.0/libgfortran/generated/maxloc1_4_s4.c Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/libgfortran/generated/maxloc1_4_s4.c Fri Jul 4 07:24:45 2025 *************** smaxloc1_4_s4 (gfc_array_i4 * const rest *** 468,474 **** for (n = 0; n < dim; n++) { ! extent[n] = GFC_DESCRIPTOR_EXTENT(array,n) * string_len; if (extent[n] <= 0) extent[n] = 0; --- 468,474 ---- for (n = 0; n < dim; n++) { ! extent[n] = GFC_DESCRIPTOR_EXTENT(array,n); if (extent[n] <= 0) extent[n] = 0; *************** smaxloc1_4_s4 (gfc_array_i4 * const rest *** 476,483 **** for (n = dim; n < rank; n++) { ! extent[n] = ! GFC_DESCRIPTOR_EXTENT(array,n + 1) * string_len; if (extent[n] <= 0) extent[n] = 0; --- 476,482 ---- for (n = dim; n < rank; n++) { ! extent[n] = GFC_DESCRIPTOR_EXTENT(array,n + 1); if (extent[n] <= 0) extent[n] = 0; diff -Nrcpad gcc-12.4.0/libgfortran/generated/maxloc1_8_s1.c gcc-12.5.0-RC-20250704/libgfortran/generated/maxloc1_8_s1.c *** gcc-12.4.0/libgfortran/generated/maxloc1_8_s1.c Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/libgfortran/generated/maxloc1_8_s1.c Fri Jul 4 07:24:45 2025 *************** smaxloc1_8_s1 (gfc_array_i8 * const rest *** 468,474 **** for (n = 0; n < dim; n++) { ! extent[n] = GFC_DESCRIPTOR_EXTENT(array,n) * string_len; if (extent[n] <= 0) extent[n] = 0; --- 468,474 ---- for (n = 0; n < dim; n++) { ! extent[n] = GFC_DESCRIPTOR_EXTENT(array,n); if (extent[n] <= 0) extent[n] = 0; *************** smaxloc1_8_s1 (gfc_array_i8 * const rest *** 476,483 **** for (n = dim; n < rank; n++) { ! extent[n] = ! GFC_DESCRIPTOR_EXTENT(array,n + 1) * string_len; if (extent[n] <= 0) extent[n] = 0; --- 476,482 ---- for (n = dim; n < rank; n++) { ! extent[n] = GFC_DESCRIPTOR_EXTENT(array,n + 1); if (extent[n] <= 0) extent[n] = 0; diff -Nrcpad gcc-12.4.0/libgfortran/generated/maxloc1_8_s4.c gcc-12.5.0-RC-20250704/libgfortran/generated/maxloc1_8_s4.c *** gcc-12.4.0/libgfortran/generated/maxloc1_8_s4.c Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/libgfortran/generated/maxloc1_8_s4.c Fri Jul 4 07:24:45 2025 *************** smaxloc1_8_s4 (gfc_array_i8 * const rest *** 468,474 **** for (n = 0; n < dim; n++) { ! extent[n] = GFC_DESCRIPTOR_EXTENT(array,n) * string_len; if (extent[n] <= 0) extent[n] = 0; --- 468,474 ---- for (n = 0; n < dim; n++) { ! extent[n] = GFC_DESCRIPTOR_EXTENT(array,n); if (extent[n] <= 0) extent[n] = 0; *************** smaxloc1_8_s4 (gfc_array_i8 * const rest *** 476,483 **** for (n = dim; n < rank; n++) { ! extent[n] = ! GFC_DESCRIPTOR_EXTENT(array,n + 1) * string_len; if (extent[n] <= 0) extent[n] = 0; --- 476,482 ---- for (n = dim; n < rank; n++) { ! extent[n] = GFC_DESCRIPTOR_EXTENT(array,n + 1); if (extent[n] <= 0) extent[n] = 0; diff -Nrcpad gcc-12.4.0/libgfortran/generated/maxloc2_16_s1.c gcc-12.5.0-RC-20250704/libgfortran/generated/maxloc2_16_s1.c *** gcc-12.4.0/libgfortran/generated/maxloc2_16_s1.c Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/libgfortran/generated/maxloc2_16_s1.c Fri Jul 4 07:24:45 2025 *************** GFC_INTEGER_16 *** 152,159 **** smaxloc2_16_s1 (gfc_array_s1 * const restrict array, GFC_LOGICAL_4 *mask, GFC_LOGICAL_4 back, gfc_charlen_type len) { ! if (mask) ! return maxloc2_16_s1 (array, len, back); else return 0; } --- 152,159 ---- smaxloc2_16_s1 (gfc_array_s1 * const restrict array, GFC_LOGICAL_4 *mask, GFC_LOGICAL_4 back, gfc_charlen_type len) { ! if (mask == NULL || *mask) ! return maxloc2_16_s1 (array, back, len); else return 0; } diff -Nrcpad gcc-12.4.0/libgfortran/generated/maxloc2_16_s4.c gcc-12.5.0-RC-20250704/libgfortran/generated/maxloc2_16_s4.c *** gcc-12.4.0/libgfortran/generated/maxloc2_16_s4.c Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/libgfortran/generated/maxloc2_16_s4.c Fri Jul 4 07:24:45 2025 *************** GFC_INTEGER_16 *** 152,159 **** smaxloc2_16_s4 (gfc_array_s4 * const restrict array, GFC_LOGICAL_4 *mask, GFC_LOGICAL_4 back, gfc_charlen_type len) { ! if (mask) ! return maxloc2_16_s4 (array, len, back); else return 0; } --- 152,159 ---- smaxloc2_16_s4 (gfc_array_s4 * const restrict array, GFC_LOGICAL_4 *mask, GFC_LOGICAL_4 back, gfc_charlen_type len) { ! if (mask == NULL || *mask) ! return maxloc2_16_s4 (array, back, len); else return 0; } diff -Nrcpad gcc-12.4.0/libgfortran/generated/maxloc2_4_s1.c gcc-12.5.0-RC-20250704/libgfortran/generated/maxloc2_4_s1.c *** gcc-12.4.0/libgfortran/generated/maxloc2_4_s1.c Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/libgfortran/generated/maxloc2_4_s1.c Fri Jul 4 07:24:45 2025 *************** GFC_INTEGER_4 *** 152,159 **** smaxloc2_4_s1 (gfc_array_s1 * const restrict array, GFC_LOGICAL_4 *mask, GFC_LOGICAL_4 back, gfc_charlen_type len) { ! if (mask) ! return maxloc2_4_s1 (array, len, back); else return 0; } --- 152,159 ---- smaxloc2_4_s1 (gfc_array_s1 * const restrict array, GFC_LOGICAL_4 *mask, GFC_LOGICAL_4 back, gfc_charlen_type len) { ! if (mask == NULL || *mask) ! return maxloc2_4_s1 (array, back, len); else return 0; } diff -Nrcpad gcc-12.4.0/libgfortran/generated/maxloc2_4_s4.c gcc-12.5.0-RC-20250704/libgfortran/generated/maxloc2_4_s4.c *** gcc-12.4.0/libgfortran/generated/maxloc2_4_s4.c Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/libgfortran/generated/maxloc2_4_s4.c Fri Jul 4 07:24:45 2025 *************** GFC_INTEGER_4 *** 152,159 **** smaxloc2_4_s4 (gfc_array_s4 * const restrict array, GFC_LOGICAL_4 *mask, GFC_LOGICAL_4 back, gfc_charlen_type len) { ! if (mask) ! return maxloc2_4_s4 (array, len, back); else return 0; } --- 152,159 ---- smaxloc2_4_s4 (gfc_array_s4 * const restrict array, GFC_LOGICAL_4 *mask, GFC_LOGICAL_4 back, gfc_charlen_type len) { ! if (mask == NULL || *mask) ! return maxloc2_4_s4 (array, back, len); else return 0; } diff -Nrcpad gcc-12.4.0/libgfortran/generated/maxloc2_8_s1.c gcc-12.5.0-RC-20250704/libgfortran/generated/maxloc2_8_s1.c *** gcc-12.4.0/libgfortran/generated/maxloc2_8_s1.c Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/libgfortran/generated/maxloc2_8_s1.c Fri Jul 4 07:24:45 2025 *************** GFC_INTEGER_8 *** 152,159 **** smaxloc2_8_s1 (gfc_array_s1 * const restrict array, GFC_LOGICAL_4 *mask, GFC_LOGICAL_4 back, gfc_charlen_type len) { ! if (mask) ! return maxloc2_8_s1 (array, len, back); else return 0; } --- 152,159 ---- smaxloc2_8_s1 (gfc_array_s1 * const restrict array, GFC_LOGICAL_4 *mask, GFC_LOGICAL_4 back, gfc_charlen_type len) { ! if (mask == NULL || *mask) ! return maxloc2_8_s1 (array, back, len); else return 0; } diff -Nrcpad gcc-12.4.0/libgfortran/generated/maxloc2_8_s4.c gcc-12.5.0-RC-20250704/libgfortran/generated/maxloc2_8_s4.c *** gcc-12.4.0/libgfortran/generated/maxloc2_8_s4.c Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/libgfortran/generated/maxloc2_8_s4.c Fri Jul 4 07:24:45 2025 *************** GFC_INTEGER_8 *** 152,159 **** smaxloc2_8_s4 (gfc_array_s4 * const restrict array, GFC_LOGICAL_4 *mask, GFC_LOGICAL_4 back, gfc_charlen_type len) { ! if (mask) ! return maxloc2_8_s4 (array, len, back); else return 0; } --- 152,159 ---- smaxloc2_8_s4 (gfc_array_s4 * const restrict array, GFC_LOGICAL_4 *mask, GFC_LOGICAL_4 back, gfc_charlen_type len) { ! if (mask == NULL || *mask) ! return maxloc2_8_s4 (array, back, len); else return 0; } diff -Nrcpad gcc-12.4.0/libgfortran/generated/minloc1_16_s1.c gcc-12.5.0-RC-20250704/libgfortran/generated/minloc1_16_s1.c *** gcc-12.4.0/libgfortran/generated/minloc1_16_s1.c Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/libgfortran/generated/minloc1_16_s1.c Fri Jul 4 07:24:45 2025 *************** sminloc1_16_s1 (gfc_array_i16 * const re *** 468,474 **** for (n = 0; n < dim; n++) { ! extent[n] = GFC_DESCRIPTOR_EXTENT(array,n) * string_len; if (extent[n] <= 0) extent[n] = 0; --- 468,474 ---- for (n = 0; n < dim; n++) { ! extent[n] = GFC_DESCRIPTOR_EXTENT(array,n); if (extent[n] <= 0) extent[n] = 0; *************** sminloc1_16_s1 (gfc_array_i16 * const re *** 476,483 **** for (n = dim; n < rank; n++) { ! extent[n] = ! GFC_DESCRIPTOR_EXTENT(array,n + 1) * string_len; if (extent[n] <= 0) extent[n] = 0; --- 476,482 ---- for (n = dim; n < rank; n++) { ! extent[n] = GFC_DESCRIPTOR_EXTENT(array,n + 1); if (extent[n] <= 0) extent[n] = 0; diff -Nrcpad gcc-12.4.0/libgfortran/generated/minloc1_16_s4.c gcc-12.5.0-RC-20250704/libgfortran/generated/minloc1_16_s4.c *** gcc-12.4.0/libgfortran/generated/minloc1_16_s4.c Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/libgfortran/generated/minloc1_16_s4.c Fri Jul 4 07:24:45 2025 *************** sminloc1_16_s4 (gfc_array_i16 * const re *** 468,474 **** for (n = 0; n < dim; n++) { ! extent[n] = GFC_DESCRIPTOR_EXTENT(array,n) * string_len; if (extent[n] <= 0) extent[n] = 0; --- 468,474 ---- for (n = 0; n < dim; n++) { ! extent[n] = GFC_DESCRIPTOR_EXTENT(array,n); if (extent[n] <= 0) extent[n] = 0; *************** sminloc1_16_s4 (gfc_array_i16 * const re *** 476,483 **** for (n = dim; n < rank; n++) { ! extent[n] = ! GFC_DESCRIPTOR_EXTENT(array,n + 1) * string_len; if (extent[n] <= 0) extent[n] = 0; --- 476,482 ---- for (n = dim; n < rank; n++) { ! extent[n] = GFC_DESCRIPTOR_EXTENT(array,n + 1); if (extent[n] <= 0) extent[n] = 0; diff -Nrcpad gcc-12.4.0/libgfortran/generated/minloc1_4_s1.c gcc-12.5.0-RC-20250704/libgfortran/generated/minloc1_4_s1.c *** gcc-12.4.0/libgfortran/generated/minloc1_4_s1.c Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/libgfortran/generated/minloc1_4_s1.c Fri Jul 4 07:24:45 2025 *************** sminloc1_4_s1 (gfc_array_i4 * const rest *** 468,474 **** for (n = 0; n < dim; n++) { ! extent[n] = GFC_DESCRIPTOR_EXTENT(array,n) * string_len; if (extent[n] <= 0) extent[n] = 0; --- 468,474 ---- for (n = 0; n < dim; n++) { ! extent[n] = GFC_DESCRIPTOR_EXTENT(array,n); if (extent[n] <= 0) extent[n] = 0; *************** sminloc1_4_s1 (gfc_array_i4 * const rest *** 476,483 **** for (n = dim; n < rank; n++) { ! extent[n] = ! GFC_DESCRIPTOR_EXTENT(array,n + 1) * string_len; if (extent[n] <= 0) extent[n] = 0; --- 476,482 ---- for (n = dim; n < rank; n++) { ! extent[n] = GFC_DESCRIPTOR_EXTENT(array,n + 1); if (extent[n] <= 0) extent[n] = 0; diff -Nrcpad gcc-12.4.0/libgfortran/generated/minloc1_4_s4.c gcc-12.5.0-RC-20250704/libgfortran/generated/minloc1_4_s4.c *** gcc-12.4.0/libgfortran/generated/minloc1_4_s4.c Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/libgfortran/generated/minloc1_4_s4.c Fri Jul 4 07:24:45 2025 *************** sminloc1_4_s4 (gfc_array_i4 * const rest *** 468,474 **** for (n = 0; n < dim; n++) { ! extent[n] = GFC_DESCRIPTOR_EXTENT(array,n) * string_len; if (extent[n] <= 0) extent[n] = 0; --- 468,474 ---- for (n = 0; n < dim; n++) { ! extent[n] = GFC_DESCRIPTOR_EXTENT(array,n); if (extent[n] <= 0) extent[n] = 0; *************** sminloc1_4_s4 (gfc_array_i4 * const rest *** 476,483 **** for (n = dim; n < rank; n++) { ! extent[n] = ! GFC_DESCRIPTOR_EXTENT(array,n + 1) * string_len; if (extent[n] <= 0) extent[n] = 0; --- 476,482 ---- for (n = dim; n < rank; n++) { ! extent[n] = GFC_DESCRIPTOR_EXTENT(array,n + 1); if (extent[n] <= 0) extent[n] = 0; diff -Nrcpad gcc-12.4.0/libgfortran/generated/minloc1_8_s1.c gcc-12.5.0-RC-20250704/libgfortran/generated/minloc1_8_s1.c *** gcc-12.4.0/libgfortran/generated/minloc1_8_s1.c Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/libgfortran/generated/minloc1_8_s1.c Fri Jul 4 07:24:45 2025 *************** sminloc1_8_s1 (gfc_array_i8 * const rest *** 468,474 **** for (n = 0; n < dim; n++) { ! extent[n] = GFC_DESCRIPTOR_EXTENT(array,n) * string_len; if (extent[n] <= 0) extent[n] = 0; --- 468,474 ---- for (n = 0; n < dim; n++) { ! extent[n] = GFC_DESCRIPTOR_EXTENT(array,n); if (extent[n] <= 0) extent[n] = 0; *************** sminloc1_8_s1 (gfc_array_i8 * const rest *** 476,483 **** for (n = dim; n < rank; n++) { ! extent[n] = ! GFC_DESCRIPTOR_EXTENT(array,n + 1) * string_len; if (extent[n] <= 0) extent[n] = 0; --- 476,482 ---- for (n = dim; n < rank; n++) { ! extent[n] = GFC_DESCRIPTOR_EXTENT(array,n + 1); if (extent[n] <= 0) extent[n] = 0; diff -Nrcpad gcc-12.4.0/libgfortran/generated/minloc1_8_s4.c gcc-12.5.0-RC-20250704/libgfortran/generated/minloc1_8_s4.c *** gcc-12.4.0/libgfortran/generated/minloc1_8_s4.c Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/libgfortran/generated/minloc1_8_s4.c Fri Jul 4 07:24:45 2025 *************** sminloc1_8_s4 (gfc_array_i8 * const rest *** 468,474 **** for (n = 0; n < dim; n++) { ! extent[n] = GFC_DESCRIPTOR_EXTENT(array,n) * string_len; if (extent[n] <= 0) extent[n] = 0; --- 468,474 ---- for (n = 0; n < dim; n++) { ! extent[n] = GFC_DESCRIPTOR_EXTENT(array,n); if (extent[n] <= 0) extent[n] = 0; *************** sminloc1_8_s4 (gfc_array_i8 * const rest *** 476,483 **** for (n = dim; n < rank; n++) { ! extent[n] = ! GFC_DESCRIPTOR_EXTENT(array,n + 1) * string_len; if (extent[n] <= 0) extent[n] = 0; --- 476,482 ---- for (n = dim; n < rank; n++) { ! extent[n] = GFC_DESCRIPTOR_EXTENT(array,n + 1); if (extent[n] <= 0) extent[n] = 0; diff -Nrcpad gcc-12.4.0/libgfortran/generated/minloc2_16_s1.c gcc-12.5.0-RC-20250704/libgfortran/generated/minloc2_16_s1.c *** gcc-12.4.0/libgfortran/generated/minloc2_16_s1.c Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/libgfortran/generated/minloc2_16_s1.c Fri Jul 4 07:24:45 2025 *************** GFC_INTEGER_16 *** 154,161 **** sminloc2_16_s1 (gfc_array_s1 * const restrict array, GFC_LOGICAL_4 *mask, GFC_LOGICAL_4 back, gfc_charlen_type len) { ! if (mask) ! return minloc2_16_s1 (array, len, back); else return 0; } --- 154,161 ---- sminloc2_16_s1 (gfc_array_s1 * const restrict array, GFC_LOGICAL_4 *mask, GFC_LOGICAL_4 back, gfc_charlen_type len) { ! if (mask == NULL || *mask) ! return minloc2_16_s1 (array, back, len); else return 0; } diff -Nrcpad gcc-12.4.0/libgfortran/generated/minloc2_16_s4.c gcc-12.5.0-RC-20250704/libgfortran/generated/minloc2_16_s4.c *** gcc-12.4.0/libgfortran/generated/minloc2_16_s4.c Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/libgfortran/generated/minloc2_16_s4.c Fri Jul 4 07:24:45 2025 *************** GFC_INTEGER_16 *** 154,161 **** sminloc2_16_s4 (gfc_array_s4 * const restrict array, GFC_LOGICAL_4 *mask, GFC_LOGICAL_4 back, gfc_charlen_type len) { ! if (mask) ! return minloc2_16_s4 (array, len, back); else return 0; } --- 154,161 ---- sminloc2_16_s4 (gfc_array_s4 * const restrict array, GFC_LOGICAL_4 *mask, GFC_LOGICAL_4 back, gfc_charlen_type len) { ! if (mask == NULL || *mask) ! return minloc2_16_s4 (array, back, len); else return 0; } diff -Nrcpad gcc-12.4.0/libgfortran/generated/minloc2_4_s1.c gcc-12.5.0-RC-20250704/libgfortran/generated/minloc2_4_s1.c *** gcc-12.4.0/libgfortran/generated/minloc2_4_s1.c Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/libgfortran/generated/minloc2_4_s1.c Fri Jul 4 07:24:45 2025 *************** GFC_INTEGER_4 *** 154,161 **** sminloc2_4_s1 (gfc_array_s1 * const restrict array, GFC_LOGICAL_4 *mask, GFC_LOGICAL_4 back, gfc_charlen_type len) { ! if (mask) ! return minloc2_4_s1 (array, len, back); else return 0; } --- 154,161 ---- sminloc2_4_s1 (gfc_array_s1 * const restrict array, GFC_LOGICAL_4 *mask, GFC_LOGICAL_4 back, gfc_charlen_type len) { ! if (mask == NULL || *mask) ! return minloc2_4_s1 (array, back, len); else return 0; } diff -Nrcpad gcc-12.4.0/libgfortran/generated/minloc2_4_s4.c gcc-12.5.0-RC-20250704/libgfortran/generated/minloc2_4_s4.c *** gcc-12.4.0/libgfortran/generated/minloc2_4_s4.c Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/libgfortran/generated/minloc2_4_s4.c Fri Jul 4 07:24:45 2025 *************** GFC_INTEGER_4 *** 154,161 **** sminloc2_4_s4 (gfc_array_s4 * const restrict array, GFC_LOGICAL_4 *mask, GFC_LOGICAL_4 back, gfc_charlen_type len) { ! if (mask) ! return minloc2_4_s4 (array, len, back); else return 0; } --- 154,161 ---- sminloc2_4_s4 (gfc_array_s4 * const restrict array, GFC_LOGICAL_4 *mask, GFC_LOGICAL_4 back, gfc_charlen_type len) { ! if (mask == NULL || *mask) ! return minloc2_4_s4 (array, back, len); else return 0; } diff -Nrcpad gcc-12.4.0/libgfortran/generated/minloc2_8_s1.c gcc-12.5.0-RC-20250704/libgfortran/generated/minloc2_8_s1.c *** gcc-12.4.0/libgfortran/generated/minloc2_8_s1.c Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/libgfortran/generated/minloc2_8_s1.c Fri Jul 4 07:24:45 2025 *************** GFC_INTEGER_8 *** 154,161 **** sminloc2_8_s1 (gfc_array_s1 * const restrict array, GFC_LOGICAL_4 *mask, GFC_LOGICAL_4 back, gfc_charlen_type len) { ! if (mask) ! return minloc2_8_s1 (array, len, back); else return 0; } --- 154,161 ---- sminloc2_8_s1 (gfc_array_s1 * const restrict array, GFC_LOGICAL_4 *mask, GFC_LOGICAL_4 back, gfc_charlen_type len) { ! if (mask == NULL || *mask) ! return minloc2_8_s1 (array, back, len); else return 0; } diff -Nrcpad gcc-12.4.0/libgfortran/generated/minloc2_8_s4.c gcc-12.5.0-RC-20250704/libgfortran/generated/minloc2_8_s4.c *** gcc-12.4.0/libgfortran/generated/minloc2_8_s4.c Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/libgfortran/generated/minloc2_8_s4.c Fri Jul 4 07:24:45 2025 *************** GFC_INTEGER_8 *** 154,161 **** sminloc2_8_s4 (gfc_array_s4 * const restrict array, GFC_LOGICAL_4 *mask, GFC_LOGICAL_4 back, gfc_charlen_type len) { ! if (mask) ! return minloc2_8_s4 (array, len, back); else return 0; } --- 154,161 ---- sminloc2_8_s4 (gfc_array_s4 * const restrict array, GFC_LOGICAL_4 *mask, GFC_LOGICAL_4 back, gfc_charlen_type len) { ! if (mask == NULL || *mask) ! return minloc2_8_s4 (array, back, len); else return 0; } diff -Nrcpad gcc-12.4.0/libgfortran/m4/ifindloc2.m4 gcc-12.5.0-RC-20250704/libgfortran/m4/ifindloc2.m4 *** gcc-12.4.0/libgfortran/m4/ifindloc2.m4 Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/libgfortran/m4/ifindloc2.m4 Fri Jul 4 07:24:45 2025 *************** see the files COPYING3 and COPYING.RUNTI *** 41,47 **** if (back) { src = array->base_addr + (extent - 1) * sstride; ! for (i = extent; i >= 0; i--) { if ('comparison`'`) return i; --- 41,47 ---- if (back) { src = array->base_addr + (extent - 1) * sstride; ! for (i = extent; i > 0; i--) { if ('comparison`'`) return i; *************** see the files COPYING3 and COPYING.RUNTI *** 94,100 **** { src = array->base_addr + (extent - 1) * sstride; mbase += (extent - 1) * mstride; ! for (i = extent; i >= 0; i--) { if (*mbase && ('comparison`'`)) return i; --- 94,100 ---- { src = array->base_addr + (extent - 1) * sstride; mbase += (extent - 1) * mstride; ! for (i = extent; i > 0; i--) { if (*mbase && ('comparison`'`)) return i; diff -Nrcpad gcc-12.4.0/libgfortran/m4/ifunction-s.m4 gcc-12.5.0-RC-20250704/libgfortran/m4/ifunction-s.m4 *** gcc-12.4.0/libgfortran/m4/ifunction-s.m4 Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/libgfortran/m4/ifunction-s.m4 Fri Jul 4 07:24:45 2025 *************** s'name`'rtype_qual`_'atype_code` ('rtype *** 432,438 **** for (n = 0; n < dim; n++) { ! extent[n] = GFC_DESCRIPTOR_EXTENT(array,n) * string_len; if (extent[n] <= 0) extent[n] = 0; --- 432,438 ---- for (n = 0; n < dim; n++) { ! extent[n] = GFC_DESCRIPTOR_EXTENT(array,n); if (extent[n] <= 0) extent[n] = 0; *************** s'name`'rtype_qual`_'atype_code` ('rtype *** 440,447 **** for (n = dim; n < rank; n++) { ! extent[n] = ! GFC_DESCRIPTOR_EXTENT(array,n + 1) * string_len; if (extent[n] <= 0) extent[n] = 0; --- 440,446 ---- for (n = dim; n < rank; n++) { ! extent[n] = GFC_DESCRIPTOR_EXTENT(array,n + 1); if (extent[n] <= 0) extent[n] = 0; diff -Nrcpad gcc-12.4.0/libgfortran/m4/maxloc2s.m4 gcc-12.5.0-RC-20250704/libgfortran/m4/maxloc2s.m4 *** gcc-12.4.0/libgfortran/m4/maxloc2s.m4 Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/libgfortran/m4/maxloc2s.m4 Fri Jul 4 07:24:45 2025 *************** export_proto(s'name`'rtype_qual`_'atype_ *** 153,160 **** s'name`'rtype_qual`_'atype_code` ('atype` * const restrict array, GFC_LOGICAL_4 *mask'back_arg`, gfc_charlen_type len) { ! if (mask) ! return 'name`'rtype_qual`_'atype_code` (array, len, back); else return 0; } --- 153,160 ---- s'name`'rtype_qual`_'atype_code` ('atype` * const restrict array, GFC_LOGICAL_4 *mask'back_arg`, gfc_charlen_type len) { ! if (mask == NULL || *mask) ! return 'name`'rtype_qual`_'atype_code` (array, back, len); else return 0; } diff -Nrcpad gcc-12.4.0/libgfortran/m4/minloc2s.m4 gcc-12.5.0-RC-20250704/libgfortran/m4/minloc2s.m4 *** gcc-12.4.0/libgfortran/m4/minloc2s.m4 Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/libgfortran/m4/minloc2s.m4 Fri Jul 4 07:24:45 2025 *************** export_proto(s'name`'rtype_qual`_'atype_ *** 155,162 **** s'name`'rtype_qual`_'atype_code` ('atype` * const restrict array, GFC_LOGICAL_4 *mask'back_arg`, gfc_charlen_type len) { ! if (mask) ! return 'name`'rtype_qual`_'atype_code` (array, len, back); else return 0; } --- 155,162 ---- s'name`'rtype_qual`_'atype_code` ('atype` * const restrict array, GFC_LOGICAL_4 *mask'back_arg`, gfc_charlen_type len) { ! if (mask == NULL || *mask) ! return 'name`'rtype_qual`_'atype_code` (array, back, len); else return 0; } diff -Nrcpad gcc-12.4.0/libgo/go/crypto/tls/handshake_client_test.go gcc-12.5.0-RC-20250704/libgo/go/crypto/tls/handshake_client_test.go *** gcc-12.4.0/libgo/go/crypto/tls/handshake_client_test.go Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/libgo/go/crypto/tls/handshake_client_test.go Fri Jul 4 07:24:45 2025 *************** func testResumption(t *testing.T, versio *** 881,886 **** --- 881,887 ---- MaxVersion: version, CipherSuites: []uint16{TLS_RSA_WITH_RC4_128_SHA, TLS_ECDHE_RSA_WITH_RC4_128_SHA}, Certificates: testConfig.Certificates, + Time: testTime, } issuer, err := x509.ParseCertificate(testRSACertificateIssuer) *************** func testResumption(t *testing.T, versio *** 897,902 **** --- 898,904 ---- ClientSessionCache: NewLRUClientSessionCache(32), RootCAs: rootCAs, ServerName: "example.golang", + Time: testTime, } testResumeState := func(test string, didResume bool) { *************** func testResumption(t *testing.T, versio *** 944,963 **** } // An old session ticket can resume, but the server will provide a ticket encrypted with a fresh key. ! serverConfig.Time = func() time.Time { return time.Now().Add(24*time.Hour + time.Minute) } testResumeState("ResumeWithOldTicket", true) if bytes.Equal(ticket[:ticketKeyNameLen], getTicket()[:ticketKeyNameLen]) { t.Fatal("old first ticket matches the fresh one") } // Now the session tickey key is expired, so a full handshake should occur. ! serverConfig.Time = func() time.Time { return time.Now().Add(24*8*time.Hour + time.Minute) } testResumeState("ResumeWithExpiredTicket", false) if bytes.Equal(ticket, getTicket()) { t.Fatal("expired first ticket matches the fresh one") } ! serverConfig.Time = func() time.Time { return time.Now() } // reset the time back key1 := randomKey() serverConfig.SetSessionTicketKeys([][32]byte{key1}) --- 946,965 ---- } // An old session ticket can resume, but the server will provide a ticket encrypted with a fresh key. ! serverConfig.Time = func() time.Time { return testTime().Add(24*time.Hour + time.Minute) } testResumeState("ResumeWithOldTicket", true) if bytes.Equal(ticket[:ticketKeyNameLen], getTicket()[:ticketKeyNameLen]) { t.Fatal("old first ticket matches the fresh one") } // Now the session tickey key is expired, so a full handshake should occur. ! serverConfig.Time = func() time.Time { return testTime().Add(24*8*time.Hour + time.Minute) } testResumeState("ResumeWithExpiredTicket", false) if bytes.Equal(ticket, getTicket()) { t.Fatal("expired first ticket matches the fresh one") } ! serverConfig.Time = func() time.Time { return testTime() } // reset the time back key1 := randomKey() serverConfig.SetSessionTicketKeys([][32]byte{key1}) *************** func testResumption(t *testing.T, versio *** 974,984 **** testResumeState("KeyChangeFinish", true) // Age the session ticket a bit, but not yet expired. ! serverConfig.Time = func() time.Time { return time.Now().Add(24*time.Hour + time.Minute) } testResumeState("OldSessionTicket", true) ticket = getTicket() // Expire the session ticket, which would force a full handshake. ! serverConfig.Time = func() time.Time { return time.Now().Add(24*8*time.Hour + time.Minute) } testResumeState("ExpiredSessionTicket", false) if bytes.Equal(ticket, getTicket()) { t.Fatal("new ticket wasn't provided after old ticket expired") --- 976,986 ---- testResumeState("KeyChangeFinish", true) // Age the session ticket a bit, but not yet expired. ! serverConfig.Time = func() time.Time { return testTime().Add(24*time.Hour + time.Minute) } testResumeState("OldSessionTicket", true) ticket = getTicket() // Expire the session ticket, which would force a full handshake. ! serverConfig.Time = func() time.Time { return testTime().Add(24*8*time.Hour + 2*time.Minute) } testResumeState("ExpiredSessionTicket", false) if bytes.Equal(ticket, getTicket()) { t.Fatal("new ticket wasn't provided after old ticket expired") *************** func testResumption(t *testing.T, versio *** 988,994 **** d := 0 * time.Hour for i := 0; i < 13; i++ { d += 12 * time.Hour ! serverConfig.Time = func() time.Time { return time.Now().Add(d) } testResumeState("OldSessionTicket", true) } // Expire it (now a little more than 7 days) and make sure a full --- 990,996 ---- d := 0 * time.Hour for i := 0; i < 13; i++ { d += 12 * time.Hour ! serverConfig.Time = func() time.Time { return testTime().Add(d) } testResumeState("OldSessionTicket", true) } // Expire it (now a little more than 7 days) and make sure a full *************** func testResumption(t *testing.T, versio *** 996,1002 **** // TLS 1.3 since the client should be using a fresh ticket sent over // by the server. d += 12 * time.Hour ! serverConfig.Time = func() time.Time { return time.Now().Add(d) } if version == VersionTLS13 { testResumeState("ExpiredSessionTicket", true) } else { --- 998,1004 ---- // TLS 1.3 since the client should be using a fresh ticket sent over // by the server. d += 12 * time.Hour ! serverConfig.Time = func() time.Time { return testTime().Add(d) } if version == VersionTLS13 { testResumeState("ExpiredSessionTicket", true) } else { *************** func testResumption(t *testing.T, versio *** 1012,1017 **** --- 1014,1020 ---- MaxVersion: version, CipherSuites: []uint16{TLS_RSA_WITH_RC4_128_SHA, TLS_ECDHE_RSA_WITH_RC4_128_SHA}, Certificates: testConfig.Certificates, + Time: testTime, } serverConfig.SetSessionTicketKeys([][32]byte{key2}) *************** func testVerifyConnection(t *testing.T, *** 1698,1703 **** --- 1701,1707 ---- serverConfig := &Config{ MaxVersion: version, Certificates: []Certificate{testConfig.Certificates[0]}, + Time: testTime, ClientCAs: rootCAs, NextProtos: []string{"protocol1"}, } *************** func testVerifyConnection(t *testing.T, *** 1711,1716 **** --- 1715,1721 ---- RootCAs: rootCAs, ServerName: "example.golang", Certificates: []Certificate{testConfig.Certificates[0]}, + Time: testTime, NextProtos: []string{"protocol1"}, } test.configureClient(clientConfig, &clientCalled) *************** func testVerifyPeerCertificate(t *testin *** 1753,1760 **** rootCAs := x509.NewCertPool() rootCAs.AddCert(issuer) - now := func() time.Time { return time.Unix(1476984729, 0) } - sentinelErr := errors.New("TestVerifyPeerCertificate") verifyPeerCertificateCallback := func(called *bool, rawCerts [][]byte, validatedChains [][]*x509.Certificate) error { --- 1758,1763 ---- *************** func testVerifyPeerCertificate(t *testin *** 2000,2006 **** config.ServerName = "example.golang" config.ClientAuth = RequireAndVerifyClientCert config.ClientCAs = rootCAs ! config.Time = now config.MaxVersion = version config.Certificates = make([]Certificate, 1) config.Certificates[0].Certificate = [][]byte{testRSACertificate} --- 2003,2009 ---- config.ServerName = "example.golang" config.ClientAuth = RequireAndVerifyClientCert config.ClientCAs = rootCAs ! config.Time = testTime config.MaxVersion = version config.Certificates = make([]Certificate, 1) config.Certificates[0].Certificate = [][]byte{testRSACertificate} *************** func testVerifyPeerCertificate(t *testin *** 2017,2023 **** config := testConfig.Clone() config.ServerName = "example.golang" config.RootCAs = rootCAs ! config.Time = now config.MaxVersion = version test.configureClient(config, &clientCalled) clientErr := Client(c, config).Handshake() --- 2020,2026 ---- config := testConfig.Clone() config.ServerName = "example.golang" config.RootCAs = rootCAs ! config.Time = testTime config.MaxVersion = version test.configureClient(config, &clientCalled) clientErr := Client(c, config).Handshake() *************** func testGetClientCertificate(t *testing *** 2330,2336 **** serverConfig.RootCAs = x509.NewCertPool() serverConfig.RootCAs.AddCert(issuer) serverConfig.ClientCAs = serverConfig.RootCAs ! serverConfig.Time = func() time.Time { return time.Unix(1476984729, 0) } serverConfig.MaxVersion = version clientConfig := testConfig.Clone() --- 2333,2339 ---- serverConfig.RootCAs = x509.NewCertPool() serverConfig.RootCAs.AddCert(issuer) serverConfig.ClientCAs = serverConfig.RootCAs ! serverConfig.Time = testTime serverConfig.MaxVersion = version clientConfig := testConfig.Clone() *************** func testResumptionKeepsOCSPAndSCT(t *te *** 2501,2506 **** --- 2504,2510 ---- ClientSessionCache: NewLRUClientSessionCache(32), ServerName: "example.golang", RootCAs: roots, + Time: testTime, } serverConfig := testConfig.Clone() serverConfig.MaxVersion = ver diff -Nrcpad gcc-12.4.0/libgo/go/crypto/tls/handshake_server_test.go gcc-12.5.0-RC-20250704/libgo/go/crypto/tls/handshake_server_test.go *** gcc-12.4.0/libgo/go/crypto/tls/handshake_server_test.go Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/libgo/go/crypto/tls/handshake_server_test.go Fri Jul 4 07:24:45 2025 *************** func testCrossVersionResume(t *testing.T *** 483,488 **** --- 483,489 ---- serverConfig := &Config{ CipherSuites: []uint16{TLS_RSA_WITH_AES_128_CBC_SHA}, Certificates: testConfig.Certificates, + Time: testTime, } clientConfig := &Config{ CipherSuites: []uint16{TLS_RSA_WITH_AES_128_CBC_SHA}, *************** func testCrossVersionResume(t *testing.T *** 490,495 **** --- 491,497 ---- ClientSessionCache: NewLRUClientSessionCache(1), ServerName: "servername", MinVersion: VersionTLS10, + Time: testTime, } // Establish a session at TLS 1.1. diff -Nrcpad gcc-12.4.0/libgo/go/crypto/tls/handshake_test.go gcc-12.5.0-RC-20250704/libgo/go/crypto/tls/handshake_test.go *** gcc-12.4.0/libgo/go/crypto/tls/handshake_test.go Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/libgo/go/crypto/tls/handshake_test.go Fri Jul 4 07:24:45 2025 *************** func fromHex(s string) []byte { *** 429,434 **** --- 429,439 ---- return b } + // testTime is 2016-10-20T17:32:09.000Z, which is within the validity period of + // [testRSACertificate], [testRSACertificateIssuer], [testRSA2048Certificate], + // [testRSA2048CertificateIssuer], and [testECDSACertificate]. + var testTime = func() time.Time { return time.Unix(1476984729, 0) } + var testRSACertificate = fromHex("3082024b308201b4a003020102020900e8f09d3fe25beaa6300d06092a864886f70d01010b0500301f310b3009060355040a1302476f3110300e06035504031307476f20526f6f74301e170d3136303130313030303030305a170d3235303130313030303030305a301a310b3009060355040a1302476f310b300906035504031302476f30819f300d06092a864886f70d010101050003818d0030818902818100db467d932e12270648bc062821ab7ec4b6a25dfe1e5245887a3647a5080d92425bc281c0be97799840fb4f6d14fd2b138bc2a52e67d8d4099ed62238b74a0b74732bc234f1d193e596d9747bf3589f6c613cc0b041d4d92b2b2423775b1c3bbd755dce2054cfa163871d1e24c4f31d1a508baab61443ed97a77562f414c852d70203010001a38193308190300e0603551d0f0101ff0404030205a0301d0603551d250416301406082b0601050507030106082b06010505070302300c0603551d130101ff0402300030190603551d0e041204109f91161f43433e49a6de6db680d79f60301b0603551d230414301280104813494d137e1631bba301d5acab6e7b30190603551d1104123010820e6578616d706c652e676f6c616e67300d06092a864886f70d01010b0500038181009d30cc402b5b50a061cbbae55358e1ed8328a9581aa938a495a1ac315a1a84663d43d32dd90bf297dfd320643892243a00bccf9c7db74020015faad3166109a276fd13c3cce10c5ceeb18782f16c04ed73bbb343778d0c1cf10fa1d8408361c94c722b9daedb4606064df4c1b33ec0d1bd42d4dbfe3d1360845c21d33be9fae7") var testRSACertificateIssuer = fromHex("3082021930820182a003020102020900ca5e4e811a965964300d06092a864886f70d01010b0500301f310b3009060355040a1302476f3110300e06035504031307476f20526f6f74301e170d3136303130313030303030305a170d3235303130313030303030305a301f310b3009060355040a1302476f3110300e06035504031307476f20526f6f7430819f300d06092a864886f70d010101050003818d0030818902818100d667b378bb22f34143b6cd2008236abefaf2852adf3ab05e01329e2c14834f5105df3f3073f99dab5442d45ee5f8f57b0111c8cb682fbb719a86944eebfffef3406206d898b8c1b1887797c9c5006547bb8f00e694b7a063f10839f269f2c34fff7a1f4b21fbcd6bfdfb13ac792d1d11f277b5c5b48600992203059f2a8f8cc50203010001a35d305b300e0603551d0f0101ff040403020204301d0603551d250416301406082b0601050507030106082b06010505070302300f0603551d130101ff040530030101ff30190603551d0e041204104813494d137e1631bba301d5acab6e7b300d06092a864886f70d01010b050003818100c1154b4bab5266221f293766ae4138899bd4c5e36b13cee670ceeaa4cbdf4f6679017e2fe649765af545749fe4249418a56bd38a04b81e261f5ce86b8d5c65413156a50d12449554748c59a30c515bc36a59d38bddf51173e899820b282e40aa78c806526fd184fb6b4cf186ec728edffa585440d2b3225325f7ab580e87dd76") diff -Nrcpad gcc-12.4.0/libgo/go/crypto/tls/tls_test.go gcc-12.5.0-RC-20250704/libgo/go/crypto/tls/tls_test.go *** gcc-12.4.0/libgo/go/crypto/tls/tls_test.go Thu Jun 20 08:08:09 2024 --- gcc-12.5.0-RC-20250704/libgo/go/crypto/tls/tls_test.go Fri Jul 4 07:24:45 2025 *************** func TestConnectionState(t *testing.T) { *** 1058,1065 **** rootCAs := x509.NewCertPool() rootCAs.AddCert(issuer) - now := func() time.Time { return time.Unix(1476984729, 0) } - const alpnProtocol = "golang" const serverName = "example.golang" var scts = [][]byte{[]byte("dummy sct 1"), []byte("dummy sct 2")} --- 1058,1063 ---- *************** func TestConnectionState(t *testing.T) { *** 1075,1081 **** } t.Run(name, func(t *testing.T) { config := &Config{ ! Time: now, Rand: zeroSource{}, Certificates: make([]Certificate, 1), MaxVersion: v, --- 1073,1079 ---- } t.Run(name, func(t *testing.T) { config := &Config{ ! Time: testTime, Rand: zeroSource{}, Certificates: make([]Certificate, 1), MaxVersion: v, diff -Nrcpad gcc-12.4.0/libgomp/ChangeLog gcc-12.5.0-RC-20250704/libgomp/ChangeLog *** gcc-12.4.0/libgomp/ChangeLog Thu Jun 20 08:09:01 2024 --- gcc-12.5.0-RC-20250704/libgomp/ChangeLog Fri Jul 4 07:24:46 2025 *************** *** 1,3 **** --- 1,12 ---- + 2024-08-05 Paul Thomas + + Backported from master: + 2024-07-19 Paul Thomas + + * testsuite/libgomp.oacc-fortran/privatized-ref-2.f90: Cut + dg-note about 'a' and remove bogus warnings about its array + descriptor components being used uninitialized. + 2024-06-20 Release Manager * GCC 12.4.0 released. diff -Nrcpad gcc-12.4.0/libgomp/libgomp.info gcc-12.5.0-RC-20250704/libgomp/libgomp.info *** gcc-12.4.0/libgomp/libgomp.info Thu Jun 20 08:30:55 2024 --- gcc-12.5.0-RC-20250704/libgomp/libgomp.info Fri Jul 4 07:42:01 2025 *************** *** 1,4 **** ! This is libgomp.info, produced by makeinfo version 6.8 from libgomp.texi. Copyright (C) 2006-2022 Free Software Foundation, Inc. --- 1,4 ---- ! This is libgomp.info, produced by makeinfo version 6.5 from libgomp.texi. Copyright (C) 2006-2022 Free Software Foundation, Inc. *************** software. Copies published by the Free *** 54,60 **** for GNU development.  ! File: libgomp.info, Node: Top, Next: Enabling OpenMP, Up: (dir) Introduction ************ --- 54,60 ---- for GNU development.  ! File: libgomp.info, Node: Top, Next: Enabling OpenMP Introduction ************ *************** Library Index *** 5529,5692 ****  Tag Table: Node: Top2083 ! Node: Enabling OpenMP4725 ! Node: OpenMP Implementation Status5531 ! Node: OpenMP 4.56086 ! Node: OpenMP 5.06262 ! Node: OpenMP 5.111132 ! Node: Runtime Library Routines14723 ! Node: omp_get_active_level18428 ! Node: omp_get_ancestor_thread_num19128 ! Node: omp_get_cancellation20058 ! Node: omp_get_default_device20872 ! Node: omp_get_device_num21551 ! Node: omp_get_dynamic22356 ! Node: omp_get_initial_device23236 ! Node: omp_get_level23980 ! Node: omp_get_max_active_levels24607 ! Node: omp_get_max_task_priority25328 ! Node: omp_get_max_teams25948 ! Node: omp_get_max_threads26642 ! Node: omp_get_nested27393 ! Node: omp_get_num_devices29001 ! Node: omp_get_num_procs29522 ! Node: omp_get_num_teams30061 ! Node: omp_get_num_threads30577 ! Node: omp_get_proc_bind31666 ! Node: omp_get_schedule32689 ! Node: omp_get_supported_active_levels33658 ! Node: omp_get_team_num34444 ! Node: omp_get_team_size34958 ! Node: omp_get_teams_thread_limit35924 ! Node: omp_get_thread_limit36686 ! Node: omp_get_thread_num37314 ! Node: omp_in_parallel38186 ! Node: omp_in_final38835 ! Node: omp_is_initial_device39509 ! Node: omp_set_default_device40202 ! Node: omp_set_dynamic40993 ! Node: omp_set_max_active_levels41879 ! Node: omp_set_nested42801 ! Node: omp_set_num_teams43996 ! Node: omp_set_num_threads44869 ! Node: omp_set_schedule45740 ! Node: omp_set_teams_thread_limit46834 ! Node: omp_init_lock47836 ! Node: omp_set_lock48499 ! Node: omp_test_lock49354 ! Node: omp_unset_lock50330 ! Node: omp_destroy_lock51261 ! Node: omp_init_nest_lock51938 ! Node: omp_set_nest_lock52673 ! Node: omp_test_nest_lock53588 ! Node: omp_unset_nest_lock54615 ! Node: omp_destroy_nest_lock55630 ! Node: omp_get_wtick56381 ! Node: omp_get_wtime56973 ! Node: omp_fulfill_event57775 ! Node: Environment Variables58796 ! Node: OMP_CANCELLATION60585 ! Node: OMP_DISPLAY_ENV61118 ! Node: OMP_DEFAULT_DEVICE61821 ! Node: OMP_DYNAMIC62601 ! Node: OMP_MAX_ACTIVE_LEVELS63197 ! Node: OMP_MAX_TASK_PRIORITY64124 ! Node: OMP_NESTED64782 ! Node: OMP_NUM_TEAMS65809 ! Node: OMP_NUM_THREADS66482 ! Node: OMP_PROC_BIND67287 ! Node: OMP_PLACES68629 ! Node: OMP_STACKSIZE71318 ! Node: OMP_SCHEDULE72142 ! Node: OMP_TARGET_OFFLOAD72842 ! Node: OMP_TEAMS_THREAD_LIMIT73804 ! Node: OMP_THREAD_LIMIT74611 ! Node: OMP_WAIT_POLICY75221 ! Node: GOMP_CPU_AFFINITY75913 ! Node: GOMP_DEBUG77643 ! Node: GOMP_STACKSIZE78150 ! Node: GOMP_SPINCOUNT78981 ! Node: GOMP_RTEMS_THREAD_POOLS80185 ! Node: Enabling OpenACC82368 ! Node: OpenACC Runtime Library Routines83269 ! Node: acc_get_num_devices87550 ! Node: acc_set_device_type88276 ! Node: acc_get_device_type89040 ! Node: acc_set_device_num90053 ! Node: acc_get_device_num90870 ! Node: acc_get_property91669 ! Node: acc_async_test93892 ! Node: acc_async_test_all94880 ! Node: acc_wait95780 ! Node: acc_wait_all96643 ! Node: acc_wait_all_async97404 ! Node: acc_wait_async98156 ! Node: acc_init98864 ! Node: acc_shutdown99509 ! Node: acc_on_device100176 ! Node: acc_malloc101180 ! Node: acc_free101679 ! Node: acc_copyin102106 ! Node: acc_present_or_copyin103693 ! Node: acc_create105471 ! Node: acc_present_or_create107103 ! Node: acc_copyout108889 ! Node: acc_delete111193 ! Node: acc_update_device113440 ! Node: acc_update_self115014 ! Node: acc_map_data116604 ! Node: acc_unmap_data117289 ! Node: acc_deviceptr117810 ! Node: acc_hostptr118380 ! Node: acc_is_present118944 ! Node: acc_memcpy_to_device120471 ! Node: acc_memcpy_from_device121134 ! Node: acc_attach121801 ! Node: acc_detach122448 ! Node: acc_get_current_cuda_device123227 ! Node: acc_get_current_cuda_context123812 ! Node: acc_get_cuda_stream124412 ! Node: acc_set_cuda_stream125003 ! Node: acc_prof_register125674 ! Node: acc_prof_unregister126233 ! Node: acc_prof_lookup126800 ! Node: acc_register_library127321 ! Node: OpenACC Environment Variables127887 ! Node: ACC_DEVICE_TYPE128459 ! Node: ACC_DEVICE_NUM128695 ! Node: ACC_PROFLIB128949 ! Node: GCC_ACC_NOTIFY129280 ! Node: CUDA Streams Usage129500 ! Ref: CUDA Streams Usage-Footnote-1131401 ! Node: OpenACC Library Interoperability131510 ! Ref: OpenACC Library Interoperability-Footnote-1137878 ! Ref: OpenACC Library Interoperability-Footnote-2138130 ! Node: OpenACC Profiling Interface138338 ! Node: The libgomp ABI148366 ! Node: Implementing MASTER construct149219 ! Node: Implementing CRITICAL construct149636 ! Node: Implementing ATOMIC construct150377 ! Node: Implementing FLUSH construct150860 ! Node: Implementing BARRIER construct151133 ! Node: Implementing THREADPRIVATE construct151404 ! Node: Implementing PRIVATE clause152059 ! Node: Implementing FIRSTPRIVATE LASTPRIVATE COPYIN and COPYPRIVATE clauses152642 ! Node: Implementing REDUCTION clause153968 ! Node: Implementing PARALLEL construct154528 ! Node: Implementing FOR construct155787 ! Node: Implementing ORDERED construct157787 ! Node: Implementing SECTIONS construct158095 ! Node: Implementing SINGLE construct158863 ! Node: Implementing OpenACC's PARALLEL construct159577 ! Node: Reporting Bugs159837 ! Node: Copying160200 ! Node: GNU Free Documentation License197749 ! Node: Funding222874 ! Node: Library Index225400  End Tag Table - -  - Local Variables: - coding: utf-8 - End: --- 5529,5687 ----  Tag Table: Node: Top2083 ! Node: Enabling OpenMP4713 ! Node: OpenMP Implementation Status5519 ! Node: OpenMP 4.56074 ! Node: OpenMP 5.06250 ! Node: OpenMP 5.111120 ! Node: Runtime Library Routines14711 ! Node: omp_get_active_level18416 ! Node: omp_get_ancestor_thread_num19116 ! Node: omp_get_cancellation20046 ! Node: omp_get_default_device20860 ! Node: omp_get_device_num21539 ! Node: omp_get_dynamic22344 ! Node: omp_get_initial_device23224 ! Node: omp_get_level23968 ! Node: omp_get_max_active_levels24595 ! Node: omp_get_max_task_priority25316 ! Node: omp_get_max_teams25936 ! Node: omp_get_max_threads26630 ! Node: omp_get_nested27381 ! Node: omp_get_num_devices28989 ! Node: omp_get_num_procs29510 ! Node: omp_get_num_teams30049 ! Node: omp_get_num_threads30565 ! Node: omp_get_proc_bind31654 ! Node: omp_get_schedule32677 ! Node: omp_get_supported_active_levels33646 ! Node: omp_get_team_num34432 ! Node: omp_get_team_size34946 ! Node: omp_get_teams_thread_limit35912 ! Node: omp_get_thread_limit36674 ! Node: omp_get_thread_num37302 ! Node: omp_in_parallel38174 ! Node: omp_in_final38823 ! Node: omp_is_initial_device39497 ! Node: omp_set_default_device40190 ! Node: omp_set_dynamic40981 ! Node: omp_set_max_active_levels41867 ! Node: omp_set_nested42789 ! Node: omp_set_num_teams43984 ! Node: omp_set_num_threads44857 ! Node: omp_set_schedule45728 ! Node: omp_set_teams_thread_limit46822 ! Node: omp_init_lock47824 ! Node: omp_set_lock48487 ! Node: omp_test_lock49342 ! Node: omp_unset_lock50318 ! Node: omp_destroy_lock51249 ! Node: omp_init_nest_lock51926 ! Node: omp_set_nest_lock52661 ! Node: omp_test_nest_lock53576 ! Node: omp_unset_nest_lock54603 ! Node: omp_destroy_nest_lock55618 ! Node: omp_get_wtick56369 ! Node: omp_get_wtime56961 ! Node: omp_fulfill_event57763 ! Node: Environment Variables58784 ! Node: OMP_CANCELLATION60573 ! Node: OMP_DISPLAY_ENV61106 ! Node: OMP_DEFAULT_DEVICE61809 ! Node: OMP_DYNAMIC62589 ! Node: OMP_MAX_ACTIVE_LEVELS63185 ! Node: OMP_MAX_TASK_PRIORITY64112 ! Node: OMP_NESTED64770 ! Node: OMP_NUM_TEAMS65797 ! Node: OMP_NUM_THREADS66470 ! Node: OMP_PROC_BIND67275 ! Node: OMP_PLACES68617 ! Node: OMP_STACKSIZE71306 ! Node: OMP_SCHEDULE72130 ! Node: OMP_TARGET_OFFLOAD72830 ! Node: OMP_TEAMS_THREAD_LIMIT73792 ! Node: OMP_THREAD_LIMIT74599 ! Node: OMP_WAIT_POLICY75209 ! Node: GOMP_CPU_AFFINITY75901 ! Node: GOMP_DEBUG77631 ! Node: GOMP_STACKSIZE78138 ! Node: GOMP_SPINCOUNT78969 ! Node: GOMP_RTEMS_THREAD_POOLS80173 ! Node: Enabling OpenACC82356 ! Node: OpenACC Runtime Library Routines83257 ! Node: acc_get_num_devices87538 ! Node: acc_set_device_type88264 ! Node: acc_get_device_type89028 ! Node: acc_set_device_num90041 ! Node: acc_get_device_num90858 ! Node: acc_get_property91657 ! Node: acc_async_test93880 ! Node: acc_async_test_all94868 ! Node: acc_wait95768 ! Node: acc_wait_all96631 ! Node: acc_wait_all_async97392 ! Node: acc_wait_async98144 ! Node: acc_init98852 ! Node: acc_shutdown99497 ! Node: acc_on_device100164 ! Node: acc_malloc101168 ! Node: acc_free101667 ! Node: acc_copyin102094 ! Node: acc_present_or_copyin103681 ! Node: acc_create105459 ! Node: acc_present_or_create107091 ! Node: acc_copyout108877 ! Node: acc_delete111181 ! Node: acc_update_device113428 ! Node: acc_update_self115002 ! Node: acc_map_data116592 ! Node: acc_unmap_data117277 ! Node: acc_deviceptr117798 ! Node: acc_hostptr118368 ! Node: acc_is_present118932 ! Node: acc_memcpy_to_device120459 ! Node: acc_memcpy_from_device121122 ! Node: acc_attach121789 ! Node: acc_detach122436 ! Node: acc_get_current_cuda_device123215 ! Node: acc_get_current_cuda_context123800 ! Node: acc_get_cuda_stream124400 ! Node: acc_set_cuda_stream124991 ! Node: acc_prof_register125662 ! Node: acc_prof_unregister126221 ! Node: acc_prof_lookup126788 ! Node: acc_register_library127309 ! Node: OpenACC Environment Variables127875 ! Node: ACC_DEVICE_TYPE128447 ! Node: ACC_DEVICE_NUM128683 ! Node: ACC_PROFLIB128937 ! Node: GCC_ACC_NOTIFY129268 ! Node: CUDA Streams Usage129488 ! Ref: CUDA Streams Usage-Footnote-1131389 ! Node: OpenACC Library Interoperability131498 ! Ref: OpenACC Library Interoperability-Footnote-1137866 ! Ref: OpenACC Library Interoperability-Footnote-2138118 ! Node: OpenACC Profiling Interface138326 ! Node: The libgomp ABI148354 ! Node: Implementing MASTER construct149207 ! Node: Implementing CRITICAL construct149624 ! Node: Implementing ATOMIC construct150365 ! Node: Implementing FLUSH construct150848 ! Node: Implementing BARRIER construct151121 ! Node: Implementing THREADPRIVATE construct151392 ! Node: Implementing PRIVATE clause152047 ! Node: Implementing FIRSTPRIVATE LASTPRIVATE COPYIN and COPYPRIVATE clauses152630 ! Node: Implementing REDUCTION clause153956 ! Node: Implementing PARALLEL construct154516 ! Node: Implementing FOR construct155775 ! Node: Implementing ORDERED construct157775 ! Node: Implementing SECTIONS construct158083 ! Node: Implementing SINGLE construct158851 ! Node: Implementing OpenACC's PARALLEL construct159565 ! Node: Reporting Bugs159825 ! Node: Copying160188 ! Node: GNU Free Documentation License197737 ! Node: Funding222862 ! Node: Library Index225388  End Tag Table diff -Nrcpad gcc-12.4.0/libgomp/testsuite/libgomp.oacc-fortran/privatized-ref-2.f90 gcc-12.5.0-RC-20250704/libgomp/testsuite/libgomp.oacc-fortran/privatized-ref-2.f90 *** gcc-12.4.0/libgomp/testsuite/libgomp.oacc-fortran/privatized-ref-2.f90 Thu Jun 20 08:08:10 2024 --- gcc-12.5.0-RC-20250704/libgomp/testsuite/libgomp.oacc-fortran/privatized-ref-2.f90 Fri Jul 4 07:24:46 2025 *************** program main *** 29,44 **** implicit none (type, external) integer :: j integer, allocatable :: A(:) - ! { dg-note {'a' declared here} {} { target *-*-* } .-1 } character(len=:), allocatable :: my_str character(len=15), allocatable :: my_str15 A = [(3*j, j=1, 10)] - ! { dg-bogus {'a\.offset' is used uninitialized} {PR77504 etc.} { xfail *-*-* } .-1 } - ! { dg-bogus {'a\.dim\[0\]\.lbound' is used uninitialized} {PR77504 etc.} { xfail *-*-* } .-2 } - ! { dg-bogus {'a\.dim\[0\]\.ubound' is used uninitialized} {PR77504 etc.} { xfail *-*-* } .-3 } - ! { dg-bogus {'a\.dim\[0\]\.lbound' may be used uninitialized} {PR77504 etc.} { xfail { ! __OPTIMIZE__ } } .-4 } - ! { dg-bogus {'a\.dim\[0\]\.ubound' may be used uninitialized} {PR77504 etc.} { xfail { ! __OPTIMIZE__ } } .-5 } call foo (A, size(A)) call bar (A) my_str = "1234567890" --- 29,38 ---- diff -Nrcpad gcc-12.4.0/libiberty/ChangeLog gcc-12.5.0-RC-20250704/libiberty/ChangeLog *** gcc-12.4.0/libiberty/ChangeLog Thu Jun 20 08:09:01 2024 --- gcc-12.5.0-RC-20250704/libiberty/ChangeLog Fri Jul 4 07:24:46 2025 *************** *** 1,3 **** --- 1,27 ---- + 2025-06-13 Jakub Jelinek + + Backported from master: + 2024-09-07 Jakub Jelinek + + PR lto/116614 + * simple-object-elf.c (SHN_COMMON): Align comment with neighbouring + comments. + (SHN_HIRESERVE): Use uppercase hex digits instead of lowercase for + consistency. + (simple_object_elf_find_sections): Formatting fixes. + (simple_object_elf_fetch_attributes): Likewise. + (simple_object_elf_attributes_merge): Likewise. + (simple_object_elf_start_write): Likewise. + (simple_object_elf_write_ehdr): Likewise. + (simple_object_elf_write_shdr): Likewise. + (simple_object_elf_write_to_file): Likewise. + (simple_object_elf_copy_lto_debug_section): Likewise. Don't fail for + new_i - 1 >= SHN_LORESERVE, instead arrange in that case to copy + over .symtab_shndx sections, though emit those last and compute their + section content when processing associated .symtab sections. Handle + simple_object_internal_read failure even in the .symtab_shndx reading + case. + 2024-06-20 Release Manager * GCC 12.4.0 released. diff -Nrcpad gcc-12.4.0/libiberty/simple-object-elf.c gcc-12.5.0-RC-20250704/libiberty/simple-object-elf.c *** gcc-12.4.0/libiberty/simple-object-elf.c Thu Jun 20 08:08:10 2024 --- gcc-12.5.0-RC-20250704/libiberty/simple-object-elf.c Fri Jul 4 07:24:46 2025 *************** typedef struct { *** 128,136 **** #define SHN_UNDEF 0 /* Undefined section */ #define SHN_LORESERVE 0xFF00 /* Begin range of reserved indices */ ! #define SHN_COMMON 0xFFF2 /* Associated symbol is in common */ #define SHN_XINDEX 0xFFFF /* Section index is held elsewhere */ ! #define SHN_HIRESERVE 0xffff /* End of reserved indices */ /* 32-bit ELF program header. */ --- 128,136 ---- #define SHN_UNDEF 0 /* Undefined section */ #define SHN_LORESERVE 0xFF00 /* Begin range of reserved indices */ ! #define SHN_COMMON 0xFFF2 /* Associated symbol is in common */ #define SHN_XINDEX 0xFFFF /* Section index is held elsewhere */ ! #define SHN_HIRESERVE 0xFFFF /* End of reserved indices */ /* 32-bit ELF program header. */ *************** simple_object_elf_find_sections (simple_ *** 569,576 **** void *data, int *err) { ! struct simple_object_elf_read *eor = ! (struct simple_object_elf_read *) sobj->data; const struct elf_type_functions *type_functions = eor->type_functions; unsigned char ei_class = eor->ei_class; size_t shdr_size; --- 569,576 ---- void *data, int *err) { ! struct simple_object_elf_read *eor ! = (struct simple_object_elf_read *) sobj->data; const struct elf_type_functions *type_functions = eor->type_functions; unsigned char ei_class = eor->ei_class; size_t shdr_size; *************** simple_object_elf_fetch_attributes (simp *** 662,669 **** const char **errmsg ATTRIBUTE_UNUSED, int *err ATTRIBUTE_UNUSED) { ! struct simple_object_elf_read *eor = ! (struct simple_object_elf_read *) sobj->data; struct simple_object_elf_attributes *ret; ret = XNEW (struct simple_object_elf_attributes); --- 662,669 ---- const char **errmsg ATTRIBUTE_UNUSED, int *err ATTRIBUTE_UNUSED) { ! struct simple_object_elf_read *eor ! = (struct simple_object_elf_read *) sobj->data; struct simple_object_elf_attributes *ret; ret = XNEW (struct simple_object_elf_attributes); *************** simple_object_elf_release_read (void *da *** 689,698 **** static const char * simple_object_elf_attributes_merge (void *todata, void *fromdata, int *err) { ! struct simple_object_elf_attributes *to = ! (struct simple_object_elf_attributes *) todata; ! struct simple_object_elf_attributes *from = ! (struct simple_object_elf_attributes *) fromdata; if (to->ei_data != from->ei_data || to->ei_class != from->ei_class) { --- 689,698 ---- static const char * simple_object_elf_attributes_merge (void *todata, void *fromdata, int *err) { ! struct simple_object_elf_attributes *to ! = (struct simple_object_elf_attributes *) todata; ! struct simple_object_elf_attributes *from ! = (struct simple_object_elf_attributes *) fromdata; if (to->ei_data != from->ei_data || to->ei_class != from->ei_class) { *************** simple_object_elf_start_write (void *att *** 751,758 **** const char **errmsg ATTRIBUTE_UNUSED, int *err ATTRIBUTE_UNUSED) { ! struct simple_object_elf_attributes *attrs = ! (struct simple_object_elf_attributes *) attributes_data; struct simple_object_elf_write *ret; /* We're just going to record the attributes, but we need to make a --- 751,758 ---- const char **errmsg ATTRIBUTE_UNUSED, int *err ATTRIBUTE_UNUSED) { ! struct simple_object_elf_attributes *attrs ! = (struct simple_object_elf_attributes *) attributes_data; struct simple_object_elf_write *ret; /* We're just going to record the attributes, but we need to make a *************** static int *** 769,776 **** simple_object_elf_write_ehdr (simple_object_write *sobj, int descriptor, const char **errmsg, int *err) { ! struct simple_object_elf_attributes *attrs = ! (struct simple_object_elf_attributes *) sobj->data; const struct elf_type_functions* fns; unsigned char cl; size_t ehdr_size; --- 769,776 ---- simple_object_elf_write_ehdr (simple_object_write *sobj, int descriptor, const char **errmsg, int *err) { ! struct simple_object_elf_attributes *attrs ! = (struct simple_object_elf_attributes *) sobj->data; const struct elf_type_functions* fns; unsigned char cl; size_t ehdr_size; *************** simple_object_elf_write_shdr (simple_obj *** 852,859 **** size_t sh_entsize, const char **errmsg, int *err) { ! struct simple_object_elf_attributes *attrs = ! (struct simple_object_elf_attributes *) sobj->data; const struct elf_type_functions* fns; unsigned char cl; size_t shdr_size; --- 852,859 ---- size_t sh_entsize, const char **errmsg, int *err) { ! struct simple_object_elf_attributes *attrs ! = (struct simple_object_elf_attributes *) sobj->data; const struct elf_type_functions* fns; unsigned char cl; size_t shdr_size; *************** static const char * *** 894,901 **** simple_object_elf_write_to_file (simple_object_write *sobj, int descriptor, int *err) { ! struct simple_object_elf_write *eow = ! (struct simple_object_elf_write *) sobj->data; struct simple_object_elf_attributes *attrs = &eow->attrs; unsigned char cl; size_t ehdr_size; --- 894,901 ---- simple_object_elf_write_to_file (simple_object_write *sobj, int descriptor, int *err) { ! struct simple_object_elf_write *eow ! = (struct simple_object_elf_write *) sobj->data; struct simple_object_elf_attributes *attrs = &eow->attrs; unsigned char cl; size_t ehdr_size; *************** simple_object_elf_copy_lto_debug_section *** 1088,1098 **** char *(*pfn) (const char *), int *err) { ! struct simple_object_elf_read *eor = ! (struct simple_object_elf_read *) sobj->data; const struct elf_type_functions *type_functions = eor->type_functions; ! struct simple_object_elf_write *eow = ! (struct simple_object_elf_write *) dobj->data; unsigned char ei_class = eor->ei_class; size_t shdr_size; unsigned int shnum; --- 1088,1098 ---- char *(*pfn) (const char *), int *err) { ! struct simple_object_elf_read *eor ! = (struct simple_object_elf_read *) sobj->data; const struct elf_type_functions *type_functions = eor->type_functions; ! struct simple_object_elf_write *eow ! = (struct simple_object_elf_write *) dobj->data; unsigned char ei_class = eor->ei_class; size_t shdr_size; unsigned int shnum; *************** simple_object_elf_copy_lto_debug_section *** 1106,1115 **** int changed; int *pfnret; const char **pfnname; ! unsigned new_i; unsigned *sh_map; unsigned first_shndx = 0; unsigned int *symtab_indices_shndx; shdr_size = (ei_class == ELFCLASS32 ? sizeof (Elf32_External_Shdr) --- 1106,1118 ---- int changed; int *pfnret; const char **pfnname; ! unsigned new_i, new_count; unsigned *sh_map; unsigned first_shndx = 0; unsigned int *symtab_indices_shndx; + int pass_symtab_indices_shndx; + unsigned int first_symtab_indices_shndx; + unsigned char **symtab_indices_shndx_buf; shdr_size = (ei_class == ELFCLASS32 ? sizeof (Elf32_External_Shdr) *************** simple_object_elf_copy_lto_debug_section *** 1179,1186 **** ret = (*pfn) (name); pfnret[i - 1] = ret == NULL ? -1 : 0; pfnname[i - 1] = ret == NULL ? name : ret; ! if (first_shndx == 0 ! && pfnret[i - 1] == 0) first_shndx = i; /* Remember the indexes of existing SHT_SYMTAB_SHNDX sections. */ --- 1182,1188 ---- ret = (*pfn) (name); pfnret[i - 1] = ret == NULL ? -1 : 0; pfnname[i - 1] = ret == NULL ? name : ret; ! if (first_shndx == 0 && pfnret[i - 1] == 0) first_shndx = i; /* Remember the indexes of existing SHT_SYMTAB_SHNDX sections. */ *************** simple_object_elf_copy_lto_debug_section *** 1191,1201 **** unsigned int sh_link; sh_link = ELF_FETCH_FIELD (type_functions, ei_class, Shdr, shdr, sh_link, Elf_Word); ! symtab_indices_shndx[sh_link - 1] = i - 1; ! /* Always discard the extended index sections, after ! copying it will not be needed. This way we don't need to ! update it and deal with the ordering constraints of ! processing the existing symtab and changing the index. */ pfnret[i - 1] = -1; } } --- 1193,1204 ---- unsigned int sh_link; sh_link = ELF_FETCH_FIELD (type_functions, ei_class, Shdr, shdr, sh_link, Elf_Word); ! symtab_indices_shndx[sh_link - 1] = i; ! /* Discard the extended index sections, after copying it will not ! be needed, unless we need more than SHN_LORESERVE - 1 sections ! in the output. This way we don't need to update it and deal with ! the ordering constraints of processing the existing symtab and ! changing the index. */ pfnret[i - 1] = -1; } } *************** simple_object_elf_copy_lto_debug_section *** 1291,1306 **** else sh_map[i] = new_i++; } if (new_i - 1 >= SHN_LORESERVE) ! { ! *err = ENOTSUP; ! return "Too many copied sections"; ! } ! eow->shdrs = XNEWVEC (unsigned char, shdr_size * (new_i - 1)); /* Then perform the actual copying. */ new_i = 0; ! for (i = 1; i < shnum; ++i) { unsigned char *shdr; unsigned int sh_name, sh_type; --- 1294,1318 ---- else sh_map[i] = new_i++; } + first_symtab_indices_shndx = new_i; + symtab_indices_shndx_buf = NULL; if (new_i - 1 >= SHN_LORESERVE) ! for (i = 1; i < shnum; ++i) ! if (pfnret[i - 1] == 0 && symtab_indices_shndx[i - 1] != 0) ! { ! pfnret[symtab_indices_shndx[i - 1] - 1] = 0; ! sh_map[symtab_indices_shndx[i - 1]] = new_i++; ! } ! new_count = new_i; ! if (new_count != first_symtab_indices_shndx) ! symtab_indices_shndx_buf ! = XNEWVEC (unsigned char *, new_count - first_symtab_indices_shndx); ! eow->shdrs = XNEWVEC (unsigned char, shdr_size * (new_count - 1)); /* Then perform the actual copying. */ new_i = 0; ! pass_symtab_indices_shndx = 0; ! for (i = 1; i <= shnum; ++i) { unsigned char *shdr; unsigned int sh_name, sh_type; *************** simple_object_elf_copy_lto_debug_section *** 1311,1321 **** off_t flags; unsigned char *buf; if (pfnret[i - 1]) continue; - new_i++; shdr = shdrs + (i - 1) * shdr_size; sh_name = ELF_FETCH_FIELD (type_functions, ei_class, Shdr, shdr, sh_name, Elf_Word); if (sh_name >= name_size) --- 1323,1352 ---- off_t flags; unsigned char *buf; + if (i == shnum) + { + if (new_count - 1 < SHN_LORESERVE || pass_symtab_indices_shndx) + break; + i = 0; + pass_symtab_indices_shndx = 1; + continue; + } + if (pfnret[i - 1]) continue; shdr = shdrs + (i - 1) * shdr_size; + sh_type = ELF_FETCH_FIELD (type_functions, ei_class, Shdr, + shdr, sh_type, Elf_Word); + if (sh_type == SHT_SYMTAB_SHNDX) + { + if (!pass_symtab_indices_shndx) + continue; + } + else if (pass_symtab_indices_shndx) + continue; + + new_i++; sh_name = ELF_FETCH_FIELD (type_functions, ei_class, Shdr, shdr, sh_name, Elf_Word); if (sh_name >= name_size) *************** simple_object_elf_copy_lto_debug_section *** 1324,1329 **** --- 1355,1361 ---- XDELETEVEC (names); XDELETEVEC (shdrs); XDELETEVEC (symtab_indices_shndx); + XDELETEVEC (symtab_indices_shndx_buf); return "ELF section name out of range"; } *************** simple_object_elf_copy_lto_debug_section *** 1332,1347 **** shdr, sh_offset, Elf_Addr); length = ELF_FETCH_FIELD (type_functions, ei_class, Shdr, shdr, sh_size, Elf_Addr); - sh_type = ELF_FETCH_FIELD (type_functions, ei_class, Shdr, - shdr, sh_type, Elf_Word); ! dest = simple_object_write_create_section (dobj, pfnname[i - 1], ! 0, &errmsg, err); if (dest == NULL) { XDELETEVEC (names); XDELETEVEC (shdrs); XDELETEVEC (symtab_indices_shndx); return errmsg; } --- 1364,1377 ---- shdr, sh_offset, Elf_Addr); length = ELF_FETCH_FIELD (type_functions, ei_class, Shdr, shdr, sh_size, Elf_Addr); ! dest = simple_object_write_create_section (dobj, name, 0, &errmsg, err); if (dest == NULL) { XDELETEVEC (names); XDELETEVEC (shdrs); XDELETEVEC (symtab_indices_shndx); + XDELETEVEC (symtab_indices_shndx_buf); return errmsg; } *************** simple_object_elf_copy_lto_debug_section *** 1363,1368 **** --- 1393,1399 ---- XDELETEVEC (names); XDELETEVEC (shdrs); XDELETEVEC (symtab_indices_shndx); + XDELETEVEC (symtab_indices_shndx_buf); return errmsg; } *************** simple_object_elf_copy_lto_debug_section *** 1378,1384 **** /* Read the section index table if present. */ if (symtab_indices_shndx[i - 1] != 0) { ! unsigned char *sidxhdr = shdrs + symtab_indices_shndx[i - 1] * shdr_size; off_t sidxoff = ELF_FETCH_FIELD (type_functions, ei_class, Shdr, sidxhdr, sh_offset, Elf_Addr); size_t sidxsz = ELF_FETCH_FIELD (type_functions, ei_class, Shdr, --- 1409,1416 ---- /* Read the section index table if present. */ if (symtab_indices_shndx[i - 1] != 0) { ! unsigned char *sidxhdr ! = shdrs + (symtab_indices_shndx[i - 1] - 1) * shdr_size; off_t sidxoff = ELF_FETCH_FIELD (type_functions, ei_class, Shdr, sidxhdr, sh_offset, Elf_Addr); size_t sidxsz = ELF_FETCH_FIELD (type_functions, ei_class, Shdr, *************** simple_object_elf_copy_lto_debug_section *** 1388,1398 **** sidxhdr, sh_type, Elf_Word); if (shndx_type != SHT_SYMTAB_SHNDX) return "Wrong section type of a SYMTAB SECTION INDICES section"; ! shndx_table = (unsigned *)XNEWVEC (char, sidxsz); ! simple_object_internal_read (sobj->descriptor, ! sobj->offset + sidxoff, ! (unsigned char *)shndx_table, ! sidxsz, &errmsg, err); } /* Find a WEAK HIDDEN symbol which name we will use for removed --- 1420,1439 ---- sidxhdr, sh_type, Elf_Word); if (shndx_type != SHT_SYMTAB_SHNDX) return "Wrong section type of a SYMTAB SECTION INDICES section"; ! shndx_table = (unsigned *) XNEWVEC (char, sidxsz); ! if (!simple_object_internal_read (sobj->descriptor, ! sobj->offset + sidxoff, ! (unsigned char *) shndx_table, ! sidxsz, &errmsg, err)) ! { ! XDELETEVEC (buf); ! XDELETEVEC (names); ! XDELETEVEC (shdrs); ! XDELETEVEC (symtab_indices_shndx); ! XDELETEVEC (shndx_table); ! XDELETEVEC (symtab_indices_shndx_buf); ! return errmsg; ! } } /* Find a WEAK HIDDEN symbol which name we will use for removed *************** simple_object_elf_copy_lto_debug_section *** 1407,1423 **** unsigned char *st_other; if (ei_class == ELFCLASS32) { ! st_info = &((Elf32_External_Sym *)ent)->st_info; ! st_other = &((Elf32_External_Sym *)ent)->st_other; } else { ! st_info = &((Elf64_External_Sym *)ent)->st_info; ! st_other = &((Elf64_External_Sym *)ent)->st_other; } if (st_shndx == SHN_XINDEX) ! st_shndx = type_functions->fetch_Elf_Word ! ((unsigned char *)(shndx_table + (ent - buf) / entsize)); if (st_shndx != SHN_COMMON && !(st_shndx != SHN_UNDEF --- 1448,1467 ---- unsigned char *st_other; if (ei_class == ELFCLASS32) { ! st_info = &((Elf32_External_Sym *) ent)->st_info; ! st_other = &((Elf32_External_Sym *) ent)->st_other; } else { ! st_info = &((Elf64_External_Sym *) ent)->st_info; ! st_other = &((Elf64_External_Sym *) ent)->st_other; } if (st_shndx == SHN_XINDEX) ! { ! unsigned char *ndx_ptr ! = (unsigned char *) (shndx_table + (ent - buf) / entsize); ! st_shndx = type_functions->fetch_Elf_Word (ndx_ptr); ! } if (st_shndx != SHN_COMMON && !(st_shndx != SHN_UNDEF *************** simple_object_elf_copy_lto_debug_section *** 1442,1460 **** unsigned char *st_info; unsigned char *st_other; int discard = 0; if (ei_class == ELFCLASS32) { ! st_info = &((Elf32_External_Sym *)ent)->st_info; ! st_other = &((Elf32_External_Sym *)ent)->st_other; } else { ! st_info = &((Elf64_External_Sym *)ent)->st_info; ! st_other = &((Elf64_External_Sym *)ent)->st_other; } if (st_shndx == SHN_XINDEX) ! st_shndx = type_functions->fetch_Elf_Word ! ((unsigned char *)(shndx_table + (ent - buf) / entsize)); /* Eliminate all COMMONs - this includes __gnu_lto_slim which otherwise cause endless LTO plugin invocation. FIXME: remove the condition once we remove emission --- 1486,1511 ---- unsigned char *st_info; unsigned char *st_other; int discard = 0; + unsigned char *ndx_ptr = NULL; if (ei_class == ELFCLASS32) { ! st_info = &((Elf32_External_Sym *) ent)->st_info; ! st_other = &((Elf32_External_Sym *) ent)->st_other; } else { ! st_info = &((Elf64_External_Sym *) ent)->st_info; ! st_other = &((Elf64_External_Sym *) ent)->st_other; } + if (shndx_table) + ndx_ptr + = (unsigned char *) (shndx_table + (ent - buf) / entsize); + if (st_shndx == SHN_XINDEX) ! { ! st_shndx = type_functions->fetch_Elf_Word (ndx_ptr); ! type_functions->set_Elf_Word (ndx_ptr, SHN_UNDEF); ! } /* Eliminate all COMMONs - this includes __gnu_lto_slim which otherwise cause endless LTO plugin invocation. FIXME: remove the condition once we remove emission *************** simple_object_elf_copy_lto_debug_section *** 1488,1496 **** defined in the first prevailing section. */ ELF_SET_FIELD (type_functions, ei_class, Sym, ent, st_name, Elf_Word, 0); ELF_SET_FIELD (type_functions, ei_class, Sym, ! ent, st_shndx, Elf_Half, ! sh_map[first_shndx]); } else { --- 1539,1552 ---- defined in the first prevailing section. */ ELF_SET_FIELD (type_functions, ei_class, Sym, ent, st_name, Elf_Word, 0); + st_shndx = sh_map[first_shndx]; + if (st_shndx >= SHN_LORESERVE) + { + type_functions->set_Elf_Word (ndx_ptr, st_shndx); + st_shndx = SHN_XINDEX; + } ELF_SET_FIELD (type_functions, ei_class, Sym, ! ent, st_shndx, Elf_Half, st_shndx); } else { *************** simple_object_elf_copy_lto_debug_section *** 1514,1524 **** } else if (raw_st_shndx < SHN_LORESERVE || raw_st_shndx == SHN_XINDEX) ! /* Remap the section reference. */ ! ELF_SET_FIELD (type_functions, ei_class, Sym, ! ent, st_shndx, Elf_Half, sh_map[st_shndx]); } ! XDELETEVEC (shndx_table); } else if (sh_type == SHT_GROUP) { --- 1570,1593 ---- } else if (raw_st_shndx < SHN_LORESERVE || raw_st_shndx == SHN_XINDEX) ! { ! /* Remap the section reference. */ ! st_shndx = sh_map[st_shndx]; ! if (st_shndx >= SHN_LORESERVE) ! { ! type_functions->set_Elf_Word (ndx_ptr, st_shndx); ! st_shndx = SHN_XINDEX; ! } ! ELF_SET_FIELD (type_functions, ei_class, Sym, ! ent, st_shndx, Elf_Half, st_shndx); ! } } ! if (symtab_indices_shndx_buf) ! symtab_indices_shndx_buf[sh_map[symtab_indices_shndx[i - 1]] ! - first_symtab_indices_shndx] ! = (unsigned char *) shndx_table; ! else ! XDELETEVEC (shndx_table); } else if (sh_type == SHT_GROUP) { *************** simple_object_elf_copy_lto_debug_section *** 1538,1552 **** /* Adjust the length. */ length = dst - buf; } ! errmsg = simple_object_write_add_data (dobj, dest, ! buf, length, 1, err); XDELETEVEC (buf); if (errmsg) { XDELETEVEC (names); XDELETEVEC (shdrs); XDELETEVEC (symtab_indices_shndx); return errmsg; } --- 1607,1627 ---- /* Adjust the length. */ length = dst - buf; } + else if (sh_type == SHT_SYMTAB_SHNDX) + { + XDELETEVEC (buf); + buf = symtab_indices_shndx_buf[new_i - first_symtab_indices_shndx]; + symtab_indices_shndx_buf[new_i - first_symtab_indices_shndx] = NULL; + } ! errmsg = simple_object_write_add_data (dobj, dest, buf, length, 1, err); XDELETEVEC (buf); if (errmsg) { XDELETEVEC (names); XDELETEVEC (shdrs); XDELETEVEC (symtab_indices_shndx); + XDELETEVEC (symtab_indices_shndx_buf); return errmsg; } *************** simple_object_elf_copy_lto_debug_section *** 1586,1591 **** --- 1661,1667 ---- XDELETEVEC (pfnname); XDELETEVEC (symtab_indices_shndx); XDELETEVEC (sh_map); + XDELETEVEC (symtab_indices_shndx_buf); return NULL; } diff -Nrcpad gcc-12.4.0/libitm/libitm.info gcc-12.5.0-RC-20250704/libitm/libitm.info *** gcc-12.4.0/libitm/libitm.info Thu Jun 20 08:33:24 2024 --- gcc-12.5.0-RC-20250704/libitm/libitm.info Fri Jul 4 07:43:42 2025 *************** *** 1,4 **** ! This is libitm.info, produced by makeinfo version 6.8 from libitm.texi. Copyright (C) 2011-2022 Free Software Foundation, Inc. --- 1,4 ---- ! This is libitm.info, produced by makeinfo version 6.5 from libitm.texi. Copyright (C) 2011-2022 Free Software Foundation, Inc. *************** Node: GNU Free Documentation License358 *** 1306,1313 **** Node: Library Index61023  End Tag Table - -  - Local Variables: - coding: utf-8 - End: --- 1306,1308 ---- diff -Nrcpad gcc-12.4.0/libquadmath/ChangeLog gcc-12.5.0-RC-20250704/libquadmath/ChangeLog *** gcc-12.4.0/libquadmath/ChangeLog Thu Jun 20 08:09:01 2024 --- gcc-12.5.0-RC-20250704/libquadmath/ChangeLog Fri Jul 4 07:24:46 2025 *************** *** 1,3 **** --- 1,10 ---- + 2025-06-13 Jakub Jelinek + + Backported from master: + 2025-04-09 Jakub Jelinek + + * math/expq.c (C): Fix up THREEp96 constant. + 2024-06-20 Release Manager * GCC 12.4.0 released. diff -Nrcpad gcc-12.4.0/libquadmath/libquadmath.info gcc-12.5.0-RC-20250704/libquadmath/libquadmath.info *** gcc-12.4.0/libquadmath/libquadmath.info Thu Jun 20 08:33:19 2024 --- gcc-12.5.0-RC-20250704/libquadmath/libquadmath.info Fri Jul 4 07:43:40 2025 *************** *** 1,4 **** ! This is libquadmath.info, produced by makeinfo version 6.8 from libquadmath.texi. Copyright (C) 2010-2022 Free Software Foundation, Inc. --- 1,4 ---- ! This is libquadmath.info, produced by makeinfo version 6.5 from libquadmath.texi. Copyright (C) 2010-2022 Free Software Foundation, Inc. *************** Node: GNU Free Documentation License109 *** 809,816 **** Node: Reporting Bugs36068  End Tag Table - -  - Local Variables: - coding: utf-8 - End: --- 809,811 ---- diff -Nrcpad gcc-12.4.0/libquadmath/math/expq.c gcc-12.5.0-RC-20250704/libquadmath/math/expq.c *** gcc-12.4.0/libquadmath/math/expq.c Thu Jun 20 08:08:10 2024 --- gcc-12.5.0-RC-20250704/libquadmath/math/expq.c Fri Jul 4 07:24:46 2025 *************** static const __float128 C[] = { *** 74,80 **** /* 3x2^96 */ #define THREEp96 C[2] ! 59421121885698253195157962752.0Q, /* 3x2^103 */ #define THREEp103 C[3] --- 74,80 ---- /* 3x2^96 */ #define THREEp96 C[2] ! 237684487542793012780631851008.0Q, /* 3x2^103 */ #define THREEp103 C[3] diff -Nrcpad gcc-12.4.0/libstdc++-v3/ChangeLog gcc-12.5.0-RC-20250704/libstdc++-v3/ChangeLog *** gcc-12.4.0/libstdc++-v3/ChangeLog Thu Jun 20 08:09:01 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/ChangeLog Fri Jul 4 07:24:46 2025 *************** *** 1,3 **** --- 1,394 ---- + 2025-06-11 Jonathan Wakely + + Backported from master: + 2024-10-16 Jonathan Wakely + + * python/libstdcxx/v6/printers.py (strip_fundts_namespace): New. + (StdExpAnyPrinter, StdExpOptionalPrinter): Use it. + + 2025-06-11 Jonathan Wakely + + Backported from master: + 2025-06-04 Jonathan Wakely + + PR libstdc++/99832 + * include/bits/chrono.h (system_clock::to_time_t): Add + always_inline attribute to be agnostic to the underlying type of + time_t. + (system_clock::from_time_t): Add always_inline for consistency + with to_time_t. + * testsuite/20_util/system_clock/99832.cc: New test. + + 2025-06-11 Jonathan Wakely + + Backported from master: + 2025-05-20 Jonathan Wakely + + * doc/xml/faq.xml: Update URL for archived SGI STL docs. + * doc/xml/manual/containers.xml: Likewise. + * doc/xml/manual/extensions.xml: Likewise. + * doc/xml/manual/using.xml: Likewise. + * doc/xml/manual/utilities.xml: Likewise. + * doc/html/*: Regenerate. + + 2025-04-17 Jonathan Wakely + + Backported from master: + 2023-06-26 Jonathan Wakely + + * include/debug/helper_functions.h (__get_distance) + (__check_singular, __valid_range_aux, __valid_range): Qualify + calls to disable ADL. + (__check_singular_aux(const _Safe_iterator_base*)): Declare + overload that was previously found via ADL. + + 2025-04-17 Jonathan Wakely + + Backported from master: + 2024-04-15 Jonathan Wakely + + PR libstdc++/93672 + * src/c++98/istream.cc (istream::ignore(streamsize, int_type)): + Treat all negative delimiter values as eof(). + * testsuite/27_io/basic_istream/ignore/char/93672.cc: New test. + * testsuite/27_io/basic_istream/ignore/wchar_t/93672.cc: New + test. + + 2025-04-17 Jonathan Wakely + + Backported from master: + 2025-03-28 Jonathan Wakely + + PR libstdc++/117983 + * include/bits/vector.tcc (vector::_M_range_insert): Add + unreachable condition to tell the compiler begin() <= end(). + * testsuite/23_containers/vector/modifiers/insert/117983.cc: New + test. + + 2025-04-17 Jonathan Wakely + + Backported from master: + 2024-12-17 Jonathan Wakely + + PR libstdc++/118035 + * include/bits/deque.tcc (_M_range_insert_aux): Return + immediately if inserting an empty range. + * testsuite/23_containers/deque/modifiers/insert/118035.cc: New + test. + + 2025-04-16 Jonathan Wakely + + Backported from master: + 2025-04-16 Jonathan Wakely + + * testsuite/20_util/integer_sequence/112473.cc: Compile with + -std=gnu++20. + * testsuite/21_strings/char_traits/requirements/113200.cc: + Likewise. + * testsuite/23_containers/array/comparison_operators/106212.cc: + Likewise. + * testsuite/23_containers/span/117966.cc: Likewise. + * testsuite/23_containers/vector/cons/113841.cc: Compile with + -std=gnu++20. + * testsuite/24_iterators/move_iterator/lwg3736.cc: Likewise. + * testsuite/25_algorithms/lexicographical_compare_three_way/113960.cc: + Likewise. + * testsuite/27_io/filesystem/iterators/lwg3480.cc: Likewise. + * testsuite/29_atomics/headers/stdatomic.h/115807.cc: Compile + with -std=gnu++23. + * testsuite/std/ranges/subrange/lwg3589.cc: Likewise. + * testsuite/std/time/month/2.cc: Likewise. + * testsuite/std/time/weekday/2.cc: Likewise. + + 2025-04-16 Jonathan Wakely + + Backported from master: + 2024-11-14 Jonathan Wakely + + * include/bits/ranges_util.h (subrange::begin): Fix constraint, + as per LWG 3589. + * testsuite/std/ranges/subrange/lwg3589.cc: New test. + + 2025-04-16 Jonathan Wakely + + Backported from master: + 2024-12-11 Jonathan Wakely + + PR libstdc++/106212 + * include/std/array (operator==): Use std::__equal_aux1 instead + of std::equal. + * testsuite/23_containers/array/comparison_operators/106212.cc: + New test. + + 2025-04-16 Jonathan Wakely + + Backported from master: + 2024-12-11 Jonathan Wakely + + PR libstdc++/117966 + * include/std/span (span(T (&)[N])): Do not delegate to + constructor that performs redundant checks. + (span(array&), span(const array&)): Likewise. + (span(Range&&), span(const span&)): Likewise. + * testsuite/23_containers/span/117966.cc: New test. + + 2025-04-16 Jonathan Wakely + + Backported from master: + 2024-03-22 Jonathan Wakely + + PR libstdc++/113841 + * include/bits/allocator.h (allocator): Add default + constructor to partial specializations for cv-qualified types. + * include/bits/stl_vector.h (_Vector_impl::_Vector_impl()): + Constrain so that it's only present if the allocator is default + constructible. + * include/bits/stl_bvector.h (_Bvector_impl::_Bvector_impl()): + Likewise. + * testsuite/23_containers/vector/cons/113841.cc: New test. + + 2025-04-16 Jonathan Wakely + + Backported from master: + 2024-09-03 Jonathan Wakely + + PR libstdc++/116549 + * include/bits/stl_iterator.h (disable_sized_sentinel_for): + Define specialization for two move_iterator types, as per LWG + 3736. + * testsuite/24_iterators/move_iterator/lwg3736.cc: New test. + + 2025-04-16 Jonathan Wakely + + Backported from master: + 2024-11-14 Jonathan Wakely + + PR libstdc++/117560 + * include/bits/fs_dir.h (enable_borrowed_range, enable_view): + Define specializations for directory iterators, as per LWG 3480. + * testsuite/27_io/filesystem/iterators/lwg3480.cc: New test. + + 2025-04-15 Jonathan Wakely + + Backported from master: + 2025-04-14 Jonathan Wakely + + PR libstdc++/21334 + * doc/xml/manual/using.xml: Document that container data race + avoidance rules do not apply to COW std::string. + * doc/html/*: Regenerate. + + 2025-04-02 Jonathan Wakely + + Backported from master: + 2023-03-31 Jonathan Wakely + + PR tree-optimization/107087 + * include/bits/cow_string.h (basic_string::size()): Add + optimizer hint that _S_empty_rep()._M_length is always zero. + (basic_string::length()): Call size(). + + 2025-04-02 Jonathan Wakely + + Backported from master: + 2024-02-15 Jonathan Wakely + + PR libstdc++/99117 + * include/std/valarray (valarray::operator=(const _Expr&)): + Use loop to copy instead of __valarray_copy with _Array. + * testsuite/26_numerics/valarray/99117.cc: New test. + + 2024-10-07 Jonathan Wakely + + * include/std/string_view (basic_string_view::copy) Use explicit + template argument for call to std::min. + (basic_string_view::substr): Likewise. + + 2024-10-07 Jonathan Wakely + + Backported from master: + 2024-06-21 Jonathan Wakely + + * testsuite/util/testsuite_allocator.h (tracker_allocator): + Initialize base class in copy constructor. + + 2024-10-07 Jonathan Wakely + + * src/c++17/fs_ops.cc (remove_all) [__FreeBSD__ || __DragonFly__]: + Check for EMLINK as well as ELOOP. + [__NetBSD__]: Check for EFTYPE as well as ELOOP. + + 2024-10-07 Jonathan Wakely + + Backported from master: + 2024-06-12 Jonathan Wakely + + PR libstdc++/115399 + * include/tr2/dynamic_bitset (operator>>=): Remove redundant + call to _M_do_sanitize. + * include/tr2/dynamic_bitset.tcc (_M_do_left_shift): Zero out + low bits in words that should no longer be populated. + (_M_do_right_shift): Likewise for high bits. + * testsuite/tr2/dynamic_bitset/pr115399.cc: New test. + + 2024-10-07 Kim Gräsman + + Backported from master: + 2024-08-28 Kim Gräsman + + * include/bits/cpp_type_traits.h: Improve doxygen file docs. + + 2024-10-07 Kim Gräsman + + Backported from master: + 2024-08-28 Kim Gräsman + + * config/cpu/aarch64/opt/ext/opt_random.h: Improve doxygen file + docs. + * config/cpu/i486/opt/ext/opt_random.h: Likewise. + + 2024-10-07 Jonathan Wakely + + Backported from master: + 2024-07-06 Jonathan Wakely + + * include/std/variant (_Variant_storage::_M_reset): Use + __unlikely__ form of attribute instead of unlikely. + + 2024-10-07 Jonathan Wakely + + Backported from master: + 2024-08-28 Jonathan Wakely + + * configure.ac: Fix check for O_NONBLOCK. + * config.h.in: Regenerate. + * configure: Regenerate. + + 2024-10-07 Jonathan Wakely + + Backported from master: + 2024-09-10 Jonathan Wakely + + PR libstdc++/116641 + * include/bits/basic_string.h (operator=(basic_string&&)): Call + _M_assign instead of assign. + * testsuite/21_strings/basic_string/allocator/116641.cc: New + test. + + 2024-10-07 Jonathan Wakely + + Backported from master: + 2024-06-28 Jonathan Wakely + + PR libstdc++/115585 + * src/c++11/assert_fail.cc (__glibcxx_assert_fail): Add + definition for non-verbose builds. + + 2024-07-09 Jonathan Wakely + + Backported from master: + 2024-07-08 Jonathan Wakely + + PR libstdc++/115807 + * include/c_compatibility/stdatomic.h (_Atomic): Ensure it + refers to std::atomic in the global namespace. + * testsuite/29_atomics/headers/stdatomic.h/115807.cc: New test. + + 2024-06-27 Alexandre Oliva + + Backported from master: + 2024-06-27 Alexandre Oliva + + PR libstdc++/115454 + * testsuite/experimental/simd/pr115454_find_last_set.cc: Defer + to check_vect_support_and_set_flags's default dg-do action. + + 2024-06-25 Jonathan Wakely + + * doc/xml/manual/status_cxx2023.xml: Change reference from + mainline GCC to the release branch. + * doc/xml/manual/status_cxx1998.xml: Remove confusing "not in + any particular release" text. + * doc/xml/manual/status_cxx2011.xml: Likewise. + * doc/xml/manual/status_cxx2014.xml: Likewise. + * doc/xml/manual/status_cxx2017.xml: Likewise. + * doc/xml/manual/status_cxx2020.xml: Likewise. + * doc/xml/manual/status_cxxtr1.xml: Likewise. + * doc/xml/manual/status_cxxtr24733.xml: Likewise. + * doc/html/manual/status.html: Regenerate. + + 2024-06-21 Matthias Kretz + + Backported from master: + 2024-06-21 Matthias Kretz + + PR libstdc++/115575 + * testsuite/experimental/simd/pr115454_find_last_set.cc: Require + avx512f_runtime. Don't memcpy fixed_size masks. + + 2024-06-21 Matthias Kretz + + Backported from master: + 2024-06-20 Matthias Kretz + + PR libstdc++/115454 + * include/experimental/bits/simd_x86.h (_S_not_equal_to): Use + neq comparison instead of bitwise negation after eq. + (_S_find_last_set): Clear unused high bits before computing + bit_width. + * testsuite/experimental/simd/pr115454_find_last_set.cc: New + test. + + 2024-06-20 Matthias Kretz + + Backported from master: + 2024-06-04 Matthias Kretz + + PR libstdc++/115308 + * include/experimental/bits/simd.h (__int_for_sizeof): Remove + special cases for __clang__. + (_SimdWrapper): Change constructor overload set to allow + conversion from vector types with integral conversions via bit + reinterpretation. + + 2024-06-20 Matthias Kretz + + Backported from master: + 2024-05-29 Matthias Kretz + + PR libstdc++/115247 + * include/experimental/bits/simd.h (__as_vector): Don't use + vector_size(8) on __i386__. + (__vec_shuffle): Never return MMX vectors, widen to 16 bytes + instead. + (concat): Fix padding calculation to pick up widening logic from + __as_vector. + + 2024-06-20 Matthias Kretz + + Backported from master: + 2024-05-13 Matthias Kretz + + PR libstdc++/114958 + * include/experimental/bits/simd.h (__as_vector): Return scalar + simd as one-element vector. Return vector from single-vector + fixed_size simd. + (__vec_shuffle): New. + (__extract_part): Adjust return type signature. + (split): Use __extract_part for any split into non-fixed_size + simds. + (concat): If the return type stores a single vector, use + __vec_shuffle (which calls __builtin_shufflevector) to produce + the return value. + * include/experimental/bits/simd_builtin.h + (__shift_elements_right): Removed. + (__extract_part): Return single elements directly. Use + __vec_shuffle (which calls __builtin_shufflevector) to for all + non-trivial cases. + * include/experimental/bits/simd_fixed_size.h (__extract_part): + Return single elements directly. + * testsuite/experimental/simd/pr114958.cc: New test. + 2024-06-20 Release Manager * GCC 12.4.0 released. diff -Nrcpad gcc-12.4.0/libstdc++-v3/config/cpu/aarch64/opt/ext/opt_random.h gcc-12.5.0-RC-20250704/libstdc++-v3/config/cpu/aarch64/opt/ext/opt_random.h *** gcc-12.4.0/libstdc++-v3/config/cpu/aarch64/opt/ext/opt_random.h Thu Jun 20 08:08:10 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/config/cpu/aarch64/opt/ext/opt_random.h Fri Jul 4 07:24:46 2025 *************** *** 22,28 **** // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see // . ! /** @file ext/random.tcc * This is an internal header file, included by other library headers. * Do not attempt to use it directly. @headername{ext/random} */ --- 22,28 ---- // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see // . ! /** @file ext/opt_random.h * This is an internal header file, included by other library headers. * Do not attempt to use it directly. @headername{ext/random} */ diff -Nrcpad gcc-12.4.0/libstdc++-v3/config/cpu/i486/opt/ext/opt_random.h gcc-12.5.0-RC-20250704/libstdc++-v3/config/cpu/i486/opt/ext/opt_random.h *** gcc-12.4.0/libstdc++-v3/config/cpu/i486/opt/ext/opt_random.h Thu Jun 20 08:08:10 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/config/cpu/i486/opt/ext/opt_random.h Fri Jul 4 07:24:46 2025 *************** *** 22,28 **** // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see // . ! /** @file ext/random.tcc * This is an internal header file, included by other library headers. * Do not attempt to use it directly. @headername{ext/random} */ --- 22,28 ---- // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see // . ! /** @file ext/opt_random.h * This is an internal header file, included by other library headers. * Do not attempt to use it directly. @headername{ext/random} */ diff -Nrcpad gcc-12.4.0/libstdc++-v3/config.h.in gcc-12.5.0-RC-20250704/libstdc++-v3/config.h.in *** gcc-12.4.0/libstdc++-v3/config.h.in Thu Jun 20 08:08:10 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/config.h.in Fri Jul 4 07:24:46 2025 *************** *** 295,300 **** --- 295,303 ---- /* Define if openat is available in . */ #undef HAVE_OPENAT + /* Define if O_NONBLOCK is defined in */ + #undef HAVE_O_NONBLOCK + /* Define if poll is available in . */ #undef HAVE_POLL diff -Nrcpad gcc-12.4.0/libstdc++-v3/configure gcc-12.5.0-RC-20250704/libstdc++-v3/configure *** gcc-12.4.0/libstdc++-v3/configure Thu Jun 20 08:08:10 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/configure Fri Jul 4 07:24:46 2025 *************** if test "$ac_cv_have_decl_F_GETFL$ac_cv_ *** 77901,77906 **** --- 77901,77908 ---- " if test "x$ac_cv_have_decl_O_NONBLOCK" = xyes; then : + $as_echo "#define HAVE_O_NONBLOCK 1" >>confdefs.h + fi fi diff -Nrcpad gcc-12.4.0/libstdc++-v3/configure.ac gcc-12.5.0-RC-20250704/libstdc++-v3/configure.ac *** gcc-12.4.0/libstdc++-v3/configure.ac Thu Jun 20 08:08:10 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/configure.ac Fri Jul 4 07:24:46 2025 *************** AC_CHECK_HEADERS([fcntl.h sys/ioctl.h sy *** 503,509 **** AC_CHECK_DECL(F_GETFL,,,[#include ]) AC_CHECK_DECL(F_SETFL,,,[#include ]) if test "$ac_cv_have_decl_F_GETFL$ac_cv_have_decl_F_SETFL" = yesyes ; then ! AC_CHECK_DECL(O_NONBLOCK,,,[#include ]) fi # For Transactional Memory TS --- 503,512 ---- AC_CHECK_DECL(F_GETFL,,,[#include ]) AC_CHECK_DECL(F_SETFL,,,[#include ]) if test "$ac_cv_have_decl_F_GETFL$ac_cv_have_decl_F_SETFL" = yesyes ; then ! AC_CHECK_DECL(O_NONBLOCK, ! AC_DEFINE(HAVE_O_NONBLOCK,1,[Define if O_NONBLOCK is defined in ]), ! [], ! [#include ]) fi # For Transactional Memory TS diff -Nrcpad gcc-12.4.0/libstdc++-v3/doc/html/faq.html gcc-12.5.0-RC-20250704/libstdc++-v3/doc/html/faq.html *** gcc-12.4.0/libstdc++-v3/doc/html/faq.html Thu Jun 20 08:08:10 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/doc/html/faq.html Fri Jul 4 07:24:46 2025 *************** *** 797,803 **** Libstdc++-v3 incorporates a lot of code from the SGI STL (the final merge was from ! release 3.3). The code in libstdc++ contains many fixes and changes compared to the original SGI code.

--- 797,803 ---- Libstdc++-v3 incorporates a lot of code from the SGI STL (the final merge was from ! release 3.3). The code in libstdc++ contains many fixes and changes compared to the original SGI code.

diff -Nrcpad gcc-12.4.0/libstdc++-v3/doc/html/manual/containers.html gcc-12.5.0-RC-20250704/libstdc++-v3/doc/html/manual/containers.html *** gcc-12.4.0/libstdc++-v3/doc/html/manual/containers.html Thu Jun 20 08:08:10 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/doc/html/manual/containers.html Fri Jul 4 07:24:46 2025 *************** *** 11,17 **** Yes it is, at least using the old ABI, and that's okay. This is a decision that we preserved when we imported SGI's STL implementation. The following is ! quoted from their FAQ:

The size() member function, for list and slist, takes time proportional to the number of elements in the list. This was a --- 11,17 ---- Yes it is, at least using the old ABI, and that's okay. This is a decision that we preserved when we imported SGI's STL implementation. The following is ! quoted from their FAQ:

The size() member function, for list and slist, takes time proportional to the number of elements in the list. This was a diff -Nrcpad gcc-12.4.0/libstdc++-v3/doc/html/manual/ext_numerics.html gcc-12.5.0-RC-20250704/libstdc++-v3/doc/html/manual/ext_numerics.html *** gcc-12.4.0/libstdc++-v3/doc/html/manual/ext_numerics.html Thu Jun 20 08:08:10 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/doc/html/manual/ext_numerics.html Fri Jul 4 07:24:46 2025 *************** *** 14,20 **** The operation functor must be associative.

The iota function wins the award for Extension With the Coolest Name (the name comes from Ken Iverson's APL language.) As ! described in the SGI documentation, it "assigns sequentially increasing values to a range. That is, it assigns value to *first, value + 1 to *(first + 1) and so on." --- 14,20 ---- The operation functor must be associative.

The iota function wins the award for Extension With the Coolest Name (the name comes from Ken Iverson's APL language.) As ! described in the SGI documentation, it "assigns sequentially increasing values to a range. That is, it assigns value to *first, value + 1 to *(first + 1) and so on." diff -Nrcpad gcc-12.4.0/libstdc++-v3/doc/html/manual/ext_sgi.html gcc-12.5.0-RC-20250704/libstdc++-v3/doc/html/manual/ext_sgi.html *** gcc-12.4.0/libstdc++-v3/doc/html/manual/ext_sgi.html Thu Jun 20 08:08:10 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/doc/html/manual/ext_sgi.html Fri Jul 4 07:24:46 2025 *************** *** 28,39 **** and sets.

Each of the associative containers map, multimap, set, and multiset have a counterpart which uses a ! hashing function to do the arranging, instead of a strict weak ordering function. The classes take as one of their template parameters a function object that will return the hash value; by default, an instantiation of ! hash. You should specialize this functor for your class, or define your own, before trying to use one of the hashing classes.

The hashing classes support all the usual associative container --- 28,39 ---- and sets.

Each of the associative containers map, multimap, set, and multiset have a counterpart which uses a ! hashing function to do the arranging, instead of a strict weak ordering function. The classes take as one of their template parameters a function object that will return the hash value; by default, an instantiation of ! hash. You should specialize this functor for your class, or define your own, before trying to use one of the hashing classes.

The hashing classes support all the usual associative container diff -Nrcpad gcc-12.4.0/libstdc++-v3/doc/html/manual/status.html gcc-12.5.0-RC-20250704/libstdc++-v3/doc/html/manual/status.html *** gcc-12.4.0/libstdc++-v3/doc/html/manual/status.html Thu Jun 20 08:08:10 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/doc/html/manual/status.html Fri Jul 4 07:24:46 2025 *************** *** 5,12 ****  Next


Chapter 1. Status

Implementation Status

C++ 1998/2003

Implementation Status

This status table is based on the table of contents of ISO/IEC 14882:2003.

! This section describes the C++ support in the GCC 12 release series, ! not in any particular release.

Table 1.1. C++ 1998/2003 Implementation Status

SectionDescriptionStatusComments
18 --- 5,11 ----  Next

Chapter 1. Status

Implementation Status

C++ 1998/2003

Implementation Status

This status table is based on the table of contents of ISO/IEC 14882:2003.

! This section describes the C++ support in the GCC 12 release series.

Table 1.1. C++ 1998/2003 Implementation Status

SectionDescriptionStatusComments
18 *************** since that release. *** 160,167 ****

This status table is based on the table of contents of ISO/IEC 14882:2011.

! This section describes the C++11 support in the GCC 12 release series, ! not in any particular release.

Table 1.2. C++ 2011 Implementation Status

SectionDescriptionStatusComments
18 --- 159,165 ----

This status table is based on the table of contents of ISO/IEC 14882:2011.

! This section describes the C++11 support in the GCC 12 release series.

Table 1.2. C++ 2011 Implementation Status

SectionDescriptionStatusComments
18 *************** This status table is based on the table *** 433,440 **** Some subclauses are not shown in the table where the content is unchanged since C++11 and the implementation is complete.

! This section describes the C++14 and library TS support in the GCC 12 release series, ! not in any particular release.

Table 1.3. C++ 2014 Implementation Status

SectionDescriptionStatusComments
18 --- 431,437 ---- Some subclauses are not shown in the table where the content is unchanged since C++11 and the implementation is complete.

! This section describes the C++14 and library TS support in the GCC 12 release series.

Table 1.3. C++ 2014 Implementation Status

SectionDescriptionStatusComments
18 *************** GCC 9.1 was the first release with non-e *** 578,585 **** so the API and ABI of features added in C++17 is only stable since that release.

! This section describes the C++17 and library TS support in the GCC 12 release series, ! not in any particular release.

The following table lists new library features that are included in the C++17 standard. The "Proposal" column provides a link to the --- 575,581 ---- so the API and ABI of features added in C++17 is only stable since that release.

! This section describes the C++17 and library TS support in the GCC 12 release series.

The following table lists new library features that are included in the C++17 standard. The "Proposal" column provides a link to the *************** options. The pre-defined symbol *** 1254,1261 **** __cplusplus is used to check for the presence of the required flag.

! This section describes the C++20 and library TS support in the GCC 12 release series, ! not in any particular release.

The following table lists new library features that are included in the C++20 standard. The "Proposal" column provides a link to the --- 1250,1256 ---- __cplusplus is used to check for the presence of the required flag.

! This section describes the C++20 and library TS support in the GCC 12 release series.

The following table lists new library features that are included in the C++20 standard. The "Proposal" column provides a link to the *************** options. The pre-defined symbol *** 1720,1727 **** __cplusplus is used to check for the presence of the required flag.

! This section describes the C++23 and library TS support in mainline GCC, ! not in any particular release.

The following table lists new library features that have been accepted into the C++23 working draft. The "Proposal" column provides a link to the --- 1715,1721 ---- __cplusplus is used to check for the presence of the required flag.

! This section describes the C++23 and library TS support in the GCC 12 release series.

The following table lists new library features that have been accepted into the C++23 working draft. The "Proposal" column provides a link to the *************** In this implementation the header names *** 1925,1932 **** tr1/, for instance <tr1/functional>, <tr1/memory>, and so on.

! This page describes the TR1 support in the GCC 12 release series, ! not in any particular release.

Table 1.11. C++ TR1 Implementation Status

SectionDescriptionStatusComments
2General Utilities
2.1Reference wrappers  
2.1.1Additions to header <functional> synopsisY 
2.1.2Class template reference_wrapper  
2.1.2.1reference_wrapper construct/copy/destroyY 
2.1.2.2reference_wrapper assignmentY 
2.1.2.3reference_wrapper accessY 
2.1.2.4reference_wrapper invocationY 
2.1.2.5reference_wrapper helper functionsY 
2.2Smart pointers  
2.2.1Additions to header <memory> synopsisY 
2.2.2Class bad_weak_ptrY 
2.2.3Class template shared_ptr 

Uses code from --- 1919,1925 ---- tr1/, for instance <tr1/functional>, <tr1/memory>, and so on.

! This page describes the TR1 support in the GCC 12 release series.

Table 1.11. C++ TR1 Implementation Status

SectionDescriptionStatusComments
2General Utilities
2.1Reference wrappers  
2.1.1Additions to header <functional> synopsisY 
2.1.2Class template reference_wrapper  
2.1.2.1reference_wrapper construct/copy/destroyY 
2.1.2.2reference_wrapper assignmentY 
2.1.2.3reference_wrapper accessY 
2.1.2.4reference_wrapper invocationY 
2.1.2.5reference_wrapper helper functionsY 
2.2Smart pointers  
2.2.1Additions to header <memory> synopsisY 
2.2.2Class bad_weak_ptrY 
2.2.3Class template shared_ptr 

Uses code from *************** ISO/IEC TR 24733:2011, *** 1946,1953 **** "Extensions for the programming language C++ to support decimal floating-point arithmetic".

! This page describes the TR 24733 support in the GCC 12 release series, ! not in any particular release.

Table 1.12. C++ TR 24733 Implementation Status

SectionDescriptionStatusComments
0 --- 1939,1945 ---- "Extensions for the programming language C++ to support decimal floating-point arithmetic".

! This page describes the TR 24733 support in the GCC 12 release series.

Table 1.12. C++ TR 24733 Implementation Status

SectionDescriptionStatusComments
0 diff -Nrcpad gcc-12.4.0/libstdc++-v3/doc/html/manual/using_concurrency.html gcc-12.5.0-RC-20250704/libstdc++-v3/doc/html/manual/using_concurrency.html *** gcc-12.4.0/libstdc++-v3/doc/html/manual/using_concurrency.html Thu Jun 20 08:08:10 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/doc/html/manual/using_concurrency.html Fri Jul 4 07:24:46 2025 *************** The standard places requirements on the *** 40,46 **** races are caused by the library itself or by programs which use the library correctly (as described below). The C++11 memory model and library requirements are a more formal version ! of the SGI STL definition of thread safety, which the library used prior to the 2011 standard.

The library strives to be thread-safe when all of the following conditions are met: --- 40,46 ---- races are caused by the library itself or by programs which use the library correctly (as described below). The C++11 memory model and library requirements are a more formal version ! of the SGI STL definition of thread safety, which the library used prior to the 2011 standard.

The library strives to be thread-safe when all of the following conditions are met: *************** gcc version 4.1.2 20070925 (Red Hat 4.1. *** 126,131 **** --- 126,141 ---- the container the iterator refers to (for example incrementing a list iterator must access the pointers between nodes, which are part of the container and so conflict with other accesses to the container). +

+ The Copy-On-Write std::string implementation + used before GCC 5 (and with + _GLIBCXX_USE_CXX11_ABI=0) + is not a standard container and does not conform to the data race + avoidance rules described above. For the Copy-On-Write + std::string, non-const member functions such as + begin() are considered to be modifying accesses + and so must not be used concurrently with any other accesses to the + same object.

Programs which follow the rules above will not encounter data races in library code, even when using library types which share state between distinct objects. In the example below the *************** gcc version 4.1.2 20070925 (Red Hat 4.1. *** 233,242 **** threaded and non-threaded code), see Chapter 17.

Two excellent pages to read when working with the Standard C++ containers and threads are ! SGI's ! https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/thread_safety.html and ! SGI's ! https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/Allocators.html.

However, please ignore all discussions about the user-level configuration of the lock implementation inside the STL container-memory allocator on those pages. For the sake of this --- 243,252 ---- threaded and non-threaded code), see Chapter 17.

Two excellent pages to read when working with the Standard C++ containers and threads are ! SGI's ! https://web.archive.org/web/20171221154911/http://www.sgi.com/tech/stl/thread_safety.html and ! SGI's ! https://web.archive.org/web/20171108142526/http://www.sgi.com/tech/stl/Allocators.html.

However, please ignore all discussions about the user-level configuration of the lock implementation inside the STL container-memory allocator on those pages. For the sake of this diff -Nrcpad gcc-12.4.0/libstdc++-v3/doc/html/manual/utilities.html gcc-12.5.0-RC-20250704/libstdc++-v3/doc/html/manual/utilities.html *** gcc-12.4.0/libstdc++-v3/doc/html/manual/utilities.html Thu Jun 20 08:08:10 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/doc/html/manual/utilities.html Fri Jul 4 07:24:46 2025 *************** *** 11,16 **** get slightly the wrong idea. In the interest of not reinventing the wheel, we will refer you to the introduction to the functor concept written by SGI as part of their STL, in ! their ! https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/functors.html.

\ No newline at end of file --- 11,16 ---- get slightly the wrong idea. In the interest of not reinventing the wheel, we will refer you to the introduction to the functor concept written by SGI as part of their STL, in ! their ! https://web.archive.org/web/20171209002754/http://www.sgi.com/tech/stl/functors.html.

\ No newline at end of file diff -Nrcpad gcc-12.4.0/libstdc++-v3/doc/xml/faq.xml gcc-12.5.0-RC-20250704/libstdc++-v3/doc/xml/faq.xml *** gcc-12.4.0/libstdc++-v3/doc/xml/faq.xml Thu Jun 20 08:08:10 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/doc/xml/faq.xml Fri Jul 4 07:24:46 2025 *************** *** 1131,1137 **** Libstdc++-v3 incorporates a lot of code from the SGI STL (the final merge was from ! release 3.3). The code in libstdc++ contains many fixes and changes compared to the original SGI code. --- 1131,1137 ---- Libstdc++-v3 incorporates a lot of code from the SGI STL (the final merge was from ! release 3.3). The code in libstdc++ contains many fixes and changes compared to the original SGI code. diff -Nrcpad gcc-12.4.0/libstdc++-v3/doc/xml/manual/containers.xml gcc-12.5.0-RC-20250704/libstdc++-v3/doc/xml/manual/containers.xml *** gcc-12.4.0/libstdc++-v3/doc/xml/manual/containers.xml Thu Jun 20 08:08:10 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/doc/xml/manual/containers.xml Fri Jul 4 07:24:46 2025 *************** *** 28,34 **** Yes it is, at least using the old ABI, and that's okay. This is a decision that we preserved when we imported SGI's STL implementation. The following is ! quoted from their FAQ:
--- 28,34 ---- Yes it is, at least using the old ABI, and that's okay. This is a decision that we preserved when we imported SGI's STL implementation. The following is ! quoted from their FAQ:
diff -Nrcpad gcc-12.4.0/libstdc++-v3/doc/xml/manual/extensions.xml gcc-12.5.0-RC-20250704/libstdc++-v3/doc/xml/manual/extensions.xml *** gcc-12.4.0/libstdc++-v3/doc/xml/manual/extensions.xml Thu Jun 20 08:08:10 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/doc/xml/manual/extensions.xml Fri Jul 4 07:24:46 2025 *************** extensions, be aware of two things: *** 221,232 **** Each of the associative containers map, multimap, set, and multiset have a counterpart which uses a ! hashing function to do the arranging, instead of a strict weak ordering function. The classes take as one of their template parameters a function object that will return the hash value; by default, an instantiation of ! hash. You should specialize this functor for your class, or define your own, before trying to use one of the hashing classes. --- 221,232 ---- Each of the associative containers map, multimap, set, and multiset have a counterpart which uses a ! hashing function to do the arranging, instead of a strict weak ordering function. The classes take as one of their template parameters a function object that will return the hash value; by default, an instantiation of ! hash. You should specialize this functor for your class, or define your own, before trying to use one of the hashing classes. *************** get_temporary_buffer(5, (int*)0); *** 388,394 **** The iota function wins the award for Extension With the Coolest Name (the name comes from Ken Iverson's APL language.) As ! described in the SGI documentation, it "assigns sequentially increasing values to a range. That is, it assigns value to *first, value + 1 to *(first + 1) and so on." --- 388,394 ---- The iota function wins the award for Extension With the Coolest Name (the name comes from Ken Iverson's APL language.) As ! described in the SGI documentation, it "assigns sequentially increasing values to a range. That is, it assigns value to *first, value + 1 to *(first + 1) and so on." diff -Nrcpad gcc-12.4.0/libstdc++-v3/doc/xml/manual/status_cxx1998.xml gcc-12.5.0-RC-20250704/libstdc++-v3/doc/xml/manual/status_cxx1998.xml *** gcc-12.4.0/libstdc++-v3/doc/xml/manual/status_cxx1998.xml Thu Jun 20 08:08:10 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/doc/xml/manual/status_cxx1998.xml Fri Jul 4 07:24:46 2025 *************** This status table is based on the table *** 18,25 **** ! This section describes the C++ support in the GCC 12 release series, ! not in any particular release. --- 18,24 ---- ! This section describes the C++ support in the GCC 12 release series. diff -Nrcpad gcc-12.4.0/libstdc++-v3/doc/xml/manual/status_cxx2011.xml gcc-12.5.0-RC-20250704/libstdc++-v3/doc/xml/manual/status_cxx2011.xml *** gcc-12.4.0/libstdc++-v3/doc/xml/manual/status_cxx2011.xml Thu Jun 20 08:08:10 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/doc/xml/manual/status_cxx2011.xml Fri Jul 4 07:24:46 2025 *************** This status table is based on the table *** 34,41 **** ! This section describes the C++11 support in the GCC 12 release series, ! not in any particular release. --- 34,40 ---- ! This section describes the C++11 support in the GCC 12 release series. diff -Nrcpad gcc-12.4.0/libstdc++-v3/doc/xml/manual/status_cxx2014.xml gcc-12.5.0-RC-20250704/libstdc++-v3/doc/xml/manual/status_cxx2014.xml *** gcc-12.4.0/libstdc++-v3/doc/xml/manual/status_cxx2014.xml Thu Jun 20 08:08:10 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/doc/xml/manual/status_cxx2014.xml Fri Jul 4 07:24:46 2025 *************** since C++11 and the implementation is co *** 29,36 **** ! This section describes the C++14 and library TS support in the GCC 12 release series, ! not in any particular release. --- 29,35 ---- ! This section describes the C++14 and library TS support in the GCC 12 release series. diff -Nrcpad gcc-12.4.0/libstdc++-v3/doc/xml/manual/status_cxx2017.xml gcc-12.5.0-RC-20250704/libstdc++-v3/doc/xml/manual/status_cxx2017.xml *** gcc-12.4.0/libstdc++-v3/doc/xml/manual/status_cxx2017.xml Thu Jun 20 08:08:10 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/doc/xml/manual/status_cxx2017.xml Fri Jul 4 07:24:46 2025 *************** since that release. *** 23,30 **** ! This section describes the C++17 and library TS support in the GCC 12 release series, ! not in any particular release. --- 23,29 ---- ! This section describes the C++17 and library TS support in the GCC 12 release series. diff -Nrcpad gcc-12.4.0/libstdc++-v3/doc/xml/manual/status_cxx2020.xml gcc-12.5.0-RC-20250704/libstdc++-v3/doc/xml/manual/status_cxx2020.xml *** gcc-12.4.0/libstdc++-v3/doc/xml/manual/status_cxx2020.xml Thu Jun 20 08:08:10 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/doc/xml/manual/status_cxx2020.xml Fri Jul 4 07:24:46 2025 *************** presence of the required flag. *** 20,27 **** ! This section describes the C++20 and library TS support in the GCC 12 release series, ! not in any particular release. --- 20,26 ---- ! This section describes the C++20 and library TS support in the GCC 12 release series. diff -Nrcpad gcc-12.4.0/libstdc++-v3/doc/xml/manual/status_cxx2023.xml gcc-12.5.0-RC-20250704/libstdc++-v3/doc/xml/manual/status_cxx2023.xml *** gcc-12.4.0/libstdc++-v3/doc/xml/manual/status_cxx2023.xml Thu Jun 20 08:08:10 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/doc/xml/manual/status_cxx2023.xml Fri Jul 4 07:24:46 2025 *************** presence of the required flag. *** 20,27 **** ! This section describes the C++23 and library TS support in mainline GCC, ! not in any particular release. --- 20,26 ---- ! This section describes the C++23 and library TS support in the GCC 12 release series. diff -Nrcpad gcc-12.4.0/libstdc++-v3/doc/xml/manual/status_cxxtr1.xml gcc-12.5.0-RC-20250704/libstdc++-v3/doc/xml/manual/status_cxxtr1.xml *** gcc-12.4.0/libstdc++-v3/doc/xml/manual/status_cxxtr1.xml Thu Jun 20 08:08:10 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/doc/xml/manual/status_cxxtr1.xml Fri Jul 4 07:24:46 2025 *************** In this implementation the header names *** 22,29 **** ! This page describes the TR1 support in the GCC 12 release series, ! not in any particular release. --- 22,28 ---- ! This page describes the TR1 support in the GCC 12 release series. diff -Nrcpad gcc-12.4.0/libstdc++-v3/doc/xml/manual/status_cxxtr24733.xml gcc-12.5.0-RC-20250704/libstdc++-v3/doc/xml/manual/status_cxxtr24733.xml *** gcc-12.4.0/libstdc++-v3/doc/xml/manual/status_cxxtr24733.xml Thu Jun 20 08:08:10 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/doc/xml/manual/status_cxxtr24733.xml Fri Jul 4 07:24:46 2025 *************** decimal floating-point arithmetic". *** 17,24 **** ! This page describes the TR 24733 support in the GCC 12 release series, ! not in any particular release. --- 17,23 ---- ! This page describes the TR 24733 support in the GCC 12 release series. diff -Nrcpad gcc-12.4.0/libstdc++-v3/doc/xml/manual/using.xml gcc-12.5.0-RC-20250704/libstdc++-v3/doc/xml/manual/using.xml *** gcc-12.4.0/libstdc++-v3/doc/xml/manual/using.xml Thu Jun 20 08:08:10 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/doc/xml/manual/using.xml Fri Jul 4 07:24:46 2025 *************** The standard places requirements on the *** 1690,1696 **** races are caused by the library itself or by programs which use the library correctly (as described below). The C++11 memory model and library requirements are a more formal version ! of the SGI STL definition of thread safety, which the library used prior to the 2011 standard. --- 1690,1696 ---- races are caused by the library itself or by programs which use the library correctly (as described below). The C++11 memory model and library requirements are a more formal version ! of the SGI STL definition of thread safety, which the library used prior to the 2011 standard. *************** gcc version 4.1.2 20070925 (Red Hat 4.1. *** 1808,1813 **** --- 1808,1825 ---- of the container and so conflict with other accesses to the container). + + The Copy-On-Write std::string implementation + used before GCC 5 (and with + _GLIBCXX_USE_CXX11_ABI=0) + is not a standard container and does not conform to the data race + avoidance rules described above. For the Copy-On-Write + std::string, non-const member functions such as + begin() are considered to be modifying accesses + and so must not be used concurrently with any other accesses to the + same object. + + Programs which follow the rules above will not encounter data races in library code, even when using library types which share state between distinct objects. In the example below the *************** gcc version 4.1.2 20070925 (Red Hat 4.1. *** 1963,1972 **** Two excellent pages to read when working with the Standard C++ containers and threads are ! SGI's ! https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/thread_safety.html and ! SGI's ! https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/Allocators.html. However, please ignore all discussions about the user-level configuration of the lock implementation inside the STL --- 1975,1984 ---- Two excellent pages to read when working with the Standard C++ containers and threads are ! SGI's ! https://web.archive.org/web/20171221154911/http://www.sgi.com/tech/stl/thread_safety.html and ! SGI's ! https://web.archive.org/web/20171108142526/http://www.sgi.com/tech/stl/Allocators.html. However, please ignore all discussions about the user-level configuration of the lock implementation inside the STL diff -Nrcpad gcc-12.4.0/libstdc++-v3/doc/xml/manual/utilities.xml gcc-12.5.0-RC-20250704/libstdc++-v3/doc/xml/manual/utilities.xml *** gcc-12.4.0/libstdc++-v3/doc/xml/manual/utilities.xml Thu Jun 20 08:08:10 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/doc/xml/manual/utilities.xml Fri Jul 4 07:24:46 2025 *************** *** 22,29 **** get slightly the wrong idea. In the interest of not reinventing the wheel, we will refer you to the introduction to the functor concept written by SGI as part of their STL, in ! their ! https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/functors.html. --- 22,29 ---- get slightly the wrong idea. In the interest of not reinventing the wheel, we will refer you to the introduction to the functor concept written by SGI as part of their STL, in ! their ! https://web.archive.org/web/20171209002754/http://www.sgi.com/tech/stl/functors.html. diff -Nrcpad gcc-12.4.0/libstdc++-v3/include/bits/allocator.h gcc-12.5.0-RC-20250704/libstdc++-v3/include/bits/allocator.h *** gcc-12.4.0/libstdc++-v3/include/bits/allocator.h Thu Jun 20 08:08:10 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/include/bits/allocator.h Fri Jul 4 07:24:46 2025 *************** _GLIBCXX_BEGIN_NAMESPACE_VERSION *** 247,252 **** --- 247,253 ---- { public: typedef _Tp value_type; + allocator() { } template allocator(const allocator<_Up>&) { } }; *************** _GLIBCXX_BEGIN_NAMESPACE_VERSION *** 255,260 **** --- 256,262 ---- { public: typedef _Tp value_type; + allocator() { } template allocator(const allocator<_Up>&) { } }; *************** _GLIBCXX_BEGIN_NAMESPACE_VERSION *** 263,268 **** --- 265,271 ---- { public: typedef _Tp value_type; + allocator() { } template allocator(const allocator<_Up>&) { } }; diff -Nrcpad gcc-12.4.0/libstdc++-v3/include/bits/basic_string.h gcc-12.5.0-RC-20250704/libstdc++-v3/include/bits/basic_string.h *** gcc-12.4.0/libstdc++-v3/include/bits/basic_string.h Thu Jun 20 08:08:10 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/include/bits/basic_string.h Fri Jul 4 07:24:46 2025 *************** _GLIBCXX_BEGIN_NAMESPACE_CXX11 *** 911,917 **** __str._M_data(__str._M_local_buf); } else // Need to do a deep copy ! assign(__str); __str.clear(); return *this; } --- 911,917 ---- __str._M_data(__str._M_local_buf); } else // Need to do a deep copy ! _M_assign(__str); __str.clear(); return *this; } diff -Nrcpad gcc-12.4.0/libstdc++-v3/include/bits/chrono.h gcc-12.5.0-RC-20250704/libstdc++-v3/include/bits/chrono.h *** gcc-12.4.0/libstdc++-v3/include/bits/chrono.h Thu Jun 20 08:08:10 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/include/bits/chrono.h Fri Jul 4 07:24:46 2025 *************** _GLIBCXX_BEGIN_INLINE_ABI_NAMESPACE(_V2) *** 1218,1223 **** --- 1218,1224 ---- now() noexcept; // Map to C API + [[__gnu__::__always_inline__]] static std::time_t to_time_t(const time_point& __t) noexcept { *************** _GLIBCXX_BEGIN_INLINE_ABI_NAMESPACE(_V2) *** 1225,1230 **** --- 1226,1232 ---- (__t.time_since_epoch()).count()); } + [[__gnu__::__always_inline__]] static time_point from_time_t(std::time_t __t) noexcept { diff -Nrcpad gcc-12.4.0/libstdc++-v3/include/bits/cow_string.h gcc-12.5.0-RC-20250704/libstdc++-v3/include/bits/cow_string.h *** gcc-12.4.0/libstdc++-v3/include/bits/cow_string.h Thu Jun 20 08:08:10 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/include/bits/cow_string.h Fri Jul 4 07:24:46 2025 *************** _GLIBCXX_BEGIN_NAMESPACE_VERSION *** 909,925 **** public: // Capacity: /// Returns the number of characters in the string, not including any /// null-termination. size_type size() const _GLIBCXX_NOEXCEPT ! { return _M_rep()->_M_length; } /// Returns the number of characters in the string, not including any /// null-termination. size_type length() const _GLIBCXX_NOEXCEPT ! { return _M_rep()->_M_length; } /// Returns the size() of the largest possible %string. size_type --- 909,932 ---- public: // Capacity: + /// Returns the number of characters in the string, not including any /// null-termination. size_type size() const _GLIBCXX_NOEXCEPT ! { ! #if _GLIBCXX_FULLY_DYNAMIC_STRING == 0 && __OPTIMIZE__ ! if (_S_empty_rep()._M_length != 0) ! __builtin_unreachable(); ! #endif ! return _M_rep()->_M_length; ! } /// Returns the number of characters in the string, not including any /// null-termination. size_type length() const _GLIBCXX_NOEXCEPT ! { return size(); } /// Returns the size() of the largest possible %string. size_type diff -Nrcpad gcc-12.4.0/libstdc++-v3/include/bits/cpp_type_traits.h gcc-12.5.0-RC-20250704/libstdc++-v3/include/bits/cpp_type_traits.h *** gcc-12.4.0/libstdc++-v3/include/bits/cpp_type_traits.h Thu Jun 20 08:08:10 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/include/bits/cpp_type_traits.h Fri Jul 4 07:24:46 2025 *************** *** 24,30 **** /** @file bits/cpp_type_traits.h * This is an internal header file, included by other library headers. ! * Do not attempt to use it directly. @headername{ext/type_traits} */ // Written by Gabriel Dos Reis --- 24,30 ---- /** @file bits/cpp_type_traits.h * This is an internal header file, included by other library headers. ! * Do not attempt to use it directly. @headername{ext/type_traits.h} */ // Written by Gabriel Dos Reis diff -Nrcpad gcc-12.4.0/libstdc++-v3/include/bits/deque.tcc gcc-12.5.0-RC-20250704/libstdc++-v3/include/bits/deque.tcc *** gcc-12.4.0/libstdc++-v3/include/bits/deque.tcc Thu Jun 20 08:08:10 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/include/bits/deque.tcc Fri Jul 4 07:24:46 2025 *************** _GLIBCXX_BEGIN_NAMESPACE_CONTAINER *** 601,606 **** --- 601,609 ---- std::forward_iterator_tag) { const size_type __n = std::distance(__first, __last); + if (__builtin_expect(__n == 0, 0)) + return; + if (__pos._M_cur == this->_M_impl._M_start._M_cur) { iterator __new_start = _M_reserve_elements_at_front(__n); diff -Nrcpad gcc-12.4.0/libstdc++-v3/include/bits/fs_dir.h gcc-12.5.0-RC-20250704/libstdc++-v3/include/bits/fs_dir.h *** gcc-12.4.0/libstdc++-v3/include/bits/fs_dir.h Thu Jun 20 08:08:10 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/include/bits/fs_dir.h Fri Jul 4 07:24:46 2025 *************** *** 39,44 **** --- 39,45 ---- #if __cplusplus >= 202002L # include // std::strong_ordering # include // std::default_sentinel_t + # include // enable_view, enable_borrowed_range #endif namespace std _GLIBCXX_VISIBILITY(default) *************** _GLIBCXX_END_NAMESPACE_CXX11 *** 626,631 **** --- 627,653 ---- extern template class __shared_ptr; + #ifdef __cpp_lib_concepts // >= C++20 + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 3480. directory_iterator and recursive_directory_iterator are not ranges + namespace ranges + { + template<> + inline constexpr bool + enable_borrowed_range = true; + template<> + inline constexpr bool + enable_borrowed_range = true; + + template<> + inline constexpr bool + enable_view = true; + template<> + inline constexpr bool + enable_view = true; + } // namespace ranges + #endif // concepts + _GLIBCXX_END_NAMESPACE_VERSION } // namespace std diff -Nrcpad gcc-12.4.0/libstdc++-v3/include/bits/ranges_util.h gcc-12.5.0-RC-20250704/libstdc++-v3/include/bits/ranges_util.h *** gcc-12.4.0/libstdc++-v3/include/bits/ranges_util.h Thu Jun 20 08:08:10 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/include/bits/ranges_util.h Fri Jul 4 07:24:46 2025 *************** namespace ranges *** 399,406 **** __detail::__make_unsigned_like_t>) -> subrange, sentinel_t<_Rng>, subrange_kind::sized>; template ! requires (_Num < 2) constexpr auto get(const subrange<_It, _Sent, _Kind>& __r) { --- 399,409 ---- __detail::__make_unsigned_like_t>) -> subrange, sentinel_t<_Rng>, subrange_kind::sized>; + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 3589. The const lvalue reference overload of get for subrange does not + // constrain I to be copyable when N == 0 template ! requires ((_Num == 0 && copyable<_It>) || _Num == 1) constexpr auto get(const subrange<_It, _Sent, _Kind>& __r) { diff -Nrcpad gcc-12.4.0/libstdc++-v3/include/bits/stl_bvector.h gcc-12.5.0-RC-20250704/libstdc++-v3/include/bits/stl_bvector.h *** gcc-12.4.0/libstdc++-v3/include/bits/stl_bvector.h Thu Jun 20 08:08:10 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/include/bits/stl_bvector.h Fri Jul 4 07:24:46 2025 *************** _GLIBCXX_BEGIN_NAMESPACE_CONTAINER *** 548,553 **** --- 548,556 ---- _GLIBCXX20_CONSTEXPR _Bvector_impl() _GLIBCXX_NOEXCEPT_IF( is_nothrow_default_constructible<_Bit_alloc_type>::value) + #if __cpp_concepts + requires is_default_constructible_v<_Bit_alloc_type> + #endif : _Bit_alloc_type() { } diff -Nrcpad gcc-12.4.0/libstdc++-v3/include/bits/stl_iterator.h gcc-12.5.0-RC-20250704/libstdc++-v3/include/bits/stl_iterator.h *** gcc-12.4.0/libstdc++-v3/include/bits/stl_iterator.h Thu Jun 20 08:08:10 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/include/bits/stl_iterator.h Fri Jul 4 07:24:46 2025 *************** _GLIBCXX_BEGIN_NAMESPACE_VERSION *** 1829,1834 **** --- 1829,1842 ---- { return _ReturnType(__i); } #if __cplusplus > 201703L && __cpp_lib_concepts + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 3736. move_iterator missing disable_sized_sentinel_for specialization + template + requires (!sized_sentinel_for<_Iterator1, _Iterator2>) + inline constexpr bool + disable_sized_sentinel_for, + move_iterator<_Iterator2>> = true; + // [iterators.common] Common iterators namespace __detail diff -Nrcpad gcc-12.4.0/libstdc++-v3/include/bits/stl_vector.h gcc-12.5.0-RC-20250704/libstdc++-v3/include/bits/stl_vector.h *** gcc-12.4.0/libstdc++-v3/include/bits/stl_vector.h Thu Jun 20 08:08:10 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/include/bits/stl_vector.h Fri Jul 4 07:24:46 2025 *************** _GLIBCXX_BEGIN_NAMESPACE_CONTAINER *** 136,141 **** --- 136,144 ---- _GLIBCXX20_CONSTEXPR _Vector_impl() _GLIBCXX_NOEXCEPT_IF( is_nothrow_default_constructible<_Tp_alloc_type>::value) + #if __cpp_lib_concepts + requires is_default_constructible_v<_Tp_alloc_type> + #endif : _Tp_alloc_type() { } diff -Nrcpad gcc-12.4.0/libstdc++-v3/include/bits/vector.tcc gcc-12.5.0-RC-20250704/libstdc++-v3/include/bits/vector.tcc *** gcc-12.4.0/libstdc++-v3/include/bits/vector.tcc Thu Jun 20 08:08:10 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/include/bits/vector.tcc Fri Jul 4 07:24:46 2025 *************** _GLIBCXX_BEGIN_NAMESPACE_CONTAINER *** 793,798 **** --- 793,800 ---- // reachable. pointer __old_start = this->_M_impl._M_start; pointer __old_finish = this->_M_impl._M_finish; + if ((__old_finish - __old_start) < 0) + __builtin_unreachable(); const size_type __len = _M_check_len(__n, "vector::_M_range_insert"); diff -Nrcpad gcc-12.4.0/libstdc++-v3/include/c_compatibility/stdatomic.h gcc-12.5.0-RC-20250704/libstdc++-v3/include/c_compatibility/stdatomic.h *** gcc-12.4.0/libstdc++-v3/include/c_compatibility/stdatomic.h Thu Jun 20 08:08:10 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/include/c_compatibility/stdatomic.h Fri Jul 4 07:24:46 2025 *************** *** 34,40 **** #define __cpp_lib_stdatomic_h 202011L ! #define _Atomic(_Tp) std::atomic<_Tp> using std::memory_order; using std::memory_order_relaxed; --- 34,40 ---- #define __cpp_lib_stdatomic_h 202011L ! #define _Atomic(_Tp) ::std::atomic<_Tp> using std::memory_order; using std::memory_order_relaxed; diff -Nrcpad gcc-12.4.0/libstdc++-v3/include/debug/helper_functions.h gcc-12.5.0-RC-20250704/libstdc++-v3/include/debug/helper_functions.h *** gcc-12.4.0/libstdc++-v3/include/debug/helper_functions.h Thu Jun 20 08:08:10 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/include/debug/helper_functions.h Fri Jul 4 07:24:46 2025 *************** namespace __gnu_debug *** 111,122 **** _GLIBCXX_CONSTEXPR inline typename _Distance_traits<_Iterator>::__type __get_distance(_Iterator __lhs, _Iterator __rhs) ! { return __get_distance(__lhs, __rhs, std::__iterator_category(__lhs)); } // An arbitrary iterator pointer is not singular. inline bool __check_singular_aux(const void*) { return false; } // We may have an iterator that derives from _Safe_iterator_base but isn't // a _Safe_iterator. template --- 111,129 ---- _GLIBCXX_CONSTEXPR inline typename _Distance_traits<_Iterator>::__type __get_distance(_Iterator __lhs, _Iterator __rhs) ! { ! return __gnu_debug::__get_distance(__lhs, __rhs, ! std::__iterator_category(__lhs)); ! } // An arbitrary iterator pointer is not singular. inline bool __check_singular_aux(const void*) { return false; } + // Defined in + bool + __check_singular_aux(const class _Safe_iterator_base*); + // We may have an iterator that derives from _Safe_iterator_base but isn't // a _Safe_iterator. template *************** namespace __gnu_debug *** 125,131 **** __check_singular(_Iterator const& __x) { return ! std::__is_constant_evaluated() ! && __check_singular_aux(std::__addressof(__x)); } /** Non-NULL pointers are nonsingular. */ --- 132,138 ---- __check_singular(_Iterator const& __x) { return ! std::__is_constant_evaluated() ! && __gnu_debug::__check_singular_aux(std::__addressof(__x)); } /** Non-NULL pointers are nonsingular. */ *************** namespace __gnu_debug *** 163,169 **** std::input_iterator_tag) { return __first == __last ! || (!__check_singular(__first) && !__check_singular(__last)); } template --- 170,177 ---- std::input_iterator_tag) { return __first == __last ! || (!__gnu_debug::__check_singular(__first) ! && !__gnu_debug::__check_singular(__last)); } template *************** namespace __gnu_debug *** 172,179 **** __valid_range_aux(_InputIterator __first, _InputIterator __last, std::random_access_iterator_tag) { ! return ! __valid_range_aux(__first, __last, std::input_iterator_tag()) && __first <= __last; } --- 180,187 ---- __valid_range_aux(_InputIterator __first, _InputIterator __last, std::random_access_iterator_tag) { ! return __gnu_debug::__valid_range_aux(__first, __last, ! std::input_iterator_tag()) && __first <= __last; } *************** namespace __gnu_debug *** 186,193 **** __valid_range_aux(_InputIterator __first, _InputIterator __last, std::__false_type) { ! return __valid_range_aux(__first, __last, ! std::__iterator_category(__first)); } template --- 194,201 ---- __valid_range_aux(_InputIterator __first, _InputIterator __last, std::__false_type) { ! return __gnu_debug::__valid_range_aux(__first, __last, ! std::__iterator_category(__first)); } template *************** namespace __gnu_debug *** 197,206 **** typename _Distance_traits<_InputIterator>::__type& __dist, std::__false_type) { ! if (!__valid_range_aux(__first, __last, std::input_iterator_tag())) return false; ! __dist = __get_distance(__first, __last); switch (__dist.second) { case __dp_none: --- 205,215 ---- typename _Distance_traits<_InputIterator>::__type& __dist, std::__false_type) { ! if (!__gnu_debug::__valid_range_aux(__first, __last, ! std::input_iterator_tag())) return false; ! __dist = __gnu_debug::__get_distance(__first, __last); switch (__dist.second) { case __dp_none: *************** namespace __gnu_debug *** 231,237 **** typename _Distance_traits<_InputIterator>::__type& __dist) { typedef typename std::__is_integer<_InputIterator>::__type _Integral; ! return __valid_range_aux(__first, __last, __dist, _Integral()); } template --- 240,247 ---- typename _Distance_traits<_InputIterator>::__type& __dist) { typedef typename std::__is_integer<_InputIterator>::__type _Integral; ! return __gnu_debug::__valid_range_aux(__first, __last, __dist, ! _Integral()); } template *************** namespace __gnu_debug *** 254,260 **** __valid_range(_InputIterator __first, _InputIterator __last) { typedef typename std::__is_integer<_InputIterator>::__type _Integral; ! return __valid_range_aux(__first, __last, _Integral()); } template --- 264,270 ---- __valid_range(_InputIterator __first, _InputIterator __last) { typedef typename std::__is_integer<_InputIterator>::__type _Integral; ! return __gnu_debug::__valid_range_aux(__first, __last, _Integral()); } template diff -Nrcpad gcc-12.4.0/libstdc++-v3/include/experimental/bits/simd.h gcc-12.5.0-RC-20250704/libstdc++-v3/include/experimental/bits/simd.h *** gcc-12.4.0/libstdc++-v3/include/experimental/bits/simd.h Thu Jun 20 08:08:10 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/include/experimental/bits/simd.h Fri Jul 4 07:24:46 2025 *************** template *** 584,602 **** static_assert(_Bytes > 0); if constexpr (_Bytes == sizeof(int)) return int(); - #ifdef __clang__ - else if constexpr (_Bytes == sizeof(char)) - return char(); - #else else if constexpr (_Bytes == sizeof(_SChar)) return _SChar(); - #endif else if constexpr (_Bytes == sizeof(short)) return short(); - #ifndef __clang__ else if constexpr (_Bytes == sizeof(long)) return long(); - #endif else if constexpr (_Bytes == sizeof(_LLong)) return _LLong(); #ifdef __SIZEOF_INT128__ --- 584,595 ---- *************** template *** 1616,1622 **** if constexpr (__is_vector_type_v<_V>) return __x; else if constexpr (is_simd<_V>::value || is_simd_mask<_V>::value) ! return __data(__x)._M_data; else if constexpr (__is_vectorizable_v<_V>) return __vector_type_t<_V, 2>{__x}; else --- 1609,1637 ---- if constexpr (__is_vector_type_v<_V>) return __x; else if constexpr (is_simd<_V>::value || is_simd_mask<_V>::value) ! { ! if constexpr (__is_fixed_size_abi_v) ! { ! static_assert(is_simd<_V>::value); ! static_assert(_V::abi_type::template __traits< ! typename _V::value_type>::_SimdMember::_S_tuple_size == 1); ! return __as_vector(__data(__x).first); ! } ! else if constexpr (_V::size() > 1) ! return __data(__x)._M_data; ! else ! { ! static_assert(is_simd<_V>::value); ! using _Tp = typename _V::value_type; ! #ifdef __i386__ ! constexpr auto __bytes = sizeof(_Tp) == 8 ? 16 : sizeof(_Tp); ! using _RV [[__gnu__::__vector_size__(__bytes)]] = _Tp; ! #else ! using _RV [[__gnu__::__vector_size__(sizeof(_Tp))]] = _Tp; ! #endif ! return _RV{__data(__x)}; ! } ! } else if constexpr (__is_vectorizable_v<_V>) return __vector_type_t<_V, 2>{__x}; else *************** template + _GLIBCXX_SIMD_INTRINSIC constexpr + __vector_type_t()[0])>, sizeof...(_Is)> + __vec_shuffle(_T0 __x, _T1 __y, index_sequence<_Is...> __seq, _Fun __idx_perm) + { + constexpr int _N0 = sizeof(__x) / sizeof(__x[0]); + constexpr int _N1 = sizeof(__y) / sizeof(__y[0]); + using _Tp = remove_reference_t()[0])>; + using _RV [[maybe_unused]] = __vector_type_t<_Tp, sizeof...(_Is)>; + #if __has_builtin(__builtin_shufflevector) + #ifdef __clang__ + // Clang requires _T0 == _T1 + if constexpr (sizeof(__x) > sizeof(__y) and _N1 == 1) + return __vec_shuffle(__x, _T0{__y[0]}, __seq, __idx_perm); + else if constexpr (sizeof(__x) > sizeof(__y)) + return __vec_shuffle(__x, __intrin_bitcast<_T0>(__y), __seq, __idx_perm); + else if constexpr (sizeof(__x) < sizeof(__y) and _N0 == 1) + return __vec_shuffle(_T1{__x[0]}, __y, __seq, [=](int __i) { + __i = __idx_perm(__i); + return __i < _N0 ? __i : __i - _N0 + _N1; + }); + else if constexpr (sizeof(__x) < sizeof(__y)) + return __vec_shuffle(__intrin_bitcast<_T1>(__x), __y, __seq, [=](int __i) { + __i = __idx_perm(__i); + return __i < _N0 ? __i : __i - _N0 + _N1; + }); + else + #endif + { + const auto __r = __builtin_shufflevector(__x, __y, [=] { + constexpr int __j = __idx_perm(_Is); + static_assert(__j < _N0 + _N1); + return __j; + }()...); + #ifdef __i386__ + if constexpr (sizeof(__r) == sizeof(_RV)) + return __r; + else + return _RV {__r[_Is]...}; + #else + return __r; + #endif + } + #else + return _RV { + [=]() -> _Tp { + constexpr int __j = __idx_perm(_Is); + static_assert(__j < _N0 + _N1); + if constexpr (__j < 0) + return 0; + else if constexpr (__j < _N0) + return __x[__j]; + else + return __y[__j - _N0]; + }()... + }; + #endif + } + + template + _GLIBCXX_SIMD_INTRINSIC constexpr auto + __vec_shuffle(_T0 __x, _Seq __seq, _Fun __idx_perm) + { return __vec_shuffle(__x, _T0(), __seq, __idx_perm); } + + // }}} // __concat{{{ template , typename _R = __vector_type_t> *************** template *** 2624,2629 **** --- 2705,2712 ---- // }}} // _SimdWrapper{{{ + struct _DisabledSimdWrapper; + template struct _SimdWrapper< _Tp, _Width, *************** template *** 2633,2648 **** == sizeof(__vector_type_t<_Tp, _Width>), __vector_type_t<_Tp, _Width>> { ! using _Base ! = _SimdWrapperBase<__has_iec559_behavior<__signaling_NaN, _Tp>::value ! && sizeof(_Tp) * _Width ! == sizeof(__vector_type_t<_Tp, _Width>), ! __vector_type_t<_Tp, _Width>>; static_assert(__is_vectorizable_v<_Tp>); static_assert(_Width >= 2); // 1 doesn't make sense, use _Tp directly then - using _BuiltinType = __vector_type_t<_Tp, _Width>; using value_type = _Tp; static inline constexpr size_t _S_full_size --- 2716,2732 ---- == sizeof(__vector_type_t<_Tp, _Width>), __vector_type_t<_Tp, _Width>> { ! static constexpr bool _S_need_default_init ! = __has_iec559_behavior<__signaling_NaN, _Tp>::value ! and sizeof(_Tp) * _Width == sizeof(__vector_type_t<_Tp, _Width>); ! ! using _BuiltinType = __vector_type_t<_Tp, _Width>; ! ! using _Base = _SimdWrapperBase<_S_need_default_init, _BuiltinType>; static_assert(__is_vectorizable_v<_Tp>); static_assert(_Width >= 2); // 1 doesn't make sense, use _Tp directly then using value_type = _Tp; static inline constexpr size_t _S_full_size *************** template *** 2678,2690 **** _GLIBCXX_SIMD_INTRINSIC constexpr _SimdWrapper& operator=(_SimdWrapper&&) = default; ! template >, ! is_same<_V, __intrinsic_type_t<_Tp, _Width>>>>> _GLIBCXX_SIMD_INTRINSIC constexpr _SimdWrapper(_V __x) ! // __vector_bitcast can convert e.g. __m128 to __vector(2) float ! : _Base(__vector_bitcast<_Tp, _Width>(__x)) {} template && ...) --- 2762,2787 ---- _GLIBCXX_SIMD_INTRINSIC constexpr _SimdWrapper& operator=(_SimdWrapper&&) = default; ! // Convert from exactly matching __vector_type_t ! using _SimdWrapperBase<_S_need_default_init, _BuiltinType>::_SimdWrapperBase; ! ! // Convert from __intrinsic_type_t if __intrinsic_type_t and __vector_type_t differ, otherwise ! // this ctor should not exist. Making the argument type unusable is our next best solution. ! _GLIBCXX_SIMD_INTRINSIC constexpr ! _SimdWrapper(conditional_t>, ! _DisabledSimdWrapper, __intrinsic_type_t<_Tp, _Width>> __x) ! : _Base(__vector_bitcast<_Tp, _Width>(__x)) {} ! ! // Convert from different __vector_type_t, but only if bit reinterpretation is a correct ! // conversion of the value_type ! template , ! typename = enable_if_t ! and is_integral_v>> _GLIBCXX_SIMD_INTRINSIC constexpr _SimdWrapper(_V __x) ! : _Base(reinterpret_cast<_BuiltinType>(__x)) {} template && ...) *************** template _GLIBCXX_SIMD_INTRINSIC _GLIBCXX_CONST constexpr ! _SimdWrapper<_Tp, _Np / _Total * _Combine> __extract_part(const _SimdWrapper<_Tp, _Np> __x); template --- 3981,3987 ---- // __extract_part {{{ template _GLIBCXX_SIMD_INTRINSIC _GLIBCXX_CONST constexpr ! conditional_t<_Np == _Total and _Combine == 1, _Tp, _SimdWrapper<_Tp, _Np / _Total * _Combine>> __extract_part(const _SimdWrapper<_Tp, _Np> __x); template *************** template (), __data(__x).second)); } ! else if constexpr ((!is_same_v> && ...) ! && (!__is_fixed_size_abi_v< ! simd_abi::deduce_t<_Tp, _Sizes>> && ...)) { ! if constexpr (((_Sizes * 2 == _Np) && ...)) ! return {{__private_init, __extract_part<0, 2>(__data(__x))}, ! {__private_init, __extract_part<1, 2>(__data(__x))}}; ! else if constexpr (is_same_v<_SizeList<_Sizes...>, ! _SizeList<_Np / 3, _Np / 3, _Np / 3>>) ! return {{__private_init, __extract_part<0, 3>(__data(__x))}, ! {__private_init, __extract_part<1, 3>(__data(__x))}, ! {__private_init, __extract_part<2, 3>(__data(__x))}}; ! else if constexpr (is_same_v<_SizeList<_Sizes...>, ! _SizeList<2 * _Np / 3, _Np / 3>>) ! return {{__private_init, __extract_part<0, 3, 2>(__data(__x))}, ! {__private_init, __extract_part<2, 3>(__data(__x))}}; ! else if constexpr (is_same_v<_SizeList<_Sizes...>, ! _SizeList<_Np / 3, 2 * _Np / 3>>) ! return {{__private_init, __extract_part<0, 3>(__data(__x))}, ! {__private_init, __extract_part<1, 3, 2>(__data(__x))}}; ! else if constexpr (is_same_v<_SizeList<_Sizes...>, ! _SizeList<_Np / 2, _Np / 4, _Np / 4>>) ! return {{__private_init, __extract_part<0, 2>(__data(__x))}, ! {__private_init, __extract_part<2, 4>(__data(__x))}, ! {__private_init, __extract_part<3, 4>(__data(__x))}}; ! else if constexpr (is_same_v<_SizeList<_Sizes...>, ! _SizeList<_Np / 4, _Np / 4, _Np / 2>>) ! return {{__private_init, __extract_part<0, 4>(__data(__x))}, ! {__private_init, __extract_part<1, 4>(__data(__x))}, ! {__private_init, __extract_part<1, 2>(__data(__x))}}; ! else if constexpr (is_same_v<_SizeList<_Sizes...>, ! _SizeList<_Np / 4, _Np / 2, _Np / 4>>) ! return {{__private_init, __extract_part<0, 4>(__data(__x))}, ! {__private_init, __extract_center(__data(__x))}, ! {__private_init, __extract_part<3, 4>(__data(__x))}}; ! else if constexpr (((_Sizes * 4 == _Np) && ...)) ! return {{__private_init, __extract_part<0, 4>(__data(__x))}, ! {__private_init, __extract_part<1, 4>(__data(__x))}, ! {__private_init, __extract_part<2, 4>(__data(__x))}, ! {__private_init, __extract_part<3, 4>(__data(__x))}}; ! // else fall through } #ifdef _GLIBCXX_SIMD_USE_ALIASING_LOADS const __may_alias<_Tp>* const __element_ptr --- 4245,4265 ---- __split_wrapper(_SL::template _S_pop_front<1>(), __data(__x).second)); } ! else if constexpr ((!__is_fixed_size_abi_v> && ...)) { ! constexpr array __size = {_Sizes...}; ! return __generate_from_n_evaluations( ! [&](auto __i) constexpr { ! constexpr size_t __offset = [&]() { ! size_t __r = 0; ! for (unsigned __j = 0; __j < __i; ++__j) ! __r += __size[__j]; ! return __r; ! }(); ! return __deduced_simd<_Tp, __size[__i]>( ! __private_init, ! __extract_part<__offset, _Np, __size[__i]>(__data(__x))); ! }); } #ifdef _GLIBCXX_SIMD_USE_ALIASING_LOADS const __may_alias<_Tp>* const __element_ptr *************** template + ...)>> concat(const simd<_Tp, _As>&... __xs) { ! using _Rp = __deduced_simd<_Tp, (simd_size_v<_Tp, _As> + ...)>; if constexpr (sizeof...(__xs) == 1) return simd_cast<_Rp>(__xs...); else if ((... && __xs._M_is_constprop())) ! return simd<_Tp, ! simd_abi::deduce_t<_Tp, (simd_size_v<_Tp, _As> + ...)>>( ! [&](auto __i) constexpr _GLIBCXX_SIMD_ALWAYS_INLINE_LAMBDA { return __subscript_in_pack<__i>(__xs...); }); else { _Rp __r{}; --- 4321,4357 ---- simd<_Tp, simd_abi::deduce_t<_Tp, (simd_size_v<_Tp, _As> + ...)>> concat(const simd<_Tp, _As>&... __xs) { ! constexpr int _Np = (simd_size_v<_Tp, _As> + ...); ! using _Abi = simd_abi::deduce_t<_Tp, _Np>; ! using _Rp = simd<_Tp, _Abi>; ! using _RW = typename _SimdTraits<_Tp, _Abi>::_SimdMember; if constexpr (sizeof...(__xs) == 1) return simd_cast<_Rp>(__xs...); else if ((... && __xs._M_is_constprop())) ! return _Rp([&](auto __i) constexpr _GLIBCXX_SIMD_ALWAYS_INLINE_LAMBDA { return __subscript_in_pack<__i>(__xs...); }); + else if constexpr (__is_simd_wrapper_v<_RW> and sizeof...(__xs) == 2) + { + return {__private_init, + __vec_shuffle(__as_vector(__xs)..., std::make_index_sequence<_RW::_S_full_size>(), + [](int __i) { + constexpr int __sizes[2] = {int(simd_size_v<_Tp, _As>)...}; + constexpr int __vsizes[2] + = {int(sizeof(__as_vector(__xs)) / sizeof(_Tp))...}; + constexpr int __padding0 = __vsizes[0] - __sizes[0]; + return __i >= _Np ? -1 : __i < __sizes[0] ? __i : __i + __padding0; + })}; + } + else if constexpr (__is_simd_wrapper_v<_RW> and sizeof...(__xs) == 3) + return [](const auto& __x0, const auto& __x1, const auto& __x2) + _GLIBCXX_SIMD_ALWAYS_INLINE_LAMBDA { + return concat(concat(__x0, __x1), __x2); + }(__xs...); + else if constexpr (__is_simd_wrapper_v<_RW> and sizeof...(__xs) > 3) + return [](const auto& __x0, const auto& __x1, const auto&... __rest) + _GLIBCXX_SIMD_ALWAYS_INLINE_LAMBDA { + return concat(concat(__x0, __x1), concat(__rest...)); + }(__xs...); else { _Rp __r{}; diff -Nrcpad gcc-12.4.0/libstdc++-v3/include/experimental/bits/simd_builtin.h gcc-12.5.0-RC-20250704/libstdc++-v3/include/experimental/bits/simd_builtin.h *** gcc-12.4.0/libstdc++-v3/include/experimental/bits/simd_builtin.h Thu Jun 20 08:08:10 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/include/experimental/bits/simd_builtin.h Fri Jul 4 07:24:46 2025 *************** template the low n Bytes are correct - template > - _GLIBCXX_SIMD_INTRINSIC _Tp - __shift_elements_right(_Tp __v) - { - [[maybe_unused]] const auto __iv = __to_intrin(__v); - static_assert(__shift <= sizeof(_Tp)); - if constexpr (__shift == 0) - return __v; - else if constexpr (__shift == sizeof(_Tp)) - return _Tp(); - #if _GLIBCXX_SIMD_X86INTRIN // {{{ - else if constexpr (__have_sse && __shift == 8 - && _TVT::template _S_is) - return _mm_movehl_ps(__iv, __iv); - else if constexpr (__have_sse2 && __shift == 8 - && _TVT::template _S_is) - return _mm_unpackhi_pd(__iv, __iv); - else if constexpr (__have_sse2 && sizeof(_Tp) == 16) - return reinterpret_cast( - _mm_srli_si128(reinterpret_cast<__m128i>(__iv), __shift)); - else if constexpr (__shift == 16 && sizeof(_Tp) == 32) - { - /*if constexpr (__have_avx && _TVT::template _S_is) - return _mm256_permute2f128_pd(__iv, __iv, 0x81); - else if constexpr (__have_avx && _TVT::template _S_is) - return _mm256_permute2f128_ps(__iv, __iv, 0x81); - else if constexpr (__have_avx) - return reinterpret_cast( - _mm256_permute2f128_si256(__iv, __iv, 0x81)); - else*/ - return __zero_extend(__hi128(__v)); - } - else if constexpr (__have_avx2 && sizeof(_Tp) == 32 && __shift < 16) - { - const auto __vll = __vector_bitcast<_LLong>(__v); - return reinterpret_cast( - _mm256_alignr_epi8(_mm256_permute2x128_si256(__vll, __vll, 0x81), - __vll, __shift)); - } - else if constexpr (__have_avx && sizeof(_Tp) == 32 && __shift < 16) - { - const auto __vll = __vector_bitcast<_LLong>(__v); - return reinterpret_cast( - __concat(_mm_alignr_epi8(__hi128(__vll), __lo128(__vll), __shift), - _mm_srli_si128(__hi128(__vll), __shift))); - } - else if constexpr (sizeof(_Tp) == 32 && __shift > 16) - return __zero_extend(__shift_elements_right<__shift - 16>(__hi128(__v))); - else if constexpr (sizeof(_Tp) == 64 && __shift == 32) - return __zero_extend(__hi256(__v)); - else if constexpr (__have_avx512f && sizeof(_Tp) == 64) - { - if constexpr (__shift >= 48) - return __zero_extend( - __shift_elements_right<__shift - 48>(__extract<3, 4>(__v))); - else if constexpr (__shift >= 32) - return __zero_extend( - __shift_elements_right<__shift - 32>(__hi256(__v))); - else if constexpr (__shift % 8 == 0) - return reinterpret_cast( - _mm512_alignr_epi64(__m512i(), __intrin_bitcast<__m512i>(__v), - __shift / 8)); - else if constexpr (__shift % 4 == 0) - return reinterpret_cast( - _mm512_alignr_epi32(__m512i(), __intrin_bitcast<__m512i>(__v), - __shift / 4)); - else if constexpr (__have_avx512bw && __shift < 16) - { - const auto __vll = __vector_bitcast<_LLong>(__v); - return reinterpret_cast( - _mm512_alignr_epi8(_mm512_shuffle_i32x4(__vll, __vll, 0xf9), - __vll, __shift)); - } - else if constexpr (__have_avx512bw && __shift < 32) - { - const auto __vll = __vector_bitcast<_LLong>(__v); - return reinterpret_cast( - _mm512_alignr_epi8(_mm512_shuffle_i32x4(__vll, __m512i(), 0xee), - _mm512_shuffle_i32x4(__vll, __vll, 0xf9), - __shift - 16)); - } - else - __assert_unreachable<_Tp>(); - } - /* - } else if constexpr (__shift % 16 == 0 && sizeof(_Tp) == 64) - return __auto_bitcast(__extract<__shift / 16, 4>(__v)); - */ - #endif // _GLIBCXX_SIMD_X86INTRIN }}} - else - { - constexpr int __chunksize = __shift % 8 == 0 ? 8 - : __shift % 4 == 0 ? 4 - : __shift % 2 == 0 ? 2 - : 1; - auto __w = __vector_bitcast<__int_with_sizeof_t<__chunksize>>(__v); - using _Up = decltype(__w); - return __intrin_bitcast<_Tp>( - __call_with_n_evaluations<(sizeof(_Tp) - __shift) / __chunksize>( - [](auto... __chunks) _GLIBCXX_SIMD_ALWAYS_INLINE_LAMBDA { - return _Up{__chunks...}; - }, [&](auto __i) _GLIBCXX_SIMD_ALWAYS_INLINE_LAMBDA { - return __w[__shift / __chunksize + __i]; - })); - } - } - - // }}} // __extract_part(_SimdWrapper<_Tp, _Np>) {{{ template _GLIBCXX_SIMD_INTRINSIC _GLIBCXX_CONST constexpr ! _SimdWrapper<_Tp, _Np / _Total * _Combine> __extract_part(const _SimdWrapper<_Tp, _Np> __x) { ! if constexpr (_Index % 2 == 0 && _Total % 2 == 0 && _Combine % 2 == 0) return __extract_part<_Index / 2, _Total / 2, _Combine / 2>(__x); else { --- 93,107 ---- } // }}} // __extract_part(_SimdWrapper<_Tp, _Np>) {{{ template _GLIBCXX_SIMD_INTRINSIC _GLIBCXX_CONST constexpr ! conditional_t<_Np == _Total and _Combine == 1, _Tp, _SimdWrapper<_Tp, _Np / _Total * _Combine>> __extract_part(const _SimdWrapper<_Tp, _Np> __x) { ! if constexpr (_Np == _Total and _Combine == 1) ! return __x[_Index]; ! else if constexpr (_Index % 2 == 0 && _Total % 2 == 0 && _Combine % 2 == 0) return __extract_part<_Index / 2, _Total / 2, _Combine / 2>(__x); else { *************** template (__as_vector(__x)); - #if _GLIBCXX_SIMD_X86INTRIN // {{{ - else if constexpr (sizeof(__x) == 32 - && __return_size * sizeof(_Tp) <= 16) - { - constexpr size_t __bytes_to_skip = __values_to_skip * sizeof(_Tp); - if constexpr (__bytes_to_skip == 16) - return __vector_bitcast<_Tp, __return_size>( - __hi128(__as_vector(__x))); - else - return __vector_bitcast<_Tp, __return_size>( - _mm_alignr_epi8(__hi128(__vector_bitcast<_LLong>(__x)), - __lo128(__vector_bitcast<_LLong>(__x)), - __bytes_to_skip)); - } - #endif // _GLIBCXX_SIMD_X86INTRIN }}} - else if constexpr (_Index > 0 - && (__values_to_skip % __return_size != 0 - || sizeof(_R) >= 8) - && (__values_to_skip + __return_size) * sizeof(_Tp) - <= 64 - && sizeof(__x) >= 16) - return __intrin_bitcast<_R>( - __shift_elements_right<__values_to_skip * sizeof(_Tp)>( - __as_vector(__x))); else ! { ! _R __r = {}; ! __builtin_memcpy(&__r, ! reinterpret_cast(&__x) ! + sizeof(_Tp) * __values_to_skip, ! __return_size * sizeof(_Tp)); ! return __r; ! } } } --- 127,137 ---- return __x; else if constexpr (_Index == 0) return __intrin_bitcast<_R>(__as_vector(__x)); else ! return __vec_shuffle(__as_vector(__x), make_index_sequence<__bit_ceil(__return_size)>(), ! [](size_t __i) { ! return __i + __values_to_skip; ! }); } } diff -Nrcpad gcc-12.4.0/libstdc++-v3/include/experimental/bits/simd_fixed_size.h gcc-12.5.0-RC-20250704/libstdc++-v3/include/experimental/bits/simd_fixed_size.h *** gcc-12.4.0/libstdc++-v3/include/experimental/bits/simd_fixed_size.h Thu Jun 20 08:08:10 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/include/experimental/bits/simd_fixed_size.h Fri Jul 4 07:24:46 2025 *************** template ; // handle (optimize) the simple cases ! if constexpr (_Index == 0 && _Tuple::_S_first_size == __return_size) return __x.first._M_data; else if constexpr (_Index == 0 && _Total == _Combine) return __x; --- 927,935 ---- using _RetAbi = simd_abi::deduce_t<_Tp, __return_size>; // handle (optimize) the simple cases ! if constexpr (__return_size == 1) ! return __x[integral_constant()]; ! else if constexpr (_Index == 0 && _Tuple::_S_first_size == __return_size) return __x.first._M_data; else if constexpr (_Index == 0 && _Total == _Combine) return __x; diff -Nrcpad gcc-12.4.0/libstdc++-v3/include/experimental/bits/simd_x86.h gcc-12.5.0-RC-20250704/libstdc++-v3/include/experimental/bits/simd_x86.h *** gcc-12.4.0/libstdc++-v3/include/experimental/bits/simd_x86.h Thu Jun 20 08:08:10 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/include/experimental/bits/simd_x86.h Fri Jul 4 07:24:46 2025 *************** template *** 2339,2367 **** __assert_unreachable<_Tp>(); } else if constexpr (sizeof(__xi) == 64 && sizeof(_Tp) == 8) ! return ~_mm512_mask_cmpeq_epi64_mask(__k1, __xi, __yi); else if constexpr (sizeof(__xi) == 64 && sizeof(_Tp) == 4) ! return ~_mm512_mask_cmpeq_epi32_mask(__k1, __xi, __yi); else if constexpr (sizeof(__xi) == 64 && sizeof(_Tp) == 2) ! return ~_mm512_mask_cmpeq_epi16_mask(__k1, __xi, __yi); else if constexpr (sizeof(__xi) == 64 && sizeof(_Tp) == 1) ! return ~_mm512_mask_cmpeq_epi8_mask(__k1, __xi, __yi); else if constexpr (sizeof(__xi) == 32 && sizeof(_Tp) == 8) ! return ~_mm256_mask_cmpeq_epi64_mask(__k1, __xi, __yi); else if constexpr (sizeof(__xi) == 32 && sizeof(_Tp) == 4) ! return ~_mm256_mask_cmpeq_epi32_mask(__k1, __xi, __yi); else if constexpr (sizeof(__xi) == 32 && sizeof(_Tp) == 2) ! return ~_mm256_mask_cmpeq_epi16_mask(__k1, __xi, __yi); else if constexpr (sizeof(__xi) == 32 && sizeof(_Tp) == 1) ! return ~_mm256_mask_cmpeq_epi8_mask(__k1, __xi, __yi); else if constexpr (sizeof(__xi) == 16 && sizeof(_Tp) == 8) ! return ~_mm_mask_cmpeq_epi64_mask(__k1, __xi, __yi); else if constexpr (sizeof(__xi) == 16 && sizeof(_Tp) == 4) ! return ~_mm_mask_cmpeq_epi32_mask(__k1, __xi, __yi); else if constexpr (sizeof(__xi) == 16 && sizeof(_Tp) == 2) ! return ~_mm_mask_cmpeq_epi16_mask(__k1, __xi, __yi); else if constexpr (sizeof(__xi) == 16 && sizeof(_Tp) == 1) ! return ~_mm_mask_cmpeq_epi8_mask(__k1, __xi, __yi); else __assert_unreachable<_Tp>(); } // }}} --- 2339,2367 ---- __assert_unreachable<_Tp>(); } else if constexpr (sizeof(__xi) == 64 && sizeof(_Tp) == 8) ! return _mm512_mask_cmpneq_epi64_mask(__k1, __xi, __yi); else if constexpr (sizeof(__xi) == 64 && sizeof(_Tp) == 4) ! return _mm512_mask_cmpneq_epi32_mask(__k1, __xi, __yi); else if constexpr (sizeof(__xi) == 64 && sizeof(_Tp) == 2) ! return _mm512_mask_cmpneq_epi16_mask(__k1, __xi, __yi); else if constexpr (sizeof(__xi) == 64 && sizeof(_Tp) == 1) ! return _mm512_mask_cmpneq_epi8_mask(__k1, __xi, __yi); else if constexpr (sizeof(__xi) == 32 && sizeof(_Tp) == 8) ! return _mm256_mask_cmpneq_epi64_mask(__k1, __xi, __yi); else if constexpr (sizeof(__xi) == 32 && sizeof(_Tp) == 4) ! return _mm256_mask_cmpneq_epi32_mask(__k1, __xi, __yi); else if constexpr (sizeof(__xi) == 32 && sizeof(_Tp) == 2) ! return _mm256_mask_cmpneq_epi16_mask(__k1, __xi, __yi); else if constexpr (sizeof(__xi) == 32 && sizeof(_Tp) == 1) ! return _mm256_mask_cmpneq_epi8_mask(__k1, __xi, __yi); else if constexpr (sizeof(__xi) == 16 && sizeof(_Tp) == 8) ! return _mm_mask_cmpneq_epi64_mask(__k1, __xi, __yi); else if constexpr (sizeof(__xi) == 16 && sizeof(_Tp) == 4) ! return _mm_mask_cmpneq_epi32_mask(__k1, __xi, __yi); else if constexpr (sizeof(__xi) == 16 && sizeof(_Tp) == 2) ! return _mm_mask_cmpneq_epi16_mask(__k1, __xi, __yi); else if constexpr (sizeof(__xi) == 16 && sizeof(_Tp) == 1) ! return _mm_mask_cmpneq_epi8_mask(__k1, __xi, __yi); else __assert_unreachable<_Tp>(); } // }}} *************** template *** 5292,5298 **** _S_find_last_set(simd_mask<_Tp, _Abi> __k) { if constexpr (__is_avx512_abi<_Abi>()) ! return std::__bit_width(__k._M_data._M_data) - 1; else return _Base::_S_find_last_set(__k); } --- 5292,5298 ---- _S_find_last_set(simd_mask<_Tp, _Abi> __k) { if constexpr (__is_avx512_abi<_Abi>()) ! return std::__bit_width(_Abi::_S_masked(__k._M_data)._M_data) - 1; else return _Base::_S_find_last_set(__k); } diff -Nrcpad gcc-12.4.0/libstdc++-v3/include/std/array gcc-12.5.0-RC-20250704/libstdc++-v3/include/std/array *** gcc-12.4.0/libstdc++-v3/include/std/array Thu Jun 20 08:08:10 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/include/std/array Fri Jul 4 07:24:46 2025 *************** _GLIBCXX_BEGIN_NAMESPACE_VERSION *** 302,308 **** _GLIBCXX20_CONSTEXPR inline bool operator==(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two) ! { return std::equal(__one.begin(), __one.end(), __two.begin()); } #if __cpp_lib_three_way_comparison && __cpp_lib_concepts template --- 302,308 ---- _GLIBCXX20_CONSTEXPR inline bool operator==(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two) ! { return std::__equal_aux1(__one.begin(), __one.end(), __two.begin()); } #if __cpp_lib_three_way_comparison && __cpp_lib_concepts template diff -Nrcpad gcc-12.4.0/libstdc++-v3/include/std/span gcc-12.5.0-RC-20250704/libstdc++-v3/include/std/span *** gcc-12.4.0/libstdc++-v3/include/std/span Thu Jun 20 08:08:10 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/include/std/span Fri Jul 4 07:24:46 2025 *************** _GLIBCXX_BEGIN_NAMESPACE_VERSION *** 183,203 **** requires (_Extent == dynamic_extent || _ArrayExtent == _Extent) constexpr span(type_identity_t (&__arr)[_ArrayExtent]) noexcept ! : span(static_cast(__arr), _ArrayExtent) { } template requires __is_compatible_array<_Tp, _ArrayExtent>::value constexpr span(array<_Tp, _ArrayExtent>& __arr) noexcept ! : span(static_cast(__arr.data()), _ArrayExtent) { } template requires __is_compatible_array::value constexpr span(const array<_Tp, _ArrayExtent>& __arr) noexcept ! : span(static_cast(__arr.data()), _ArrayExtent) { } template --- 183,203 ---- requires (_Extent == dynamic_extent || _ArrayExtent == _Extent) constexpr span(type_identity_t (&__arr)[_ArrayExtent]) noexcept ! : _M_ptr(__arr), _M_extent(_ArrayExtent) { } template requires __is_compatible_array<_Tp, _ArrayExtent>::value constexpr span(array<_Tp, _ArrayExtent>& __arr) noexcept ! : _M_ptr(__arr.data()), _M_extent(_ArrayExtent) { } template requires __is_compatible_array::value constexpr span(const array<_Tp, _ArrayExtent>& __arr) noexcept ! : _M_ptr(__arr.data()), _M_extent(_ArrayExtent) { } template *************** _GLIBCXX_BEGIN_NAMESPACE_VERSION *** 211,217 **** span(_Range&& __range) noexcept(noexcept(ranges::data(__range)) && noexcept(ranges::size(__range))) ! : span(ranges::data(__range), ranges::size(__range)) { if constexpr (extent != dynamic_extent) { --- 211,217 ---- span(_Range&& __range) noexcept(noexcept(ranges::data(__range)) && noexcept(ranges::size(__range))) ! : _M_ptr(ranges::data(__range)), _M_extent(ranges::size(__range)) { if constexpr (extent != dynamic_extent) { *************** _GLIBCXX_BEGIN_NAMESPACE_VERSION *** 229,235 **** constexpr explicit(extent != dynamic_extent && _OExtent == dynamic_extent) span(const span<_OType, _OExtent>& __s) noexcept ! : _M_extent(__s.size()), _M_ptr(__s.data()) { if constexpr (extent != dynamic_extent) { --- 229,235 ---- constexpr explicit(extent != dynamic_extent && _OExtent == dynamic_extent) span(const span<_OType, _OExtent>& __s) noexcept ! : _M_ptr(__s.data()), _M_extent(__s.size()) { if constexpr (extent != dynamic_extent) { diff -Nrcpad gcc-12.4.0/libstdc++-v3/include/std/string_view gcc-12.5.0-RC-20250704/libstdc++-v3/include/std/string_view *** gcc-12.4.0/libstdc++-v3/include/std/string_view Thu Jun 20 08:08:10 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/include/std/string_view Fri Jul 4 07:24:46 2025 *************** _GLIBCXX_BEGIN_NAMESPACE_VERSION *** 299,305 **** { __glibcxx_requires_string_len(__str, __n); __pos = std::__sv_check(size(), __pos, "basic_string_view::copy"); ! const size_type __rlen = std::min(__n, _M_len - __pos); // _GLIBCXX_RESOLVE_LIB_DEFECTS // 2777. basic_string_view::copy should use char_traits::copy traits_type::copy(__str, data() + __pos, __rlen); --- 299,305 ---- { __glibcxx_requires_string_len(__str, __n); __pos = std::__sv_check(size(), __pos, "basic_string_view::copy"); ! const size_type __rlen = std::min(__n, _M_len - __pos); // _GLIBCXX_RESOLVE_LIB_DEFECTS // 2777. basic_string_view::copy should use char_traits::copy traits_type::copy(__str, data() + __pos, __rlen); *************** _GLIBCXX_BEGIN_NAMESPACE_VERSION *** 310,316 **** substr(size_type __pos = 0, size_type __n = npos) const noexcept(false) { __pos = std::__sv_check(size(), __pos, "basic_string_view::substr"); ! const size_type __rlen = std::min(__n, _M_len - __pos); return basic_string_view{_M_str + __pos, __rlen}; } --- 310,316 ---- substr(size_type __pos = 0, size_type __n = npos) const noexcept(false) { __pos = std::__sv_check(size(), __pos, "basic_string_view::substr"); ! const size_type __rlen = std::min(__n, _M_len - __pos); return basic_string_view{_M_str + __pos, __rlen}; } diff -Nrcpad gcc-12.4.0/libstdc++-v3/include/std/valarray gcc-12.5.0-RC-20250704/libstdc++-v3/include/std/valarray *** gcc-12.4.0/libstdc++-v3/include/std/valarray Thu Jun 20 08:08:10 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/include/std/valarray Fri Jul 4 07:24:46 2025 *************** _GLIBCXX_BEGIN_NAMESPACE_VERSION *** 838,844 **** // _GLIBCXX_RESOLVE_LIB_DEFECTS // 630. arrays of valarray. if (_M_size == __e.size()) ! std::__valarray_copy(__e, _M_size, _Array<_Tp>(_M_data)); else { if (_M_data) --- 838,850 ---- // _GLIBCXX_RESOLVE_LIB_DEFECTS // 630. arrays of valarray. if (_M_size == __e.size()) ! { ! // Copy manually instead of using __valarray_copy, because __e might ! // alias _M_data and the _Array param type of __valarray_copy uses ! // restrict which doesn't allow aliasing. ! for (size_t __i = 0; __i < _M_size; ++__i) ! _M_data[__i] = __e[__i]; ! } else { if (_M_data) diff -Nrcpad gcc-12.4.0/libstdc++-v3/include/std/variant gcc-12.5.0-RC-20250704/libstdc++-v3/include/std/variant *** gcc-12.4.0/libstdc++-v3/include/std/variant Thu Jun 20 08:08:10 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/include/std/variant Fri Jul 4 07:24:46 2025 *************** namespace __variant *** 491,497 **** constexpr void _M_reset() { ! if (!_M_valid()) [[unlikely]] return; std::__do_visit([](auto&& __this_mem) mutable --- 491,497 ---- constexpr void _M_reset() { ! if (!_M_valid()) [[__unlikely__]] return; std::__do_visit([](auto&& __this_mem) mutable diff -Nrcpad gcc-12.4.0/libstdc++-v3/include/tr2/dynamic_bitset gcc-12.5.0-RC-20250704/libstdc++-v3/include/tr2/dynamic_bitset *** gcc-12.4.0/libstdc++-v3/include/tr2/dynamic_bitset Thu Jun 20 08:08:10 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/include/tr2/dynamic_bitset Fri Jul 4 07:24:46 2025 *************** namespace tr2 *** 815,824 **** operator>>=(size_type __pos) { if (__builtin_expect(__pos < this->_M_Nb, 1)) ! { ! this->_M_do_right_shift(__pos); ! this->_M_do_sanitize(); ! } else this->_M_do_reset(); return *this; --- 815,821 ---- operator>>=(size_type __pos) { if (__builtin_expect(__pos < this->_M_Nb, 1)) ! this->_M_do_right_shift(__pos); else this->_M_do_reset(); return *this; diff -Nrcpad gcc-12.4.0/libstdc++-v3/include/tr2/dynamic_bitset.tcc gcc-12.5.0-RC-20250704/libstdc++-v3/include/tr2/dynamic_bitset.tcc *** gcc-12.4.0/libstdc++-v3/include/tr2/dynamic_bitset.tcc Thu Jun 20 08:08:10 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/include/tr2/dynamic_bitset.tcc Fri Jul 4 07:24:46 2025 *************** namespace tr2 *** 60,67 **** this->_M_w[__wshift] = this->_M_w[0] << __offset; } ! //// std::fill(this->_M_w.begin(), this->_M_w.begin() + __wshift, ! //// static_cast<_WordT>(0)); } } --- 60,66 ---- this->_M_w[__wshift] = this->_M_w[0] << __offset; } ! std::fill_n(this->_M_w.begin(), __wshift, _WordT(0)); } } *************** namespace tr2 *** 88,95 **** this->_M_w[__limit] = this->_M_w[_M_w.size()-1] >> __offset; } ! ////std::fill(this->_M_w.begin() + __limit + 1, this->_M_w.end(), ! //// static_cast<_WordT>(0)); } } --- 87,93 ---- this->_M_w[__limit] = this->_M_w[_M_w.size()-1] >> __offset; } ! std::fill_n(this->_M_w.end() - __wshift, __wshift, _WordT(0)); } } diff -Nrcpad gcc-12.4.0/libstdc++-v3/python/libstdcxx/v6/printers.py gcc-12.5.0-RC-20250704/libstdc++-v3/python/libstdcxx/v6/printers.py *** gcc-12.4.0/libstdc++-v3/python/libstdcxx/v6/printers.py Thu Jun 20 08:08:10 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/python/libstdcxx/v6/printers.py Fri Jul 4 07:24:46 2025 *************** def strip_versioned_namespace(typename): *** 194,199 **** --- 194,209 ---- return typename.replace(_versioned_namespace, '') + def strip_fundts_namespace(typ): + """Remove "fundamentals_vN" inline namespace from qualified type name.""" + pattern = r'^std::experimental::fundamentals_v\d::' + repl = 'std::experimental::' + if sys.version_info[0] == 2: + return re.sub(pattern, repl, typ, 1) + else: # Technically this needs Python 3.1 but nobody should be using 3.0 + return re.sub(pattern, repl, typ, count=1) + + def strip_inline_namespaces(type_str): """Remove known inline namespaces from the canonical name of a type.""" type_str = strip_versioned_namespace(type_str) *************** class StdExpAnyPrinter(SingleObjContaine *** 1267,1274 **** def __init__(self, typename, val): self.typename = strip_versioned_namespace(typename) ! self.typename = re.sub(r'^std::experimental::fundamentals_v\d::', ! 'std::experimental::', self.typename, 1) self.val = val self.contained_type = None contained_value = None --- 1277,1283 ---- def __init__(self, typename, val): self.typename = strip_versioned_namespace(typename) ! self.typename = strip_fundts_namespace(self.typename) self.val = val self.contained_type = None contained_value = None *************** class StdExpOptionalPrinter(SingleObjCon *** 1363,1371 **** def __init__(self, typename, val): valtype = self._recognize(val.type.template_argument(0)) typename = strip_versioned_namespace(typename) ! self.typename = re.sub( ! r'^std::(experimental::|)(fundamentals_v\d::|)(.*)', ! r'std::\1\3<%s>' % valtype, typename, 1) payload = val['_M_payload'] if self.typename.startswith('std::experimental'): engaged = val['_M_engaged'] --- 1372,1379 ---- def __init__(self, typename, val): valtype = self._recognize(val.type.template_argument(0)) typename = strip_versioned_namespace(typename) ! typename = strip_fundts_namespace(typename) ! self.typename = '%s<%s>' % (typename, valtype) payload = val['_M_payload'] if self.typename.startswith('std::experimental'): engaged = val['_M_engaged'] diff -Nrcpad gcc-12.4.0/libstdc++-v3/src/c++11/assert_fail.cc gcc-12.5.0-RC-20250704/libstdc++-v3/src/c++11/assert_fail.cc *** gcc-12.4.0/libstdc++-v3/src/c++11/assert_fail.cc Thu Jun 20 08:08:10 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/src/c++11/assert_fail.cc Fri Jul 4 07:24:46 2025 *************** *** 22,31 **** // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see // . - #include // for std::fprintf, stderr #include // for std::abort #ifdef _GLIBCXX_VERBOSE_ASSERT namespace std { [[__noreturn__]] --- 22,31 ---- // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see // . #include // for std::abort #ifdef _GLIBCXX_VERBOSE_ASSERT + #include // for std::fprintf, stderr namespace std { [[__noreturn__]] *************** namespace std *** 41,44 **** --- 41,52 ---- abort(); } } + #else + namespace std + { + [[__noreturn__]] + void + __glibcxx_assert_fail(const char*, int, const char*, const char*) noexcept + { abort(); } + } #endif diff -Nrcpad gcc-12.4.0/libstdc++-v3/src/c++17/fs_ops.cc gcc-12.5.0-RC-20250704/libstdc++-v3/src/c++17/fs_ops.cc *** gcc-12.4.0/libstdc++-v3/src/c++17/fs_ops.cc Thu Jun 20 08:08:10 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/src/c++17/fs_ops.cc Fri Jul 4 07:24:46 2025 *************** fs::remove_all(const path& p) *** 1310,1316 **** // Our work here is done. return 0; case ENOTDIR: ! case ELOOP: // Not a directory, will remove below. break; #endif --- 1310,1322 ---- // Our work here is done. return 0; case ENOTDIR: ! case ELOOP: // POSIX says openat with O_NOFOLLOW sets ELOOP for a symlink. ! #if defined __FreeBSD__ || defined __DragonFly__ ! case EMLINK: // Used instead of ELOOP ! #endif ! #if defined __NetBSD__ && defined EFTYPE ! case EFTYPE: // Used instead of ELOOP ! #endif // Not a directory, will remove below. break; #endif *************** fs::remove_all(const path& p, error_code *** 1350,1356 **** ec.clear(); return 0; case ENOTDIR: ! case ELOOP: // Not a directory, will remove below. break; #endif --- 1356,1368 ---- ec.clear(); return 0; case ENOTDIR: ! case ELOOP: // POSIX says openat with O_NOFOLLOW sets ELOOP for a symlink. ! #if defined __FreeBSD__ || defined __DragonFly__ ! case EMLINK: // Used instead of ELOOP ! #endif ! #if defined __NetBSD__ && defined EFTYPE ! case EFTYPE: // Used instead of ELOOP ! #endif // Not a directory, will remove below. break; #endif diff -Nrcpad gcc-12.4.0/libstdc++-v3/src/c++98/istream.cc gcc-12.5.0-RC-20250704/libstdc++-v3/src/c++98/istream.cc *** gcc-12.4.0/libstdc++-v3/src/c++98/istream.cc Thu Jun 20 08:08:10 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/src/c++98/istream.cc Fri Jul 4 07:24:46 2025 *************** _GLIBCXX_BEGIN_NAMESPACE_VERSION *** 112,119 **** basic_istream:: ignore(streamsize __n, int_type __delim) { ! if (traits_type::eq_int_type(__delim, traits_type::eof())) ! return ignore(__n); _M_gcount = 0; sentry __cerb(*this, true); --- 112,128 ---- basic_istream:: ignore(streamsize __n, int_type __delim) { ! { ! // If conversion to int_type changes the value then __delim does not ! // correspond to a value of type char_type, and so will never match ! // a character extracted from the input sequence. Just use ignore(n). ! const int_type chk_delim = traits_type::to_int_type(__delim); ! const bool matchable = traits_type::eq_int_type(chk_delim, __delim); ! if (__builtin_expect(!matchable, 0)) ! return ignore(__n); ! // Now we know that __delim is a valid char_type value, so it's safe ! // for the code below to use traits_type::find to search for it. ! } _M_gcount = 0; sentry __cerb(*this, true); diff -Nrcpad gcc-12.4.0/libstdc++-v3/testsuite/20_util/integer_sequence/112473.cc gcc-12.5.0-RC-20250704/libstdc++-v3/testsuite/20_util/integer_sequence/112473.cc *** gcc-12.4.0/libstdc++-v3/testsuite/20_util/integer_sequence/112473.cc Thu Jun 20 08:08:10 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/testsuite/20_util/integer_sequence/112473.cc Fri Jul 4 07:24:46 2025 *************** *** 1,3 **** --- 1,4 ---- + // { dg-options "-std=gnu++20" } // { dg-do compile { target c++20 } } // PR libstdc++/112473 - integer_sequence accepts non-integer types diff -Nrcpad gcc-12.4.0/libstdc++-v3/testsuite/20_util/system_clock/99832.cc gcc-12.5.0-RC-20250704/libstdc++-v3/testsuite/20_util/system_clock/99832.cc *** gcc-12.4.0/libstdc++-v3/testsuite/20_util/system_clock/99832.cc Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/libstdc++-v3/testsuite/20_util/system_clock/99832.cc Fri Jul 4 07:24:46 2025 *************** *** 0 **** --- 1,14 ---- + // { dg-options "-O0 -g0 -std=gnu++20" } + // { dg-do compile { target c++20 } } + // { dg-final { scan-assembler-not "system_clock9to_time_t" } } + + // Bug libstdc++/99832 + // std::chrono::system_clock::to_time_t needs ABI tag for 32-bit time_t + + #include + + std::time_t + test_pr99832(std::chrono::system_clock::time_point t) + { + return std::chrono::system_clock::to_time_t(t); + } diff -Nrcpad gcc-12.4.0/libstdc++-v3/testsuite/21_strings/basic_string/allocator/116641.cc gcc-12.5.0-RC-20250704/libstdc++-v3/testsuite/21_strings/basic_string/allocator/116641.cc *** gcc-12.4.0/libstdc++-v3/testsuite/21_strings/basic_string/allocator/116641.cc Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/libstdc++-v3/testsuite/21_strings/basic_string/allocator/116641.cc Fri Jul 4 07:24:46 2025 *************** *** 0 **** --- 1,53 ---- + // { dg-do run { target c++11 } } + // { dg-require-effective-target cxx11_abi } + + // Bug 116641 - std::string move assignment incorrectly depends on POCCA + + #include + #include + + template + struct Alloc + { + using value_type = T; + using propagate_on_container_swap = std::false_type; + using propagate_on_container_copy_assignment = std::true_type; + using propagate_on_container_move_assignment = std::false_type; + + Alloc(int id) : id(id) { } + + template + Alloc(const Alloc& a) : id(a.id) { } + + T* allocate(unsigned long n) + { return std::allocator().allocate(n); } + + void deallocate(T* p, unsigned long n) + { std::allocator().deallocate(p, n); } + + Alloc& operator=(const Alloc&) { throw; } + + bool operator==(const Alloc& a) const { return id == a.id; } + bool operator!=(const Alloc& a) const { return id != a.id; } + + int id; + }; + + void + test_pr116641() + { + Alloc a1(1), a2(2); + std::basic_string, Alloc> s1(a1), s2(a2); + + s1 = "allocator should not propagate on move assignment"; + VERIFY( s1.get_allocator() == a1 ); + VERIFY( s2.get_allocator() == a2 ); + s2 = std::move(s1); + VERIFY( s1.get_allocator() == a1 ); + VERIFY( s2.get_allocator() == a2 ); + } + + int main() + { + test_pr116641(); + } diff -Nrcpad gcc-12.4.0/libstdc++-v3/testsuite/21_strings/char_traits/requirements/113200.cc gcc-12.5.0-RC-20250704/libstdc++-v3/testsuite/21_strings/char_traits/requirements/113200.cc *** gcc-12.4.0/libstdc++-v3/testsuite/21_strings/char_traits/requirements/113200.cc Thu Jun 20 08:08:10 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/testsuite/21_strings/char_traits/requirements/113200.cc Fri Jul 4 07:24:46 2025 *************** *** 1,3 **** --- 1,4 ---- + // { dg-options "-std=gnu++20" } // { dg-do compile { target c++20 } } // PR libstdc++/113200 diff -Nrcpad gcc-12.4.0/libstdc++-v3/testsuite/23_containers/array/comparison_operators/106212.cc gcc-12.5.0-RC-20250704/libstdc++-v3/testsuite/23_containers/array/comparison_operators/106212.cc *** gcc-12.4.0/libstdc++-v3/testsuite/23_containers/array/comparison_operators/106212.cc Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/libstdc++-v3/testsuite/23_containers/array/comparison_operators/106212.cc Fri Jul 4 07:24:46 2025 *************** *** 0 **** --- 1,15 ---- + // { dg-options "-D_GLIBCXX_DEBUG -std=gnu++20" } + // { dg-do compile { target c++20 } } + + // Bug libstdc++/106212 - Code becomes non-constexpr with _GLIBCXX_DEBUG + + #include + + struct A + { + constexpr A(int i) : e{i} {} + constexpr bool operator==(const A& a) const = default; + std::array e; + }; + + static_assert(A{1} != A{2}, ""); diff -Nrcpad gcc-12.4.0/libstdc++-v3/testsuite/23_containers/deque/modifiers/insert/118035.cc gcc-12.5.0-RC-20250704/libstdc++-v3/testsuite/23_containers/deque/modifiers/insert/118035.cc *** gcc-12.4.0/libstdc++-v3/testsuite/23_containers/deque/modifiers/insert/118035.cc Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/libstdc++-v3/testsuite/23_containers/deque/modifiers/insert/118035.cc Fri Jul 4 07:24:46 2025 *************** *** 0 **** --- 1,26 ---- + // { dg-do run } + + #include + #include + + struct Sparks + { + Sparks& operator=(const Sparks& s) + { + VERIFY( this != &s ); // This town ain't big enough for the both of us. + return *this; + } + }; + + void + test_pr118035() + { + std::deque d(3, Sparks()); + Sparks s[1]; + d.insert(d.begin() + 1, s, s); + } + + int main() + { + test_pr118035(); + } diff -Nrcpad gcc-12.4.0/libstdc++-v3/testsuite/23_containers/span/117966.cc gcc-12.5.0-RC-20250704/libstdc++-v3/testsuite/23_containers/span/117966.cc *** gcc-12.4.0/libstdc++-v3/testsuite/23_containers/span/117966.cc Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/libstdc++-v3/testsuite/23_containers/span/117966.cc Fri Jul 4 07:24:46 2025 *************** *** 0 **** --- 1,13 ---- + // { dg-options "-D_GLIBCXX_DEBUG -std=gnu++20" } + // { dg-do compile { target c++20 } } + + // Bug 117966 + // constexpr std::span construction fails to compile with D_GLIBCXX_DEBUG + + #include + #include + + struct A { + constexpr A(std::span) {} + }; + constexpr A val{std::array{0x11, 0x22}}; diff -Nrcpad gcc-12.4.0/libstdc++-v3/testsuite/23_containers/vector/cons/113841.cc gcc-12.5.0-RC-20250704/libstdc++-v3/testsuite/23_containers/vector/cons/113841.cc *** gcc-12.4.0/libstdc++-v3/testsuite/23_containers/vector/cons/113841.cc Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/libstdc++-v3/testsuite/23_containers/vector/cons/113841.cc Fri Jul 4 07:24:46 2025 *************** *** 0 **** --- 1,35 ---- + // { dg-options "-std=gnu++20" } + // { dg-do compile { target c++20 } } + + #include + + template + struct Alloc + { + using value_type = T; + + Alloc(int) { } // not default constructible + + template Alloc(const Alloc&) { } + + T* allocate(std::size_t n) { return std::allocator().allocate(n); } + void deallocate(T* p, std::size_t n) { std::allocator().deallocate(p, n); } + }; + + template struct wrap { T t; }; + + template void do_adl(T&) { } + + void test_pr113841() + { + using test_type = std::vector>; + std::pair>* h = nullptr; + do_adl(h); + } + + void test_pr113841_bool() + { + using test_type = std::vector>; + std::pair>* h = nullptr; + do_adl(h); + } diff -Nrcpad gcc-12.4.0/libstdc++-v3/testsuite/23_containers/vector/modifiers/insert/117983.cc gcc-12.5.0-RC-20250704/libstdc++-v3/testsuite/23_containers/vector/modifiers/insert/117983.cc *** gcc-12.4.0/libstdc++-v3/testsuite/23_containers/vector/modifiers/insert/117983.cc Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/libstdc++-v3/testsuite/23_containers/vector/modifiers/insert/117983.cc Fri Jul 4 07:24:46 2025 *************** *** 0 **** --- 1,17 ---- + // { dg-options "-O3 -Werror=stringop-overflow" } + // { dg-do compile } + + // PR libstdc++/117983 + // -Wstringop-overflow false positive for __builtin_memmove from vector::insert + + #include + + typedef std::vector bytes; + + void push(bytes chunk, bytes& data) { + if (data.empty()) { + data.swap(chunk); + } else { + data.insert(data.end(), chunk.begin(), chunk.end()); + } + } diff -Nrcpad gcc-12.4.0/libstdc++-v3/testsuite/24_iterators/move_iterator/lwg3736.cc gcc-12.5.0-RC-20250704/libstdc++-v3/testsuite/24_iterators/move_iterator/lwg3736.cc *** gcc-12.4.0/libstdc++-v3/testsuite/24_iterators/move_iterator/lwg3736.cc Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/libstdc++-v3/testsuite/24_iterators/move_iterator/lwg3736.cc Fri Jul 4 07:24:46 2025 *************** *** 0 **** --- 1,53 ---- + // { dg-options "-std=gnu++20" } + // { dg-do compile { target c++20 } } + + // 3736. move_iterator missing disable_sized_sentinel_for specialization + + #include + + template using MoveIter = std::move_iterator; + + using std::sized_sentinel_for; + using std::disable_sized_sentinel_for; + + // These assertions always passed, even without LWG 3736: + static_assert(sized_sentinel_for, MoveIter>); + static_assert(sized_sentinel_for, MoveIter>); + static_assert(not sized_sentinel_for, MoveIter>); + static_assert(not sized_sentinel_for, std::default_sentinel_t>); + static_assert(not disable_sized_sentinel_for, MoveIter>); + + // These types don't satisfy sized_sentinel_for anyway (because the subtraction + // is ill-formed) but LWG 3736 makes the variable template explicitly false: + static_assert(disable_sized_sentinel_for, MoveIter>); + + struct Iter + { + using iterator_category = std::random_access_iterator_tag; + using value_type = int; + using pointer = int*; + using reference = int&; + using difference_type = long; + + Iter() = default; + Iter& operator++(); + Iter operator++(int); + Iter& operator--(); + Iter operator--(int); + reference operator*() const; + pointer operator->() const; + Iter& operator+=(difference_type); + Iter& operator-=(difference_type); + friend Iter operator+(Iter, difference_type); + friend Iter operator+(difference_type, Iter); + friend Iter operator-(Iter, difference_type); + friend difference_type operator-(Iter, Iter); + bool operator==(Iter) const; + }; + + // Specialize the variable template so that Iter is not its own sized sentinel: + template<> constexpr bool std::disable_sized_sentinel_for = true; + static_assert( not sized_sentinel_for ); + + // LWG 3736 means that affects std::move_iterator as well: + static_assert( not sized_sentinel_for, MoveIter> ); diff -Nrcpad gcc-12.4.0/libstdc++-v3/testsuite/25_algorithms/lexicographical_compare_three_way/113960.cc gcc-12.5.0-RC-20250704/libstdc++-v3/testsuite/25_algorithms/lexicographical_compare_three_way/113960.cc *** gcc-12.4.0/libstdc++-v3/testsuite/25_algorithms/lexicographical_compare_three_way/113960.cc Thu Jun 20 08:08:11 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/testsuite/25_algorithms/lexicographical_compare_three_way/113960.cc Fri Jul 4 07:24:46 2025 *************** *** 1,3 **** --- 1,4 ---- + // { dg-options "-std=gnu++20" } // { dg-do run { target c++20 } } // PR libstdc++/113960 diff -Nrcpad gcc-12.4.0/libstdc++-v3/testsuite/26_numerics/valarray/99117.cc gcc-12.5.0-RC-20250704/libstdc++-v3/testsuite/26_numerics/valarray/99117.cc *** gcc-12.4.0/libstdc++-v3/testsuite/26_numerics/valarray/99117.cc Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/libstdc++-v3/testsuite/26_numerics/valarray/99117.cc Fri Jul 4 07:24:46 2025 *************** *** 0 **** --- 1,17 ---- + // { dg-do run { target c++11 } } + + // PR libstdc++/99117 cannot accumulate std::valarray + + #include + #include + #include + + int main() + { + std::vector> v = {{1,1}, {2,2}}; + std::valarray sum(2); + for (const auto& e : v) + sum = sum + e; + VERIFY(sum[0]==3); + VERIFY(sum[1]==3); + } diff -Nrcpad gcc-12.4.0/libstdc++-v3/testsuite/27_io/basic_istream/ignore/char/93672.cc gcc-12.5.0-RC-20250704/libstdc++-v3/testsuite/27_io/basic_istream/ignore/char/93672.cc *** gcc-12.4.0/libstdc++-v3/testsuite/27_io/basic_istream/ignore/char/93672.cc Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/libstdc++-v3/testsuite/27_io/basic_istream/ignore/char/93672.cc Fri Jul 4 07:24:46 2025 *************** *** 0 **** --- 1,101 ---- + // { dg-do run } + + #include + #include + #include + + void + test_pr93672() // std::basic_istream::ignore hangs if delim MSB is set + { + std::istringstream in(".\xfc..\xfd...\xfe."); + + // This should find '\xfd' even on platforms where char is signed, + // because the delimiter is correctly converted to the stream's int_type. + in.ignore(100, std::char_traits::to_int_type('\xfc')); + VERIFY( in.gcount() == 2 ); + VERIFY( ! in.eof() ); + + // This should work equivalently to traits_type::to_int_type + in.ignore(100, (unsigned char)'\xfd'); + VERIFY( in.gcount() == 3 ); + VERIFY( ! in.eof() ); + + // This only works if char is unsigned. + in.ignore(100, '\xfe'); + if (std::numeric_limits::is_signed) + { + // When char is signed, '\xfe' != traits_type::to_int_type('\xfe') + // so the delimiter does not match the character in the input sequence, + // and ignore consumes all input until EOF. + VERIFY( in.gcount() == 5 ); + VERIFY( in.eof() ); + } + else + { + // When char is unsigned, '\xfe' == to_int_type('\xfe') so the delimiter + // matches the character in the input sequence, and doesn't reach EOF. + VERIFY( in.gcount() == 4 ); + VERIFY( ! in.eof() ); + } + + in.clear(); + in.str(".a."); + in.ignore(100, 'a' + 256); // Should not match 'a' + VERIFY( in.gcount() == 3 ); + VERIFY( in.eof() ); + } + + // Custom traits type that inherits all behaviour from std::char_traits. + struct traits : std::char_traits { }; + + void + test_primary_template() + { + // Check that the primary template for std::basic_istream::ignore + // works the same as the std::istream::ignore specialization. + // The infinite loop bug was never present in the primary template, + // because it doesn't use traits_type::find to search the input sequence. + + std::basic_istringstream in(".\xfc..\xfd...\xfe."); + + // This should find '\xfd' even on platforms where char is signed, + // because the delimiter is correctly converted to the stream's int_type. + in.ignore(100, std::char_traits::to_int_type('\xfc')); + VERIFY( in.gcount() == 2 ); + VERIFY( ! in.eof() ); + + // This should work equivalently to traits_type::to_int_type + in.ignore(100, (unsigned char)'\xfd'); + VERIFY( in.gcount() == 3 ); + VERIFY( ! in.eof() ); + + // This only works if char is unsigned. + in.ignore(100, '\xfe'); + if (std::numeric_limits::is_signed) + { + // When char is signed, '\xfe' != traits_type::to_int_type('\xfe') + // so the delimiter does not match the character in the input sequence, + // and ignore consumes all input until EOF. + VERIFY( in.gcount() == 5 ); + VERIFY( in.eof() ); + } + else + { + // When char is unsigned, '\xfe' == to_int_type('\xfe') so the delimiter + // matches the character in the input sequence, and doesn't reach EOF. + VERIFY( in.gcount() == 4 ); + VERIFY( ! in.eof() ); + } + + in.clear(); + in.str(".a."); + in.ignore(100, 'a' + 256); // Should not match 'a' + VERIFY( in.gcount() == 3 ); + VERIFY( in.eof() ); + } + + int main() + { + test_pr93672(); + test_primary_template(); + } diff -Nrcpad gcc-12.4.0/libstdc++-v3/testsuite/27_io/basic_istream/ignore/wchar_t/93672.cc gcc-12.5.0-RC-20250704/libstdc++-v3/testsuite/27_io/basic_istream/ignore/wchar_t/93672.cc *** gcc-12.4.0/libstdc++-v3/testsuite/27_io/basic_istream/ignore/wchar_t/93672.cc Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/libstdc++-v3/testsuite/27_io/basic_istream/ignore/wchar_t/93672.cc Fri Jul 4 07:24:46 2025 *************** *** 0 **** --- 1,34 ---- + // { dg-do run } + + #include + #include + #include + #include + + // PR 93672 was a bug in std::istream that never affected std::wistream. + // This test ensures that the bug doesn't get introduced to std::wistream. + void + test_pr93672() + { + std::wstring str = L".x..x."; + str[1] = (wchar_t)-2; + str[4] = (wchar_t)-3; + std::wistringstream in(str); + + // This should find the character even on platforms where wchar_t is signed, + // because the delimiter is correctly converted to the stream's int_type. + in.ignore(100, std::char_traits::to_int_type((wchar_t)-2)); + VERIFY( in.gcount() == 2 ); + VERIFY( ! in.eof() ); + + // This also works, because std::char_traits::to_int_type(wc) is + // equivalent to (int_type)wc so using to_int_type isn't needed. + in.ignore(100, (wchar_t)-3); + VERIFY( in.gcount() == 3 ); + VERIFY( ! in.eof() ); + } + + int main() + { + test_pr93672(); + } diff -Nrcpad gcc-12.4.0/libstdc++-v3/testsuite/27_io/filesystem/iterators/lwg3480.cc gcc-12.5.0-RC-20250704/libstdc++-v3/testsuite/27_io/filesystem/iterators/lwg3480.cc *** gcc-12.4.0/libstdc++-v3/testsuite/27_io/filesystem/iterators/lwg3480.cc Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/libstdc++-v3/testsuite/27_io/filesystem/iterators/lwg3480.cc Fri Jul 4 07:24:46 2025 *************** *** 0 **** --- 1,17 ---- + // { dg-options "-std=gnu++20" } + // { dg-do compile { target c++20 } } + // { dg-require-filesystem-ts "" } + + // LWG 3480 + // directory_iterator and recursive_directory_iterator are not C++20 ranges + + #include + + namespace fs = std::filesystem; + namespace rg = std::ranges; + + static_assert( rg::borrowed_range ); + static_assert( rg::borrowed_range ); + + static_assert( rg::view ); + static_assert( rg::view ); diff -Nrcpad gcc-12.4.0/libstdc++-v3/testsuite/29_atomics/headers/stdatomic.h/115807.cc gcc-12.5.0-RC-20250704/libstdc++-v3/testsuite/29_atomics/headers/stdatomic.h/115807.cc *** gcc-12.4.0/libstdc++-v3/testsuite/29_atomics/headers/stdatomic.h/115807.cc Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/libstdc++-v3/testsuite/29_atomics/headers/stdatomic.h/115807.cc Fri Jul 4 07:24:46 2025 *************** *** 0 **** --- 1,15 ---- + // { dg-options "-std=gnu++23" } + // { dg-do compile { target c++23 } } + #include + namespace other { + namespace std { + int atomic = 0; + } + _Atomic(long) a{}; + } + + #include + + namespace non::std { + static_assert( ::std::is_same_v<_Atomic(int), ::std::atomic> ); + } diff -Nrcpad gcc-12.4.0/libstdc++-v3/testsuite/experimental/simd/pr114958.cc gcc-12.5.0-RC-20250704/libstdc++-v3/testsuite/experimental/simd/pr114958.cc *** gcc-12.4.0/libstdc++-v3/testsuite/experimental/simd/pr114958.cc Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/libstdc++-v3/testsuite/experimental/simd/pr114958.cc Fri Jul 4 07:24:46 2025 *************** *** 0 **** --- 1,20 ---- + // { dg-options "-std=c++17" } + // { dg-do compile { target x86_64-*-* } } + // { dg-require-effective-target c++17 } + // { dg-additional-options "-march=x86-64-v3" { target x86_64-*-* } } + // { dg-require-cmath "" } + // { dg-final { scan-assembler-times "vperm(?:q|pd)\\s+\\\$144" 1 } } + + #include + + namespace stdx = std::experimental; + + using T = std::uint64_t; + using V = stdx::simd>; + using V1 = stdx::simd; + + V perm(V data) + { + auto [carry, _] = stdx::split<3, 1>(data); + return concat(V1(), carry); + } diff -Nrcpad gcc-12.4.0/libstdc++-v3/testsuite/experimental/simd/pr115454_find_last_set.cc gcc-12.5.0-RC-20250704/libstdc++-v3/testsuite/experimental/simd/pr115454_find_last_set.cc *** gcc-12.4.0/libstdc++-v3/testsuite/experimental/simd/pr115454_find_last_set.cc Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/libstdc++-v3/testsuite/experimental/simd/pr115454_find_last_set.cc Fri Jul 4 07:24:46 2025 *************** *** 0 **** --- 1,50 ---- + // { dg-options "-std=gnu++17" } + // { dg-require-effective-target c++17 } + // { dg-additional-options "-march=x86-64-v4" { target avx512f_runtime } } + // { dg-require-cmath "" } + + #include + + namespace stdx = std::experimental; + + using T = std::uint64_t; + + template + using V = stdx::simd>; + + [[gnu::noinline, gnu::noipa]] + int reduce(V x) + { + static_assert(stdx::find_last_set(V([](unsigned i) { return i; }) != V(0)) == 3); + return stdx::find_last_set(x != -1); + } + + [[gnu::noinline, gnu::noipa]] + int reduce2() + { + using M8 = typename V::mask_type; + using M4 = typename V::mask_type; + if constexpr (sizeof(M8) == sizeof(M4) + && !std::is_same_v>) + // fixed_size invariant: padding bits of masks are zero, the memcpy would violate that + { + M4 k; + __builtin_memcpy(&__data(k), &__data(M8(true)), sizeof(M4)); + return stdx::find_last_set(k); + } + return 3; + } + + + int main() + { + const V x {}; + + const int r = reduce(x); + if (r != 3) + __builtin_abort(); + + const int r2 = reduce2(); + if (r2 != 3) + __builtin_abort(); + } diff -Nrcpad gcc-12.4.0/libstdc++-v3/testsuite/std/ranges/subrange/lwg3589.cc gcc-12.5.0-RC-20250704/libstdc++-v3/testsuite/std/ranges/subrange/lwg3589.cc *** gcc-12.4.0/libstdc++-v3/testsuite/std/ranges/subrange/lwg3589.cc Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/libstdc++-v3/testsuite/std/ranges/subrange/lwg3589.cc Fri Jul 4 07:24:46 2025 *************** *** 0 **** --- 1,31 ---- + // { dg-options "-std=gnu++20" } + // { dg-do compile { target c++20 } } + + // LWG 3589. The const lvalue reference overload of get for subrange does not + // constrain I to be copyable when N == 0 + + #include + #include + + void + test_lwg3589() + { + int a[2]{}; + __gnu_test::test_range r(a); + + // Use a generic lambda so we have a dependent context. + auto test = [](auto& x) + { + // This was wrong before the LWG 3589 change: + if constexpr (requires { std::ranges::get<0>(x); }) + (void) std::ranges::get<0>(x); + + // These always worked unconditionally: + (void) std::ranges::get<1>(x); + (void) std::ranges::get<0>(std::move(x)); + (void) std::ranges::get<1>(std::move(x)); + }; + + std::ranges::subrange sr(r.begin(), r.end()); + test(sr); + } diff -Nrcpad gcc-12.4.0/libstdc++-v3/testsuite/std/time/month/2.cc gcc-12.5.0-RC-20250704/libstdc++-v3/testsuite/std/time/month/2.cc *** gcc-12.4.0/libstdc++-v3/testsuite/std/time/month/2.cc Thu Jun 20 08:08:11 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/testsuite/std/time/month/2.cc Fri Jul 4 07:24:46 2025 *************** *** 1,3 **** --- 1,4 ---- + // { dg-options "-std=gnu++20" } // { dg-do run { target c++20 } } // Class month [time.cal.month] diff -Nrcpad gcc-12.4.0/libstdc++-v3/testsuite/std/time/weekday/2.cc gcc-12.5.0-RC-20250704/libstdc++-v3/testsuite/std/time/weekday/2.cc *** gcc-12.4.0/libstdc++-v3/testsuite/std/time/weekday/2.cc Thu Jun 20 08:08:11 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/testsuite/std/time/weekday/2.cc Fri Jul 4 07:24:46 2025 *************** *** 1,3 **** --- 1,4 ---- + // { dg-options "-std=gnu++20" } // { dg-do run { target c++20 } } // Class weekday [time.cal.wd] diff -Nrcpad gcc-12.4.0/libstdc++-v3/testsuite/tr2/dynamic_bitset/pr115399.cc gcc-12.5.0-RC-20250704/libstdc++-v3/testsuite/tr2/dynamic_bitset/pr115399.cc *** gcc-12.4.0/libstdc++-v3/testsuite/tr2/dynamic_bitset/pr115399.cc Thu Jan 1 00:00:00 1970 --- gcc-12.5.0-RC-20250704/libstdc++-v3/testsuite/tr2/dynamic_bitset/pr115399.cc Fri Jul 4 07:24:46 2025 *************** *** 0 **** --- 1,37 ---- + // { dg-do run { target c++11 } } + + // PR libstdc++/115399 + // std::tr2::dynamic_bitset shift behaves differently from std::bitset + + #include + #include + + void + test_left_shift() + { + std::tr2::dynamic_bitset<> b(65); + b[0] = 1; + auto b2 = b << 64; + VERIFY(b2[64] == 1); + VERIFY(b2[0] == 0); + b <<= 64; + VERIFY( b2 == b ); + } + + void + test_right_shift() + { + std::tr2::dynamic_bitset<> b(65); + b[64] = 1; + auto b2 = b >> 64; + VERIFY(b2[64] == 0); + VERIFY(b2[0] == 1); + b >>= 64; + VERIFY( b2 == b ); + } + + int main() + { + test_left_shift(); + test_right_shift(); + } diff -Nrcpad gcc-12.4.0/libstdc++-v3/testsuite/util/testsuite_allocator.h gcc-12.5.0-RC-20250704/libstdc++-v3/testsuite/util/testsuite_allocator.h *** gcc-12.4.0/libstdc++-v3/testsuite/util/testsuite_allocator.h Thu Jun 20 08:08:11 2024 --- gcc-12.5.0-RC-20250704/libstdc++-v3/testsuite/util/testsuite_allocator.h Fri Jul 4 07:24:46 2025 *************** namespace __gnu_test *** 154,160 **** tracker_allocator() { } ! tracker_allocator(const tracker_allocator&) { } ~tracker_allocator() --- 154,160 ---- tracker_allocator() { } ! tracker_allocator(const tracker_allocator& a) : Alloc(a) { } ~tracker_allocator()